]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
BIP32 Root Key can be specified by user
[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
IC
73 <select id="strength" class="strength form-control">
74 <option val="3">3</option>
75 <option val="6">6</option>
76 <option val="9">9</option>
77 <option val="12">12</option>
78 <option val="15" selected>15</option>
79 <option val="18">18</option>
80 <option val="21">21</option>
81 <option val="24">24</option>
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>
d5dc92fd
IC
193 <div class="form-group">
194 <label class="col-sm-2 control-label">Hive Wallet</label>
195 <div class="col-sm-10">
196 <p class="form-control no-border">
197 Use path <code>m/0'/0</code>.
198 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
199 </p>
200 </div>
201 </div>
202 <div class="form-group">
203 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
204 <div class="col-sm-10">
205 <p class="form-control no-border">
206 Use path <code>m/44'/0'/0'/0</code>.
207 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
208 </p>
209 </div>
210 </div>
ab78acc6
IC
211 </form>
212 </div>
213 </div>
214 <form class="form-horizontal" role="form">
215 <div class="form-group">
216 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
217 <div class="col-sm-10">
218 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
219 </div>
220 </div>
221 <div class="form-group">
222 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
223 <div class="col-sm-10">
224 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
225 </div>
226 </div>
227 </form>
228 </div>
229 </div>
3af2954a 230
ab78acc6 231 <hr>
3af2954a 232
ab78acc6
IC
233 <div class="row">
234 <div class="col-md-12">
235 <h2>Derived Addresses</h2>
236 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
237 <table class="table table-striped">
238 <thead>
239 <th>
240 <div class="input-group">
ae30fed8 241 Path&nbsp;&nbsp;
ab78acc6
IC
242 <button class="index-toggle">Toggle</button>
243 </div>
244 </th>
245 <th>
246 <div class="input-group">
247 Address&nbsp;&nbsp;
248 <button class="address-toggle">Toggle</button>
249 </div>
250 </th>
251 <th>
252 <div class="input-group">
253 Private Key&nbsp;&nbsp;
254 <button class="private-key-toggle">Toggle</button>
255 </div>
256 </th>
257 </thead>
258 <tbody class="addresses">
259 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
260 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
261 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
262 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
263 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
264 </tbody>
265 </table>
266 </div>
267 </div>
268 <span>Show next </button>
269 <input type="number" class="rows-to-add" value="20">
270 <button class="more">Show</button>
3af2954a 271
ab78acc6 272 <hr>
3af2954a 273
ab78acc6
IC
274 <div class="row">
275 <div class="col-md-12">
276 <h2>More info</h2>
277 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
278 <p>
279 Read more at the
280 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
281 </p>
282 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
283 <p>
284 Read more at the
285 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
286 and see the demo at
287 <a href="http://bip32.org/" target="_blank">bip32.org</a>
288 </p>
289 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
290 <p>
291 Read more at the
292 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
293 </p>
294 <h3>Private Keys</h3>
295 <p>
296 Use private keys at
297 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
298 but be careful - it can be easy to make mistakes if you
299 don't know what you're doing
300 </p>
301 </div>
302 </div>
3af2954a 303
ab78acc6 304 <hr>
3af2954a 305
ab78acc6
IC
306 <div class="row">
307 <div class="col-md-12">
3af2954a 308
ab78acc6 309 <h2>Offline Usage</h2>
3af2954a 310
ab78acc6
IC
311 <p>
312 You can use this tool without having to be online.
313 </p>
314 <p>
315 In your browser, select file save-as, and save this page
316 as a file.
317 </p>
318 <p>
319 Double-click that file to open it in a browser
320 on any offline computer.
321 </p>
322 <p>
323 Alternatively, download it from
324 <a href="https://github.com/dcpos/bip39">
325 https://github.com/dcpos/bip39
326 </a>
3af2954a 327
ab78acc6
IC
328 </div>
329 </div>
3af2954a 330
ab78acc6 331 <hr>
3af2954a 332
ab78acc6
IC
333 <div class="row">
334 <div class="col-md-12">
3af2954a 335
ab78acc6 336 <h2>This project is 100% open-source code</h2>
3af2954a 337
ab78acc6
IC
338 <p>
339 <span>Get the source code at - </span>
340 <a href="https://github.com/dcpos/bip39" target="_blank">
341 https://github.com/dcpos/bip39
342 </a>
343 </p>
3af2954a 344
ab78acc6 345 <h3>Libraries</h3>
3af2954a 346
ab78acc6
IC
347 <p>
348 <span>BitcoinJS - </span>
349 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
350 https://github.com/bitcoinjs/bitcoinjs-lib
351 </a>
352 </p>
3af2954a 353
ab78acc6
IC
354 <p>
355 <span>jsBIP39 - </span>
356 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
357 https://github.com/iancoleman/jsbip39
358 </a>
359 </p>
3af2954a 360
ab78acc6
IC
361 <p>
362 <span>sjcl - </span>
363 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
364 https://github.com/bitwiseshiftleft/sjcl
365 </a>
366 </p>
3af2954a 367
ab78acc6
IC
368 <p>
369 <span>jQuery - </span>
370 <a href="https://jquery.com/" target="_blank">
371 https://jquery.com/
372 </a>
373 </p>
3af2954a 374
ab78acc6
IC
375 <p>
376 <span>Twitter Bootstrap - </span>
377 <a href="http://getbootstrap.com/" target="_blank">
378 http://getbootstrap.com/
379 </a>
380 </p>
3af2954a 381
ab78acc6
IC
382 </div>
383 </div>
3af2954a 384
ab78acc6 385 </div>
3af2954a 386
ab78acc6
IC
387 <div class="feedback-container">
388 <div class="feedback">Loading...</div>
389 </div>
3af2954a 390
ab78acc6
IC
391 <script type="text/template" id="address-row-template">
392 <tr>
393 <td class="index"><span></span></td>
394 <td class="address"><span></span></td>
395 <td class="privkey"><span></span></td>
396 </tr>
397 </script>
398 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
399!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)
400},_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))
401},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});
402</script>
403 <script>/*!
404 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
405 * Copyright 2011-2014 Twitter, Inc.
406 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
407 */
408if("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
409 <script>(function() {
410 'use strict';
411
412 /**
413 * Extend an Object with another Object's properties.
414 *
415 * The source objects are specified as additional arguments.
416 *
417 * @param dst Object the object to extend.
418 *
419 * @return Object the final object.
420 */
421 var _extend = function(dst) {
422 var sources = Array.prototype.slice.call(arguments, 1);
423 for (var i=0; i<sources.length; ++i) {
424 var src = sources[i];
425 for (var p in src) {
426 if (src.hasOwnProperty(p)) dst[p] = src[p];
427 }
428 }
429 return dst;
430 };
431
432
433 /**
434 * Defer execution of given function.
435 * @param {Function} func
436 */
437 var _defer = function(func) {
438 if (typeof setImmediate === 'function') {
439 return setImmediate(func);
440 } else {
441 return setTimeout(func, 0);
442 }
443 };
444
445 /**
446 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
447 */
448 var Levenshtein = {
449 /**
450 * Calculate levenshtein distance of the two strings.
451 *
452 * @param str1 String the first string.
453 * @param str2 String the second string.
454 * @return Integer the levenshtein distance (0 and above).
455 */
456 get: function(str1, str2) {
457 // base cases
458 if (str1 === str2) return 0;
459 if (str1.length === 0) return str2.length;
460 if (str2.length === 0) return str1.length;
461
462 // two rows
463 var prevRow = new Array(str2.length + 1),
464 curCol, nextCol, i, j, tmp;
465
466 // initialise previous row
467 for (i=0; i<prevRow.length; ++i) {
468 prevRow[i] = i;
469 }
470
471 // calculate current row distance from previous row
472 for (i=0; i<str1.length; ++i) {
473 nextCol = i + 1;
474
475 for (j=0; j<str2.length; ++j) {
476 curCol = nextCol;
477
478 // substution
479 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
480 // insertion
481 tmp = curCol + 1;
482 if (nextCol > tmp) {
483 nextCol = tmp;
484 }
485 // deletion
486 tmp = prevRow[j + 1] + 1;
487 if (nextCol > tmp) {
488 nextCol = tmp;
489 }
490
491 // copy current col value into previous (in preparation for next iteration)
492 prevRow[j] = curCol;
493 }
494
495 // copy last col value into previous (in preparation for next iteration)
496 prevRow[j] = nextCol;
497 }
498
499 return nextCol;
500 },
501
502 /**
503 * Asynchronously calculate levenshtein distance of the two strings.
504 *
505 * @param str1 String the first string.
506 * @param str2 String the second string.
507 * @param cb Function callback function with signature: function(Error err, int distance)
508 * @param [options] Object additional options.
509 * @param [options.progress] Function progress callback with signature: function(percentComplete)
510 */
511 getAsync: function(str1, str2, cb, options) {
512 options = _extend({}, {
513 progress: null
514 }, options);
515
516 // base cases
517 if (str1 === str2) return cb(null, 0);
518 if (str1.length === 0) return cb(null, str2.length);
519 if (str2.length === 0) return cb(null, str1.length);
520
521 // two rows
522 var prevRow = new Array(str2.length + 1),
523 curCol, nextCol,
524 i, j, tmp,
525 startTime, currentTime;
526
527 // initialise previous row
528 for (i=0; i<prevRow.length; ++i) {
529 prevRow[i] = i;
530 }
531
532 nextCol = 1;
533 i = 0;
534 j = -1;
535
536 var __calculate = function() {
537 // reset timer
538 startTime = new Date().valueOf();
539 currentTime = startTime;
540
541 // keep going until one second has elapsed
542 while (currentTime - startTime < 1000) {
543 // reached end of current row?
544 if (str2.length <= (++j)) {
545 // copy current into previous (in preparation for next iteration)
546 prevRow[j] = nextCol;
547
548 // if already done all chars
549 if (str1.length <= (++i)) {
550 return cb(null, nextCol);
551 }
552 // else if we have more left to do
553 else {
554 nextCol = i + 1;
555 j = 0;
556 }
557 }
558
559 // calculation
560 curCol = nextCol;
561
562 // substution
563 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
564 // insertion
565 tmp = curCol + 1;
566 if (nextCol > tmp) {
567 nextCol = tmp;
568 }
569 // deletion
570 tmp = prevRow[j + 1] + 1;
571 if (nextCol > tmp) {
572 nextCol = tmp;
573 }
574
575 // copy current into previous (in preparation for next iteration)
576 prevRow[j] = curCol;
577
578 // get current time
579 currentTime = new Date().valueOf();
580 }
581
582 // send a progress update?
583 if (null !== options.progress) {
584 try {
585 options.progress.call(null, (i * 100.0/ str1.length));
586 } catch (err) {
587 return cb('Progress callback: ' + err.toString());
588 }
589 }
590
591 // next iteration
592 _defer(__calculate);
593 };
594
595 __calculate();
596 }
597
598 };
599
600 // amd
601 if (typeof define !== "undefined" && define !== null && define.amd) {
602 define(function() {
603 return Levenshtein;
604 });
605 }
606 // commonjs
607 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
608 module.exports = Levenshtein;
609 }
610 // web worker
611 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
612 self.Levenshtein = Levenshtein;
613 }
614 // browser main thread
615 else if (typeof window !== "undefined" && window !== null) {
616 window.Levenshtein = Levenshtein;
617 }
618}());
619
620</script>
ab78acc6
IC
621 <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){
622// (public) Constructor
623function BigInteger(a, b, c) {
624 if (!(this instanceof BigInteger))
625 return new BigInteger(a, b, c)
3af2954a 626
ab78acc6
IC
627 if (a != null) {
628 if ("number" == typeof a) this.fromNumber(a, b, c)
629 else if (b == null && "string" != typeof a) this.fromString(a, 256)
630 else this.fromString(a, b)
631 }
632}
3af2954a 633
ab78acc6 634var proto = BigInteger.prototype
3af2954a 635
ab78acc6
IC
636// duck-typed isBigInteger
637proto.__bigi = require('../package.json').version
638BigInteger.isBigInteger = function (obj, check_ver) {
639 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
640}
3af2954a 641
ab78acc6
IC
642// Bits per digit
643var dbits
3af2954a 644
ab78acc6
IC
645// am: Compute w_j += (x*this_i), propagate carries,
646// c is initial carry, returns final carry.
647// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
648// We need to select the fastest one that works in this environment.
3af2954a 649
ab78acc6
IC
650// am1: use a single mult and divide to get the high bits,
651// max digit bits should be 26 because
652// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
653function am1(i, x, w, j, c, n) {
654 while (--n >= 0) {
655 var v = x * this[i++] + w[j] + c
656 c = Math.floor(v / 0x4000000)
657 w[j++] = v & 0x3ffffff
3af2954a 658 }
ab78acc6
IC
659 return c
660}
661// am2 avoids a big mult-and-extract completely.
662// Max digit bits should be <= 30 because we do bitwise ops
663// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
664function am2(i, x, w, j, c, n) {
665 var xl = x & 0x7fff,
666 xh = x >> 15
667 while (--n >= 0) {
668 var l = this[i] & 0x7fff
669 var h = this[i++] >> 15
670 var m = xh * l + h * xl
671 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
672 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
673 w[j++] = l & 0x3fffffff
674 }
675 return c
676}
677// Alternately, set max digit bits to 28 since some
678// browsers slow down when dealing with 32-bit numbers.
679function am3(i, x, w, j, c, n) {
680 var xl = x & 0x3fff,
681 xh = x >> 14
682 while (--n >= 0) {
683 var l = this[i] & 0x3fff
684 var h = this[i++] >> 14
685 var m = xh * l + h * xl
686 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
687 c = (l >> 28) + (m >> 14) + xh * h
688 w[j++] = l & 0xfffffff
3af2954a 689 }
ab78acc6
IC
690 return c
691}
3af2954a 692
ab78acc6
IC
693// wtf?
694BigInteger.prototype.am = am1
695dbits = 26
3af2954a 696
ab78acc6
IC
697BigInteger.prototype.DB = dbits
698BigInteger.prototype.DM = ((1 << dbits) - 1)
699var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 700
ab78acc6
IC
701var BI_FP = 52
702BigInteger.prototype.FV = Math.pow(2, BI_FP)
703BigInteger.prototype.F1 = BI_FP - dbits
704BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 705
ab78acc6
IC
706// Digit conversions
707var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
708var BI_RC = new Array()
709var rr, vv
710rr = "0".charCodeAt(0)
711for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
712rr = "a".charCodeAt(0)
713for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
714rr = "A".charCodeAt(0)
715for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 716
ab78acc6
IC
717function int2char(n) {
718 return BI_RM.charAt(n)
719}
3af2954a 720
ab78acc6
IC
721function intAt(s, i) {
722 var c = BI_RC[s.charCodeAt(i)]
723 return (c == null) ? -1 : c
724}
3af2954a 725
ab78acc6
IC
726// (protected) copy this to r
727function bnpCopyTo(r) {
728 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
729 r.t = this.t
730 r.s = this.s
731}
3af2954a 732
ab78acc6
IC
733// (protected) set from integer value x, -DV <= x < DV
734function bnpFromInt(x) {
735 this.t = 1
736 this.s = (x < 0) ? -1 : 0
737 if (x > 0) this[0] = x
738 else if (x < -1) this[0] = x + DV
739 else this.t = 0
740}
3af2954a 741
ab78acc6
IC
742// return bigint initialized to value
743function nbv(i) {
744 var r = new BigInteger()
745 r.fromInt(i)
746 return r
747}
3af2954a 748
ab78acc6
IC
749// (protected) set from string and radix
750function bnpFromString(s, b) {
751 var self = this
3af2954a 752
ab78acc6
IC
753 var k
754 if (b == 16) k = 4
755 else if (b == 8) k = 3
756 else if (b == 256) k = 8; // byte array
757 else if (b == 2) k = 1
758 else if (b == 32) k = 5
759 else if (b == 4) k = 2
760 else {
761 self.fromRadix(s, b)
762 return
763 }
764 self.t = 0
765 self.s = 0
766 var i = s.length,
767 mi = false,
768 sh = 0
769 while (--i >= 0) {
770 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
771 if (x < 0) {
772 if (s.charAt(i) == "-") mi = true
773 continue
774 }
775 mi = false
776 if (sh == 0)
777 self[self.t++] = x
778 else if (sh + k > self.DB) {
779 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
780 self[self.t++] = (x >> (self.DB - sh))
781 } else
782 self[self.t - 1] |= x << sh
783 sh += k
784 if (sh >= self.DB) sh -= self.DB
785 }
786 if (k == 8 && (s[0] & 0x80) != 0) {
787 self.s = -1
788 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
789 }
790 self.clamp()
791 if (mi) BigInteger.ZERO.subTo(self, self)
792}
3af2954a 793
ab78acc6
IC
794// (protected) clamp off excess high words
795function bnpClamp() {
796 var c = this.s & this.DM
797 while (this.t > 0 && this[this.t - 1] == c)--this.t
798}
3af2954a 799
ab78acc6
IC
800// (public) return string representation in given radix
801function bnToString(b) {
802 var self = this
803 if (self.s < 0) return "-" + self.negate()
804 .toString(b)
805 var k
806 if (b == 16) k = 4
807 else if (b == 8) k = 3
808 else if (b == 2) k = 1
809 else if (b == 32) k = 5
810 else if (b == 4) k = 2
811 else return self.toRadix(b)
812 var km = (1 << k) - 1,
813 d, m = false,
814 r = "",
815 i = self.t
816 var p = self.DB - (i * self.DB) % k
817 if (i-- > 0) {
818 if (p < self.DB && (d = self[i] >> p) > 0) {
819 m = true
820 r = int2char(d)
821 }
822 while (i >= 0) {
823 if (p < k) {
824 d = (self[i] & ((1 << p) - 1)) << (k - p)
825 d |= self[--i] >> (p += self.DB - k)
826 } else {
827 d = (self[i] >> (p -= k)) & km
828 if (p <= 0) {
829 p += self.DB
830 --i
831 }
832 }
833 if (d > 0) m = true
834 if (m) r += int2char(d)
3af2954a 835 }
3af2954a 836 }
ab78acc6
IC
837 return m ? r : "0"
838}
3af2954a 839
ab78acc6
IC
840// (public) -this
841function bnNegate() {
842 var r = new BigInteger()
843 BigInteger.ZERO.subTo(this, r)
844 return r
845}
3af2954a 846
ab78acc6
IC
847// (public) |this|
848function bnAbs() {
849 return (this.s < 0) ? this.negate() : this
850}
3af2954a 851
ab78acc6
IC
852// (public) return + if this > a, - if this < a, 0 if equal
853function bnCompareTo(a) {
854 var r = this.s - a.s
855 if (r != 0) return r
856 var i = this.t
857 r = i - a.t
858 if (r != 0) return (this.s < 0) ? -r : r
859 while (--i >= 0)
860 if ((r = this[i] - a[i]) != 0) return r
861 return 0
862}
3af2954a 863
ab78acc6
IC
864// returns bit length of the integer x
865function nbits(x) {
866 var r = 1,
867 t
868 if ((t = x >>> 16) != 0) {
869 x = t
870 r += 16
871 }
872 if ((t = x >> 8) != 0) {
873 x = t
874 r += 8
875 }
876 if ((t = x >> 4) != 0) {
877 x = t
878 r += 4
879 }
880 if ((t = x >> 2) != 0) {
881 x = t
882 r += 2
3af2954a 883 }
ab78acc6
IC
884 if ((t = x >> 1) != 0) {
885 x = t
886 r += 1
887 }
888 return r
889}
890
891// (public) return the number of bits in "this"
892function bnBitLength() {
893 if (this.t <= 0) return 0
894 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
895}
3af2954a 896
ab78acc6
IC
897// (public) return the number of bytes in "this"
898function bnByteLength() {
899 return this.bitLength() >> 3
900}
3af2954a 901
ab78acc6
IC
902// (protected) r = this << n*DB
903function bnpDLShiftTo(n, r) {
904 var i
905 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
906 for (i = n - 1; i >= 0; --i) r[i] = 0
907 r.t = this.t + n
908 r.s = this.s
909}
3af2954a 910
ab78acc6
IC
911// (protected) r = this >> n*DB
912function bnpDRShiftTo(n, r) {
913 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
914 r.t = Math.max(this.t - n, 0)
915 r.s = this.s
916}
3af2954a 917
ab78acc6
IC
918// (protected) r = this << n
919function bnpLShiftTo(n, r) {
920 var self = this
921 var bs = n % self.DB
922 var cbs = self.DB - bs
923 var bm = (1 << cbs) - 1
924 var ds = Math.floor(n / self.DB),
925 c = (self.s << bs) & self.DM,
926 i
927 for (i = self.t - 1; i >= 0; --i) {
928 r[i + ds + 1] = (self[i] >> cbs) | c
929 c = (self[i] & bm) << bs
930 }
931 for (i = ds - 1; i >= 0; --i) r[i] = 0
932 r[ds] = c
933 r.t = self.t + ds + 1
934 r.s = self.s
935 r.clamp()
936}
3af2954a 937
ab78acc6
IC
938// (protected) r = this >> n
939function bnpRShiftTo(n, r) {
940 var self = this
941 r.s = self.s
942 var ds = Math.floor(n / self.DB)
943 if (ds >= self.t) {
944 r.t = 0
945 return
3af2954a 946 }
ab78acc6
IC
947 var bs = n % self.DB
948 var cbs = self.DB - bs
949 var bm = (1 << bs) - 1
950 r[0] = self[ds] >> bs
951 for (var i = ds + 1; i < self.t; ++i) {
952 r[i - ds - 1] |= (self[i] & bm) << cbs
953 r[i - ds] = self[i] >> bs
954 }
955 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
956 r.t = self.t - ds
957 r.clamp()
958}
3af2954a 959
ab78acc6
IC
960// (protected) r = this - a
961function bnpSubTo(a, r) {
962 var self = this
963 var i = 0,
964 c = 0,
965 m = Math.min(a.t, self.t)
966 while (i < m) {
967 c += self[i] - a[i]
968 r[i++] = c & self.DM
969 c >>= self.DB
970 }
971 if (a.t < self.t) {
972 c -= a.s
973 while (i < self.t) {
974 c += self[i]
975 r[i++] = c & self.DM
976 c >>= self.DB
977 }
978 c += self.s
979 } else {
980 c += self.s
981 while (i < a.t) {
982 c -= a[i]
983 r[i++] = c & self.DM
984 c >>= self.DB
985 }
986 c -= a.s
987 }
988 r.s = (c < 0) ? -1 : 0
989 if (c < -1) r[i++] = self.DV + c
990 else if (c > 0) r[i++] = c
991 r.t = i
992 r.clamp()
993}
3af2954a 994
ab78acc6
IC
995// (protected) r = this * a, r != this,a (HAC 14.12)
996// "this" should be the larger one if appropriate.
997function bnpMultiplyTo(a, r) {
998 var x = this.abs(),
999 y = a.abs()
1000 var i = x.t
1001 r.t = i + y.t
1002 while (--i >= 0) r[i] = 0
1003 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1004 r.s = 0
1005 r.clamp()
1006 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1007}
3af2954a 1008
ab78acc6
IC
1009// (protected) r = this^2, r != this (HAC 14.16)
1010function bnpSquareTo(r) {
1011 var x = this.abs()
1012 var i = r.t = 2 * x.t
1013 while (--i >= 0) r[i] = 0
1014 for (i = 0; i < x.t - 1; ++i) {
1015 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1016 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1017 r[i + x.t] -= x.DV
1018 r[i + x.t + 1] = 1
1019 }
1020 }
1021 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1022 r.s = 0
1023 r.clamp()
1024}
3af2954a 1025
ab78acc6
IC
1026// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1027// r != q, this != m. q or r may be null.
1028function bnpDivRemTo(m, q, r) {
1029 var self = this
1030 var pm = m.abs()
1031 if (pm.t <= 0) return
1032 var pt = self.abs()
1033 if (pt.t < pm.t) {
1034 if (q != null) q.fromInt(0)
1035 if (r != null) self.copyTo(r)
1036 return
1037 }
1038 if (r == null) r = new BigInteger()
1039 var y = new BigInteger(),
1040 ts = self.s,
1041 ms = m.s
1042 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1043 if (nsh > 0) {
1044 pm.lShiftTo(nsh, y)
1045 pt.lShiftTo(nsh, r)
1046 } else {
1047 pm.copyTo(y)
1048 pt.copyTo(r)
1049 }
1050 var ys = y.t
1051 var y0 = y[ys - 1]
1052 if (y0 == 0) return
1053 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1054 var d1 = self.FV / yt,
1055 d2 = (1 << self.F1) / yt,
1056 e = 1 << self.F2
1057 var i = r.t,
1058 j = i - ys,
1059 t = (q == null) ? new BigInteger() : q
1060 y.dlShiftTo(j, t)
1061 if (r.compareTo(t) >= 0) {
1062 r[r.t++] = 1
1063 r.subTo(t, r)
1064 }
1065 BigInteger.ONE.dlShiftTo(ys, t)
1066 t.subTo(y, y); // "negative" y so we can replace sub with am later
1067 while (y.t < ys) y[y.t++] = 0
1068 while (--j >= 0) {
1069 // Estimate quotient digit
1070 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1071 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1072 y.dlShiftTo(j, t)
1073 r.subTo(t, r)
1074 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1075 }
ab78acc6
IC
1076 }
1077 if (q != null) {
1078 r.drShiftTo(ys, q)
1079 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1080 }
1081 r.t = ys
1082 r.clamp()
1083 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1084 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1085}
3af2954a 1086
ab78acc6
IC
1087// (public) this mod a
1088function bnMod(a) {
1089 var r = new BigInteger()
1090 this.abs()
1091 .divRemTo(a, null, r)
1092 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1093 return r
1094}
3af2954a 1095
ab78acc6
IC
1096// Modular reduction using "classic" algorithm
1097function Classic(m) {
1098 this.m = m
1099}
3af2954a 1100
ab78acc6
IC
1101function cConvert(x) {
1102 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1103 else return x
1104}
1105
1106function cRevert(x) {
1107 return x
1108}
3af2954a 1109
ab78acc6
IC
1110function cReduce(x) {
1111 x.divRemTo(this.m, null, x)
1112}
3af2954a 1113
ab78acc6
IC
1114function cMulTo(x, y, r) {
1115 x.multiplyTo(y, r)
1116 this.reduce(r)
1117}
3af2954a 1118
ab78acc6
IC
1119function cSqrTo(x, r) {
1120 x.squareTo(r)
1121 this.reduce(r)
1122}
3af2954a 1123
ab78acc6
IC
1124Classic.prototype.convert = cConvert
1125Classic.prototype.revert = cRevert
1126Classic.prototype.reduce = cReduce
1127Classic.prototype.mulTo = cMulTo
1128Classic.prototype.sqrTo = cSqrTo
3af2954a 1129
ab78acc6
IC
1130// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1131// justification:
1132// xy == 1 (mod m)
1133// xy = 1+km
1134// xy(2-xy) = (1+km)(1-km)
1135// x[y(2-xy)] = 1-k^2m^2
1136// x[y(2-xy)] == 1 (mod m^2)
1137// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1138// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1139// JS multiply "overflows" differently from C/C++, so care is needed here.
1140function bnpInvDigit() {
1141 if (this.t < 1) return 0
1142 var x = this[0]
1143 if ((x & 1) == 0) return 0
1144 var y = x & 3; // y == 1/x mod 2^2
1145 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1146 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1147 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1148 // last step - calculate inverse mod DV directly
1149 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1150 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1151 // we really want the negative inverse, and -DV < y < DV
1152 return (y > 0) ? this.DV - y : -y
1153}
3af2954a 1154
ab78acc6
IC
1155// Montgomery reduction
1156function Montgomery(m) {
1157 this.m = m
1158 this.mp = m.invDigit()
1159 this.mpl = this.mp & 0x7fff
1160 this.mph = this.mp >> 15
1161 this.um = (1 << (m.DB - 15)) - 1
1162 this.mt2 = 2 * m.t
1163}
3af2954a 1164
ab78acc6
IC
1165// xR mod m
1166function montConvert(x) {
1167 var r = new BigInteger()
1168 x.abs()
1169 .dlShiftTo(this.m.t, r)
1170 r.divRemTo(this.m, null, r)
1171 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1172 return r
1173}
3af2954a 1174
ab78acc6
IC
1175// x/R mod m
1176function montRevert(x) {
1177 var r = new BigInteger()
1178 x.copyTo(r)
1179 this.reduce(r)
1180 return r
1181}
3af2954a 1182
ab78acc6
IC
1183// x = x/R mod m (HAC 14.32)
1184function montReduce(x) {
1185 while (x.t <= this.mt2) // pad x so am has enough room later
1186 x[x.t++] = 0
1187 for (var i = 0; i < this.m.t; ++i) {
1188 // faster way of calculating u0 = x[i]*mp mod DV
1189 var j = x[i] & 0x7fff
1190 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1191 // use am to combine the multiply-shift-add into one call
1192 j = i + this.m.t
1193 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1194 // propagate carry
1195 while (x[j] >= x.DV) {
1196 x[j] -= x.DV
1197 x[++j]++
1198 }
1199 }
1200 x.clamp()
1201 x.drShiftTo(this.m.t, x)
1202 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1203}
3af2954a 1204
ab78acc6
IC
1205// r = "x^2/R mod m"; x != r
1206function montSqrTo(x, r) {
1207 x.squareTo(r)
1208 this.reduce(r)
1209}
3af2954a 1210
ab78acc6
IC
1211// r = "xy/R mod m"; x,y != r
1212function montMulTo(x, y, r) {
1213 x.multiplyTo(y, r)
1214 this.reduce(r)
1215}
3af2954a 1216
ab78acc6
IC
1217Montgomery.prototype.convert = montConvert
1218Montgomery.prototype.revert = montRevert
1219Montgomery.prototype.reduce = montReduce
1220Montgomery.prototype.mulTo = montMulTo
1221Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1222
ab78acc6
IC
1223// (protected) true iff this is even
1224function bnpIsEven() {
1225 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1226}
3af2954a 1227
ab78acc6
IC
1228// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1229function bnpExp(e, z) {
1230 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1231 var r = new BigInteger(),
1232 r2 = new BigInteger(),
1233 g = z.convert(this),
1234 i = nbits(e) - 1
1235 g.copyTo(r)
1236 while (--i >= 0) {
1237 z.sqrTo(r, r2)
1238 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1239 else {
1240 var t = r
1241 r = r2
1242 r2 = t
3af2954a 1243 }
3af2954a 1244 }
ab78acc6
IC
1245 return z.revert(r)
1246}
3af2954a 1247
ab78acc6
IC
1248// (public) this^e % m, 0 <= e < 2^32
1249function bnModPowInt(e, m) {
1250 var z
1251 if (e < 256 || m.isEven()) z = new Classic(m)
1252 else z = new Montgomery(m)
1253 return this.exp(e, z)
1254}
3af2954a 1255
ab78acc6
IC
1256// protected
1257proto.copyTo = bnpCopyTo
1258proto.fromInt = bnpFromInt
1259proto.fromString = bnpFromString
1260proto.clamp = bnpClamp
1261proto.dlShiftTo = bnpDLShiftTo
1262proto.drShiftTo = bnpDRShiftTo
1263proto.lShiftTo = bnpLShiftTo
1264proto.rShiftTo = bnpRShiftTo
1265proto.subTo = bnpSubTo
1266proto.multiplyTo = bnpMultiplyTo
1267proto.squareTo = bnpSquareTo
1268proto.divRemTo = bnpDivRemTo
1269proto.invDigit = bnpInvDigit
1270proto.isEven = bnpIsEven
1271proto.exp = bnpExp
3af2954a 1272
ab78acc6
IC
1273// public
1274proto.toString = bnToString
1275proto.negate = bnNegate
1276proto.abs = bnAbs
1277proto.compareTo = bnCompareTo
1278proto.bitLength = bnBitLength
1279proto.byteLength = bnByteLength
1280proto.mod = bnMod
1281proto.modPowInt = bnModPowInt
3af2954a 1282
ab78acc6
IC
1283// (public)
1284function bnClone() {
1285 var r = new BigInteger()
1286 this.copyTo(r)
1287 return r
1288}
3af2954a 1289
ab78acc6
IC
1290// (public) return value as integer
1291function bnIntValue() {
1292 if (this.s < 0) {
1293 if (this.t == 1) return this[0] - this.DV
1294 else if (this.t == 0) return -1
1295 } else if (this.t == 1) return this[0]
1296 else if (this.t == 0) return 0
1297 // assumes 16 < DB < 32
1298 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1299}
3af2954a 1300
ab78acc6
IC
1301// (public) return value as byte
1302function bnByteValue() {
1303 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1304}
3af2954a 1305
ab78acc6
IC
1306// (public) return value as short (assumes DB>=16)
1307function bnShortValue() {
1308 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1309}
3af2954a 1310
ab78acc6
IC
1311// (protected) return x s.t. r^x < DV
1312function bnpChunkSize(r) {
1313 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1314}
3af2954a 1315
ab78acc6
IC
1316// (public) 0 if this == 0, 1 if this > 0
1317function bnSigNum() {
1318 if (this.s < 0) return -1
1319 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1320 else return 1
1321}
3af2954a 1322
ab78acc6
IC
1323// (protected) convert to radix string
1324function bnpToRadix(b) {
1325 if (b == null) b = 10
1326 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1327 var cs = this.chunkSize(b)
1328 var a = Math.pow(b, cs)
1329 var d = nbv(a),
1330 y = new BigInteger(),
1331 z = new BigInteger(),
1332 r = ""
1333 this.divRemTo(d, y, z)
1334 while (y.signum() > 0) {
1335 r = (a + z.intValue())
1336 .toString(b)
1337 .substr(1) + r
1338 y.divRemTo(d, y, z)
1339 }
1340 return z.intValue()
1341 .toString(b) + r
1342}
3af2954a 1343
ab78acc6
IC
1344// (protected) convert from radix string
1345function bnpFromRadix(s, b) {
1346 var self = this
1347 self.fromInt(0)
1348 if (b == null) b = 10
1349 var cs = self.chunkSize(b)
1350 var d = Math.pow(b, cs),
1351 mi = false,
1352 j = 0,
1353 w = 0
1354 for (var i = 0; i < s.length; ++i) {
1355 var x = intAt(s, i)
1356 if (x < 0) {
1357 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1358 continue
1359 }
1360 w = b * w + x
1361 if (++j >= cs) {
1362 self.dMultiply(d)
1363 self.dAddOffset(w, 0)
1364 j = 0
1365 w = 0
1366 }
1367 }
1368 if (j > 0) {
1369 self.dMultiply(Math.pow(b, j))
1370 self.dAddOffset(w, 0)
1371 }
1372 if (mi) BigInteger.ZERO.subTo(self, self)
1373}
3af2954a 1374
ab78acc6
IC
1375// (protected) alternate constructor
1376function bnpFromNumber(a, b, c) {
1377 var self = this
1378 if ("number" == typeof b) {
1379 // new BigInteger(int,int,RNG)
1380 if (a < 2) self.fromInt(1)
1381 else {
1382 self.fromNumber(a, c)
1383 if (!self.testBit(a - 1)) // force MSB set
1384 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1385 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1386 while (!self.isProbablePrime(b)) {
1387 self.dAddOffset(2, 0)
1388 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1389 }
1390 }
1391 } else {
1392 // new BigInteger(int,RNG)
1393 var x = new Array(),
1394 t = a & 7
1395 x.length = (a >> 3) + 1
1396 b.nextBytes(x)
1397 if (t > 0) x[0] &= ((1 << t) - 1)
1398 else x[0] = 0
1399 self.fromString(x, 256)
3af2954a 1400 }
ab78acc6 1401}
3af2954a 1402
ab78acc6
IC
1403// (public) convert to bigendian byte array
1404function bnToByteArray() {
1405 var self = this
1406 var i = self.t,
1407 r = new Array()
1408 r[0] = self.s
1409 var p = self.DB - (i * self.DB) % 8,
1410 d, k = 0
1411 if (i-- > 0) {
1412 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1413 r[k++] = d | (self.s << (self.DB - p))
1414 while (i >= 0) {
1415 if (p < 8) {
1416 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1417 d |= self[--i] >> (p += self.DB - 8)
1418 } else {
1419 d = (self[i] >> (p -= 8)) & 0xff
1420 if (p <= 0) {
1421 p += self.DB
1422 --i
1423 }
1424 }
1425 if ((d & 0x80) != 0) d |= -256
1426 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1427 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1428 }
3af2954a 1429 }
ab78acc6
IC
1430 return r
1431}
3af2954a 1432
ab78acc6
IC
1433function bnEquals(a) {
1434 return (this.compareTo(a) == 0)
1435}
3af2954a 1436
ab78acc6
IC
1437function bnMin(a) {
1438 return (this.compareTo(a) < 0) ? this : a
1439}
3af2954a 1440
ab78acc6
IC
1441function bnMax(a) {
1442 return (this.compareTo(a) > 0) ? this : a
1443}
3af2954a 1444
ab78acc6
IC
1445// (protected) r = this op a (bitwise)
1446function bnpBitwiseTo(a, op, r) {
1447 var self = this
1448 var i, f, m = Math.min(a.t, self.t)
1449 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1450 if (a.t < self.t) {
1451 f = a.s & self.DM
1452 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1453 r.t = self.t
1454 } else {
1455 f = self.s & self.DM
1456 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1457 r.t = a.t
3af2954a 1458 }
ab78acc6
IC
1459 r.s = op(self.s, a.s)
1460 r.clamp()
1461}
3af2954a 1462
ab78acc6
IC
1463// (public) this & a
1464function op_and(x, y) {
1465 return x & y
1466}
3af2954a 1467
ab78acc6
IC
1468function bnAnd(a) {
1469 var r = new BigInteger()
1470 this.bitwiseTo(a, op_and, r)
1471 return r
1472}
3af2954a 1473
ab78acc6
IC
1474// (public) this | a
1475function op_or(x, y) {
1476 return x | y
1477}
3af2954a 1478
ab78acc6
IC
1479function bnOr(a) {
1480 var r = new BigInteger()
1481 this.bitwiseTo(a, op_or, r)
1482 return r
1483}
3af2954a 1484
ab78acc6
IC
1485// (public) this ^ a
1486function op_xor(x, y) {
1487 return x ^ y
1488}
3af2954a 1489
ab78acc6
IC
1490function bnXor(a) {
1491 var r = new BigInteger()
1492 this.bitwiseTo(a, op_xor, r)
1493 return r
1494}
3af2954a 1495
ab78acc6
IC
1496// (public) this & ~a
1497function op_andnot(x, y) {
1498 return x & ~y
1499}
3af2954a 1500
ab78acc6
IC
1501function bnAndNot(a) {
1502 var r = new BigInteger()
1503 this.bitwiseTo(a, op_andnot, r)
1504 return r
1505}
3af2954a 1506
ab78acc6
IC
1507// (public) ~this
1508function bnNot() {
1509 var r = new BigInteger()
1510 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1511 r.t = this.t
1512 r.s = ~this.s
1513 return r
1514}
3af2954a 1515
ab78acc6
IC
1516// (public) this << n
1517function bnShiftLeft(n) {
1518 var r = new BigInteger()
1519 if (n < 0) this.rShiftTo(-n, r)
1520 else this.lShiftTo(n, r)
1521 return r
1522}
3af2954a 1523
ab78acc6
IC
1524// (public) this >> n
1525function bnShiftRight(n) {
1526 var r = new BigInteger()
1527 if (n < 0) this.lShiftTo(-n, r)
1528 else this.rShiftTo(n, r)
1529 return r
1530}
3af2954a 1531
ab78acc6
IC
1532// return index of lowest 1-bit in x, x < 2^31
1533function lbit(x) {
1534 if (x == 0) return -1
1535 var r = 0
1536 if ((x & 0xffff) == 0) {
1537 x >>= 16
1538 r += 16
3af2954a 1539 }
ab78acc6
IC
1540 if ((x & 0xff) == 0) {
1541 x >>= 8
1542 r += 8
1543 }
1544 if ((x & 0xf) == 0) {
1545 x >>= 4
1546 r += 4
1547 }
1548 if ((x & 3) == 0) {
1549 x >>= 2
1550 r += 2
1551 }
1552 if ((x & 1) == 0)++r
1553 return r
1554}
3af2954a 1555
ab78acc6
IC
1556// (public) returns index of lowest 1-bit (or -1 if none)
1557function bnGetLowestSetBit() {
1558 for (var i = 0; i < this.t; ++i)
1559 if (this[i] != 0) return i * this.DB + lbit(this[i])
1560 if (this.s < 0) return this.t * this.DB
1561 return -1
1562}
3af2954a 1563
ab78acc6
IC
1564// return number of 1 bits in x
1565function cbit(x) {
1566 var r = 0
1567 while (x != 0) {
1568 x &= x - 1
1569 ++r
3af2954a 1570 }
ab78acc6
IC
1571 return r
1572}
3af2954a 1573
ab78acc6
IC
1574// (public) return number of set bits
1575function bnBitCount() {
1576 var r = 0,
1577 x = this.s & this.DM
1578 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1579 return r
1580}
1581
1582// (public) true iff nth bit is set
1583function bnTestBit(n) {
1584 var j = Math.floor(n / this.DB)
1585 if (j >= this.t) return (this.s != 0)
1586 return ((this[j] & (1 << (n % this.DB))) != 0)
1587}
3af2954a 1588
ab78acc6
IC
1589// (protected) this op (1<<n)
1590function bnpChangeBit(n, op) {
1591 var r = BigInteger.ONE.shiftLeft(n)
1592 this.bitwiseTo(r, op, r)
1593 return r
1594}
3af2954a 1595
ab78acc6
IC
1596// (public) this | (1<<n)
1597function bnSetBit(n) {
1598 return this.changeBit(n, op_or)
1599}
3af2954a 1600
ab78acc6
IC
1601// (public) this & ~(1<<n)
1602function bnClearBit(n) {
1603 return this.changeBit(n, op_andnot)
1604}
3af2954a 1605
ab78acc6
IC
1606// (public) this ^ (1<<n)
1607function bnFlipBit(n) {
1608 return this.changeBit(n, op_xor)
1609}
3af2954a 1610
ab78acc6
IC
1611// (protected) r = this + a
1612function bnpAddTo(a, r) {
1613 var self = this
3af2954a 1614
ab78acc6
IC
1615 var i = 0,
1616 c = 0,
1617 m = Math.min(a.t, self.t)
1618 while (i < m) {
1619 c += self[i] + a[i]
1620 r[i++] = c & self.DM
1621 c >>= self.DB
1622 }
1623 if (a.t < self.t) {
1624 c += a.s
1625 while (i < self.t) {
1626 c += self[i]
1627 r[i++] = c & self.DM
1628 c >>= self.DB
1629 }
1630 c += self.s
1631 } else {
1632 c += self.s
1633 while (i < a.t) {
1634 c += a[i]
1635 r[i++] = c & self.DM
1636 c >>= self.DB
1637 }
1638 c += a.s
1639 }
1640 r.s = (c < 0) ? -1 : 0
1641 if (c > 0) r[i++] = c
1642 else if (c < -1) r[i++] = self.DV + c
1643 r.t = i
1644 r.clamp()
1645}
3af2954a 1646
ab78acc6
IC
1647// (public) this + a
1648function bnAdd(a) {
1649 var r = new BigInteger()
1650 this.addTo(a, r)
1651 return r
1652}
3af2954a 1653
ab78acc6
IC
1654// (public) this - a
1655function bnSubtract(a) {
1656 var r = new BigInteger()
1657 this.subTo(a, r)
1658 return r
1659}
3af2954a 1660
ab78acc6
IC
1661// (public) this * a
1662function bnMultiply(a) {
1663 var r = new BigInteger()
1664 this.multiplyTo(a, r)
1665 return r
1666}
3af2954a 1667
ab78acc6
IC
1668// (public) this^2
1669function bnSquare() {
1670 var r = new BigInteger()
1671 this.squareTo(r)
1672 return r
1673}
3af2954a 1674
ab78acc6
IC
1675// (public) this / a
1676function bnDivide(a) {
1677 var r = new BigInteger()
1678 this.divRemTo(a, r, null)
1679 return r
1680}
3af2954a 1681
ab78acc6
IC
1682// (public) this % a
1683function bnRemainder(a) {
1684 var r = new BigInteger()
1685 this.divRemTo(a, null, r)
1686 return r
1687}
3af2954a 1688
ab78acc6
IC
1689// (public) [this/a,this%a]
1690function bnDivideAndRemainder(a) {
1691 var q = new BigInteger(),
1692 r = new BigInteger()
1693 this.divRemTo(a, q, r)
1694 return new Array(q, r)
1695}
3af2954a 1696
ab78acc6
IC
1697// (protected) this *= n, this >= 0, 1 < n < DV
1698function bnpDMultiply(n) {
1699 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1700 ++this.t
1701 this.clamp()
1702}
3af2954a 1703
ab78acc6
IC
1704// (protected) this += n << w words, this >= 0
1705function bnpDAddOffset(n, w) {
1706 if (n == 0) return
1707 while (this.t <= w) this[this.t++] = 0
1708 this[w] += n
1709 while (this[w] >= this.DV) {
1710 this[w] -= this.DV
1711 if (++w >= this.t) this[this.t++] = 0
1712 ++this[w]
3af2954a 1713 }
ab78acc6 1714}
3af2954a 1715
ab78acc6
IC
1716// A "null" reducer
1717function NullExp() {}
3af2954a 1718
ab78acc6
IC
1719function nNop(x) {
1720 return x
1721}
3af2954a 1722
ab78acc6
IC
1723function nMulTo(x, y, r) {
1724 x.multiplyTo(y, r)
1725}
3af2954a 1726
ab78acc6
IC
1727function nSqrTo(x, r) {
1728 x.squareTo(r)
1729}
3af2954a 1730
ab78acc6
IC
1731NullExp.prototype.convert = nNop
1732NullExp.prototype.revert = nNop
1733NullExp.prototype.mulTo = nMulTo
1734NullExp.prototype.sqrTo = nSqrTo
3af2954a 1735
ab78acc6
IC
1736// (public) this^e
1737function bnPow(e) {
1738 return this.exp(e, new NullExp())
1739}
3af2954a 1740
ab78acc6
IC
1741// (protected) r = lower n words of "this * a", a.t <= n
1742// "this" should be the larger one if appropriate.
1743function bnpMultiplyLowerTo(a, n, r) {
1744 var i = Math.min(this.t + a.t, n)
1745 r.s = 0; // assumes a,this >= 0
1746 r.t = i
1747 while (i > 0) r[--i] = 0
1748 var j
1749 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1750 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1751 r.clamp()
1752}
3af2954a 1753
ab78acc6
IC
1754// (protected) r = "this * a" without lower n words, n > 0
1755// "this" should be the larger one if appropriate.
1756function bnpMultiplyUpperTo(a, n, r) {
1757 --n
1758 var i = r.t = this.t + a.t - n
1759 r.s = 0; // assumes a,this >= 0
1760 while (--i >= 0) r[i] = 0
1761 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1762 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1763 r.clamp()
1764 r.drShiftTo(1, r)
1765}
3af2954a 1766
ab78acc6
IC
1767// Barrett modular reduction
1768function Barrett(m) {
1769 // setup Barrett
1770 this.r2 = new BigInteger()
1771 this.q3 = new BigInteger()
1772 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1773 this.mu = this.r2.divide(m)
1774 this.m = m
1775}
3af2954a 1776
ab78acc6
IC
1777function barrettConvert(x) {
1778 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1779 else if (x.compareTo(this.m) < 0) return x
1780 else {
1781 var r = new BigInteger()
1782 x.copyTo(r)
1783 this.reduce(r)
1784 return r
3af2954a 1785 }
ab78acc6 1786}
3af2954a 1787
ab78acc6
IC
1788function barrettRevert(x) {
1789 return x
1790}
3af2954a 1791
ab78acc6
IC
1792// x = x mod m (HAC 14.42)
1793function barrettReduce(x) {
1794 var self = this
1795 x.drShiftTo(self.m.t - 1, self.r2)
1796 if (x.t > self.m.t + 1) {
1797 x.t = self.m.t + 1
1798 x.clamp()
3af2954a 1799 }
ab78acc6
IC
1800 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1801 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1802 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1803 x.subTo(self.r2, x)
1804 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1805}
3af2954a 1806
ab78acc6
IC
1807// r = x^2 mod m; x != r
1808function barrettSqrTo(x, r) {
1809 x.squareTo(r)
1810 this.reduce(r)
1811}
3af2954a 1812
ab78acc6
IC
1813// r = x*y mod m; x,y != r
1814function barrettMulTo(x, y, r) {
1815 x.multiplyTo(y, r)
1816 this.reduce(r)
1817}
3af2954a 1818
ab78acc6
IC
1819Barrett.prototype.convert = barrettConvert
1820Barrett.prototype.revert = barrettRevert
1821Barrett.prototype.reduce = barrettReduce
1822Barrett.prototype.mulTo = barrettMulTo
1823Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1824
ab78acc6
IC
1825// (public) this^e % m (HAC 14.85)
1826function bnModPow(e, m) {
1827 var i = e.bitLength(),
1828 k, r = nbv(1),
1829 z
1830 if (i <= 0) return r
1831 else if (i < 18) k = 1
1832 else if (i < 48) k = 3
1833 else if (i < 144) k = 4
1834 else if (i < 768) k = 5
1835 else k = 6
1836 if (i < 8)
1837 z = new Classic(m)
1838 else if (m.isEven())
1839 z = new Barrett(m)
1840 else
1841 z = new Montgomery(m)
3af2954a 1842
ab78acc6
IC
1843 // precomputation
1844 var g = new Array(),
1845 n = 3,
1846 k1 = k - 1,
1847 km = (1 << k) - 1
1848 g[1] = z.convert(this)
1849 if (k > 1) {
1850 var g2 = new BigInteger()
1851 z.sqrTo(g[1], g2)
1852 while (n <= km) {
1853 g[n] = new BigInteger()
1854 z.mulTo(g2, g[n - 2], g[n])
1855 n += 2
1856 }
1857 }
1858
1859 var j = e.t - 1,
1860 w, is1 = true,
1861 r2 = new BigInteger(),
1862 t
1863 i = nbits(e[j]) - 1
1864 while (j >= 0) {
1865 if (i >= k1) w = (e[j] >> (i - k1)) & km
1866 else {
1867 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1868 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1869 }
3af2954a 1870
ab78acc6
IC
1871 n = k
1872 while ((w & 1) == 0) {
1873 w >>= 1
1874 --n
1875 }
1876 if ((i -= n) < 0) {
1877 i += this.DB
1878 --j
1879 }
1880 if (is1) { // ret == 1, don't bother squaring or multiplying it
1881 g[w].copyTo(r)
1882 is1 = false
1883 } else {
1884 while (n > 1) {
1885 z.sqrTo(r, r2)
1886 z.sqrTo(r2, r)
1887 n -= 2
1888 }
1889 if (n > 0) z.sqrTo(r, r2)
1890 else {
1891 t = r
1892 r = r2
1893 r2 = t
1894 }
1895 z.mulTo(r2, g[w], r)
1896 }
3af2954a 1897
ab78acc6
IC
1898 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1899 z.sqrTo(r, r2)
1900 t = r
1901 r = r2
1902 r2 = t
1903 if (--i < 0) {
1904 i = this.DB - 1
1905 --j
3af2954a 1906 }
3af2954a
IC
1907 }
1908 }
ab78acc6
IC
1909 return z.revert(r)
1910}
3af2954a 1911
ab78acc6
IC
1912// (public) gcd(this,a) (HAC 14.54)
1913function bnGCD(a) {
1914 var x = (this.s < 0) ? this.negate() : this.clone()
1915 var y = (a.s < 0) ? a.negate() : a.clone()
1916 if (x.compareTo(y) < 0) {
1917 var t = x
1918 x = y
1919 y = t
1920 }
1921 var i = x.getLowestSetBit(),
1922 g = y.getLowestSetBit()
1923 if (g < 0) return x
1924 if (i < g) g = i
1925 if (g > 0) {
1926 x.rShiftTo(g, x)
1927 y.rShiftTo(g, y)
1928 }
1929 while (x.signum() > 0) {
1930 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1931 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1932 if (x.compareTo(y) >= 0) {
1933 x.subTo(y, x)
1934 x.rShiftTo(1, x)
1935 } else {
1936 y.subTo(x, y)
1937 y.rShiftTo(1, y)
1938 }
3af2954a 1939 }
ab78acc6
IC
1940 if (g > 0) y.lShiftTo(g, y)
1941 return y
1942}
3af2954a 1943
ab78acc6
IC
1944// (protected) this % n, n < 2^26
1945function bnpModInt(n) {
1946 if (n <= 0) return 0
1947 var d = this.DV % n,
1948 r = (this.s < 0) ? n - 1 : 0
1949 if (this.t > 0)
1950 if (d == 0) r = this[0] % n
1951 else
1952 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1953 return r
1954}
3af2954a 1955
ab78acc6
IC
1956// (public) 1/this % m (HAC 14.61)
1957function bnModInverse(m) {
1958 var ac = m.isEven()
1959 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1960 var u = m.clone(),
1961 v = this.clone()
1962 var a = nbv(1),
1963 b = nbv(0),
1964 c = nbv(0),
1965 d = nbv(1)
1966 while (u.signum() != 0) {
1967 while (u.isEven()) {
1968 u.rShiftTo(1, u)
1969 if (ac) {
1970 if (!a.isEven() || !b.isEven()) {
1971 a.addTo(this, a)
1972 b.subTo(m, b)
1973 }
1974 a.rShiftTo(1, a)
1975 } else if (!b.isEven()) b.subTo(m, b)
1976 b.rShiftTo(1, b)
1977 }
1978 while (v.isEven()) {
1979 v.rShiftTo(1, v)
1980 if (ac) {
1981 if (!c.isEven() || !d.isEven()) {
1982 c.addTo(this, c)
1983 d.subTo(m, d)
1984 }
1985 c.rShiftTo(1, c)
1986 } else if (!d.isEven()) d.subTo(m, d)
1987 d.rShiftTo(1, d)
1988 }
1989 if (u.compareTo(v) >= 0) {
1990 u.subTo(v, u)
1991 if (ac) a.subTo(c, a)
1992 b.subTo(d, b)
1993 } else {
1994 v.subTo(u, v)
1995 if (ac) c.subTo(a, c)
1996 d.subTo(b, d)
1997 }
1998 }
1999 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2000 if (d.compareTo(m) >= 0) return d.subtract(m)
2001 if (d.signum() < 0) d.addTo(m, d)
2002 else return d
2003 if (d.signum() < 0) return d.add(m)
2004 else return d
2005}
2006
2007var lowprimes = [
2008 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2009 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2010 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2011 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2012 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2013 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2014 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2015 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2016 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2017 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2018 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2019]
2020
2021var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2022
2023// (public) test primality with certainty >= 1-.5^t
2024function bnIsProbablePrime(t) {
2025 var i, x = this.abs()
2026 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2027 for (i = 0; i < lowprimes.length; ++i)
2028 if (x[0] == lowprimes[i]) return true
2029 return false
3af2954a 2030 }
ab78acc6
IC
2031 if (x.isEven()) return false
2032 i = 1
2033 while (i < lowprimes.length) {
2034 var m = lowprimes[i],
2035 j = i + 1
2036 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2037 m = x.modInt(m)
2038 while (i < j) if (m % lowprimes[i++] == 0) return false
2039 }
2040 return x.millerRabin(t)
2041}
2042
2043// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2044function bnpMillerRabin(t) {
2045 var n1 = this.subtract(BigInteger.ONE)
2046 var k = n1.getLowestSetBit()
2047 if (k <= 0) return false
2048 var r = n1.shiftRight(k)
2049 t = (t + 1) >> 1
2050 if (t > lowprimes.length) t = lowprimes.length
2051 var a = new BigInteger(null)
2052 var j, bases = []
2053 for (var i = 0; i < t; ++i) {
2054 for (;;) {
2055 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2056 if (bases.indexOf(j) == -1) break
2057 }
2058 bases.push(j)
2059 a.fromInt(j)
2060 var y = a.modPow(r, this)
2061 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2062 var j = 1
2063 while (j++ < k && y.compareTo(n1) != 0) {
2064 y = y.modPowInt(2, this)
2065 if (y.compareTo(BigInteger.ONE) == 0) return false
2066 }
2067 if (y.compareTo(n1) != 0) return false
2068 }
3af2954a 2069 }
ab78acc6
IC
2070 return true
2071}
3af2954a 2072
ab78acc6
IC
2073// protected
2074proto.chunkSize = bnpChunkSize
2075proto.toRadix = bnpToRadix
2076proto.fromRadix = bnpFromRadix
2077proto.fromNumber = bnpFromNumber
2078proto.bitwiseTo = bnpBitwiseTo
2079proto.changeBit = bnpChangeBit
2080proto.addTo = bnpAddTo
2081proto.dMultiply = bnpDMultiply
2082proto.dAddOffset = bnpDAddOffset
2083proto.multiplyLowerTo = bnpMultiplyLowerTo
2084proto.multiplyUpperTo = bnpMultiplyUpperTo
2085proto.modInt = bnpModInt
2086proto.millerRabin = bnpMillerRabin
3af2954a 2087
ab78acc6
IC
2088// public
2089proto.clone = bnClone
2090proto.intValue = bnIntValue
2091proto.byteValue = bnByteValue
2092proto.shortValue = bnShortValue
2093proto.signum = bnSigNum
2094proto.toByteArray = bnToByteArray
2095proto.equals = bnEquals
2096proto.min = bnMin
2097proto.max = bnMax
2098proto.and = bnAnd
2099proto.or = bnOr
2100proto.xor = bnXor
2101proto.andNot = bnAndNot
2102proto.not = bnNot
2103proto.shiftLeft = bnShiftLeft
2104proto.shiftRight = bnShiftRight
2105proto.getLowestSetBit = bnGetLowestSetBit
2106proto.bitCount = bnBitCount
2107proto.testBit = bnTestBit
2108proto.setBit = bnSetBit
2109proto.clearBit = bnClearBit
2110proto.flipBit = bnFlipBit
2111proto.add = bnAdd
2112proto.subtract = bnSubtract
2113proto.multiply = bnMultiply
2114proto.divide = bnDivide
2115proto.remainder = bnRemainder
2116proto.divideAndRemainder = bnDivideAndRemainder
2117proto.modPow = bnModPow
2118proto.modInverse = bnModInverse
2119proto.pow = bnPow
2120proto.gcd = bnGCD
2121proto.isProbablePrime = bnIsProbablePrime
3af2954a 2122
ab78acc6
IC
2123// JSBN-specific extension
2124proto.square = bnSquare
3af2954a 2125
ab78acc6
IC
2126// constants
2127BigInteger.ZERO = nbv(0)
2128BigInteger.ONE = nbv(1)
2129BigInteger.valueOf = nbv
3af2954a 2130
ab78acc6 2131module.exports = BigInteger
3af2954a 2132
ab78acc6
IC
2133},{"../package.json":4}],2:[function(require,module,exports){
2134(function (Buffer){
2135// FIXME: Kind of a weird way to throw exceptions, consider removing
2136var assert = require('assert')
2137var BigInteger = require('./bigi')
3af2954a 2138
ab78acc6
IC
2139/**
2140 * Turns a byte array into a big integer.
2141 *
2142 * This function will interpret a byte array as a big integer in big
2143 * endian notation.
2144 */
2145BigInteger.fromByteArrayUnsigned = function(byteArray) {
2146 // BigInteger expects a DER integer conformant byte array
2147 if (byteArray[0] & 0x80) {
2148 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2149 }
2150
ab78acc6
IC
2151 return new BigInteger(byteArray)
2152}
3af2954a 2153
ab78acc6
IC
2154/**
2155 * Returns a byte array representation of the big integer.
2156 *
2157 * This returns the absolute of the contained value in big endian
2158 * form. A value of zero results in an empty array.
2159 */
2160BigInteger.prototype.toByteArrayUnsigned = function() {
2161 var byteArray = this.toByteArray()
2162 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2163}
3af2954a 2164
ab78acc6
IC
2165BigInteger.fromDERInteger = function(byteArray) {
2166 return new BigInteger(byteArray)
2167}
3af2954a 2168
ab78acc6
IC
2169/*
2170 * Converts BigInteger to a DER integer representation.
2171 *
2172 * The format for this value uses the most significant bit as a sign
2173 * bit. If the most significant bit is already set and the integer is
2174 * positive, a 0x00 is prepended.
2175 *
2176 * Examples:
2177 *
2178 * 0 => 0x00
2179 * 1 => 0x01
2180 * -1 => 0xff
2181 * 127 => 0x7f
2182 * -127 => 0x81
2183 * 128 => 0x0080
2184 * -128 => 0x80
2185 * 255 => 0x00ff
2186 * -255 => 0xff01
2187 * 16300 => 0x3fac
2188 * -16300 => 0xc054
2189 * 62300 => 0x00f35c
2190 * -62300 => 0xff0ca4
2191*/
2192BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2193
ab78acc6
IC
2194BigInteger.fromBuffer = function(buffer) {
2195 // BigInteger expects a DER integer conformant byte array
2196 if (buffer[0] & 0x80) {
2197 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2198
ab78acc6 2199 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2200 }
2201
ab78acc6
IC
2202 return new BigInteger(buffer)
2203}
3af2954a 2204
ab78acc6
IC
2205BigInteger.fromHex = function(hex) {
2206 if (hex === '') return BigInteger.ZERO
3af2954a 2207
ab78acc6
IC
2208 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2209 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2210 return new BigInteger(hex, 16)
2211}
3af2954a 2212
ab78acc6
IC
2213BigInteger.prototype.toBuffer = function(size) {
2214 var byteArray = this.toByteArrayUnsigned()
2215 var zeros = []
3af2954a 2216
ab78acc6
IC
2217 var padding = size - byteArray.length
2218 while (zeros.length < padding) zeros.push(0)
3af2954a 2219
ab78acc6
IC
2220 return new Buffer(zeros.concat(byteArray))
2221}
3af2954a 2222
ab78acc6
IC
2223BigInteger.prototype.toHex = function(size) {
2224 return this.toBuffer(size).toString('hex')
2225}
3af2954a 2226
ab78acc6
IC
2227}).call(this,require("buffer").Buffer)
2228},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2229var BigInteger = require('./bigi')
3af2954a 2230
ab78acc6
IC
2231//addons
2232require('./convert')
3af2954a 2233
ab78acc6
IC
2234module.exports = BigInteger
2235},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2236module.exports={
2237 "name": "bigi",
2238 "version": "1.4.0",
2239 "description": "Big integers.",
2240 "keywords": [
2241 "cryptography",
2242 "math",
2243 "bitcoin",
2244 "arbitrary",
2245 "precision",
2246 "arithmetic",
2247 "big",
2248 "integer",
2249 "int",
2250 "number",
2251 "biginteger",
2252 "bigint",
2253 "bignumber",
2254 "decimal",
2255 "float"
2256 ],
2257 "devDependencies": {
2258 "mocha": "^1.20.1",
2259 "jshint": "^2.5.1",
2260 "coveralls": "^2.10.0",
2261 "istanbul": "^0.2.11"
2262 },
2263 "repository": {
2264 "url": "https://github.com/cryptocoinjs/bigi",
2265 "type": "git"
2266 },
2267 "main": "./lib/index.js",
2268 "scripts": {
2269 "test": "_mocha -- test/*.js",
2270 "jshint": "jshint --config jshint.json lib/*.js ; true",
2271 "unit": "mocha",
2272 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2273 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2274 },
2275 "dependencies": {},
2276 "testling": {
2277 "files": "test/*.js",
2278 "harness": "mocha",
2279 "browsers": [
2280 "ie/9..latest",
2281 "firefox/latest",
2282 "chrome/latest",
2283 "safari/6.0..latest",
2284 "iphone/6.0..latest",
2285 "android-browser/4.2..latest"
2286 ]
2287 },
2288 "bugs": {
2289 "url": "https://github.com/cryptocoinjs/bigi/issues"
2290 },
2291 "homepage": "https://github.com/cryptocoinjs/bigi",
2292 "_id": "bigi@1.4.0",
2293 "dist": {
2294 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2295 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2296 },
2297 "_from": "bigi@^1.4.0",
2298 "_npmVersion": "1.4.3",
2299 "_npmUser": {
2300 "name": "jp",
2301 "email": "jprichardson@gmail.com"
2302 },
2303 "maintainers": [
2304 {
2305 "name": "jp",
2306 "email": "jprichardson@gmail.com"
2307 },
2308 {
2309 "name": "midnightlightning",
2310 "email": "boydb@midnightdesign.ws"
2311 },
2312 {
2313 "name": "sidazhang",
2314 "email": "sidazhang89@gmail.com"
2315 },
2316 {
2317 "name": "nadav",
2318 "email": "npm@shesek.info"
3af2954a 2319 }
ab78acc6
IC
2320 ],
2321 "directories": {},
2322 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2323 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2324}
3af2954a 2325
ab78acc6
IC
2326},{}],5:[function(require,module,exports){
2327// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2328//
2329// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2330//
2331// Originally from narwhal.js (http://narwhaljs.org)
2332// Copyright (c) 2009 Thomas Robinson <280north.com>
2333//
2334// Permission is hereby granted, free of charge, to any person obtaining a copy
2335// of this software and associated documentation files (the 'Software'), to
2336// deal in the Software without restriction, including without limitation the
2337// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2338// sell copies of the Software, and to permit persons to whom the Software is
2339// furnished to do so, subject to the following conditions:
2340//
2341// The above copyright notice and this permission notice shall be included in
2342// all copies or substantial portions of the Software.
2343//
2344// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2345// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2346// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2347// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2348// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2349// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2350
ab78acc6
IC
2351// when used in node, this will actually load the util module we depend on
2352// versus loading the builtin util module as happens otherwise
2353// this is a bug in node module loading as far as I am concerned
2354var util = require('util/');
3af2954a 2355
ab78acc6
IC
2356var pSlice = Array.prototype.slice;
2357var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2358
ab78acc6
IC
2359// 1. The assert module provides functions that throw
2360// AssertionError's when particular conditions are not met. The
2361// assert module must conform to the following interface.
3af2954a 2362
ab78acc6 2363var assert = module.exports = ok;
3af2954a 2364
ab78acc6
IC
2365// 2. The AssertionError is defined in assert.
2366// new assert.AssertionError({ message: message,
2367// actual: actual,
2368// expected: expected })
3af2954a 2369
ab78acc6
IC
2370assert.AssertionError = function AssertionError(options) {
2371 this.name = 'AssertionError';
2372 this.actual = options.actual;
2373 this.expected = options.expected;
2374 this.operator = options.operator;
2375 if (options.message) {
2376 this.message = options.message;
2377 this.generatedMessage = false;
2378 } else {
2379 this.message = getMessage(this);
2380 this.generatedMessage = true;
2381 }
2382 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2383
ab78acc6
IC
2384 if (Error.captureStackTrace) {
2385 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2386 }
ab78acc6
IC
2387 else {
2388 // non v8 browsers so we can have a stacktrace
2389 var err = new Error();
2390 if (err.stack) {
2391 var out = err.stack;
3af2954a 2392
ab78acc6
IC
2393 // try to strip useless frames
2394 var fn_name = stackStartFunction.name;
2395 var idx = out.indexOf('\n' + fn_name);
2396 if (idx >= 0) {
2397 // once we have located the function frame
2398 // we need to strip out everything before it (and its line)
2399 var next_line = out.indexOf('\n', idx + 1);
2400 out = out.substring(next_line + 1);
2401 }
3af2954a 2402
ab78acc6 2403 this.stack = out;
3af2954a 2404 }
3af2954a 2405 }
ab78acc6 2406};
3af2954a 2407
ab78acc6
IC
2408// assert.AssertionError instanceof Error
2409util.inherits(assert.AssertionError, Error);
3af2954a 2410
ab78acc6
IC
2411function replacer(key, value) {
2412 if (util.isUndefined(value)) {
2413 return '' + value;
2414 }
2415 if (util.isNumber(value) && !isFinite(value)) {
2416 return value.toString();
2417 }
2418 if (util.isFunction(value) || util.isRegExp(value)) {
2419 return value.toString();
2420 }
2421 return value;
2422}
3af2954a 2423
ab78acc6
IC
2424function truncate(s, n) {
2425 if (util.isString(s)) {
2426 return s.length < n ? s : s.slice(0, n);
2427 } else {
2428 return s;
2429 }
2430}
3af2954a 2431
ab78acc6
IC
2432function getMessage(self) {
2433 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2434 self.operator + ' ' +
2435 truncate(JSON.stringify(self.expected, replacer), 128);
2436}
3af2954a 2437
ab78acc6
IC
2438// At present only the three keys mentioned above are used and
2439// understood by the spec. Implementations or sub modules can pass
2440// other keys to the AssertionError's constructor - they will be
2441// ignored.
3af2954a 2442
ab78acc6
IC
2443// 3. All of the following functions must throw an AssertionError
2444// when a corresponding condition is not met, with a message that
2445// may be undefined if not provided. All assertion methods provide
2446// both the actual and expected values to the assertion error for
2447// display purposes.
3af2954a 2448
ab78acc6
IC
2449function fail(actual, expected, message, operator, stackStartFunction) {
2450 throw new assert.AssertionError({
2451 message: message,
2452 actual: actual,
2453 expected: expected,
2454 operator: operator,
2455 stackStartFunction: stackStartFunction
2456 });
2457}
3af2954a 2458
ab78acc6
IC
2459// EXTENSION! allows for well behaved errors defined elsewhere.
2460assert.fail = fail;
ebd8d4e8 2461
ab78acc6
IC
2462// 4. Pure assertion tests whether a value is truthy, as determined
2463// by !!guard.
2464// assert.ok(guard, message_opt);
2465// This statement is equivalent to assert.equal(true, !!guard,
2466// message_opt);. To test strictly for the value true, use
2467// assert.strictEqual(true, guard, message_opt);.
3af2954a 2468
ab78acc6
IC
2469function ok(value, message) {
2470 if (!value) fail(value, true, message, '==', assert.ok);
2471}
2472assert.ok = ok;
3af2954a 2473
ab78acc6
IC
2474// 5. The equality assertion tests shallow, coercive equality with
2475// ==.
2476// assert.equal(actual, expected, message_opt);
3af2954a 2477
ab78acc6
IC
2478assert.equal = function equal(actual, expected, message) {
2479 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2480};
3af2954a 2481
ab78acc6
IC
2482// 6. The non-equality assertion tests for whether two objects are not equal
2483// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2484
ab78acc6
IC
2485assert.notEqual = function notEqual(actual, expected, message) {
2486 if (actual == expected) {
2487 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2488 }
ab78acc6 2489};
3af2954a 2490
ab78acc6
IC
2491// 7. The equivalence assertion tests a deep equality relation.
2492// assert.deepEqual(actual, expected, message_opt);
3af2954a 2493
ab78acc6
IC
2494assert.deepEqual = function deepEqual(actual, expected, message) {
2495 if (!_deepEqual(actual, expected)) {
2496 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2497 }
2498};
3af2954a 2499
ab78acc6
IC
2500function _deepEqual(actual, expected) {
2501 // 7.1. All identical values are equivalent, as determined by ===.
2502 if (actual === expected) {
2503 return true;
3af2954a 2504
ab78acc6
IC
2505 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2506 if (actual.length != expected.length) return false;
3af2954a 2507
ab78acc6
IC
2508 for (var i = 0; i < actual.length; i++) {
2509 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2510 }
2511
ab78acc6 2512 return true;
3af2954a 2513
ab78acc6
IC
2514 // 7.2. If the expected value is a Date object, the actual value is
2515 // equivalent if it is also a Date object that refers to the same time.
2516 } else if (util.isDate(actual) && util.isDate(expected)) {
2517 return actual.getTime() === expected.getTime();
3af2954a 2518
ab78acc6
IC
2519 // 7.3 If the expected value is a RegExp object, the actual value is
2520 // equivalent if it is also a RegExp object with the same source and
2521 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2522 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2523 return actual.source === expected.source &&
2524 actual.global === expected.global &&
2525 actual.multiline === expected.multiline &&
2526 actual.lastIndex === expected.lastIndex &&
2527 actual.ignoreCase === expected.ignoreCase;
3af2954a 2528
ab78acc6
IC
2529 // 7.4. Other pairs that do not both pass typeof value == 'object',
2530 // equivalence is determined by ==.
2531 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2532 return actual == expected;
3af2954a 2533
ab78acc6
IC
2534 // 7.5 For all other Object pairs, including Array objects, equivalence is
2535 // determined by having the same number of owned properties (as verified
2536 // with Object.prototype.hasOwnProperty.call), the same set of keys
2537 // (although not necessarily the same order), equivalent values for every
2538 // corresponding key, and an identical 'prototype' property. Note: this
2539 // accounts for both named and indexed properties on Arrays.
2540 } else {
2541 return objEquiv(actual, expected);
3af2954a 2542 }
ab78acc6 2543}
3af2954a 2544
ab78acc6
IC
2545function isArguments(object) {
2546 return Object.prototype.toString.call(object) == '[object Arguments]';
2547}
3af2954a 2548
ab78acc6
IC
2549function objEquiv(a, b) {
2550 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2551 return false;
2552 // an identical 'prototype' property.
2553 if (a.prototype !== b.prototype) return false;
2554 // if one is a primitive, the other must be same
2555 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2556 return a === b;
3af2954a 2557 }
ab78acc6
IC
2558 var aIsArgs = isArguments(a),
2559 bIsArgs = isArguments(b);
2560 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2561 return false;
2562 if (aIsArgs) {
2563 a = pSlice.call(a);
2564 b = pSlice.call(b);
2565 return _deepEqual(a, b);
3af2954a 2566 }
ab78acc6
IC
2567 var ka = objectKeys(a),
2568 kb = objectKeys(b),
2569 key, i;
2570 // having the same number of owned properties (keys incorporates
2571 // hasOwnProperty)
2572 if (ka.length != kb.length)
2573 return false;
2574 //the same set of keys (although not necessarily the same order),
2575 ka.sort();
2576 kb.sort();
2577 //~~~cheap key test
2578 for (i = ka.length - 1; i >= 0; i--) {
2579 if (ka[i] != kb[i])
2580 return false;
3af2954a 2581 }
ab78acc6
IC
2582 //equivalent values for every corresponding key, and
2583 //~~~possibly expensive deep test
2584 for (i = ka.length - 1; i >= 0; i--) {
2585 key = ka[i];
2586 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2587 }
ab78acc6
IC
2588 return true;
2589}
2590
2591// 8. The non-equivalence assertion tests for any deep inequality.
2592// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2593
ab78acc6
IC
2594assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2595 if (_deepEqual(actual, expected)) {
2596 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2597 }
ab78acc6 2598};
3af2954a 2599
ab78acc6
IC
2600// 9. The strict equality assertion tests strict equality, as determined by ===.
2601// assert.strictEqual(actual, expected, message_opt);
3af2954a 2602
ab78acc6
IC
2603assert.strictEqual = function strictEqual(actual, expected, message) {
2604 if (actual !== expected) {
2605 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2606 }
ab78acc6 2607};
3af2954a 2608
ab78acc6
IC
2609// 10. The strict non-equality assertion tests for strict inequality, as
2610// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2611
ab78acc6
IC
2612assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2613 if (actual === expected) {
2614 fail(actual, expected, message, '!==', assert.notStrictEqual);
2615 }
2616};
3af2954a 2617
ab78acc6
IC
2618function expectedException(actual, expected) {
2619 if (!actual || !expected) {
2620 return false;
2621 }
3af2954a 2622
ab78acc6
IC
2623 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2624 return expected.test(actual);
2625 } else if (actual instanceof expected) {
2626 return true;
2627 } else if (expected.call({}, actual) === true) {
2628 return true;
3af2954a
IC
2629 }
2630
ab78acc6
IC
2631 return false;
2632}
3af2954a 2633
ab78acc6
IC
2634function _throws(shouldThrow, block, expected, message) {
2635 var actual;
3af2954a 2636
ab78acc6
IC
2637 if (util.isString(expected)) {
2638 message = expected;
2639 expected = null;
3af2954a
IC
2640 }
2641
ab78acc6
IC
2642 try {
2643 block();
2644 } catch (e) {
2645 actual = e;
3af2954a
IC
2646 }
2647
ab78acc6
IC
2648 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2649 (message ? ' ' + message : '.');
3af2954a 2650
ab78acc6
IC
2651 if (shouldThrow && !actual) {
2652 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2653 }
2654
ab78acc6
IC
2655 if (!shouldThrow && expectedException(actual, expected)) {
2656 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2657 }
2658
ab78acc6
IC
2659 if ((shouldThrow && actual && expected &&
2660 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2661 throw actual;
3af2954a 2662 }
ab78acc6 2663}
3af2954a 2664
ab78acc6
IC
2665// 11. Expected to throw an error:
2666// assert.throws(block, Error_opt, message_opt);
3af2954a 2667
ab78acc6
IC
2668assert.throws = function(block, /*optional*/error, /*optional*/message) {
2669 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2670};
3af2954a 2671
ab78acc6
IC
2672// EXTENSION! This is annoying to write outside this module.
2673assert.doesNotThrow = function(block, /*optional*/message) {
2674 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2675};
3af2954a 2676
ab78acc6 2677assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2678
ab78acc6
IC
2679var objectKeys = Object.keys || function (obj) {
2680 var keys = [];
2681 for (var key in obj) {
2682 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2683 }
ab78acc6
IC
2684 return keys;
2685};
3af2954a 2686
ab78acc6 2687},{"util/":29}],6:[function(require,module,exports){
3af2954a 2688
ab78acc6
IC
2689},{}],7:[function(require,module,exports){
2690/*!
2691 * The buffer module from node.js, for the browser.
2692 *
2693 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2694 * @license MIT
2695 */
3af2954a 2696
ab78acc6
IC
2697var base64 = require('base64-js')
2698var ieee754 = require('ieee754')
2699var isArray = require('is-array')
3af2954a 2700
ab78acc6
IC
2701exports.Buffer = Buffer
2702exports.SlowBuffer = SlowBuffer
2703exports.INSPECT_MAX_BYTES = 50
2704Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2705
ab78acc6 2706var rootParent = {}
3af2954a 2707
ab78acc6
IC
2708/**
2709 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2710 * === true Use Uint8Array implementation (fastest)
2711 * === false Use Object implementation (most compatible, even IE6)
2712 *
2713 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2714 * Opera 11.6+, iOS 4.2+.
2715 *
2716 * Due to various browser bugs, sometimes the Object implementation will be used even
2717 * when the browser supports typed arrays.
2718 *
2719 * Note:
2720 *
2721 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2722 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2723 *
2724 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2725 * on objects.
2726 *
2727 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2728 *
2729 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2730 * incorrect length in some situations.
3af2954a 2731
ab78acc6
IC
2732 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2733 * get the Object implementation, which is slower but behaves correctly.
2734 */
2735Buffer.TYPED_ARRAY_SUPPORT = (function () {
2736 function Bar () {}
2737 try {
2738 var arr = new Uint8Array(1)
2739 arr.foo = function () { return 42 }
2740 arr.constructor = Bar
2741 return arr.foo() === 42 && // typed array instances can be augmented
2742 arr.constructor === Bar && // constructor can be set
2743 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2744 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2745 } catch (e) {
2746 return false
2747 }
2748})()
3af2954a 2749
ab78acc6
IC
2750function kMaxLength () {
2751 return Buffer.TYPED_ARRAY_SUPPORT
2752 ? 0x7fffffff
2753 : 0x3fffffff
2754}
3af2954a 2755
ab78acc6
IC
2756/**
2757 * Class: Buffer
2758 * =============
2759 *
2760 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2761 * with function properties for all the node `Buffer` API functions. We use
2762 * `Uint8Array` so that square bracket notation works as expected -- it returns
2763 * a single octet.
2764 *
2765 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2766 * prototype.
2767 */
2768function Buffer (arg) {
2769 if (!(this instanceof Buffer)) {
2770 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2771 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2772 return new Buffer(arg)
3af2954a
IC
2773 }
2774
ab78acc6
IC
2775 this.length = 0
2776 this.parent = undefined
3af2954a 2777
ab78acc6
IC
2778 // Common case.
2779 if (typeof arg === 'number') {
2780 return fromNumber(this, arg)
2781 }
3af2954a 2782
ab78acc6
IC
2783 // Slightly less common case.
2784 if (typeof arg === 'string') {
2785 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2786 }
3af2954a 2787
ab78acc6
IC
2788 // Unusual.
2789 return fromObject(this, arg)
2790}
3af2954a 2791
ab78acc6
IC
2792function fromNumber (that, length) {
2793 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2794 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2795 for (var i = 0; i < length; i++) {
2796 that[i] = 0
2797 }
3af2954a 2798 }
ab78acc6
IC
2799 return that
2800}
3af2954a 2801
ab78acc6
IC
2802function fromString (that, string, encoding) {
2803 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2804
ab78acc6
IC
2805 // Assumption: byteLength() return value is always < kMaxLength.
2806 var length = byteLength(string, encoding) | 0
2807 that = allocate(that, length)
3af2954a 2808
ab78acc6
IC
2809 that.write(string, encoding)
2810 return that
2811}
3af2954a 2812
ab78acc6
IC
2813function fromObject (that, object) {
2814 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2815
ab78acc6 2816 if (isArray(object)) return fromArray(that, object)
3af2954a 2817
ab78acc6
IC
2818 if (object == null) {
2819 throw new TypeError('must start with number, buffer, array or string')
2820 }
3af2954a 2821
ab78acc6
IC
2822 if (typeof ArrayBuffer !== 'undefined') {
2823 if (object.buffer instanceof ArrayBuffer) {
2824 return fromTypedArray(that, object)
2825 }
2826 if (object instanceof ArrayBuffer) {
2827 return fromArrayBuffer(that, object)
2828 }
3af2954a
IC
2829 }
2830
ab78acc6 2831 if (object.length) return fromArrayLike(that, object)
3af2954a 2832
ab78acc6
IC
2833 return fromJsonObject(that, object)
2834}
3af2954a 2835
ab78acc6
IC
2836function fromBuffer (that, buffer) {
2837 var length = checked(buffer.length) | 0
2838 that = allocate(that, length)
2839 buffer.copy(that, 0, 0, length)
2840 return that
2841}
3af2954a 2842
ab78acc6
IC
2843function fromArray (that, array) {
2844 var length = checked(array.length) | 0
2845 that = allocate(that, length)
2846 for (var i = 0; i < length; i += 1) {
2847 that[i] = array[i] & 255
3af2954a 2848 }
ab78acc6
IC
2849 return that
2850}
3af2954a 2851
ab78acc6
IC
2852// Duplicate of fromArray() to keep fromArray() monomorphic.
2853function fromTypedArray (that, array) {
2854 var length = checked(array.length) | 0
2855 that = allocate(that, length)
2856 // Truncating the elements is probably not what people expect from typed
2857 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2858 // of the old Buffer constructor.
2859 for (var i = 0; i < length; i += 1) {
2860 that[i] = array[i] & 255
3af2954a 2861 }
ab78acc6
IC
2862 return that
2863}
3af2954a 2864
ab78acc6
IC
2865function fromArrayBuffer (that, array) {
2866 if (Buffer.TYPED_ARRAY_SUPPORT) {
2867 // Return an augmented `Uint8Array` instance, for best performance
2868 array.byteLength
2869 that = Buffer._augment(new Uint8Array(array))
2870 } else {
2871 // Fallback: Return an object instance of the Buffer class
2872 that = fromTypedArray(that, new Uint8Array(array))
2873 }
2874 return that
2875}
3af2954a 2876
ab78acc6
IC
2877function fromArrayLike (that, array) {
2878 var length = checked(array.length) | 0
2879 that = allocate(that, length)
2880 for (var i = 0; i < length; i += 1) {
2881 that[i] = array[i] & 255
3af2954a 2882 }
ab78acc6
IC
2883 return that
2884}
3af2954a 2885
ab78acc6
IC
2886// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2887// Returns a zero-length buffer for inputs that don't conform to the spec.
2888function fromJsonObject (that, object) {
2889 var array
2890 var length = 0
2891
2892 if (object.type === 'Buffer' && isArray(object.data)) {
2893 array = object.data
2894 length = checked(array.length) | 0
3af2954a 2895 }
ab78acc6 2896 that = allocate(that, length)
3af2954a 2897
ab78acc6
IC
2898 for (var i = 0; i < length; i += 1) {
2899 that[i] = array[i] & 255
3af2954a 2900 }
ab78acc6
IC
2901 return that
2902}
3af2954a 2903
ab78acc6
IC
2904function allocate (that, length) {
2905 if (Buffer.TYPED_ARRAY_SUPPORT) {
2906 // Return an augmented `Uint8Array` instance, for best performance
2907 that = Buffer._augment(new Uint8Array(length))
2908 } else {
2909 // Fallback: Return an object instance of the Buffer class
2910 that.length = length
2911 that._isBuffer = true
2912 }
3af2954a 2913
ab78acc6
IC
2914 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2915 if (fromPool) that.parent = rootParent
3af2954a 2916
ab78acc6
IC
2917 return that
2918}
3af2954a 2919
ab78acc6
IC
2920function checked (length) {
2921 // Note: cannot use `length < kMaxLength` here because that fails when
2922 // length is NaN (which is otherwise coerced to zero.)
2923 if (length >= kMaxLength()) {
2924 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2925 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2926 }
ab78acc6
IC
2927 return length | 0
2928}
3af2954a 2929
ab78acc6
IC
2930function SlowBuffer (subject, encoding) {
2931 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2932
ab78acc6
IC
2933 var buf = new Buffer(subject, encoding)
2934 delete buf.parent
2935 return buf
2936}
3af2954a 2937
ab78acc6
IC
2938Buffer.isBuffer = function isBuffer (b) {
2939 return !!(b != null && b._isBuffer)
2940}
3af2954a 2941
ab78acc6
IC
2942Buffer.compare = function compare (a, b) {
2943 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2944 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2945 }
2946
ab78acc6 2947 if (a === b) return 0
3af2954a 2948
ab78acc6
IC
2949 var x = a.length
2950 var y = b.length
3af2954a 2951
ab78acc6
IC
2952 var i = 0
2953 var len = Math.min(x, y)
2954 while (i < len) {
2955 if (a[i] !== b[i]) break
3af2954a 2956
ab78acc6
IC
2957 ++i
2958 }
3af2954a 2959
ab78acc6
IC
2960 if (i !== len) {
2961 x = a[i]
2962 y = b[i]
2963 }
3af2954a 2964
ab78acc6
IC
2965 if (x < y) return -1
2966 if (y < x) return 1
2967 return 0
2968}
3af2954a 2969
ab78acc6
IC
2970Buffer.isEncoding = function isEncoding (encoding) {
2971 switch (String(encoding).toLowerCase()) {
2972 case 'hex':
2973 case 'utf8':
2974 case 'utf-8':
2975 case 'ascii':
2976 case 'binary':
2977 case 'base64':
2978 case 'raw':
2979 case 'ucs2':
2980 case 'ucs-2':
2981 case 'utf16le':
2982 case 'utf-16le':
2983 return true
2984 default:
2985 return false
3af2954a 2986 }
ab78acc6 2987}
3af2954a 2988
ab78acc6
IC
2989Buffer.concat = function concat (list, length) {
2990 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 2991
ab78acc6
IC
2992 if (list.length === 0) {
2993 return new Buffer(0)
3af2954a
IC
2994 }
2995
ab78acc6
IC
2996 var i
2997 if (length === undefined) {
2998 length = 0
2999 for (i = 0; i < list.length; i++) {
3000 length += list[i].length
3001 }
3af2954a
IC
3002 }
3003
ab78acc6
IC
3004 var buf = new Buffer(length)
3005 var pos = 0
3006 for (i = 0; i < list.length; i++) {
3007 var item = list[i]
3008 item.copy(buf, pos)
3009 pos += item.length
3010 }
3011 return buf
3012}
3af2954a 3013
ab78acc6
IC
3014function byteLength (string, encoding) {
3015 if (typeof string !== 'string') string = '' + string
3016
3017 var len = string.length
3018 if (len === 0) return 0
3019
3020 // Use a for loop to avoid recursion
3021 var loweredCase = false
3022 for (;;) {
3023 switch (encoding) {
3024 case 'ascii':
3025 case 'binary':
3026 // Deprecated
3027 case 'raw':
3028 case 'raws':
3029 return len
3030 case 'utf8':
3031 case 'utf-8':
3032 return utf8ToBytes(string).length
3033 case 'ucs2':
3034 case 'ucs-2':
3035 case 'utf16le':
3036 case 'utf-16le':
3037 return len * 2
3038 case 'hex':
3039 return len >>> 1
3040 case 'base64':
3041 return base64ToBytes(string).length
3042 default:
3043 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3044 encoding = ('' + encoding).toLowerCase()
3045 loweredCase = true
3af2954a 3046 }
3af2954a 3047 }
ab78acc6
IC
3048}
3049Buffer.byteLength = byteLength
3af2954a 3050
ab78acc6
IC
3051// pre-set for values that may exist in the future
3052Buffer.prototype.length = undefined
3053Buffer.prototype.parent = undefined
3af2954a 3054
ab78acc6
IC
3055function slowToString (encoding, start, end) {
3056 var loweredCase = false
3af2954a 3057
ab78acc6
IC
3058 start = start | 0
3059 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3060
ab78acc6
IC
3061 if (!encoding) encoding = 'utf8'
3062 if (start < 0) start = 0
3063 if (end > this.length) end = this.length
3064 if (end <= start) return ''
3af2954a 3065
ab78acc6
IC
3066 while (true) {
3067 switch (encoding) {
3068 case 'hex':
3069 return hexSlice(this, start, end)
3af2954a 3070
ab78acc6
IC
3071 case 'utf8':
3072 case 'utf-8':
3073 return utf8Slice(this, start, end)
3af2954a 3074
ab78acc6
IC
3075 case 'ascii':
3076 return asciiSlice(this, start, end)
3af2954a 3077
ab78acc6
IC
3078 case 'binary':
3079 return binarySlice(this, start, end)
3af2954a 3080
ab78acc6
IC
3081 case 'base64':
3082 return base64Slice(this, start, end)
3af2954a 3083
ab78acc6
IC
3084 case 'ucs2':
3085 case 'ucs-2':
3086 case 'utf16le':
3087 case 'utf-16le':
3088 return utf16leSlice(this, start, end)
3af2954a 3089
ab78acc6
IC
3090 default:
3091 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3092 encoding = (encoding + '').toLowerCase()
3093 loweredCase = true
3094 }
3af2954a 3095 }
ab78acc6 3096}
3af2954a 3097
ab78acc6
IC
3098Buffer.prototype.toString = function toString () {
3099 var length = this.length | 0
3100 if (length === 0) return ''
3101 if (arguments.length === 0) return utf8Slice(this, 0, length)
3102 return slowToString.apply(this, arguments)
3103}
3af2954a 3104
ab78acc6
IC
3105Buffer.prototype.equals = function equals (b) {
3106 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3107 if (this === b) return true
3108 return Buffer.compare(this, b) === 0
3109}
3af2954a 3110
ab78acc6
IC
3111Buffer.prototype.inspect = function inspect () {
3112 var str = ''
3113 var max = exports.INSPECT_MAX_BYTES
3114 if (this.length > 0) {
3115 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3116 if (this.length > max) str += ' ... '
3af2954a 3117 }
ab78acc6
IC
3118 return '<Buffer ' + str + '>'
3119}
3af2954a 3120
ab78acc6
IC
3121Buffer.prototype.compare = function compare (b) {
3122 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3123 if (this === b) return 0
3124 return Buffer.compare(this, b)
3125}
3af2954a 3126
ab78acc6
IC
3127Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3128 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3129 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3130 byteOffset >>= 0
3af2954a 3131
ab78acc6
IC
3132 if (this.length === 0) return -1
3133 if (byteOffset >= this.length) return -1
3af2954a 3134
ab78acc6
IC
3135 // Negative offsets start from the end of the buffer
3136 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3137
ab78acc6
IC
3138 if (typeof val === 'string') {
3139 if (val.length === 0) return -1 // special case: looking for empty string always fails
3140 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3141 }
ab78acc6
IC
3142 if (Buffer.isBuffer(val)) {
3143 return arrayIndexOf(this, val, byteOffset)
3af2954a 3144 }
ab78acc6
IC
3145 if (typeof val === 'number') {
3146 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3147 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3148 }
ab78acc6 3149 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3150 }
3151
ab78acc6
IC
3152 function arrayIndexOf (arr, val, byteOffset) {
3153 var foundIndex = -1
3154 for (var i = 0; byteOffset + i < arr.length; i++) {
3155 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3156 if (foundIndex === -1) foundIndex = i
3157 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3158 } else {
ab78acc6 3159 foundIndex = -1
3af2954a 3160 }
3af2954a 3161 }
ab78acc6
IC
3162 return -1
3163 }
3af2954a 3164
ab78acc6
IC
3165 throw new TypeError('val must be string, number or Buffer')
3166}
3af2954a 3167
ab78acc6
IC
3168// `get` is deprecated
3169Buffer.prototype.get = function get (offset) {
3170 console.log('.get() is deprecated. Access using array indexes instead.')
3171 return this.readUInt8(offset)
3172}
3af2954a 3173
ab78acc6
IC
3174// `set` is deprecated
3175Buffer.prototype.set = function set (v, offset) {
3176 console.log('.set() is deprecated. Access using array indexes instead.')
3177 return this.writeUInt8(v, offset)
3178}
3af2954a 3179
ab78acc6
IC
3180function hexWrite (buf, string, offset, length) {
3181 offset = Number(offset) || 0
3182 var remaining = buf.length - offset
3183 if (!length) {
3184 length = remaining
3185 } else {
3186 length = Number(length)
3187 if (length > remaining) {
3188 length = remaining
3189 }
3190 }
3af2954a 3191
ab78acc6
IC
3192 // must be an even number of digits
3193 var strLen = string.length
3194 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3195
ab78acc6
IC
3196 if (length > strLen / 2) {
3197 length = strLen / 2
3198 }
3199 for (var i = 0; i < length; i++) {
3200 var parsed = parseInt(string.substr(i * 2, 2), 16)
3201 if (isNaN(parsed)) throw new Error('Invalid hex string')
3202 buf[offset + i] = parsed
3af2954a 3203 }
ab78acc6
IC
3204 return i
3205}
3206
3207function utf8Write (buf, string, offset, length) {
3208 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3209}
3af2954a 3210
ab78acc6
IC
3211function asciiWrite (buf, string, offset, length) {
3212 return blitBuffer(asciiToBytes(string), buf, offset, length)
3213}
3af2954a 3214
ab78acc6
IC
3215function binaryWrite (buf, string, offset, length) {
3216 return asciiWrite(buf, string, offset, length)
3217}
3af2954a 3218
ab78acc6
IC
3219function base64Write (buf, string, offset, length) {
3220 return blitBuffer(base64ToBytes(string), buf, offset, length)
3221}
3af2954a 3222
ab78acc6
IC
3223function ucs2Write (buf, string, offset, length) {
3224 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3225}
3af2954a 3226
ab78acc6
IC
3227Buffer.prototype.write = function write (string, offset, length, encoding) {
3228 // Buffer#write(string)
3229 if (offset === undefined) {
3230 encoding = 'utf8'
3231 length = this.length
3232 offset = 0
3233 // Buffer#write(string, encoding)
3234 } else if (length === undefined && typeof offset === 'string') {
3235 encoding = offset
3236 length = this.length
3237 offset = 0
3238 // Buffer#write(string, offset[, length][, encoding])
3239 } else if (isFinite(offset)) {
3240 offset = offset | 0
3241 if (isFinite(length)) {
3242 length = length | 0
3243 if (encoding === undefined) encoding = 'utf8'
3244 } else {
3245 encoding = length
3246 length = undefined
3247 }
3248 // legacy write(string, encoding, offset, length) - remove in v0.13
3249 } else {
3250 var swap = encoding
3251 encoding = offset
3252 offset = length | 0
3253 length = swap
3af2954a
IC
3254 }
3255
ab78acc6
IC
3256 var remaining = this.length - offset
3257 if (length === undefined || length > remaining) length = remaining
3af2954a 3258
ab78acc6
IC
3259 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3260 throw new RangeError('attempt to write outside buffer bounds')
3261 }
3af2954a 3262
ab78acc6 3263 if (!encoding) encoding = 'utf8'
3af2954a 3264
ab78acc6
IC
3265 var loweredCase = false
3266 for (;;) {
3267 switch (encoding) {
3268 case 'hex':
3269 return hexWrite(this, string, offset, length)
ebd8d4e8 3270
ab78acc6
IC
3271 case 'utf8':
3272 case 'utf-8':
3273 return utf8Write(this, string, offset, length)
ebd8d4e8 3274
ab78acc6
IC
3275 case 'ascii':
3276 return asciiWrite(this, string, offset, length)
ebd8d4e8 3277
ab78acc6
IC
3278 case 'binary':
3279 return binaryWrite(this, string, offset, length)
ebd8d4e8 3280
ab78acc6
IC
3281 case 'base64':
3282 // Warning: maxLength not taken into account in base64Write
3283 return base64Write(this, string, offset, length)
ebd8d4e8 3284
ab78acc6
IC
3285 case 'ucs2':
3286 case 'ucs-2':
3287 case 'utf16le':
3288 case 'utf-16le':
3289 return ucs2Write(this, string, offset, length)
ebd8d4e8 3290
ab78acc6
IC
3291 default:
3292 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3293 encoding = ('' + encoding).toLowerCase()
3294 loweredCase = true
3295 }
3296 }
3297}
212b1b46 3298
ab78acc6
IC
3299Buffer.prototype.toJSON = function toJSON () {
3300 return {
3301 type: 'Buffer',
3302 data: Array.prototype.slice.call(this._arr || this, 0)
3303 }
3304}
212b1b46 3305
ab78acc6
IC
3306function base64Slice (buf, start, end) {
3307 if (start === 0 && end === buf.length) {
3308 return base64.fromByteArray(buf)
3309 } else {
3310 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3311 }
ab78acc6
IC
3312}
3313
3314function utf8Slice (buf, start, end) {
3315 end = Math.min(buf.length, end)
3316 var firstByte
3317 var secondByte
3318 var thirdByte
3319 var fourthByte
3320 var bytesPerSequence
3321 var tempCodePoint
3322 var codePoint
3323 var res = []
3324 var i = start
3325
3326 for (; i < end; i += bytesPerSequence) {
3327 firstByte = buf[i]
3328 codePoint = 0xFFFD
3329
3330 if (firstByte > 0xEF) {
3331 bytesPerSequence = 4
3332 } else if (firstByte > 0xDF) {
3333 bytesPerSequence = 3
3334 } else if (firstByte > 0xBF) {
3335 bytesPerSequence = 2
3336 } else {
3337 bytesPerSequence = 1
3338 }
212b1b46 3339
ab78acc6
IC
3340 if (i + bytesPerSequence <= end) {
3341 switch (bytesPerSequence) {
3342 case 1:
3343 if (firstByte < 0x80) {
3344 codePoint = firstByte
3345 }
3346 break
3347 case 2:
3348 secondByte = buf[i + 1]
3349 if ((secondByte & 0xC0) === 0x80) {
3350 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3351 if (tempCodePoint > 0x7F) {
3352 codePoint = tempCodePoint
3353 }
3354 }
3355 break
3356 case 3:
3357 secondByte = buf[i + 1]
3358 thirdByte = buf[i + 2]
3359 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3360 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3361 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3362 codePoint = tempCodePoint
3363 }
3364 }
3365 break
3366 case 4:
3367 secondByte = buf[i + 1]
3368 thirdByte = buf[i + 2]
3369 fourthByte = buf[i + 3]
3370 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3371 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3372 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3373 codePoint = tempCodePoint
3374 }
3375 }
3376 }
3377 }
212b1b46 3378
ab78acc6
IC
3379 if (codePoint === 0xFFFD) {
3380 // we generated an invalid codePoint so make sure to only advance by 1 byte
3381 bytesPerSequence = 1
3382 } else if (codePoint > 0xFFFF) {
3383 // encode to utf16 (surrogate pair dance)
3384 codePoint -= 0x10000
3385 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3386 codePoint = 0xDC00 | codePoint & 0x3FF
3387 }
212b1b46 3388
ab78acc6 3389 res.push(codePoint)
3af2954a 3390 }
212b1b46 3391
ab78acc6
IC
3392 return String.fromCharCode.apply(String, res)
3393}
212b1b46 3394
ab78acc6
IC
3395function asciiSlice (buf, start, end) {
3396 var ret = ''
3397 end = Math.min(buf.length, end)
3398
3399 for (var i = start; i < end; i++) {
3400 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3401 }
ab78acc6
IC
3402 return ret
3403}
212b1b46 3404
ab78acc6
IC
3405function binarySlice (buf, start, end) {
3406 var ret = ''
3407 end = Math.min(buf.length, end)
212b1b46 3408
ab78acc6
IC
3409 for (var i = start; i < end; i++) {
3410 ret += String.fromCharCode(buf[i])
3411 }
3412 return ret
3413}
212b1b46 3414
ab78acc6
IC
3415function hexSlice (buf, start, end) {
3416 var len = buf.length
212b1b46 3417
ab78acc6
IC
3418 if (!start || start < 0) start = 0
3419 if (!end || end < 0 || end > len) end = len
212b1b46 3420
ab78acc6
IC
3421 var out = ''
3422 for (var i = start; i < end; i++) {
3423 out += toHex(buf[i])
3424 }
3425 return out
3426}
212b1b46 3427
ab78acc6
IC
3428function utf16leSlice (buf, start, end) {
3429 var bytes = buf.slice(start, end)
3430 var res = ''
3431 for (var i = 0; i < bytes.length; i += 2) {
3432 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3433 }
3434 return res
3435}
212b1b46 3436
ab78acc6
IC
3437Buffer.prototype.slice = function slice (start, end) {
3438 var len = this.length
3439 start = ~~start
3440 end = end === undefined ? len : ~~end
212b1b46 3441
ab78acc6
IC
3442 if (start < 0) {
3443 start += len
3444 if (start < 0) start = 0
3445 } else if (start > len) {
3446 start = len
3447 }
212b1b46 3448
ab78acc6
IC
3449 if (end < 0) {
3450 end += len
3451 if (end < 0) end = 0
3452 } else if (end > len) {
3453 end = len
3454 }
212b1b46 3455
ab78acc6 3456 if (end < start) end = start
212b1b46 3457
ab78acc6
IC
3458 var newBuf
3459 if (Buffer.TYPED_ARRAY_SUPPORT) {
3460 newBuf = Buffer._augment(this.subarray(start, end))
3461 } else {
3462 var sliceLen = end - start
3463 newBuf = new Buffer(sliceLen, undefined)
3464 for (var i = 0; i < sliceLen; i++) {
3465 newBuf[i] = this[i + start]
3af2954a
IC
3466 }
3467 }
212b1b46 3468
ab78acc6 3469 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3470
ab78acc6
IC
3471 return newBuf
3472}
ebd8d4e8 3473
ab78acc6
IC
3474/*
3475 * Need to make sure that buffer isn't trying to write out of bounds.
3476 */
3477function checkOffset (offset, ext, length) {
3478 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3479 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3480}
ebd8d4e8 3481
ab78acc6
IC
3482Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3483 offset = offset | 0
3484 byteLength = byteLength | 0
3485 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3486
ab78acc6
IC
3487 var val = this[offset]
3488 var mul = 1
3489 var i = 0
3490 while (++i < byteLength && (mul *= 0x100)) {
3491 val += this[offset + i] * mul
3492 }
3af2954a 3493
ab78acc6
IC
3494 return val
3495}
3af2954a 3496
ab78acc6
IC
3497Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3498 offset = offset | 0
3499 byteLength = byteLength | 0
3500 if (!noAssert) {
3501 checkOffset(offset, byteLength, this.length)
3502 }
3af2954a 3503
ab78acc6
IC
3504 var val = this[offset + --byteLength]
3505 var mul = 1
3506 while (byteLength > 0 && (mul *= 0x100)) {
3507 val += this[offset + --byteLength] * mul
3af2954a
IC
3508 }
3509
ab78acc6
IC
3510 return val
3511}
3af2954a 3512
ab78acc6
IC
3513Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3514 if (!noAssert) checkOffset(offset, 1, this.length)
3515 return this[offset]
3516}
3af2954a 3517
ab78acc6
IC
3518Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3519 if (!noAssert) checkOffset(offset, 2, this.length)
3520 return this[offset] | (this[offset + 1] << 8)
3521}
3af2954a 3522
ab78acc6
IC
3523Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3524 if (!noAssert) checkOffset(offset, 2, this.length)
3525 return (this[offset] << 8) | this[offset + 1]
3526}
ebd8d4e8 3527
ab78acc6
IC
3528Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3529 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3530
ab78acc6
IC
3531 return ((this[offset]) |
3532 (this[offset + 1] << 8) |
3533 (this[offset + 2] << 16)) +
3534 (this[offset + 3] * 0x1000000)
3535}
3af2954a 3536
ab78acc6
IC
3537Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3538 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3539
ab78acc6
IC
3540 return (this[offset] * 0x1000000) +
3541 ((this[offset + 1] << 16) |
3542 (this[offset + 2] << 8) |
3543 this[offset + 3])
3544}
ebd8d4e8 3545
ab78acc6
IC
3546Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3547 offset = offset | 0
3548 byteLength = byteLength | 0
3549 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3550
ab78acc6
IC
3551 var val = this[offset]
3552 var mul = 1
3553 var i = 0
3554 while (++i < byteLength && (mul *= 0x100)) {
3555 val += this[offset + i] * mul
ebd8d4e8 3556 }
ab78acc6 3557 mul *= 0x80
ebd8d4e8 3558
ab78acc6
IC
3559 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3560
3561 return val
ebd8d4e8
IC
3562}
3563
ab78acc6
IC
3564Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3565 offset = offset | 0
3566 byteLength = byteLength | 0
3567 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3568
ab78acc6
IC
3569 var i = byteLength
3570 var mul = 1
3571 var val = this[offset + --i]
3572 while (i > 0 && (mul *= 0x100)) {
3573 val += this[offset + --i] * mul
3574 }
3575 mul *= 0x80
ebd8d4e8 3576
ab78acc6 3577 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3578
ab78acc6
IC
3579 return val
3580}
ebd8d4e8 3581
ab78acc6
IC
3582Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3583 if (!noAssert) checkOffset(offset, 1, this.length)
3584 if (!(this[offset] & 0x80)) return (this[offset])
3585 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3586}
ab78acc6
IC
3587
3588Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3589 if (!noAssert) checkOffset(offset, 2, this.length)
3590 var val = this[offset] | (this[offset + 1] << 8)
3591 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3592}
ab78acc6
IC
3593
3594Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3595 if (!noAssert) checkOffset(offset, 2, this.length)
3596 var val = this[offset + 1] | (this[offset] << 8)
3597 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3598}
3599
ab78acc6
IC
3600Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3601 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3602
ab78acc6
IC
3603 return (this[offset]) |
3604 (this[offset + 1] << 8) |
3605 (this[offset + 2] << 16) |
3606 (this[offset + 3] << 24)
ebd8d4e8 3607}
ebd8d4e8 3608
ab78acc6
IC
3609Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3610 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3611
ab78acc6
IC
3612 return (this[offset] << 24) |
3613 (this[offset + 1] << 16) |
3614 (this[offset + 2] << 8) |
3615 (this[offset + 3])
ebd8d4e8
IC
3616}
3617
ab78acc6
IC
3618Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3619 if (!noAssert) checkOffset(offset, 4, this.length)
3620 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3621}
3622
ab78acc6
IC
3623Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3624 if (!noAssert) checkOffset(offset, 4, this.length)
3625 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3626}
3627
ab78acc6
IC
3628Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3629 if (!noAssert) checkOffset(offset, 8, this.length)
3630 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3631}
3632
ab78acc6
IC
3633Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3634 if (!noAssert) checkOffset(offset, 8, this.length)
3635 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3636}
3637
ab78acc6
IC
3638function checkInt (buf, value, offset, ext, max, min) {
3639 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3640 if (value > max || value < min) throw new RangeError('value is out of bounds')
3641 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3642}
3643
ab78acc6
IC
3644Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3645 value = +value
3646 offset = offset | 0
3647 byteLength = byteLength | 0
3648 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3649
ab78acc6
IC
3650 var mul = 1
3651 var i = 0
3652 this[offset] = value & 0xFF
3653 while (++i < byteLength && (mul *= 0x100)) {
3654 this[offset + i] = (value / mul) & 0xFF
3655 }
ebd8d4e8 3656
ab78acc6 3657 return offset + byteLength
ebd8d4e8
IC
3658}
3659
ab78acc6
IC
3660Buffer.prototype.writeUIntBE = function writeUIntBE (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 i = byteLength - 1
3667 var mul = 1
3668 this[offset + i] = value & 0xFF
3669 while (--i >= 0 && (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.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3677 value = +value
3678 offset = offset | 0
3679 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3680 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3681 this[offset] = value
3682 return offset + 1
ebd8d4e8
IC
3683}
3684
ab78acc6
IC
3685function objectWriteUInt16 (buf, value, offset, littleEndian) {
3686 if (value < 0) value = 0xffff + value + 1
3687 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3688 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3689 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3690 }
ebd8d4e8
IC
3691}
3692
ab78acc6
IC
3693Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3694 value = +value
3695 offset = offset | 0
3696 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3697 if (Buffer.TYPED_ARRAY_SUPPORT) {
3698 this[offset] = value
3699 this[offset + 1] = (value >>> 8)
3700 } else {
3701 objectWriteUInt16(this, value, offset, true)
3702 }
3703 return offset + 2
ebd8d4e8
IC
3704}
3705
ab78acc6
IC
3706Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3707 value = +value
3708 offset = offset | 0
3709 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3710 if (Buffer.TYPED_ARRAY_SUPPORT) {
3711 this[offset] = (value >>> 8)
3712 this[offset + 1] = value
3713 } else {
3714 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3715 }
ab78acc6 3716 return offset + 2
ebd8d4e8
IC
3717}
3718
ab78acc6
IC
3719function objectWriteUInt32 (buf, value, offset, littleEndian) {
3720 if (value < 0) value = 0xffffffff + value + 1
3721 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3722 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3723 }
ebd8d4e8
IC
3724}
3725
ab78acc6
IC
3726Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3727 value = +value
3728 offset = offset | 0
3729 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3730 if (Buffer.TYPED_ARRAY_SUPPORT) {
3731 this[offset + 3] = (value >>> 24)
3732 this[offset + 2] = (value >>> 16)
3733 this[offset + 1] = (value >>> 8)
3734 this[offset] = value
3735 } else {
3736 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3737 }
ab78acc6 3738 return offset + 4
ebd8d4e8
IC
3739}
3740
ab78acc6
IC
3741Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3742 value = +value
3743 offset = offset | 0
3744 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3745 if (Buffer.TYPED_ARRAY_SUPPORT) {
3746 this[offset] = (value >>> 24)
3747 this[offset + 1] = (value >>> 16)
3748 this[offset + 2] = (value >>> 8)
3749 this[offset + 3] = value
3750 } else {
3751 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3752 }
ab78acc6
IC
3753 return offset + 4
3754}
3755
3756Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3757 value = +value
3758 offset = offset | 0
3759 if (!noAssert) {
3760 var limit = Math.pow(2, 8 * byteLength - 1)
3761
3762 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3763 }
ab78acc6
IC
3764
3765 var i = 0
3766 var mul = 1
3767 var sub = value < 0 ? 1 : 0
3768 this[offset] = value & 0xFF
3769 while (++i < byteLength && (mul *= 0x100)) {
3770 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3771 }
ebd8d4e8 3772
ab78acc6 3773 return offset + byteLength
ebd8d4e8
IC
3774}
3775
ab78acc6
IC
3776Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3777 value = +value
3778 offset = offset | 0
3779 if (!noAssert) {
3780 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3781
ab78acc6
IC
3782 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3783 }
ebd8d4e8 3784
ab78acc6
IC
3785 var i = byteLength - 1
3786 var mul = 1
3787 var sub = value < 0 ? 1 : 0
3788 this[offset + i] = value & 0xFF
3789 while (--i >= 0 && (mul *= 0x100)) {
3790 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3791 }
3792
3793 return offset + byteLength
ebd8d4e8
IC
3794}
3795
ab78acc6
IC
3796Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3797 value = +value
3798 offset = offset | 0
3799 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3800 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3801 if (value < 0) value = 0xff + value + 1
3802 this[offset] = value
3803 return offset + 1
ebd8d4e8
IC
3804}
3805
ab78acc6
IC
3806Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3807 value = +value
3808 offset = offset | 0
3809 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3810 if (Buffer.TYPED_ARRAY_SUPPORT) {
3811 this[offset] = value
3812 this[offset + 1] = (value >>> 8)
3813 } else {
3814 objectWriteUInt16(this, value, offset, true)
3815 }
3816 return offset + 2
ebd8d4e8
IC
3817}
3818
ab78acc6
IC
3819Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3820 value = +value
3821 offset = offset | 0
3822 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3823 if (Buffer.TYPED_ARRAY_SUPPORT) {
3824 this[offset] = (value >>> 8)
3825 this[offset + 1] = value
3826 } else {
3827 objectWriteUInt16(this, value, offset, false)
3828 }
3829 return offset + 2
ebd8d4e8
IC
3830}
3831
ab78acc6
IC
3832Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3833 value = +value
3834 offset = offset | 0
3835 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3836 if (Buffer.TYPED_ARRAY_SUPPORT) {
3837 this[offset] = value
3838 this[offset + 1] = (value >>> 8)
3839 this[offset + 2] = (value >>> 16)
3840 this[offset + 3] = (value >>> 24)
3841 } else {
3842 objectWriteUInt32(this, value, offset, true)
3843 }
3844 return offset + 4
3845}
3846
3847Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3848 value = +value
3849 offset = offset | 0
3850 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3851 if (value < 0) value = 0xffffffff + value + 1
3852 if (Buffer.TYPED_ARRAY_SUPPORT) {
3853 this[offset] = (value >>> 24)
3854 this[offset + 1] = (value >>> 16)
3855 this[offset + 2] = (value >>> 8)
3856 this[offset + 3] = value
3857 } else {
3858 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3859 }
ab78acc6 3860 return offset + 4
ebd8d4e8
IC
3861}
3862
ab78acc6
IC
3863function checkIEEE754 (buf, value, offset, ext, max, min) {
3864 if (value > max || value < min) throw new RangeError('value is out of bounds')
3865 if (offset + ext > buf.length) throw new RangeError('index out of range')
3866 if (offset < 0) throw new RangeError('index out of range')
3867}
ebd8d4e8 3868
ab78acc6
IC
3869function writeFloat (buf, value, offset, littleEndian, noAssert) {
3870 if (!noAssert) {
3871 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3872 }
3873 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3874 return offset + 4
3875}
ebd8d4e8 3876
ab78acc6
IC
3877Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3878 return writeFloat(this, value, offset, true, noAssert)
3879}
ebd8d4e8 3880
ab78acc6
IC
3881Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3882 return writeFloat(this, value, offset, false, noAssert)
3883}
ebd8d4e8 3884
ab78acc6
IC
3885function writeDouble (buf, value, offset, littleEndian, noAssert) {
3886 if (!noAssert) {
3887 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3888 }
ab78acc6
IC
3889 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3890 return offset + 8
ebd8d4e8
IC
3891}
3892
ab78acc6
IC
3893Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3894 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3895}
3896
ab78acc6
IC
3897Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3898 return writeDouble(this, value, offset, false, noAssert)
3899}
ebd8d4e8 3900
ab78acc6
IC
3901// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3902Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3903 if (!start) start = 0
3904 if (!end && end !== 0) end = this.length
3905 if (targetStart >= target.length) targetStart = target.length
3906 if (!targetStart) targetStart = 0
3907 if (end > 0 && end < start) end = start
3908
3909 // Copy 0 bytes; we're done
3910 if (end === start) return 0
3911 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3912
ab78acc6
IC
3913 // Fatal error conditions
3914 if (targetStart < 0) {
3915 throw new RangeError('targetStart out of bounds')
3916 }
3917 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3918 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3919
ab78acc6
IC
3920 // Are we oob?
3921 if (end > this.length) end = this.length
3922 if (target.length - targetStart < end - start) {
3923 end = target.length - targetStart + start
3924 }
ebd8d4e8 3925
ab78acc6
IC
3926 var len = end - start
3927 var i
ebd8d4e8 3928
ab78acc6
IC
3929 if (this === target && start < targetStart && targetStart < end) {
3930 // descending copy from end
3931 for (i = len - 1; i >= 0; i--) {
3932 target[i + targetStart] = this[i + start]
3933 }
3934 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3935 // ascending copy from start
3936 for (i = 0; i < len; i++) {
3937 target[i + targetStart] = this[i + start]
3938 }
3939 } else {
3940 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3941 }
ebd8d4e8 3942
ab78acc6
IC
3943 return len
3944}
ebd8d4e8 3945
ab78acc6
IC
3946// fill(value, start=0, end=buffer.length)
3947Buffer.prototype.fill = function fill (value, start, end) {
3948 if (!value) value = 0
3949 if (!start) start = 0
3950 if (!end) end = this.length
ebd8d4e8 3951
ab78acc6 3952 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3953
ab78acc6
IC
3954 // Fill 0 bytes; we're done
3955 if (end === start) return
3956 if (this.length === 0) return
ebd8d4e8 3957
ab78acc6
IC
3958 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3959 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3960
ab78acc6
IC
3961 var i
3962 if (typeof value === 'number') {
3963 for (i = start; i < end; i++) {
3964 this[i] = value
ebd8d4e8 3965 }
ab78acc6
IC
3966 } else {
3967 var bytes = utf8ToBytes(value.toString())
3968 var len = bytes.length
3969 for (i = start; i < end; i++) {
3970 this[i] = bytes[i % len]
ebd8d4e8
IC
3971 }
3972 }
ebd8d4e8 3973
ab78acc6 3974 return this
ebd8d4e8
IC
3975}
3976
ab78acc6
IC
3977/**
3978 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3979 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3980 */
3981Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3982 if (typeof Uint8Array !== 'undefined') {
3983 if (Buffer.TYPED_ARRAY_SUPPORT) {
3984 return (new Buffer(this)).buffer
3985 } else {
3986 var buf = new Uint8Array(this.length)
3987 for (var i = 0, len = buf.length; i < len; i += 1) {
3988 buf[i] = this[i]
ebd8d4e8 3989 }
ab78acc6 3990 return buf.buffer
ebd8d4e8 3991 }
ab78acc6
IC
3992 } else {
3993 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 3994 }
ebd8d4e8
IC
3995}
3996
ab78acc6
IC
3997// HELPER FUNCTIONS
3998// ================
ebd8d4e8 3999
ab78acc6 4000var BP = Buffer.prototype
ebd8d4e8 4001
ab78acc6
IC
4002/**
4003 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4004 */
4005Buffer._augment = function _augment (arr) {
4006 arr.constructor = Buffer
4007 arr._isBuffer = true
ebd8d4e8 4008
ab78acc6
IC
4009 // save reference to original Uint8Array set method before overwriting
4010 arr._set = arr.set
ebd8d4e8 4011
ab78acc6
IC
4012 // deprecated
4013 arr.get = BP.get
4014 arr.set = BP.set
ebd8d4e8 4015
ab78acc6
IC
4016 arr.write = BP.write
4017 arr.toString = BP.toString
4018 arr.toLocaleString = BP.toString
4019 arr.toJSON = BP.toJSON
4020 arr.equals = BP.equals
4021 arr.compare = BP.compare
4022 arr.indexOf = BP.indexOf
4023 arr.copy = BP.copy
4024 arr.slice = BP.slice
4025 arr.readUIntLE = BP.readUIntLE
4026 arr.readUIntBE = BP.readUIntBE
4027 arr.readUInt8 = BP.readUInt8
4028 arr.readUInt16LE = BP.readUInt16LE
4029 arr.readUInt16BE = BP.readUInt16BE
4030 arr.readUInt32LE = BP.readUInt32LE
4031 arr.readUInt32BE = BP.readUInt32BE
4032 arr.readIntLE = BP.readIntLE
4033 arr.readIntBE = BP.readIntBE
4034 arr.readInt8 = BP.readInt8
4035 arr.readInt16LE = BP.readInt16LE
4036 arr.readInt16BE = BP.readInt16BE
4037 arr.readInt32LE = BP.readInt32LE
4038 arr.readInt32BE = BP.readInt32BE
4039 arr.readFloatLE = BP.readFloatLE
4040 arr.readFloatBE = BP.readFloatBE
4041 arr.readDoubleLE = BP.readDoubleLE
4042 arr.readDoubleBE = BP.readDoubleBE
4043 arr.writeUInt8 = BP.writeUInt8
4044 arr.writeUIntLE = BP.writeUIntLE
4045 arr.writeUIntBE = BP.writeUIntBE
4046 arr.writeUInt16LE = BP.writeUInt16LE
4047 arr.writeUInt16BE = BP.writeUInt16BE
4048 arr.writeUInt32LE = BP.writeUInt32LE
4049 arr.writeUInt32BE = BP.writeUInt32BE
4050 arr.writeIntLE = BP.writeIntLE
4051 arr.writeIntBE = BP.writeIntBE
4052 arr.writeInt8 = BP.writeInt8
4053 arr.writeInt16LE = BP.writeInt16LE
4054 arr.writeInt16BE = BP.writeInt16BE
4055 arr.writeInt32LE = BP.writeInt32LE
4056 arr.writeInt32BE = BP.writeInt32BE
4057 arr.writeFloatLE = BP.writeFloatLE
4058 arr.writeFloatBE = BP.writeFloatBE
4059 arr.writeDoubleLE = BP.writeDoubleLE
4060 arr.writeDoubleBE = BP.writeDoubleBE
4061 arr.fill = BP.fill
4062 arr.inspect = BP.inspect
4063 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4064
ab78acc6 4065 return arr
ebd8d4e8
IC
4066}
4067
ab78acc6 4068var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4069
ab78acc6
IC
4070function base64clean (str) {
4071 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4072 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4073 // Node converts strings with length < 2 to ''
4074 if (str.length < 2) return ''
4075 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4076 while (str.length % 4 !== 0) {
4077 str = str + '='
4078 }
4079 return str
ebd8d4e8
IC
4080}
4081
ab78acc6
IC
4082function stringtrim (str) {
4083 if (str.trim) return str.trim()
4084 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4085}
4086
ab78acc6
IC
4087function toHex (n) {
4088 if (n < 16) return '0' + n.toString(16)
4089 return n.toString(16)
ebd8d4e8
IC
4090}
4091
ab78acc6
IC
4092function utf8ToBytes (string, units) {
4093 units = units || Infinity
4094 var codePoint
4095 var length = string.length
4096 var leadSurrogate = null
4097 var bytes = []
ebd8d4e8 4098
ab78acc6
IC
4099 for (var i = 0; i < length; i++) {
4100 codePoint = string.charCodeAt(i)
ebd8d4e8 4101
ab78acc6
IC
4102 // is surrogate component
4103 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4104 // last char was a lead
4105 if (!leadSurrogate) {
4106 // no lead yet
4107 if (codePoint > 0xDBFF) {
4108 // unexpected trail
4109 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4110 continue
ebd8d4e8 4111
ab78acc6
IC
4112 } else if (i + 1 === length) {
4113 // unpaired lead
4114 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4115 continue
4116 }
ebd8d4e8 4117
ab78acc6
IC
4118 // valid lead
4119 leadSurrogate = codePoint
ebd8d4e8 4120
ab78acc6
IC
4121 continue
4122 }
ebd8d4e8 4123
ab78acc6
IC
4124 // 2 leads in a row
4125 if (codePoint < 0xDC00) {
4126 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4127 leadSurrogate = codePoint
4128 continue
4129 }
ebd8d4e8 4130
ab78acc6
IC
4131 // valid surrogate pair
4132 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4133
4134 } else if (leadSurrogate) {
4135 // valid bmp char, but last char was a lead
4136 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4137 }
4138
4139 leadSurrogate = null
4140
4141 // encode utf8
4142 if (codePoint < 0x80) {
4143 if ((units -= 1) < 0) break
4144 bytes.push(codePoint)
4145 } else if (codePoint < 0x800) {
4146 if ((units -= 2) < 0) break
4147 bytes.push(
4148 codePoint >> 0x6 | 0xC0,
4149 codePoint & 0x3F | 0x80
4150 )
4151 } else if (codePoint < 0x10000) {
4152 if ((units -= 3) < 0) break
4153 bytes.push(
4154 codePoint >> 0xC | 0xE0,
4155 codePoint >> 0x6 & 0x3F | 0x80,
4156 codePoint & 0x3F | 0x80
4157 )
4158 } else if (codePoint < 0x110000) {
4159 if ((units -= 4) < 0) break
4160 bytes.push(
4161 codePoint >> 0x12 | 0xF0,
4162 codePoint >> 0xC & 0x3F | 0x80,
4163 codePoint >> 0x6 & 0x3F | 0x80,
4164 codePoint & 0x3F | 0x80
4165 )
4166 } else {
4167 throw new Error('Invalid code point')
ebd8d4e8 4168 }
ebd8d4e8 4169 }
ab78acc6
IC
4170
4171 return bytes
4172}
4173
4174function asciiToBytes (str) {
4175 var byteArray = []
4176 for (var i = 0; i < str.length; i++) {
4177 // Node's code seems to be doing this and not & 0x7F..
4178 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4179 }
ab78acc6 4180 return byteArray
ebd8d4e8
IC
4181}
4182
ab78acc6
IC
4183function utf16leToBytes (str, units) {
4184 var c, hi, lo
4185 var byteArray = []
4186 for (var i = 0; i < str.length; i++) {
4187 if ((units -= 2) < 0) break
ebd8d4e8 4188
ab78acc6
IC
4189 c = str.charCodeAt(i)
4190 hi = c >> 8
4191 lo = c % 256
4192 byteArray.push(lo)
4193 byteArray.push(hi)
4194 }
ebd8d4e8 4195
ab78acc6
IC
4196 return byteArray
4197}
ebd8d4e8 4198
ab78acc6
IC
4199function base64ToBytes (str) {
4200 return base64.toByteArray(base64clean(str))
4201}
ebd8d4e8 4202
ab78acc6
IC
4203function blitBuffer (src, dst, offset, length) {
4204 for (var i = 0; i < length; i++) {
4205 if ((i + offset >= dst.length) || (i >= src.length)) break
4206 dst[i + offset] = src[i]
4207 }
4208 return i
4209}
4210
4211},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4212var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4213
4214;(function (exports) {
4215 'use strict';
4216
4217 var Arr = (typeof Uint8Array !== 'undefined')
4218 ? Uint8Array
4219 : Array
ebd8d4e8 4220
ab78acc6
IC
4221 var PLUS = '+'.charCodeAt(0)
4222 var SLASH = '/'.charCodeAt(0)
4223 var NUMBER = '0'.charCodeAt(0)
4224 var LOWER = 'a'.charCodeAt(0)
4225 var UPPER = 'A'.charCodeAt(0)
4226 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4227 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4228
ab78acc6
IC
4229 function decode (elt) {
4230 var code = elt.charCodeAt(0)
4231 if (code === PLUS ||
4232 code === PLUS_URL_SAFE)
4233 return 62 // '+'
4234 if (code === SLASH ||
4235 code === SLASH_URL_SAFE)
4236 return 63 // '/'
4237 if (code < NUMBER)
4238 return -1 //no match
4239 if (code < NUMBER + 10)
4240 return code - NUMBER + 26 + 26
4241 if (code < UPPER + 26)
4242 return code - UPPER
4243 if (code < LOWER + 26)
4244 return code - LOWER + 26
4245 }
ebd8d4e8 4246
ab78acc6
IC
4247 function b64ToByteArray (b64) {
4248 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4249
ab78acc6
IC
4250 if (b64.length % 4 > 0) {
4251 throw new Error('Invalid string. Length must be a multiple of 4')
4252 }
ebd8d4e8 4253
ab78acc6
IC
4254 // the number of equal signs (place holders)
4255 // if there are two placeholders, than the two characters before it
4256 // represent one byte
4257 // if there is only one, then the three characters before it represent 2 bytes
4258 // this is just a cheap hack to not do indexOf twice
4259 var len = b64.length
4260 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4261
ab78acc6
IC
4262 // base64 is 4/3 + up to two characters of the original data
4263 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4264
ab78acc6
IC
4265 // if there are placeholders, only get up to the last complete 4 chars
4266 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4267
ab78acc6 4268 var L = 0
ebd8d4e8 4269
ab78acc6
IC
4270 function push (v) {
4271 arr[L++] = v
4272 }
ebd8d4e8 4273
ab78acc6
IC
4274 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4275 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4276 push((tmp & 0xFF0000) >> 16)
4277 push((tmp & 0xFF00) >> 8)
4278 push(tmp & 0xFF)
4279 }
ebd8d4e8 4280
ab78acc6
IC
4281 if (placeHolders === 2) {
4282 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4283 push(tmp & 0xFF)
4284 } else if (placeHolders === 1) {
4285 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4286 push((tmp >> 8) & 0xFF)
4287 push(tmp & 0xFF)
4288 }
ebd8d4e8 4289
ab78acc6
IC
4290 return arr
4291 }
ebd8d4e8 4292
ab78acc6
IC
4293 function uint8ToBase64 (uint8) {
4294 var i,
4295 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4296 output = "",
4297 temp, length
ebd8d4e8 4298
ab78acc6
IC
4299 function encode (num) {
4300 return lookup.charAt(num)
4301 }
ebd8d4e8 4302
ab78acc6
IC
4303 function tripletToBase64 (num) {
4304 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4305 }
ebd8d4e8 4306
ab78acc6
IC
4307 // go through the array every three bytes, we'll deal with trailing stuff later
4308 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4309 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4310 output += tripletToBase64(temp)
4311 }
ebd8d4e8 4312
ab78acc6
IC
4313 // pad the end with zeros, but make sure to not forget the extra bytes
4314 switch (extraBytes) {
4315 case 1:
4316 temp = uint8[uint8.length - 1]
4317 output += encode(temp >> 2)
4318 output += encode((temp << 4) & 0x3F)
4319 output += '=='
4320 break
4321 case 2:
4322 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4323 output += encode(temp >> 10)
4324 output += encode((temp >> 4) & 0x3F)
4325 output += encode((temp << 2) & 0x3F)
4326 output += '='
4327 break
4328 }
ebd8d4e8 4329
ab78acc6
IC
4330 return output
4331 }
ebd8d4e8 4332
ab78acc6
IC
4333 exports.toByteArray = b64ToByteArray
4334 exports.fromByteArray = uint8ToBase64
4335}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4336
ab78acc6
IC
4337},{}],9:[function(require,module,exports){
4338exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4339 var e, m
4340 var eLen = nBytes * 8 - mLen - 1
4341 var eMax = (1 << eLen) - 1
4342 var eBias = eMax >> 1
4343 var nBits = -7
4344 var i = isLE ? (nBytes - 1) : 0
4345 var d = isLE ? -1 : 1
4346 var s = buffer[offset + i]
4347
4348 i += d
4349
4350 e = s & ((1 << (-nBits)) - 1)
4351 s >>= (-nBits)
4352 nBits += eLen
4353 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4354
4355 m = e & ((1 << (-nBits)) - 1)
4356 e >>= (-nBits)
4357 nBits += mLen
4358 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4359
ab78acc6
IC
4360 if (e === 0) {
4361 e = 1 - eBias
4362 } else if (e === eMax) {
4363 return m ? NaN : ((s ? -1 : 1) * Infinity)
4364 } else {
4365 m = m + Math.pow(2, mLen)
4366 e = e - eBias
ebd8d4e8 4367 }
ab78acc6 4368 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4369}
4370
ab78acc6
IC
4371exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4372 var e, m, c
4373 var eLen = nBytes * 8 - mLen - 1
4374 var eMax = (1 << eLen) - 1
4375 var eBias = eMax >> 1
4376 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4377 var i = isLE ? 0 : (nBytes - 1)
4378 var d = isLE ? 1 : -1
4379 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4380
ab78acc6 4381 value = Math.abs(value)
ebd8d4e8 4382
ab78acc6
IC
4383 if (isNaN(value) || value === Infinity) {
4384 m = isNaN(value) ? 1 : 0
4385 e = eMax
4386 } else {
4387 e = Math.floor(Math.log(value) / Math.LN2)
4388 if (value * (c = Math.pow(2, -e)) < 1) {
4389 e--
4390 c *= 2
ebd8d4e8 4391 }
ab78acc6
IC
4392 if (e + eBias >= 1) {
4393 value += rt / c
4394 } else {
4395 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4396 }
ab78acc6
IC
4397 if (value * c >= 2) {
4398 e++
4399 c /= 2
ebd8d4e8 4400 }
ab78acc6
IC
4401
4402 if (e + eBias >= eMax) {
4403 m = 0
4404 e = eMax
4405 } else if (e + eBias >= 1) {
4406 m = (value * c - 1) * Math.pow(2, mLen)
4407 e = e + eBias
4408 } else {
4409 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4410 e = 0
ebd8d4e8
IC
4411 }
4412 }
ebd8d4e8 4413
ab78acc6 4414 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4415
ab78acc6
IC
4416 e = (e << mLen) | m
4417 eLen += mLen
4418 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4419
ab78acc6
IC
4420 buffer[offset + i - d] |= s * 128
4421}
ebd8d4e8 4422
ab78acc6 4423},{}],10:[function(require,module,exports){
ebd8d4e8 4424
ab78acc6
IC
4425/**
4426 * isArray
4427 */
ebd8d4e8 4428
ab78acc6 4429var isArray = Array.isArray;
ebd8d4e8
IC
4430
4431/**
ab78acc6 4432 * toString
ebd8d4e8 4433 */
ebd8d4e8 4434
ab78acc6 4435var str = Object.prototype.toString;
ebd8d4e8
IC
4436
4437/**
ab78acc6
IC
4438 * Whether or not the given `val`
4439 * is an array.
ebd8d4e8 4440 *
ab78acc6
IC
4441 * example:
4442 *
4443 * isArray([]);
4444 * // > true
4445 * isArray(arguments);
4446 * // > false
4447 * isArray('');
4448 * // > false
4449 *
4450 * @param {mixed} val
4451 * @return {bool}
ebd8d4e8 4452 */
ebd8d4e8 4453
ab78acc6
IC
4454module.exports = isArray || function (val) {
4455 return !! val && '[object Array]' == str.call(val);
4456};
4457
4458},{}],11:[function(require,module,exports){
4459// Copyright Joyent, Inc. and other Node contributors.
4460//
4461// Permission is hereby granted, free of charge, to any person obtaining a
4462// copy of this software and associated documentation files (the
4463// "Software"), to deal in the Software without restriction, including
4464// without limitation the rights to use, copy, modify, merge, publish,
4465// distribute, sublicense, and/or sell copies of the Software, and to permit
4466// persons to whom the Software is furnished to do so, subject to the
4467// following conditions:
4468//
4469// The above copyright notice and this permission notice shall be included
4470// in all copies or substantial portions of the Software.
4471//
4472// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4473// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4474// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4475// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4476// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4477// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4478// USE OR OTHER DEALINGS IN THE SOFTWARE.
4479
4480function EventEmitter() {
4481 this._events = this._events || {};
4482 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4483}
ab78acc6 4484module.exports = EventEmitter;
ebd8d4e8 4485
ab78acc6
IC
4486// Backwards-compat with node 0.10.x
4487EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4488
ab78acc6
IC
4489EventEmitter.prototype._events = undefined;
4490EventEmitter.prototype._maxListeners = undefined;
4491
4492// By default EventEmitters will print a warning if more than 10 listeners are
4493// added to it. This is a useful default which helps finding memory leaks.
4494EventEmitter.defaultMaxListeners = 10;
4495
4496// Obviously not all Emitters should be limited to 10. This function allows
4497// that to be increased. Set to zero for unlimited.
4498EventEmitter.prototype.setMaxListeners = function(n) {
4499 if (!isNumber(n) || n < 0 || isNaN(n))
4500 throw TypeError('n must be a positive number');
4501 this._maxListeners = n;
4502 return this;
4503};
4504
4505EventEmitter.prototype.emit = function(type) {
4506 var er, handler, len, args, i, listeners;
4507
4508 if (!this._events)
4509 this._events = {};
4510
4511 // If there is no 'error' event listener then throw.
4512 if (type === 'error') {
4513 if (!this._events.error ||
4514 (isObject(this._events.error) && !this._events.error.length)) {
4515 er = arguments[1];
4516 if (er instanceof Error) {
4517 throw er; // Unhandled 'error' event
4518 }
4519 throw TypeError('Uncaught, unspecified "error" event.');
4520 }
4521 }
4522
4523 handler = this._events[type];
4524
4525 if (isUndefined(handler))
4526 return false;
4527
4528 if (isFunction(handler)) {
4529 switch (arguments.length) {
4530 // fast cases
4531 case 1:
4532 handler.call(this);
4533 break;
4534 case 2:
4535 handler.call(this, arguments[1]);
4536 break;
4537 case 3:
4538 handler.call(this, arguments[1], arguments[2]);
4539 break;
4540 // slower
4541 default:
4542 len = arguments.length;
4543 args = new Array(len - 1);
4544 for (i = 1; i < len; i++)
4545 args[i - 1] = arguments[i];
4546 handler.apply(this, args);
4547 }
4548 } else if (isObject(handler)) {
4549 len = arguments.length;
4550 args = new Array(len - 1);
4551 for (i = 1; i < len; i++)
4552 args[i - 1] = arguments[i];
ebd8d4e8 4553
ab78acc6
IC
4554 listeners = handler.slice();
4555 len = listeners.length;
4556 for (i = 0; i < len; i++)
4557 listeners[i].apply(this, args);
ebd8d4e8
IC
4558 }
4559
ab78acc6
IC
4560 return true;
4561};
ebd8d4e8 4562
ab78acc6
IC
4563EventEmitter.prototype.addListener = function(type, listener) {
4564 var m;
ebd8d4e8 4565
ab78acc6
IC
4566 if (!isFunction(listener))
4567 throw TypeError('listener must be a function');
ebd8d4e8 4568
ab78acc6
IC
4569 if (!this._events)
4570 this._events = {};
ebd8d4e8 4571
ab78acc6
IC
4572 // To avoid recursion in the case that type === "newListener"! Before
4573 // adding it to the listeners, first emit "newListener".
4574 if (this._events.newListener)
4575 this.emit('newListener', type,
4576 isFunction(listener.listener) ?
4577 listener.listener : listener);
ebd8d4e8 4578
ab78acc6
IC
4579 if (!this._events[type])
4580 // Optimize the case of one listener. Don't need the extra array object.
4581 this._events[type] = listener;
4582 else if (isObject(this._events[type]))
4583 // If we've already got an array, just append.
4584 this._events[type].push(listener);
4585 else
4586 // Adding the second element, need to change to array.
4587 this._events[type] = [this._events[type], listener];
4588
4589 // Check for listener leak
4590 if (isObject(this._events[type]) && !this._events[type].warned) {
4591 var m;
4592 if (!isUndefined(this._maxListeners)) {
4593 m = this._maxListeners;
4594 } else {
4595 m = EventEmitter.defaultMaxListeners;
4596 }
4597
4598 if (m && m > 0 && this._events[type].length > m) {
4599 this._events[type].warned = true;
4600 console.error('(node) warning: possible EventEmitter memory ' +
4601 'leak detected. %d listeners added. ' +
4602 'Use emitter.setMaxListeners() to increase limit.',
4603 this._events[type].length);
4604 if (typeof console.trace === 'function') {
4605 // not supported in IE 10
4606 console.trace();
4607 }
4608 }
4609 }
ebd8d4e8 4610
ab78acc6
IC
4611 return this;
4612};
ebd8d4e8 4613
ab78acc6 4614EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4615
ab78acc6
IC
4616EventEmitter.prototype.once = function(type, listener) {
4617 if (!isFunction(listener))
4618 throw TypeError('listener must be a function');
ebd8d4e8 4619
ab78acc6 4620 var fired = false;
ebd8d4e8 4621
ab78acc6
IC
4622 function g() {
4623 this.removeListener(type, g);
ebd8d4e8 4624
ab78acc6
IC
4625 if (!fired) {
4626 fired = true;
4627 listener.apply(this, arguments);
4628 }
4629 }
ebd8d4e8 4630
ab78acc6
IC
4631 g.listener = listener;
4632 this.on(type, g);
ebd8d4e8 4633
ab78acc6
IC
4634 return this;
4635};
ebd8d4e8 4636
ab78acc6
IC
4637// emits a 'removeListener' event iff the listener was removed
4638EventEmitter.prototype.removeListener = function(type, listener) {
4639 var list, position, length, i;
ebd8d4e8 4640
ab78acc6
IC
4641 if (!isFunction(listener))
4642 throw TypeError('listener must be a function');
ebd8d4e8 4643
ab78acc6
IC
4644 if (!this._events || !this._events[type])
4645 return this;
ebd8d4e8 4646
ab78acc6
IC
4647 list = this._events[type];
4648 length = list.length;
4649 position = -1;
4650
4651 if (list === listener ||
4652 (isFunction(list.listener) && list.listener === listener)) {
4653 delete this._events[type];
4654 if (this._events.removeListener)
4655 this.emit('removeListener', type, listener);
4656
4657 } else if (isObject(list)) {
4658 for (i = length; i-- > 0;) {
4659 if (list[i] === listener ||
4660 (list[i].listener && list[i].listener === listener)) {
4661 position = i;
4662 break;
ebd8d4e8 4663 }
ab78acc6 4664 }
ebd8d4e8 4665
ab78acc6
IC
4666 if (position < 0)
4667 return this;
4668
4669 if (list.length === 1) {
4670 list.length = 0;
4671 delete this._events[type];
4672 } else {
4673 list.splice(position, 1);
ebd8d4e8 4674 }
ab78acc6
IC
4675
4676 if (this._events.removeListener)
4677 this.emit('removeListener', type, listener);
ebd8d4e8 4678 }
ab78acc6
IC
4679
4680 return this;
ebd8d4e8
IC
4681};
4682
ab78acc6
IC
4683EventEmitter.prototype.removeAllListeners = function(type) {
4684 var key, listeners;
ebd8d4e8 4685
ab78acc6
IC
4686 if (!this._events)
4687 return this;
4688
4689 // not listening for removeListener, no need to emit
4690 if (!this._events.removeListener) {
4691 if (arguments.length === 0)
4692 this._events = {};
4693 else if (this._events[type])
4694 delete this._events[type];
4695 return this;
ebd8d4e8 4696 }
ab78acc6
IC
4697
4698 // emit removeListener for all listeners on all events
4699 if (arguments.length === 0) {
4700 for (key in this._events) {
4701 if (key === 'removeListener') continue;
4702 this.removeAllListeners(key);
4703 }
4704 this.removeAllListeners('removeListener');
4705 this._events = {};
4706 return this;
ebd8d4e8 4707 }
ebd8d4e8 4708
ab78acc6
IC
4709 listeners = this._events[type];
4710
4711 if (isFunction(listeners)) {
4712 this.removeListener(type, listeners);
ebd8d4e8 4713 } else {
ab78acc6
IC
4714 // LIFO order
4715 while (listeners.length)
4716 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4717 }
ab78acc6 4718 delete this._events[type];
ebd8d4e8 4719
ab78acc6
IC
4720 return this;
4721};
ebd8d4e8 4722
ab78acc6
IC
4723EventEmitter.prototype.listeners = function(type) {
4724 var ret;
4725 if (!this._events || !this._events[type])
4726 ret = [];
4727 else if (isFunction(this._events[type]))
4728 ret = [this._events[type]];
4729 else
4730 ret = this._events[type].slice();
4731 return ret;
4732};
ebd8d4e8 4733
ab78acc6
IC
4734EventEmitter.listenerCount = function(emitter, type) {
4735 var ret;
4736 if (!emitter._events || !emitter._events[type])
4737 ret = 0;
4738 else if (isFunction(emitter._events[type]))
4739 ret = 1;
4740 else
4741 ret = emitter._events[type].length;
4742 return ret;
4743};
ebd8d4e8 4744
ab78acc6
IC
4745function isFunction(arg) {
4746 return typeof arg === 'function';
ebd8d4e8
IC
4747}
4748
ab78acc6
IC
4749function isNumber(arg) {
4750 return typeof arg === 'number';
4751}
ebd8d4e8 4752
ab78acc6
IC
4753function isObject(arg) {
4754 return typeof arg === 'object' && arg !== null;
4755}
ebd8d4e8 4756
ab78acc6
IC
4757function isUndefined(arg) {
4758 return arg === void 0;
ebd8d4e8 4759}
ebd8d4e8 4760
ab78acc6
IC
4761},{}],12:[function(require,module,exports){
4762if (typeof Object.create === 'function') {
4763 // implementation from standard node.js 'util' module
4764 module.exports = function inherits(ctor, superCtor) {
4765 ctor.super_ = superCtor
4766 ctor.prototype = Object.create(superCtor.prototype, {
4767 constructor: {
4768 value: ctor,
4769 enumerable: false,
4770 writable: true,
4771 configurable: true
4772 }
4773 });
4774 };
4775} else {
4776 // old school shim for old browsers
4777 module.exports = function inherits(ctor, superCtor) {
4778 ctor.super_ = superCtor
4779 var TempCtor = function () {}
4780 TempCtor.prototype = superCtor.prototype
4781 ctor.prototype = new TempCtor()
4782 ctor.prototype.constructor = ctor
4783 }
4784}
ebd8d4e8 4785
ab78acc6
IC
4786},{}],13:[function(require,module,exports){
4787module.exports = Array.isArray || function (arr) {
4788 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4789};
4790
ab78acc6
IC
4791},{}],14:[function(require,module,exports){
4792// shim for using process in browser
ebd8d4e8 4793
ab78acc6
IC
4794var process = module.exports = {};
4795var queue = [];
4796var draining = false;
4797var currentQueue;
4798var queueIndex = -1;
4799
4800function cleanUpNextTick() {
4801 draining = false;
4802 if (currentQueue.length) {
4803 queue = currentQueue.concat(queue);
4804 } else {
4805 queueIndex = -1;
4806 }
4807 if (queue.length) {
4808 drainQueue();
4809 }
4810}
ebd8d4e8 4811
ab78acc6
IC
4812function drainQueue() {
4813 if (draining) {
4814 return;
4815 }
4816 var timeout = setTimeout(cleanUpNextTick);
4817 draining = true;
ebd8d4e8 4818
ab78acc6
IC
4819 var len = queue.length;
4820 while(len) {
4821 currentQueue = queue;
4822 queue = [];
4823 while (++queueIndex < len) {
4824 currentQueue[queueIndex].run();
4825 }
4826 queueIndex = -1;
4827 len = queue.length;
4828 }
4829 currentQueue = null;
4830 draining = false;
4831 clearTimeout(timeout);
4832}
4833
4834process.nextTick = function (fun) {
4835 var args = new Array(arguments.length - 1);
4836 if (arguments.length > 1) {
4837 for (var i = 1; i < arguments.length; i++) {
4838 args[i - 1] = arguments[i];
4839 }
4840 }
4841 queue.push(new Item(fun, args));
4842 if (queue.length === 1 && !draining) {
4843 setTimeout(drainQueue, 0);
4844 }
ebd8d4e8
IC
4845};
4846
ab78acc6
IC
4847// v8 likes predictible objects
4848function Item(fun, array) {
4849 this.fun = fun;
4850 this.array = array;
4851}
4852Item.prototype.run = function () {
4853 this.fun.apply(null, this.array);
4854};
4855process.title = 'browser';
4856process.browser = true;
4857process.env = {};
4858process.argv = [];
4859process.version = ''; // empty string to avoid regexp issues
4860process.versions = {};
ebd8d4e8 4861
ab78acc6
IC
4862function noop() {}
4863
4864process.on = noop;
4865process.addListener = noop;
4866process.once = noop;
4867process.off = noop;
4868process.removeListener = noop;
4869process.removeAllListeners = noop;
4870process.emit = noop;
4871
4872process.binding = function (name) {
4873 throw new Error('process.binding is not supported');
4874};
ebd8d4e8 4875
ab78acc6
IC
4876// TODO(shtylman)
4877process.cwd = function () { return '/' };
4878process.chdir = function (dir) {
4879 throw new Error('process.chdir is not supported');
4880};
4881process.umask = function() { return 0; };
ebd8d4e8 4882
ab78acc6
IC
4883},{}],15:[function(require,module,exports){
4884module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4885
ab78acc6
IC
4886},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4887(function (process){
4888// Copyright Joyent, Inc. and other Node contributors.
4889//
4890// Permission is hereby granted, free of charge, to any person obtaining a
4891// copy of this software and associated documentation files (the
4892// "Software"), to deal in the Software without restriction, including
4893// without limitation the rights to use, copy, modify, merge, publish,
4894// distribute, sublicense, and/or sell copies of the Software, and to permit
4895// persons to whom the Software is furnished to do so, subject to the
4896// following conditions:
4897//
4898// The above copyright notice and this permission notice shall be included
4899// in all copies or substantial portions of the Software.
4900//
4901// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4902// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4903// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4904// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4905// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4906// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4907// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4908
ab78acc6
IC
4909// a duplex stream is just a stream that is both readable and writable.
4910// Since JS doesn't have multiple prototypal inheritance, this class
4911// prototypally inherits from Readable, and then parasitically from
4912// Writable.
ebd8d4e8 4913
ab78acc6 4914module.exports = Duplex;
ebd8d4e8 4915
ab78acc6
IC
4916/*<replacement>*/
4917var objectKeys = Object.keys || function (obj) {
4918 var keys = [];
4919 for (var key in obj) keys.push(key);
4920 return keys;
ebd8d4e8 4921}
ab78acc6 4922/*</replacement>*/
ebd8d4e8 4923
ebd8d4e8 4924
ab78acc6
IC
4925/*<replacement>*/
4926var util = require('core-util-is');
4927util.inherits = require('inherits');
4928/*</replacement>*/
ebd8d4e8 4929
ab78acc6
IC
4930var Readable = require('./_stream_readable');
4931var Writable = require('./_stream_writable');
ebd8d4e8 4932
ab78acc6 4933util.inherits(Duplex, Readable);
ebd8d4e8 4934
ab78acc6
IC
4935forEach(objectKeys(Writable.prototype), function(method) {
4936 if (!Duplex.prototype[method])
4937 Duplex.prototype[method] = Writable.prototype[method];
4938});
ebd8d4e8 4939
ab78acc6
IC
4940function Duplex(options) {
4941 if (!(this instanceof Duplex))
4942 return new Duplex(options);
ebd8d4e8 4943
ab78acc6
IC
4944 Readable.call(this, options);
4945 Writable.call(this, options);
ebd8d4e8 4946
ab78acc6
IC
4947 if (options && options.readable === false)
4948 this.readable = false;
ebd8d4e8 4949
ab78acc6
IC
4950 if (options && options.writable === false)
4951 this.writable = false;
ebd8d4e8 4952
ab78acc6
IC
4953 this.allowHalfOpen = true;
4954 if (options && options.allowHalfOpen === false)
4955 this.allowHalfOpen = false;
ebd8d4e8 4956
ab78acc6 4957 this.once('end', onend);
ebd8d4e8
IC
4958}
4959
ab78acc6
IC
4960// the no-half-open enforcer
4961function onend() {
4962 // if we allow half-open state, or if the writable side ended,
4963 // then we're ok.
4964 if (this.allowHalfOpen || this._writableState.ended)
4965 return;
ebd8d4e8 4966
ab78acc6
IC
4967 // no more data can be written.
4968 // But allow more writes to happen in this tick.
4969 process.nextTick(this.end.bind(this));
4970}
ebd8d4e8 4971
ab78acc6
IC
4972function forEach (xs, f) {
4973 for (var i = 0, l = xs.length; i < l; i++) {
4974 f(xs[i], i);
ebd8d4e8 4975 }
ab78acc6 4976}
ebd8d4e8 4977
ab78acc6
IC
4978}).call(this,require('_process'))
4979},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4980// Copyright Joyent, Inc. and other Node contributors.
4981//
4982// Permission is hereby granted, free of charge, to any person obtaining a
4983// copy of this software and associated documentation files (the
4984// "Software"), to deal in the Software without restriction, including
4985// without limitation the rights to use, copy, modify, merge, publish,
4986// distribute, sublicense, and/or sell copies of the Software, and to permit
4987// persons to whom the Software is furnished to do so, subject to the
4988// following conditions:
4989//
4990// The above copyright notice and this permission notice shall be included
4991// in all copies or substantial portions of the Software.
4992//
4993// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4994// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4995// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4996// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4997// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4998// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4999// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5000
ab78acc6
IC
5001// a passthrough stream.
5002// basically just the most minimal sort of Transform stream.
5003// Every written chunk gets output as-is.
ebd8d4e8 5004
ab78acc6 5005module.exports = PassThrough;
ebd8d4e8 5006
ab78acc6 5007var Transform = require('./_stream_transform');
ebd8d4e8 5008
ab78acc6
IC
5009/*<replacement>*/
5010var util = require('core-util-is');
5011util.inherits = require('inherits');
5012/*</replacement>*/
ebd8d4e8 5013
ab78acc6 5014util.inherits(PassThrough, Transform);
ebd8d4e8 5015
ab78acc6
IC
5016function PassThrough(options) {
5017 if (!(this instanceof PassThrough))
5018 return new PassThrough(options);
ebd8d4e8 5019
ab78acc6
IC
5020 Transform.call(this, options);
5021}
ebd8d4e8 5022
ab78acc6
IC
5023PassThrough.prototype._transform = function(chunk, encoding, cb) {
5024 cb(null, chunk);
ebd8d4e8
IC
5025};
5026
ab78acc6
IC
5027},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5028(function (process){
ebd8d4e8
IC
5029// Copyright Joyent, Inc. and other Node contributors.
5030//
5031// Permission is hereby granted, free of charge, to any person obtaining a
5032// copy of this software and associated documentation files (the
5033// "Software"), to deal in the Software without restriction, including
5034// without limitation the rights to use, copy, modify, merge, publish,
5035// distribute, sublicense, and/or sell copies of the Software, and to permit
5036// persons to whom the Software is furnished to do so, subject to the
5037// following conditions:
5038//
5039// The above copyright notice and this permission notice shall be included
5040// in all copies or substantial portions of the Software.
5041//
5042// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5043// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5044// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5045// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5046// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5047// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5048// USE OR OTHER DEALINGS IN THE SOFTWARE.
5049
ab78acc6 5050module.exports = Readable;
ebd8d4e8 5051
ab78acc6
IC
5052/*<replacement>*/
5053var isArray = require('isarray');
5054/*</replacement>*/
5055
5056
5057/*<replacement>*/
5058var Buffer = require('buffer').Buffer;
5059/*</replacement>*/
5060
5061Readable.ReadableState = ReadableState;
5062
5063var EE = require('events').EventEmitter;
5064
5065/*<replacement>*/
5066if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5067 return emitter.listeners(type).length;
ebd8d4e8 5068};
ab78acc6
IC
5069/*</replacement>*/
5070
5071var Stream = require('stream');
5072
5073/*<replacement>*/
5074var util = require('core-util-is');
5075util.inherits = require('inherits');
5076/*</replacement>*/
5077
5078var StringDecoder;
5079
5080
5081/*<replacement>*/
5082var debug = require('util');
5083if (debug && debug.debuglog) {
5084 debug = debug.debuglog('stream');
5085} else {
5086 debug = function () {};
5087}
5088/*</replacement>*/
5089
5090
5091util.inherits(Readable, Stream);
5092
5093function ReadableState(options, stream) {
5094 var Duplex = require('./_stream_duplex');
5095
5096 options = options || {};
5097
5098 // the point at which it stops calling _read() to fill the buffer
5099 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5100 var hwm = options.highWaterMark;
5101 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5102 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5103
5104 // cast to ints.
5105 this.highWaterMark = ~~this.highWaterMark;
5106
5107 this.buffer = [];
5108 this.length = 0;
5109 this.pipes = null;
5110 this.pipesCount = 0;
5111 this.flowing = null;
5112 this.ended = false;
5113 this.endEmitted = false;
5114 this.reading = false;
ebd8d4e8 5115
ab78acc6
IC
5116 // a flag to be able to tell if the onwrite cb is called immediately,
5117 // or on a later tick. We set this to true at first, because any
5118 // actions that shouldn't happen until "later" should generally also
5119 // not happen before the first write call.
5120 this.sync = true;
ebd8d4e8 5121
ab78acc6
IC
5122 // whenever we return null, then we set a flag to say
5123 // that we're awaiting a 'readable' event emission.
5124 this.needReadable = false;
5125 this.emittedReadable = false;
5126 this.readableListening = false;
ebd8d4e8 5127
ab78acc6
IC
5128
5129 // object stream flag. Used to make read(n) ignore n and to
5130 // make all the buffer merging and length checks go away
5131 this.objectMode = !!options.objectMode;
5132
5133 if (stream instanceof Duplex)
5134 this.objectMode = this.objectMode || !!options.readableObjectMode;
5135
5136 // Crypto is kind of old and crusty. Historically, its default string
5137 // encoding is 'binary' so we have to make this configurable.
5138 // Everything else in the universe uses 'utf8', though.
5139 this.defaultEncoding = options.defaultEncoding || 'utf8';
5140
5141 // when piping, we only care about 'readable' events that happen
5142 // after read()ing all the bytes and not getting any pushback.
5143 this.ranOut = false;
5144
5145 // the number of writers that are awaiting a drain event in .pipe()s
5146 this.awaitDrain = 0;
5147
5148 // if true, a maybeReadMore has been scheduled
5149 this.readingMore = false;
5150
5151 this.decoder = null;
5152 this.encoding = null;
5153 if (options.encoding) {
5154 if (!StringDecoder)
5155 StringDecoder = require('string_decoder/').StringDecoder;
5156 this.decoder = new StringDecoder(options.encoding);
5157 this.encoding = options.encoding;
ebd8d4e8 5158 }
ab78acc6 5159}
ebd8d4e8 5160
ab78acc6
IC
5161function Readable(options) {
5162 var Duplex = require('./_stream_duplex');
5163
5164 if (!(this instanceof Readable))
5165 return new Readable(options);
5166
5167 this._readableState = new ReadableState(options, this);
5168
5169 // legacy
5170 this.readable = true;
5171
5172 Stream.call(this);
5173}
5174
5175// Manually shove something into the read() buffer.
5176// This returns true if the highWaterMark has not been hit yet,
5177// similar to how Writable.write() returns true if you should
5178// write() some more.
5179Readable.prototype.push = function(chunk, encoding) {
5180 var state = this._readableState;
5181
5182 if (util.isString(chunk) && !state.objectMode) {
5183 encoding = encoding || state.defaultEncoding;
5184 if (encoding !== state.encoding) {
5185 chunk = new Buffer(chunk, encoding);
5186 encoding = '';
ebd8d4e8 5187 }
ebd8d4e8
IC
5188 }
5189
ab78acc6 5190 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5191};
5192
ab78acc6
IC
5193// Unshift should *always* be something directly out of read()
5194Readable.prototype.unshift = function(chunk) {
5195 var state = this._readableState;
5196 return readableAddChunk(this, state, chunk, '', true);
5197};
ebd8d4e8 5198
ab78acc6
IC
5199function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5200 var er = chunkInvalid(state, chunk);
5201 if (er) {
5202 stream.emit('error', er);
5203 } else if (util.isNullOrUndefined(chunk)) {
5204 state.reading = false;
5205 if (!state.ended)
5206 onEofChunk(stream, state);
5207 } else if (state.objectMode || chunk && chunk.length > 0) {
5208 if (state.ended && !addToFront) {
5209 var e = new Error('stream.push() after EOF');
5210 stream.emit('error', e);
5211 } else if (state.endEmitted && addToFront) {
5212 var e = new Error('stream.unshift() after end event');
5213 stream.emit('error', e);
ebd8d4e8 5214 } else {
ab78acc6
IC
5215 if (state.decoder && !addToFront && !encoding)
5216 chunk = state.decoder.write(chunk);
5217
5218 if (!addToFront)
5219 state.reading = false;
5220
5221 // if we want the data now, just emit it.
5222 if (state.flowing && state.length === 0 && !state.sync) {
5223 stream.emit('data', chunk);
5224 stream.read(0);
5225 } else {
5226 // update the buffer info.
5227 state.length += state.objectMode ? 1 : chunk.length;
5228 if (addToFront)
5229 state.buffer.unshift(chunk);
5230 else
5231 state.buffer.push(chunk);
5232
5233 if (state.needReadable)
5234 emitReadable(stream);
5235 }
5236
5237 maybeReadMore(stream, state);
ebd8d4e8 5238 }
ab78acc6
IC
5239 } else if (!addToFront) {
5240 state.reading = false;
ebd8d4e8 5241 }
ebd8d4e8 5242
ab78acc6
IC
5243 return needMoreData(state);
5244}
ebd8d4e8 5245
ab78acc6
IC
5246
5247
5248// if it's past the high water mark, we can push in some more.
5249// Also, if we have no data yet, we can stand some
5250// more bytes. This is to work around cases where hwm=0,
5251// such as the repl. Also, if the push() triggered a
5252// readable event, and the user called read(largeNumber) such that
5253// needReadable was set, then we ought to push more, so that another
5254// 'readable' event will be triggered.
5255function needMoreData(state) {
5256 return !state.ended &&
5257 (state.needReadable ||
5258 state.length < state.highWaterMark ||
5259 state.length === 0);
5260}
5261
5262// backwards compatibility.
5263Readable.prototype.setEncoding = function(enc) {
5264 if (!StringDecoder)
5265 StringDecoder = require('string_decoder/').StringDecoder;
5266 this._readableState.decoder = new StringDecoder(enc);
5267 this._readableState.encoding = enc;
5268 return this;
5269};
5270
5271// Don't raise the hwm > 128MB
5272var MAX_HWM = 0x800000;
5273function roundUpToNextPowerOf2(n) {
5274 if (n >= MAX_HWM) {
5275 n = MAX_HWM;
5276 } else {
5277 // Get the next highest power of 2
5278 n--;
5279 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5280 n++;
ebd8d4e8 5281 }
ab78acc6 5282 return n;
ebd8d4e8 5283}
ebd8d4e8 5284
ab78acc6
IC
5285function howMuchToRead(n, state) {
5286 if (state.length === 0 && state.ended)
5287 return 0;
ebd8d4e8 5288
ab78acc6
IC
5289 if (state.objectMode)
5290 return n === 0 ? 0 : 1;
ebd8d4e8 5291
ab78acc6
IC
5292 if (isNaN(n) || util.isNull(n)) {
5293 // only flow one buffer at a time
5294 if (state.flowing && state.buffer.length)
5295 return state.buffer[0].length;
5296 else
5297 return state.length;
5298 }
ebd8d4e8 5299
ab78acc6
IC
5300 if (n <= 0)
5301 return 0;
ebd8d4e8 5302
ab78acc6
IC
5303 // If we're asking for more than the target buffer level,
5304 // then raise the water mark. Bump up to the next highest
5305 // power of 2, to prevent increasing it excessively in tiny
5306 // amounts.
5307 if (n > state.highWaterMark)
5308 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5309
ab78acc6
IC
5310 // don't have that much. return null, unless we've ended.
5311 if (n > state.length) {
5312 if (!state.ended) {
5313 state.needReadable = true;
5314 return 0;
5315 } else
5316 return state.length;
ebd8d4e8 5317 }
ab78acc6
IC
5318
5319 return n;
ebd8d4e8
IC
5320}
5321
ab78acc6
IC
5322// you can override either this method, or the async _read(n) below.
5323Readable.prototype.read = function(n) {
5324 debug('read', n);
5325 var state = this._readableState;
5326 var nOrig = n;
ebd8d4e8 5327
ab78acc6
IC
5328 if (!util.isNumber(n) || n > 0)
5329 state.emittedReadable = false;
5330
5331 // if we're doing read(0) to trigger a readable event, but we
5332 // already have a bunch of data in the buffer, then just trigger
5333 // the 'readable' event and move on.
5334 if (n === 0 &&
5335 state.needReadable &&
5336 (state.length >= state.highWaterMark || state.ended)) {
5337 debug('read: emitReadable', state.length, state.ended);
5338 if (state.length === 0 && state.ended)
5339 endReadable(this);
5340 else
5341 emitReadable(this);
5342 return null;
5343 }
5344
5345 n = howMuchToRead(n, state);
5346
5347 // if we've ended, and we're now clear, then finish it up.
5348 if (n === 0 && state.ended) {
5349 if (state.length === 0)
5350 endReadable(this);
5351 return null;
5352 }
5353
5354 // All the actual chunk generation logic needs to be
5355 // *below* the call to _read. The reason is that in certain
5356 // synthetic stream cases, such as passthrough streams, _read
5357 // may be a completely synchronous operation which may change
5358 // the state of the read buffer, providing enough data when
5359 // before there was *not* enough.
5360 //
5361 // So, the steps are:
5362 // 1. Figure out what the state of things will be after we do
5363 // a read from the buffer.
5364 //
5365 // 2. If that resulting state will trigger a _read, then call _read.
5366 // Note that this may be asynchronous, or synchronous. Yes, it is
5367 // deeply ugly to write APIs this way, but that still doesn't mean
5368 // that the Readable class should behave improperly, as streams are
5369 // designed to be sync/async agnostic.
5370 // Take note if the _read call is sync or async (ie, if the read call
5371 // has returned yet), so that we know whether or not it's safe to emit
5372 // 'readable' etc.
5373 //
5374 // 3. Actually pull the requested chunks out of the buffer and return.
5375
5376 // if we need a readable event, then we need to do some reading.
5377 var doRead = state.needReadable;
5378 debug('need readable', doRead);
5379
5380 // if we currently have less than the highWaterMark, then also read some
5381 if (state.length === 0 || state.length - n < state.highWaterMark) {
5382 doRead = true;
5383 debug('length less than watermark', doRead);
5384 }
5385
5386 // however, if we've ended, then there's no point, and if we're already
5387 // reading, then it's unnecessary.
5388 if (state.ended || state.reading) {
5389 doRead = false;
5390 debug('reading or ended', doRead);
5391 }
5392
5393 if (doRead) {
5394 debug('do read');
5395 state.reading = true;
5396 state.sync = true;
5397 // if the length is currently zero, then we *need* a readable event.
5398 if (state.length === 0)
5399 state.needReadable = true;
5400 // call internal read method
5401 this._read(state.highWaterMark);
5402 state.sync = false;
5403 }
5404
5405 // If _read pushed data synchronously, then `reading` will be false,
5406 // and we need to re-evaluate how much data we can return to the user.
5407 if (doRead && !state.reading)
5408 n = howMuchToRead(nOrig, state);
5409
5410 var ret;
5411 if (n > 0)
5412 ret = fromList(n, state);
5413 else
5414 ret = null;
ebd8d4e8 5415
ab78acc6
IC
5416 if (util.isNull(ret)) {
5417 state.needReadable = true;
5418 n = 0;
5419 }
ebd8d4e8 5420
ab78acc6 5421 state.length -= n;
ebd8d4e8 5422
ab78acc6
IC
5423 // If we have nothing in the buffer, then we want to know
5424 // as soon as we *do* get something into the buffer.
5425 if (state.length === 0 && !state.ended)
5426 state.needReadable = true;
ebd8d4e8 5427
ab78acc6
IC
5428 // If we tried to read() past the EOF, then emit end on the next tick.
5429 if (nOrig !== n && state.ended && state.length === 0)
5430 endReadable(this);
5431
5432 if (!util.isNull(ret))
5433 this.emit('data', ret);
5434
5435 return ret;
5436};
5437
5438function chunkInvalid(state, chunk) {
5439 var er = null;
5440 if (!util.isBuffer(chunk) &&
5441 !util.isString(chunk) &&
5442 !util.isNullOrUndefined(chunk) &&
5443 !state.objectMode) {
5444 er = new TypeError('Invalid non-string/buffer chunk');
5445 }
5446 return er;
ebd8d4e8
IC
5447}
5448
5449
ab78acc6
IC
5450function onEofChunk(stream, state) {
5451 if (state.decoder && !state.ended) {
5452 var chunk = state.decoder.end();
5453 if (chunk && chunk.length) {
5454 state.buffer.push(chunk);
5455 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5456 }
ebd8d4e8 5457 }
ab78acc6 5458 state.ended = true;
ebd8d4e8 5459
ab78acc6
IC
5460 // emit 'readable' now to make sure it gets picked up.
5461 emitReadable(stream);
5462}
5463
5464// Don't emit readable right away in sync mode, because this can trigger
5465// another read() call => stack overflow. This way, it might trigger
5466// a nextTick recursion warning, but that's not so bad.
5467function emitReadable(stream) {
5468 var state = stream._readableState;
5469 state.needReadable = false;
5470 if (!state.emittedReadable) {
5471 debug('emitReadable', state.flowing);
5472 state.emittedReadable = true;
5473 if (state.sync)
5474 process.nextTick(function() {
5475 emitReadable_(stream);
5476 });
5477 else
5478 emitReadable_(stream);
ebd8d4e8 5479 }
ab78acc6 5480}
ebd8d4e8 5481
ab78acc6
IC
5482function emitReadable_(stream) {
5483 debug('emit readable');
5484 stream.emit('readable');
5485 flow(stream);
5486}
ebd8d4e8 5487
ab78acc6
IC
5488
5489// at this point, the user has presumably seen the 'readable' event,
5490// and called read() to consume some data. that may have triggered
5491// in turn another _read(n) call, in which case reading = true if
5492// it's in progress.
5493// However, if we're not ended, or reading, and the length < hwm,
5494// then go ahead and try to read some more preemptively.
5495function maybeReadMore(stream, state) {
5496 if (!state.readingMore) {
5497 state.readingMore = true;
5498 process.nextTick(function() {
5499 maybeReadMore_(stream, state);
5500 });
ebd8d4e8 5501 }
ab78acc6 5502}
ebd8d4e8 5503
ab78acc6
IC
5504function maybeReadMore_(stream, state) {
5505 var len = state.length;
5506 while (!state.reading && !state.flowing && !state.ended &&
5507 state.length < state.highWaterMark) {
5508 debug('maybeReadMore read 0');
5509 stream.read(0);
5510 if (len === state.length)
5511 // didn't get any data, stop spinning.
5512 break;
5513 else
5514 len = state.length;
ebd8d4e8 5515 }
ab78acc6
IC
5516 state.readingMore = false;
5517}
ebd8d4e8 5518
ab78acc6
IC
5519// abstract method. to be overridden in specific implementation classes.
5520// call cb(er, data) where data is <= n in length.
5521// for virtual (non-string, non-buffer) streams, "length" is somewhat
5522// arbitrary, and perhaps not very meaningful.
5523Readable.prototype._read = function(n) {
5524 this.emit('error', new Error('not implemented'));
5525};
5526
5527Readable.prototype.pipe = function(dest, pipeOpts) {
5528 var src = this;
5529 var state = this._readableState;
5530
5531 switch (state.pipesCount) {
5532 case 0:
5533 state.pipes = dest;
5534 break;
5535 case 1:
5536 state.pipes = [state.pipes, dest];
5537 break;
5538 default:
5539 state.pipes.push(dest);
5540 break;
ebd8d4e8 5541 }
ab78acc6
IC
5542 state.pipesCount += 1;
5543 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5544
ab78acc6
IC
5545 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5546 dest !== process.stdout &&
5547 dest !== process.stderr;
ebd8d4e8 5548
ab78acc6
IC
5549 var endFn = doEnd ? onend : cleanup;
5550 if (state.endEmitted)
5551 process.nextTick(endFn);
5552 else
5553 src.once('end', endFn);
5554
5555 dest.on('unpipe', onunpipe);
5556 function onunpipe(readable) {
5557 debug('onunpipe');
5558 if (readable === src) {
5559 cleanup();
5560 }
5561 }
5562
5563 function onend() {
5564 debug('onend');
5565 dest.end();
5566 }
5567
5568 // when the dest drains, it reduces the awaitDrain counter
5569 // on the source. This would be more elegant with a .once()
5570 // handler in flow(), but adding and removing repeatedly is
5571 // too slow.
5572 var ondrain = pipeOnDrain(src);
5573 dest.on('drain', ondrain);
5574
5575 function cleanup() {
5576 debug('cleanup');
5577 // cleanup event handlers once the pipe is broken
5578 dest.removeListener('close', onclose);
5579 dest.removeListener('finish', onfinish);
5580 dest.removeListener('drain', ondrain);
5581 dest.removeListener('error', onerror);
5582 dest.removeListener('unpipe', onunpipe);
5583 src.removeListener('end', onend);
5584 src.removeListener('end', cleanup);
5585 src.removeListener('data', ondata);
5586
5587 // if the reader is waiting for a drain event from this
5588 // specific writer, then it would cause it to never start
5589 // flowing again.
5590 // So, if this is awaiting a drain, then we just call it now.
5591 // If we don't know, then assume that we are waiting for one.
5592 if (state.awaitDrain &&
5593 (!dest._writableState || dest._writableState.needDrain))
5594 ondrain();
5595 }
5596
5597 src.on('data', ondata);
5598 function ondata(chunk) {
5599 debug('ondata');
5600 var ret = dest.write(chunk);
5601 if (false === ret) {
5602 debug('false write response, pause',
5603 src._readableState.awaitDrain);
5604 src._readableState.awaitDrain++;
5605 src.pause();
5606 }
5607 }
5608
5609 // if the dest has an error, then stop piping into it.
5610 // however, don't suppress the throwing behavior for this.
5611 function onerror(er) {
5612 debug('onerror', er);
5613 unpipe();
5614 dest.removeListener('error', onerror);
5615 if (EE.listenerCount(dest, 'error') === 0)
5616 dest.emit('error', er);
5617 }
5618 // This is a brutally ugly hack to make sure that our error handler
5619 // is attached before any userland ones. NEVER DO THIS.
5620 if (!dest._events || !dest._events.error)
5621 dest.on('error', onerror);
5622 else if (isArray(dest._events.error))
5623 dest._events.error.unshift(onerror);
5624 else
5625 dest._events.error = [onerror, dest._events.error];
5626
5627
5628
5629 // Both close and finish should trigger unpipe, but only once.
5630 function onclose() {
5631 dest.removeListener('finish', onfinish);
5632 unpipe();
ebd8d4e8 5633 }
ab78acc6
IC
5634 dest.once('close', onclose);
5635 function onfinish() {
5636 debug('onfinish');
5637 dest.removeListener('close', onclose);
5638 unpipe();
5639 }
5640 dest.once('finish', onfinish);
ebd8d4e8 5641
ab78acc6
IC
5642 function unpipe() {
5643 debug('unpipe');
5644 src.unpipe(dest);
ebd8d4e8
IC
5645 }
5646
ab78acc6
IC
5647 // tell the dest that it's being piped to
5648 dest.emit('pipe', src);
5649
5650 // start the flow if it hasn't been started already.
5651 if (!state.flowing) {
5652 debug('pipe resume');
5653 src.resume();
ebd8d4e8
IC
5654 }
5655
ab78acc6
IC
5656 return dest;
5657};
5658
5659function pipeOnDrain(src) {
5660 return function() {
5661 var state = src._readableState;
5662 debug('pipeOnDrain', state.awaitDrain);
5663 if (state.awaitDrain)
5664 state.awaitDrain--;
5665 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5666 state.flowing = true;
5667 flow(src);
5668 }
5669 };
5670}
5671
5672
5673Readable.prototype.unpipe = function(dest) {
5674 var state = this._readableState;
5675
5676 // if we're not piping anywhere, then do nothing.
5677 if (state.pipesCount === 0)
5678 return this;
5679
5680 // just one destination. most common case.
5681 if (state.pipesCount === 1) {
5682 // passed in one, but it's not the right one.
5683 if (dest && dest !== state.pipes)
5684 return this;
5685
5686 if (!dest)
5687 dest = state.pipes;
5688
5689 // got a match.
5690 state.pipes = null;
5691 state.pipesCount = 0;
5692 state.flowing = false;
5693 if (dest)
5694 dest.emit('unpipe', this);
5695 return this;
ebd8d4e8
IC
5696 }
5697
ab78acc6
IC
5698 // slow case. multiple pipe destinations.
5699
5700 if (!dest) {
5701 // remove all.
5702 var dests = state.pipes;
5703 var len = state.pipesCount;
5704 state.pipes = null;
5705 state.pipesCount = 0;
5706 state.flowing = false;
5707
5708 for (var i = 0; i < len; i++)
5709 dests[i].emit('unpipe', this);
5710 return this;
ebd8d4e8
IC
5711 }
5712
ab78acc6
IC
5713 // try to find the right one.
5714 var i = indexOf(state.pipes, dest);
5715 if (i === -1)
5716 return this;
5717
5718 state.pipes.splice(i, 1);
5719 state.pipesCount -= 1;
5720 if (state.pipesCount === 1)
5721 state.pipes = state.pipes[0];
5722
5723 dest.emit('unpipe', this);
ebd8d4e8 5724
ab78acc6
IC
5725 return this;
5726};
5727
5728// set up data events if they are asked for
5729// Ensure readable listeners eventually get something
5730Readable.prototype.on = function(ev, fn) {
5731 var res = Stream.prototype.on.call(this, ev, fn);
5732
5733 // If listening to data, and it has not explicitly been paused,
5734 // then call resume to start the flow of data on the next tick.
5735 if (ev === 'data' && false !== this._readableState.flowing) {
5736 this.resume();
5737 }
5738
5739 if (ev === 'readable' && this.readable) {
5740 var state = this._readableState;
5741 if (!state.readableListening) {
5742 state.readableListening = true;
5743 state.emittedReadable = false;
5744 state.needReadable = true;
5745 if (!state.reading) {
5746 var self = this;
5747 process.nextTick(function() {
5748 debug('readable nexttick read 0');
5749 self.read(0);
5750 });
5751 } else if (state.length) {
5752 emitReadable(this, state);
5753 }
ebd8d4e8
IC
5754 }
5755 }
5756
ab78acc6
IC
5757 return res;
5758};
5759Readable.prototype.addListener = Readable.prototype.on;
5760
5761// pause() and resume() are remnants of the legacy readable stream API
5762// If the user uses them, then switch into old mode.
5763Readable.prototype.resume = function() {
5764 var state = this._readableState;
5765 if (!state.flowing) {
5766 debug('resume');
5767 state.flowing = true;
5768 if (!state.reading) {
5769 debug('resume read 0');
5770 this.read(0);
5771 }
5772 resume(this, state);
5773 }
5774 return this;
5775};
ebd8d4e8 5776
ab78acc6
IC
5777function resume(stream, state) {
5778 if (!state.resumeScheduled) {
5779 state.resumeScheduled = true;
5780 process.nextTick(function() {
5781 resume_(stream, state);
ebd8d4e8
IC
5782 });
5783 }
ebd8d4e8
IC
5784}
5785
ab78acc6
IC
5786function resume_(stream, state) {
5787 state.resumeScheduled = false;
5788 stream.emit('resume');
5789 flow(stream);
5790 if (state.flowing && !state.reading)
5791 stream.read(0);
ebd8d4e8
IC
5792}
5793
ab78acc6
IC
5794Readable.prototype.pause = function() {
5795 debug('call pause flowing=%j', this._readableState.flowing);
5796 if (false !== this._readableState.flowing) {
5797 debug('pause');
5798 this._readableState.flowing = false;
5799 this.emit('pause');
5800 }
5801 return this;
5802};
ebd8d4e8 5803
ab78acc6
IC
5804function flow(stream) {
5805 var state = stream._readableState;
5806 debug('flow', state.flowing);
5807 if (state.flowing) {
5808 do {
5809 var chunk = stream.read();
5810 } while (null !== chunk && state.flowing);
5811 }
ebd8d4e8
IC
5812}
5813
ab78acc6
IC
5814// wrap an old-style stream as the async data source.
5815// This is *not* part of the readable stream interface.
5816// It is an ugly unfortunate mess of history.
5817Readable.prototype.wrap = function(stream) {
5818 var state = this._readableState;
5819 var paused = false;
ebd8d4e8 5820
ab78acc6
IC
5821 var self = this;
5822 stream.on('end', function() {
5823 debug('wrapped end');
5824 if (state.decoder && !state.ended) {
5825 var chunk = state.decoder.end();
5826 if (chunk && chunk.length)
5827 self.push(chunk);
ebd8d4e8 5828 }
ab78acc6
IC
5829
5830 self.push(null);
ebd8d4e8 5831 });
ebd8d4e8 5832
ab78acc6
IC
5833 stream.on('data', function(chunk) {
5834 debug('wrapped data');
5835 if (state.decoder)
5836 chunk = state.decoder.write(chunk);
5837 if (!chunk || !state.objectMode && !chunk.length)
5838 return;
ebd8d4e8 5839
ab78acc6
IC
5840 var ret = self.push(chunk);
5841 if (!ret) {
5842 paused = true;
5843 stream.pause();
ebd8d4e8 5844 }
ab78acc6
IC
5845 });
5846
5847 // proxy all the other methods.
5848 // important when wrapping filters and duplexes.
5849 for (var i in stream) {
5850 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5851 this[i] = function(method) { return function() {
5852 return stream[method].apply(stream, arguments);
5853 }}(i);
ebd8d4e8
IC
5854 }
5855 }
ab78acc6
IC
5856
5857 // proxy certain important events.
5858 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5859 forEach(events, function(ev) {
5860 stream.on(ev, self.emit.bind(self, ev));
5861 });
5862
5863 // when we try to consume some more bytes, simply unpause the
5864 // underlying stream.
5865 self._read = function(n) {
5866 debug('wrapped _read', n);
5867 if (paused) {
5868 paused = false;
5869 stream.resume();
ebd8d4e8 5870 }
ab78acc6
IC
5871 };
5872
5873 return self;
5874};
5875
5876
5877
5878// exposed for testing purposes only.
5879Readable._fromList = fromList;
5880
5881// Pluck off n bytes from an array of buffers.
5882// Length is the combined lengths of all the buffers in the list.
5883function fromList(n, state) {
5884 var list = state.buffer;
5885 var length = state.length;
5886 var stringMode = !!state.decoder;
5887 var objectMode = !!state.objectMode;
5888 var ret;
5889
5890 // nothing in the list, definitely empty.
5891 if (list.length === 0)
5892 return null;
5893
5894 if (length === 0)
5895 ret = null;
5896 else if (objectMode)
5897 ret = list.shift();
5898 else if (!n || n >= length) {
5899 // read it all, truncate the array.
5900 if (stringMode)
5901 ret = list.join('');
5902 else
5903 ret = Buffer.concat(list, length);
5904 list.length = 0;
5905 } else {
5906 // read just some of it.
5907 if (n < list[0].length) {
5908 // just take a part of the first list item.
5909 // slice is the same for buffers and strings.
5910 var buf = list[0];
5911 ret = buf.slice(0, n);
5912 list[0] = buf.slice(n);
5913 } else if (n === list[0].length) {
5914 // first list is a perfect match
5915 ret = list.shift();
ebd8d4e8 5916 } else {
ab78acc6
IC
5917 // complex case.
5918 // we have enough to cover it, but it spans past the first buffer.
5919 if (stringMode)
5920 ret = '';
5921 else
5922 ret = new Buffer(n);
ebd8d4e8 5923
ab78acc6
IC
5924 var c = 0;
5925 for (var i = 0, l = list.length; i < l && c < n; i++) {
5926 var buf = list[0];
5927 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5928
ab78acc6
IC
5929 if (stringMode)
5930 ret += buf.slice(0, cpy);
5931 else
5932 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5933
ab78acc6
IC
5934 if (cpy < buf.length)
5935 list[0] = buf.slice(cpy);
5936 else
5937 list.shift();
ebd8d4e8 5938
ab78acc6
IC
5939 c += cpy;
5940 }
5941 }
ebd8d4e8
IC
5942 }
5943
ab78acc6 5944 return ret;
ebd8d4e8
IC
5945}
5946
ab78acc6
IC
5947function endReadable(stream) {
5948 var state = stream._readableState;
ebd8d4e8 5949
ab78acc6
IC
5950 // If we get here before consuming all the bytes, then that is a
5951 // bug in node. Should never happen.
5952 if (state.length > 0)
5953 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5954
ab78acc6
IC
5955 if (!state.endEmitted) {
5956 state.ended = true;
5957 process.nextTick(function() {
5958 // Check that we didn't get one last unshift.
5959 if (!state.endEmitted && state.length === 0) {
5960 state.endEmitted = true;
5961 stream.readable = false;
5962 stream.emit('end');
5963 }
5964 });
5965 }
ebd8d4e8 5966}
ebd8d4e8 5967
ab78acc6
IC
5968function forEach (xs, f) {
5969 for (var i = 0, l = xs.length; i < l; i++) {
5970 f(xs[i], i);
5971 }
ebd8d4e8 5972}
ebd8d4e8 5973
ab78acc6
IC
5974function indexOf (xs, x) {
5975 for (var i = 0, l = xs.length; i < l; i++) {
5976 if (xs[i] === x) return i;
5977 }
5978 return -1;
ebd8d4e8 5979}
ebd8d4e8 5980
ab78acc6
IC
5981}).call(this,require('_process'))
5982},{"./_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){
5983// Copyright Joyent, Inc. and other Node contributors.
5984//
5985// Permission is hereby granted, free of charge, to any person obtaining a
5986// copy of this software and associated documentation files (the
5987// "Software"), to deal in the Software without restriction, including
5988// without limitation the rights to use, copy, modify, merge, publish,
5989// distribute, sublicense, and/or sell copies of the Software, and to permit
5990// persons to whom the Software is furnished to do so, subject to the
5991// following conditions:
5992//
5993// The above copyright notice and this permission notice shall be included
5994// in all copies or substantial portions of the Software.
5995//
5996// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5997// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5998// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5999// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6000// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6001// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6002// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6003
ebd8d4e8 6004
ab78acc6
IC
6005// a transform stream is a readable/writable stream where you do
6006// something with the data. Sometimes it's called a "filter",
6007// but that's not a great name for it, since that implies a thing where
6008// some bits pass through, and others are simply ignored. (That would
6009// be a valid example of a transform, of course.)
6010//
6011// While the output is causally related to the input, it's not a
6012// necessarily symmetric or synchronous transformation. For example,
6013// a zlib stream might take multiple plain-text writes(), and then
6014// emit a single compressed chunk some time in the future.
6015//
6016// Here's how this works:
6017//
6018// The Transform stream has all the aspects of the readable and writable
6019// stream classes. When you write(chunk), that calls _write(chunk,cb)
6020// internally, and returns false if there's a lot of pending writes
6021// buffered up. When you call read(), that calls _read(n) until
6022// there's enough pending readable data buffered up.
6023//
6024// In a transform stream, the written data is placed in a buffer. When
6025// _read(n) is called, it transforms the queued up data, calling the
6026// buffered _write cb's as it consumes chunks. If consuming a single
6027// written chunk would result in multiple output chunks, then the first
6028// outputted bit calls the readcb, and subsequent chunks just go into
6029// the read buffer, and will cause it to emit 'readable' if necessary.
6030//
6031// This way, back-pressure is actually determined by the reading side,
6032// since _read has to be called to start processing a new chunk. However,
6033// a pathological inflate type of transform can cause excessive buffering
6034// here. For example, imagine a stream where every byte of input is
6035// interpreted as an integer from 0-255, and then results in that many
6036// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6037// 1kb of data being output. In this case, you could write a very small
6038// amount of input, and end up with a very large amount of output. In
6039// such a pathological inflating mechanism, there'd be no way to tell
6040// the system to stop doing the transform. A single 4MB write could
6041// cause the system to run out of memory.
6042//
6043// However, even in such a pathological case, only a single written chunk
6044// would be consumed, and then the rest would wait (un-transformed) until
6045// the results of the previous transformed chunk were consumed.
ebd8d4e8 6046
ab78acc6 6047module.exports = Transform;
ebd8d4e8 6048
ab78acc6 6049var Duplex = require('./_stream_duplex');
ebd8d4e8 6050
ab78acc6
IC
6051/*<replacement>*/
6052var util = require('core-util-is');
6053util.inherits = require('inherits');
6054/*</replacement>*/
6055
6056util.inherits(Transform, Duplex);
6057
6058
6059function TransformState(options, stream) {
6060 this.afterTransform = function(er, data) {
6061 return afterTransform(stream, er, data);
6062 };
6063
6064 this.needTransform = false;
6065 this.transforming = false;
6066 this.writecb = null;
6067 this.writechunk = null;
ebd8d4e8 6068}
ebd8d4e8 6069
ab78acc6
IC
6070function afterTransform(stream, er, data) {
6071 var ts = stream._transformState;
6072 ts.transforming = false;
6073
6074 var cb = ts.writecb;
6075
6076 if (!cb)
6077 return stream.emit('error', new Error('no writecb in Transform class'));
6078
6079 ts.writechunk = null;
6080 ts.writecb = null;
6081
6082 if (!util.isNullOrUndefined(data))
6083 stream.push(data);
6084
6085 if (cb)
6086 cb(er);
6087
6088 var rs = stream._readableState;
6089 rs.reading = false;
6090 if (rs.needReadable || rs.length < rs.highWaterMark) {
6091 stream._read(rs.highWaterMark);
6092 }
ebd8d4e8 6093}
ebd8d4e8 6094
ab78acc6
IC
6095
6096function Transform(options) {
6097 if (!(this instanceof Transform))
6098 return new Transform(options);
6099
6100 Duplex.call(this, options);
6101
6102 this._transformState = new TransformState(options, this);
6103
6104 // when the writable side finishes, then flush out anything remaining.
6105 var stream = this;
6106
6107 // start out asking for a readable event once data is transformed.
6108 this._readableState.needReadable = true;
6109
6110 // we have implemented the _read method, and done the other things
6111 // that Readable wants before the first _read call, so unset the
6112 // sync guard flag.
6113 this._readableState.sync = false;
6114
6115 this.once('prefinish', function() {
6116 if (util.isFunction(this._flush))
6117 this._flush(function(er) {
6118 done(stream, er);
6119 });
6120 else
6121 done(stream);
6122 });
ebd8d4e8 6123}
ebd8d4e8 6124
ab78acc6
IC
6125Transform.prototype.push = function(chunk, encoding) {
6126 this._transformState.needTransform = false;
6127 return Duplex.prototype.push.call(this, chunk, encoding);
6128};
6129
6130// This is the part where you do stuff!
6131// override this function in implementation classes.
6132// 'chunk' is an input chunk.
6133//
6134// Call `push(newChunk)` to pass along transformed output
6135// to the readable side. You may call 'push' zero or more times.
6136//
6137// Call `cb(err)` when you are done with this chunk. If you pass
6138// an error, then that'll put the hurt on the whole operation. If you
6139// never call cb(), then you'll never get another chunk.
6140Transform.prototype._transform = function(chunk, encoding, cb) {
6141 throw new Error('not implemented');
6142};
6143
6144Transform.prototype._write = function(chunk, encoding, cb) {
6145 var ts = this._transformState;
6146 ts.writecb = cb;
6147 ts.writechunk = chunk;
6148 ts.writeencoding = encoding;
6149 if (!ts.transforming) {
6150 var rs = this._readableState;
6151 if (ts.needTransform ||
6152 rs.needReadable ||
6153 rs.length < rs.highWaterMark)
6154 this._read(rs.highWaterMark);
6155 }
6156};
6157
6158// Doesn't matter what the args are here.
6159// _transform does all the work.
6160// That we got here means that the readable side wants more data.
6161Transform.prototype._read = function(n) {
6162 var ts = this._transformState;
ebd8d4e8 6163
ab78acc6
IC
6164 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6165 ts.transforming = true;
6166 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6167 } else {
6168 // mark that we need a transform, so that any data that comes in
6169 // will get processed, now that we've asked for it.
6170 ts.needTransform = true;
6171 }
6172};
ebd8d4e8 6173
ebd8d4e8 6174
ab78acc6
IC
6175function done(stream, er) {
6176 if (er)
6177 return stream.emit('error', er);
ebd8d4e8 6178
ab78acc6
IC
6179 // if there's nothing in the write buffer, then that means
6180 // that nothing more will ever be provided
6181 var ws = stream._writableState;
6182 var ts = stream._transformState;
ebd8d4e8 6183
ab78acc6
IC
6184 if (ws.length)
6185 throw new Error('calling transform done when ws.length != 0');
6186
6187 if (ts.transforming)
6188 throw new Error('calling transform done when still transforming');
6189
6190 return stream.push(null);
ebd8d4e8
IC
6191}
6192
ab78acc6
IC
6193},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6194(function (process){
6195// Copyright Joyent, Inc. and other Node contributors.
6196//
6197// Permission is hereby granted, free of charge, to any person obtaining a
6198// copy of this software and associated documentation files (the
6199// "Software"), to deal in the Software without restriction, including
6200// without limitation the rights to use, copy, modify, merge, publish,
6201// distribute, sublicense, and/or sell copies of the Software, and to permit
6202// persons to whom the Software is furnished to do so, subject to the
6203// following conditions:
6204//
6205// The above copyright notice and this permission notice shall be included
6206// in all copies or substantial portions of the Software.
6207//
6208// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6209// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6210// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6211// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6212// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6213// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6214// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6215
ab78acc6
IC
6216// A bit simpler than readable streams.
6217// Implement an async ._write(chunk, cb), and it'll handle all
6218// the drain event emission and buffering.
ebd8d4e8 6219
ab78acc6 6220module.exports = Writable;
ebd8d4e8 6221
ab78acc6
IC
6222/*<replacement>*/
6223var Buffer = require('buffer').Buffer;
6224/*</replacement>*/
ebd8d4e8 6225
ab78acc6 6226Writable.WritableState = WritableState;
ebd8d4e8
IC
6227
6228
ab78acc6
IC
6229/*<replacement>*/
6230var util = require('core-util-is');
6231util.inherits = require('inherits');
6232/*</replacement>*/
ebd8d4e8 6233
ab78acc6 6234var Stream = require('stream');
ebd8d4e8 6235
ab78acc6 6236util.inherits(Writable, Stream);
ebd8d4e8 6237
ab78acc6
IC
6238function WriteReq(chunk, encoding, cb) {
6239 this.chunk = chunk;
6240 this.encoding = encoding;
6241 this.callback = cb;
ebd8d4e8
IC
6242}
6243
ab78acc6
IC
6244function WritableState(options, stream) {
6245 var Duplex = require('./_stream_duplex');
ebd8d4e8 6246
ab78acc6 6247 options = options || {};
ebd8d4e8 6248
ab78acc6
IC
6249 // the point at which write() starts returning false
6250 // Note: 0 is a valid value, means that we always return false if
6251 // the entire buffer is not flushed immediately on write()
6252 var hwm = options.highWaterMark;
6253 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6254 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6255
ab78acc6
IC
6256 // object stream flag to indicate whether or not this stream
6257 // contains buffers or objects.
6258 this.objectMode = !!options.objectMode;
ebd8d4e8 6259
ab78acc6
IC
6260 if (stream instanceof Duplex)
6261 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6262
ab78acc6
IC
6263 // cast to ints.
6264 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6265
ab78acc6
IC
6266 this.needDrain = false;
6267 // at the start of calling end()
6268 this.ending = false;
6269 // when end() has been called, and returned
6270 this.ended = false;
6271 // when 'finish' is emitted
6272 this.finished = false;
ebd8d4e8 6273
ab78acc6
IC
6274 // should we decode strings into buffers before passing to _write?
6275 // this is here so that some node-core streams can optimize string
6276 // handling at a lower level.
6277 var noDecode = options.decodeStrings === false;
6278 this.decodeStrings = !noDecode;
ebd8d4e8 6279
ab78acc6
IC
6280 // Crypto is kind of old and crusty. Historically, its default string
6281 // encoding is 'binary' so we have to make this configurable.
6282 // Everything else in the universe uses 'utf8', though.
6283 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6284
ab78acc6
IC
6285 // not an actual buffer we keep track of, but a measurement
6286 // of how much we're waiting to get pushed to some underlying
6287 // socket or file.
6288 this.length = 0;
ebd8d4e8 6289
ab78acc6
IC
6290 // a flag to see when we're in the middle of a write.
6291 this.writing = false;
ebd8d4e8 6292
ab78acc6
IC
6293 // when true all writes will be buffered until .uncork() call
6294 this.corked = 0;
ebd8d4e8 6295
ab78acc6
IC
6296 // a flag to be able to tell if the onwrite cb is called immediately,
6297 // or on a later tick. We set this to true at first, because any
6298 // actions that shouldn't happen until "later" should generally also
6299 // not happen before the first write call.
6300 this.sync = true;
ebd8d4e8 6301
ab78acc6
IC
6302 // a flag to know if we're processing previously buffered items, which
6303 // may call the _write() callback in the same tick, so that we don't
6304 // end up in an overlapped onwrite situation.
6305 this.bufferProcessing = false;
ebd8d4e8 6306
ab78acc6
IC
6307 // the callback that's passed to _write(chunk,cb)
6308 this.onwrite = function(er) {
6309 onwrite(stream, er);
6310 };
ebd8d4e8 6311
ab78acc6
IC
6312 // the callback that the user supplies to write(chunk,encoding,cb)
6313 this.writecb = null;
ebd8d4e8 6314
ab78acc6
IC
6315 // the amount that is being written when _write is called.
6316 this.writelen = 0;
ebd8d4e8 6317
ab78acc6 6318 this.buffer = [];
ebd8d4e8 6319
ab78acc6
IC
6320 // number of pending user-supplied write callbacks
6321 // this must be 0 before 'finish' can be emitted
6322 this.pendingcb = 0;
ebd8d4e8 6323
ab78acc6
IC
6324 // emit prefinish if the only thing we're waiting for is _write cbs
6325 // This is relevant for synchronous Transform streams
6326 this.prefinished = false;
ebd8d4e8 6327
ab78acc6
IC
6328 // True if the error was already emitted and should not be thrown again
6329 this.errorEmitted = false;
ebd8d4e8
IC
6330}
6331
ab78acc6
IC
6332function Writable(options) {
6333 var Duplex = require('./_stream_duplex');
ebd8d4e8 6334
ab78acc6
IC
6335 // Writable ctor is applied to Duplexes, though they're not
6336 // instanceof Writable, they're instanceof Readable.
6337 if (!(this instanceof Writable) && !(this instanceof Duplex))
6338 return new Writable(options);
ebd8d4e8 6339
ab78acc6 6340 this._writableState = new WritableState(options, this);
ebd8d4e8 6341
ab78acc6
IC
6342 // legacy.
6343 this.writable = true;
ebd8d4e8 6344
ab78acc6 6345 Stream.call(this);
ebd8d4e8
IC
6346}
6347
ab78acc6
IC
6348// Otherwise people can pipe Writable streams, which is just wrong.
6349Writable.prototype.pipe = function() {
6350 this.emit('error', new Error('Cannot pipe. Not readable.'));
6351};
ebd8d4e8 6352
ebd8d4e8 6353
ab78acc6
IC
6354function writeAfterEnd(stream, state, cb) {
6355 var er = new Error('write after end');
6356 // TODO: defer error events consistently everywhere, not just the cb
6357 stream.emit('error', er);
6358 process.nextTick(function() {
6359 cb(er);
6360 });
ebd8d4e8
IC
6361}
6362
ab78acc6
IC
6363// If we get something that is not a buffer, string, null, or undefined,
6364// and we're not in objectMode, then that's an error.
6365// Otherwise stream chunks are all considered to be of length=1, and the
6366// watermarks determine how many objects to keep in the buffer, rather than
6367// how many bytes or characters.
6368function validChunk(stream, state, chunk, cb) {
6369 var valid = true;
6370 if (!util.isBuffer(chunk) &&
6371 !util.isString(chunk) &&
6372 !util.isNullOrUndefined(chunk) &&
6373 !state.objectMode) {
6374 var er = new TypeError('Invalid non-string/buffer chunk');
6375 stream.emit('error', er);
6376 process.nextTick(function() {
6377 cb(er);
6378 });
6379 valid = false;
6380 }
6381 return valid;
ebd8d4e8
IC
6382}
6383
ab78acc6
IC
6384Writable.prototype.write = function(chunk, encoding, cb) {
6385 var state = this._writableState;
6386 var ret = false;
ebd8d4e8 6387
ab78acc6
IC
6388 if (util.isFunction(encoding)) {
6389 cb = encoding;
6390 encoding = null;
ebd8d4e8 6391 }
ebd8d4e8 6392
ab78acc6
IC
6393 if (util.isBuffer(chunk))
6394 encoding = 'buffer';
6395 else if (!encoding)
6396 encoding = state.defaultEncoding;
6397
6398 if (!util.isFunction(cb))
6399 cb = function() {};
6400
6401 if (state.ended)
6402 writeAfterEnd(this, state, cb);
6403 else if (validChunk(this, state, chunk, cb)) {
6404 state.pendingcb++;
6405 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6406 }
ebd8d4e8 6407
ab78acc6
IC
6408 return ret;
6409};
6410
6411Writable.prototype.cork = function() {
6412 var state = this._writableState;
6413
6414 state.corked++;
6415};
ebd8d4e8 6416
ab78acc6
IC
6417Writable.prototype.uncork = function() {
6418 var state = this._writableState;
ebd8d4e8 6419
ab78acc6
IC
6420 if (state.corked) {
6421 state.corked--;
ebd8d4e8 6422
ab78acc6
IC
6423 if (!state.writing &&
6424 !state.corked &&
6425 !state.finished &&
6426 !state.bufferProcessing &&
6427 state.buffer.length)
6428 clearBuffer(this, state);
ebd8d4e8 6429 }
ab78acc6 6430};
ebd8d4e8 6431
ab78acc6
IC
6432function decodeChunk(state, chunk, encoding) {
6433 if (!state.objectMode &&
6434 state.decodeStrings !== false &&
6435 util.isString(chunk)) {
6436 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6437 }
ab78acc6 6438 return chunk;
ebd8d4e8
IC
6439}
6440
ab78acc6
IC
6441// if we're already writing something, then just put this
6442// in the queue, and wait our turn. Otherwise, call _write
6443// If we return false, then we need a drain event, so set that flag.
6444function writeOrBuffer(stream, state, chunk, encoding, cb) {
6445 chunk = decodeChunk(state, chunk, encoding);
6446 if (util.isBuffer(chunk))
6447 encoding = 'buffer';
6448 var len = state.objectMode ? 1 : chunk.length;
6449
6450 state.length += len;
6451
6452 var ret = state.length < state.highWaterMark;
6453 // we must ensure that previous needDrain will not be reset to false.
6454 if (!ret)
6455 state.needDrain = true;
6456
6457 if (state.writing || state.corked)
6458 state.buffer.push(new WriteReq(chunk, encoding, cb));
6459 else
6460 doWrite(stream, state, false, len, chunk, encoding, cb);
6461
6462 return ret;
ebd8d4e8
IC
6463}
6464
ab78acc6
IC
6465function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6466 state.writelen = len;
6467 state.writecb = cb;
6468 state.writing = true;
6469 state.sync = true;
6470 if (writev)
6471 stream._writev(chunk, state.onwrite);
6472 else
6473 stream._write(chunk, encoding, state.onwrite);
6474 state.sync = false;
ebd8d4e8
IC
6475}
6476
ab78acc6
IC
6477function onwriteError(stream, state, sync, er, cb) {
6478 if (sync)
6479 process.nextTick(function() {
6480 state.pendingcb--;
6481 cb(er);
6482 });
6483 else {
6484 state.pendingcb--;
6485 cb(er);
6486 }
ebd8d4e8 6487
ab78acc6
IC
6488 stream._writableState.errorEmitted = true;
6489 stream.emit('error', er);
6490}
ebd8d4e8 6491
ab78acc6
IC
6492function onwriteStateUpdate(state) {
6493 state.writing = false;
6494 state.writecb = null;
6495 state.length -= state.writelen;
6496 state.writelen = 0;
6497}
ebd8d4e8 6498
ab78acc6
IC
6499function onwrite(stream, er) {
6500 var state = stream._writableState;
6501 var sync = state.sync;
6502 var cb = state.writecb;
ebd8d4e8 6503
ab78acc6 6504 onwriteStateUpdate(state);
ebd8d4e8 6505
ab78acc6
IC
6506 if (er)
6507 onwriteError(stream, state, sync, er, cb);
6508 else {
6509 // Check if we're actually ready to finish, but don't emit yet
6510 var finished = needFinish(stream, state);
ebd8d4e8 6511
ab78acc6
IC
6512 if (!finished &&
6513 !state.corked &&
6514 !state.bufferProcessing &&
6515 state.buffer.length) {
6516 clearBuffer(stream, state);
6517 }
6518
6519 if (sync) {
6520 process.nextTick(function() {
6521 afterWrite(stream, state, finished, cb);
6522 });
6523 } else {
6524 afterWrite(stream, state, finished, cb);
ebd8d4e8 6525 }
ebd8d4e8
IC
6526 }
6527}
6528
ab78acc6
IC
6529function afterWrite(stream, state, finished, cb) {
6530 if (!finished)
6531 onwriteDrain(stream, state);
6532 state.pendingcb--;
6533 cb();
6534 finishMaybe(stream, state);
6535}
6536
6537// Must force callback to be called on nextTick, so that we don't
6538// emit 'drain' before the write() consumer gets the 'false' return
6539// value, and has a chance to attach a 'drain' listener.
6540function onwriteDrain(stream, state) {
6541 if (state.length === 0 && state.needDrain) {
6542 state.needDrain = false;
6543 stream.emit('drain');
ebd8d4e8
IC
6544 }
6545}
6546
ebd8d4e8 6547
ab78acc6
IC
6548// if there's something in the buffer waiting, then process it
6549function clearBuffer(stream, state) {
6550 state.bufferProcessing = true;
6551
6552 if (stream._writev && state.buffer.length > 1) {
6553 // Fast case, write everything using _writev()
6554 var cbs = [];
6555 for (var c = 0; c < state.buffer.length; c++)
6556 cbs.push(state.buffer[c].callback);
6557
6558 // count the one we are adding, as well.
6559 // TODO(isaacs) clean this up
6560 state.pendingcb++;
6561 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6562 for (var i = 0; i < cbs.length; i++) {
6563 state.pendingcb--;
6564 cbs[i](err);
6565 }
6566 });
6567
6568 // Clear buffer
6569 state.buffer = [];
6570 } else {
6571 // Slow case, write chunks one-by-one
6572 for (var c = 0; c < state.buffer.length; c++) {
6573 var entry = state.buffer[c];
6574 var chunk = entry.chunk;
6575 var encoding = entry.encoding;
6576 var cb = entry.callback;
6577 var len = state.objectMode ? 1 : chunk.length;
6578
6579 doWrite(stream, state, false, len, chunk, encoding, cb);
6580
6581 // if we didn't call the onwrite immediately, then
6582 // it means that we need to wait until it does.
6583 // also, that means that the chunk and cb are currently
6584 // being processed, so move the buffer counter past them.
6585 if (state.writing) {
6586 c++;
6587 break;
6588 }
ebd8d4e8 6589 }
ab78acc6
IC
6590
6591 if (c < state.buffer.length)
6592 state.buffer = state.buffer.slice(c);
6593 else
6594 state.buffer.length = 0;
ebd8d4e8
IC
6595 }
6596
ab78acc6 6597 state.bufferProcessing = false;
ebd8d4e8
IC
6598}
6599
ab78acc6
IC
6600Writable.prototype._write = function(chunk, encoding, cb) {
6601 cb(new Error('not implemented'));
ebd8d4e8 6602
ab78acc6 6603};
ebd8d4e8 6604
ab78acc6 6605Writable.prototype._writev = null;
ebd8d4e8 6606
ab78acc6
IC
6607Writable.prototype.end = function(chunk, encoding, cb) {
6608 var state = this._writableState;
ebd8d4e8 6609
ab78acc6
IC
6610 if (util.isFunction(chunk)) {
6611 cb = chunk;
6612 chunk = null;
6613 encoding = null;
6614 } else if (util.isFunction(encoding)) {
6615 cb = encoding;
6616 encoding = null;
6617 }
ebd8d4e8 6618
ab78acc6
IC
6619 if (!util.isNullOrUndefined(chunk))
6620 this.write(chunk, encoding);
6621
6622 // .end() fully uncorks
6623 if (state.corked) {
6624 state.corked = 1;
6625 this.uncork();
ebd8d4e8 6626 }
ab78acc6
IC
6627
6628 // ignore unnecessary end() calls.
6629 if (!state.ending && !state.finished)
6630 endWritable(this, state, cb);
6631};
6632
6633
6634function needFinish(stream, state) {
6635 return (state.ending &&
6636 state.length === 0 &&
6637 !state.finished &&
6638 !state.writing);
ebd8d4e8
IC
6639}
6640
ab78acc6
IC
6641function prefinish(stream, state) {
6642 if (!state.prefinished) {
6643 state.prefinished = true;
6644 stream.emit('prefinish');
ebd8d4e8 6645 }
ebd8d4e8
IC
6646}
6647
ab78acc6
IC
6648function finishMaybe(stream, state) {
6649 var need = needFinish(stream, state);
6650 if (need) {
6651 if (state.pendingcb === 0) {
6652 prefinish(stream, state);
6653 state.finished = true;
6654 stream.emit('finish');
6655 } else
6656 prefinish(stream, state);
6657 }
6658 return need;
6659}
ebd8d4e8 6660
ab78acc6
IC
6661function endWritable(stream, state, cb) {
6662 state.ending = true;
6663 finishMaybe(stream, state);
6664 if (cb) {
6665 if (state.finished)
6666 process.nextTick(cb);
6667 else
6668 stream.once('finish', cb);
ebd8d4e8 6669 }
ab78acc6 6670 state.ended = true;
ebd8d4e8
IC
6671}
6672
ab78acc6
IC
6673}).call(this,require('_process'))
6674},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6675(function (Buffer){
6676// Copyright Joyent, Inc. and other Node contributors.
6677//
6678// Permission is hereby granted, free of charge, to any person obtaining a
6679// copy of this software and associated documentation files (the
6680// "Software"), to deal in the Software without restriction, including
6681// without limitation the rights to use, copy, modify, merge, publish,
6682// distribute, sublicense, and/or sell copies of the Software, and to permit
6683// persons to whom the Software is furnished to do so, subject to the
6684// following conditions:
6685//
6686// The above copyright notice and this permission notice shall be included
6687// in all copies or substantial portions of the Software.
6688//
6689// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6690// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6691// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6692// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6693// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6694// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6695// USE OR OTHER DEALINGS IN THE SOFTWARE.
6696
6697// NOTE: These type checking functions intentionally don't use `instanceof`
6698// because it is fragile and can be easily faked with `Object.create()`.
6699function isArray(ar) {
6700 return Array.isArray(ar);
ebd8d4e8 6701}
ab78acc6 6702exports.isArray = isArray;
ebd8d4e8 6703
ab78acc6
IC
6704function isBoolean(arg) {
6705 return typeof arg === 'boolean';
ebd8d4e8 6706}
ab78acc6 6707exports.isBoolean = isBoolean;
ebd8d4e8 6708
ab78acc6
IC
6709function isNull(arg) {
6710 return arg === null;
6711}
6712exports.isNull = isNull;
ebd8d4e8 6713
ab78acc6
IC
6714function isNullOrUndefined(arg) {
6715 return arg == null;
6716}
6717exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6718
ab78acc6
IC
6719function isNumber(arg) {
6720 return typeof arg === 'number';
ebd8d4e8 6721}
ab78acc6 6722exports.isNumber = isNumber;
ebd8d4e8 6723
ab78acc6
IC
6724function isString(arg) {
6725 return typeof arg === 'string';
6726}
6727exports.isString = isString;
ebd8d4e8 6728
ab78acc6
IC
6729function isSymbol(arg) {
6730 return typeof arg === 'symbol';
6731}
6732exports.isSymbol = isSymbol;
ebd8d4e8 6733
ab78acc6
IC
6734function isUndefined(arg) {
6735 return arg === void 0;
ebd8d4e8 6736}
ab78acc6 6737exports.isUndefined = isUndefined;
ebd8d4e8 6738
ab78acc6
IC
6739function isRegExp(re) {
6740 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6741}
ab78acc6 6742exports.isRegExp = isRegExp;
ebd8d4e8 6743
ab78acc6
IC
6744function isObject(arg) {
6745 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6746}
ab78acc6 6747exports.isObject = isObject;
ebd8d4e8 6748
ab78acc6
IC
6749function isDate(d) {
6750 return isObject(d) && objectToString(d) === '[object Date]';
6751}
6752exports.isDate = isDate;
ebd8d4e8 6753
ab78acc6
IC
6754function isError(e) {
6755 return isObject(e) &&
6756 (objectToString(e) === '[object Error]' || e instanceof Error);
6757}
6758exports.isError = isError;
ebd8d4e8 6759
ab78acc6
IC
6760function isFunction(arg) {
6761 return typeof arg === 'function';
6762}
6763exports.isFunction = isFunction;
6764
6765function isPrimitive(arg) {
6766 return arg === null ||
6767 typeof arg === 'boolean' ||
6768 typeof arg === 'number' ||
6769 typeof arg === 'string' ||
6770 typeof arg === 'symbol' || // ES6 symbol
6771 typeof arg === 'undefined';
ebd8d4e8 6772}
ab78acc6 6773exports.isPrimitive = isPrimitive;
ebd8d4e8 6774
ab78acc6
IC
6775function isBuffer(arg) {
6776 return Buffer.isBuffer(arg);
ebd8d4e8 6777}
ab78acc6 6778exports.isBuffer = isBuffer;
ebd8d4e8 6779
ab78acc6
IC
6780function objectToString(o) {
6781 return Object.prototype.toString.call(o);
ebd8d4e8 6782}
ab78acc6
IC
6783}).call(this,require("buffer").Buffer)
6784},{"buffer":7}],22:[function(require,module,exports){
6785module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6786
ab78acc6
IC
6787},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6788exports = module.exports = require('./lib/_stream_readable.js');
6789exports.Stream = require('stream');
6790exports.Readable = exports;
6791exports.Writable = require('./lib/_stream_writable.js');
6792exports.Duplex = require('./lib/_stream_duplex.js');
6793exports.Transform = require('./lib/_stream_transform.js');
6794exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6795
ab78acc6
IC
6796},{"./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){
6797module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6798
ab78acc6
IC
6799},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6800module.exports = require("./lib/_stream_writable.js")
6801
6802},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6803// Copyright Joyent, Inc. and other Node contributors.
6804//
6805// Permission is hereby granted, free of charge, to any person obtaining a
6806// copy of this software and associated documentation files (the
6807// "Software"), to deal in the Software without restriction, including
6808// without limitation the rights to use, copy, modify, merge, publish,
6809// distribute, sublicense, and/or sell copies of the Software, and to permit
6810// persons to whom the Software is furnished to do so, subject to the
6811// following conditions:
6812//
6813// The above copyright notice and this permission notice shall be included
6814// in all copies or substantial portions of the Software.
6815//
6816// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6817// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6818// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6819// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6820// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6821// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6822// USE OR OTHER DEALINGS IN THE SOFTWARE.
6823
6824module.exports = Stream;
6825
6826var EE = require('events').EventEmitter;
6827var inherits = require('inherits');
6828
6829inherits(Stream, EE);
6830Stream.Readable = require('readable-stream/readable.js');
6831Stream.Writable = require('readable-stream/writable.js');
6832Stream.Duplex = require('readable-stream/duplex.js');
6833Stream.Transform = require('readable-stream/transform.js');
6834Stream.PassThrough = require('readable-stream/passthrough.js');
6835
6836// Backwards-compat with node 0.4.x
6837Stream.Stream = Stream;
6838
6839
6840
6841// old-style streams. Note that the pipe method (the only relevant
6842// part of this class) is overridden in the Readable class.
6843
6844function Stream() {
6845 EE.call(this);
ebd8d4e8
IC
6846}
6847
ab78acc6
IC
6848Stream.prototype.pipe = function(dest, options) {
6849 var source = this;
ebd8d4e8 6850
ab78acc6
IC
6851 function ondata(chunk) {
6852 if (dest.writable) {
6853 if (false === dest.write(chunk) && source.pause) {
6854 source.pause();
6855 }
6856 }
6857 }
ebd8d4e8 6858
ab78acc6 6859 source.on('data', ondata);
ebd8d4e8 6860
ab78acc6
IC
6861 function ondrain() {
6862 if (source.readable && source.resume) {
6863 source.resume();
6864 }
6865 }
ebd8d4e8 6866
ab78acc6 6867 dest.on('drain', ondrain);
ebd8d4e8 6868
ab78acc6
IC
6869 // If the 'end' option is not supplied, dest.end() will be called when
6870 // source gets the 'end' or 'close' events. Only dest.end() once.
6871 if (!dest._isStdio && (!options || options.end !== false)) {
6872 source.on('end', onend);
6873 source.on('close', onclose);
ebd8d4e8
IC
6874 }
6875
ab78acc6
IC
6876 var didOnEnd = false;
6877 function onend() {
6878 if (didOnEnd) return;
6879 didOnEnd = true;
ebd8d4e8 6880
ab78acc6
IC
6881 dest.end();
6882 }
ebd8d4e8 6883
ebd8d4e8 6884
ab78acc6
IC
6885 function onclose() {
6886 if (didOnEnd) return;
6887 didOnEnd = true;
ebd8d4e8 6888
ab78acc6 6889 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6890 }
6891
ab78acc6
IC
6892 // don't leave dangling pipes when there are errors.
6893 function onerror(er) {
6894 cleanup();
6895 if (EE.listenerCount(this, 'error') === 0) {
6896 throw er; // Unhandled stream error in pipe.
6897 }
6898 }
ebd8d4e8 6899
ab78acc6
IC
6900 source.on('error', onerror);
6901 dest.on('error', onerror);
ebd8d4e8 6902
ab78acc6
IC
6903 // remove all the event listeners that were added.
6904 function cleanup() {
6905 source.removeListener('data', ondata);
6906 dest.removeListener('drain', ondrain);
ebd8d4e8 6907
ab78acc6
IC
6908 source.removeListener('end', onend);
6909 source.removeListener('close', onclose);
6910
6911 source.removeListener('error', onerror);
6912 dest.removeListener('error', onerror);
6913
6914 source.removeListener('end', cleanup);
6915 source.removeListener('close', cleanup);
6916
6917 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6918 }
6919
ab78acc6
IC
6920 source.on('end', cleanup);
6921 source.on('close', cleanup);
ebd8d4e8 6922
ab78acc6 6923 dest.on('close', cleanup);
ebd8d4e8 6924
ab78acc6 6925 dest.emit('pipe', source);
ebd8d4e8 6926
ab78acc6
IC
6927 // Allow for unix-like usage: A.pipe(B).pipe(C)
6928 return dest;
6929};
ebd8d4e8 6930
ab78acc6
IC
6931},{"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){
6932// Copyright Joyent, Inc. and other Node contributors.
6933//
6934// Permission is hereby granted, free of charge, to any person obtaining a
6935// copy of this software and associated documentation files (the
6936// "Software"), to deal in the Software without restriction, including
6937// without limitation the rights to use, copy, modify, merge, publish,
6938// distribute, sublicense, and/or sell copies of the Software, and to permit
6939// persons to whom the Software is furnished to do so, subject to the
6940// following conditions:
6941//
6942// The above copyright notice and this permission notice shall be included
6943// in all copies or substantial portions of the Software.
6944//
6945// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6946// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6947// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6948// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6949// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6950// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6951// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6952
ab78acc6 6953var Buffer = require('buffer').Buffer;
ebd8d4e8 6954
ab78acc6
IC
6955var isBufferEncoding = Buffer.isEncoding
6956 || function(encoding) {
6957 switch (encoding && encoding.toLowerCase()) {
6958 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;
6959 default: return false;
6960 }
6961 }
ebd8d4e8 6962
ebd8d4e8 6963
ab78acc6
IC
6964function assertEncoding(encoding) {
6965 if (encoding && !isBufferEncoding(encoding)) {
6966 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6967 }
ebd8d4e8
IC
6968}
6969
ab78acc6
IC
6970// StringDecoder provides an interface for efficiently splitting a series of
6971// buffers into a series of JS strings without breaking apart multi-byte
6972// characters. CESU-8 is handled as part of the UTF-8 encoding.
6973//
6974// @TODO Handling all encodings inside a single object makes it very difficult
6975// to reason about this code, so it should be split up in the future.
6976// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6977// points as used by CESU-8.
6978var StringDecoder = exports.StringDecoder = function(encoding) {
6979 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6980 assertEncoding(encoding);
6981 switch (this.encoding) {
6982 case 'utf8':
6983 // CESU-8 represents each of Surrogate Pair by 3-bytes
6984 this.surrogateSize = 3;
6985 break;
6986 case 'ucs2':
6987 case 'utf16le':
6988 // UTF-16 represents each of Surrogate Pair by 2-bytes
6989 this.surrogateSize = 2;
6990 this.detectIncompleteChar = utf16DetectIncompleteChar;
6991 break;
6992 case 'base64':
6993 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6994 this.surrogateSize = 3;
6995 this.detectIncompleteChar = base64DetectIncompleteChar;
6996 break;
6997 default:
6998 this.write = passThroughWrite;
6999 return;
7000 }
ebd8d4e8 7001
ab78acc6
IC
7002 // Enough space to store all bytes of a single character. UTF-8 needs 4
7003 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7004 this.charBuffer = new Buffer(6);
7005 // Number of bytes received for the current incomplete multi-byte character.
7006 this.charReceived = 0;
7007 // Number of bytes expected for the current incomplete multi-byte character.
7008 this.charLength = 0;
7009};
ebd8d4e8 7010
ebd8d4e8 7011
ab78acc6
IC
7012// write decodes the given buffer and returns it as JS string that is
7013// guaranteed to not contain any partial multi-byte characters. Any partial
7014// character found at the end of the buffer is buffered up, and will be
7015// returned when calling write again with the remaining bytes.
7016//
7017// Note: Converting a Buffer containing an orphan surrogate to a String
7018// currently works, but converting a String to a Buffer (via `new Buffer`, or
7019// Buffer#write) will replace incomplete surrogates with the unicode
7020// replacement character. See https://codereview.chromium.org/121173009/ .
7021StringDecoder.prototype.write = function(buffer) {
7022 var charStr = '';
7023 // if our last write ended with an incomplete multibyte character
7024 while (this.charLength) {
7025 // determine how many remaining bytes this buffer has to offer for this char
7026 var available = (buffer.length >= this.charLength - this.charReceived) ?
7027 this.charLength - this.charReceived :
7028 buffer.length;
7029
7030 // add the new bytes to the char buffer
7031 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7032 this.charReceived += available;
7033
7034 if (this.charReceived < this.charLength) {
7035 // still not enough chars in this buffer? wait for more ...
7036 return '';
7037 }
7038
7039 // remove bytes belonging to the current character from the buffer
7040 buffer = buffer.slice(available, buffer.length);
7041
7042 // get the character that was split
7043 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7044
7045 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7046 var charCode = charStr.charCodeAt(charStr.length - 1);
7047 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7048 this.charLength += this.surrogateSize;
7049 charStr = '';
7050 continue;
7051 }
7052 this.charReceived = this.charLength = 0;
ebd8d4e8 7053
ab78acc6
IC
7054 // if there are no more bytes in this buffer, just emit our char
7055 if (buffer.length === 0) {
7056 return charStr;
7057 }
7058 break;
ebd8d4e8 7059 }
ebd8d4e8 7060
ab78acc6
IC
7061 // determine and set charLength / charReceived
7062 this.detectIncompleteChar(buffer);
ebd8d4e8 7063
ab78acc6
IC
7064 var end = buffer.length;
7065 if (this.charLength) {
7066 // buffer the incomplete character bytes we got
7067 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7068 end -= this.charReceived;
ebd8d4e8
IC
7069 }
7070
ab78acc6 7071 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7072
ab78acc6
IC
7073 var end = charStr.length - 1;
7074 var charCode = charStr.charCodeAt(end);
7075 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7076 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7077 var size = this.surrogateSize;
7078 this.charLength += size;
7079 this.charReceived += size;
7080 this.charBuffer.copy(this.charBuffer, size, 0, size);
7081 buffer.copy(this.charBuffer, 0, 0, size);
7082 return charStr.substring(0, end);
ebd8d4e8
IC
7083 }
7084
ab78acc6
IC
7085 // or just emit the charStr
7086 return charStr;
7087};
ebd8d4e8 7088
ab78acc6
IC
7089// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7090// the end of the given buffer. If so, it sets this.charLength to the byte
7091// length that character, and sets this.charReceived to the number of bytes
7092// that are available for this character.
7093StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7094 // determine how many bytes we have to check at the end of this buffer
7095 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7096
ab78acc6
IC
7097 // Figure out if one of the last i bytes of our buffer announces an
7098 // incomplete char.
7099 for (; i > 0; i--) {
7100 var c = buffer[buffer.length - i];
ebd8d4e8 7101
ab78acc6 7102 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7103
ab78acc6
IC
7104 // 110XXXXX
7105 if (i == 1 && c >> 5 == 0x06) {
7106 this.charLength = 2;
7107 break;
7108 }
ebd8d4e8 7109
ab78acc6
IC
7110 // 1110XXXX
7111 if (i <= 2 && c >> 4 == 0x0E) {
7112 this.charLength = 3;
7113 break;
7114 }
ebd8d4e8 7115
ab78acc6
IC
7116 // 11110XXX
7117 if (i <= 3 && c >> 3 == 0x1E) {
7118 this.charLength = 4;
7119 break;
7120 }
7121 }
7122 this.charReceived = i;
7123};
ebd8d4e8 7124
ab78acc6
IC
7125StringDecoder.prototype.end = function(buffer) {
7126 var res = '';
7127 if (buffer && buffer.length)
7128 res = this.write(buffer);
ebd8d4e8 7129
ab78acc6
IC
7130 if (this.charReceived) {
7131 var cr = this.charReceived;
7132 var buf = this.charBuffer;
7133 var enc = this.encoding;
7134 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7135 }
7136
ab78acc6
IC
7137 return res;
7138};
ebd8d4e8 7139
ab78acc6
IC
7140function passThroughWrite(buffer) {
7141 return buffer.toString(this.encoding);
ebd8d4e8
IC
7142}
7143
ab78acc6
IC
7144function utf16DetectIncompleteChar(buffer) {
7145 this.charReceived = buffer.length % 2;
7146 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7147}
7148
ab78acc6
IC
7149function base64DetectIncompleteChar(buffer) {
7150 this.charReceived = buffer.length % 3;
7151 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7152}
7153
ab78acc6
IC
7154},{"buffer":7}],28:[function(require,module,exports){
7155module.exports = function isBuffer(arg) {
7156 return arg && typeof arg === 'object'
7157 && typeof arg.copy === 'function'
7158 && typeof arg.fill === 'function'
7159 && typeof arg.readUInt8 === 'function';
7160}
7161},{}],29:[function(require,module,exports){
7162(function (process,global){
7163// Copyright Joyent, Inc. and other Node contributors.
7164//
7165// Permission is hereby granted, free of charge, to any person obtaining a
7166// copy of this software and associated documentation files (the
7167// "Software"), to deal in the Software without restriction, including
7168// without limitation the rights to use, copy, modify, merge, publish,
7169// distribute, sublicense, and/or sell copies of the Software, and to permit
7170// persons to whom the Software is furnished to do so, subject to the
7171// following conditions:
7172//
7173// The above copyright notice and this permission notice shall be included
7174// in all copies or substantial portions of the Software.
7175//
7176// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7177// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7178// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7179// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7180// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7181// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7182// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7183
ab78acc6
IC
7184var formatRegExp = /%[sdj%]/g;
7185exports.format = function(f) {
7186 if (!isString(f)) {
7187 var objects = [];
7188 for (var i = 0; i < arguments.length; i++) {
7189 objects.push(inspect(arguments[i]));
7190 }
7191 return objects.join(' ');
7192 }
ebd8d4e8 7193
ab78acc6
IC
7194 var i = 1;
7195 var args = arguments;
7196 var len = args.length;
7197 var str = String(f).replace(formatRegExp, function(x) {
7198 if (x === '%%') return '%';
7199 if (i >= len) return x;
7200 switch (x) {
7201 case '%s': return String(args[i++]);
7202 case '%d': return Number(args[i++]);
7203 case '%j':
7204 try {
7205 return JSON.stringify(args[i++]);
7206 } catch (_) {
7207 return '[Circular]';
7208 }
7209 default:
7210 return x;
7211 }
7212 });
7213 for (var x = args[i]; i < len; x = args[++i]) {
7214 if (isNull(x) || !isObject(x)) {
7215 str += ' ' + x;
7216 } else {
7217 str += ' ' + inspect(x);
7218 }
7219 }
7220 return str;
7221};
ebd8d4e8 7222
ebd8d4e8 7223
ab78acc6
IC
7224// Mark that a method should not be used.
7225// Returns a modified function which warns once by default.
7226// If --no-deprecation is set, then it is a no-op.
7227exports.deprecate = function(fn, msg) {
7228 // Allow for deprecating things in the process of starting up.
7229 if (isUndefined(global.process)) {
7230 return function() {
7231 return exports.deprecate(fn, msg).apply(this, arguments);
7232 };
7233 }
ebd8d4e8 7234
ab78acc6
IC
7235 if (process.noDeprecation === true) {
7236 return fn;
7237 }
ebd8d4e8 7238
ab78acc6
IC
7239 var warned = false;
7240 function deprecated() {
7241 if (!warned) {
7242 if (process.throwDeprecation) {
7243 throw new Error(msg);
7244 } else if (process.traceDeprecation) {
7245 console.trace(msg);
7246 } else {
7247 console.error(msg);
7248 }
7249 warned = true;
7250 }
7251 return fn.apply(this, arguments);
7252 }
ebd8d4e8 7253
ab78acc6
IC
7254 return deprecated;
7255};
ebd8d4e8 7256
ebd8d4e8 7257
ab78acc6
IC
7258var debugs = {};
7259var debugEnviron;
7260exports.debuglog = function(set) {
7261 if (isUndefined(debugEnviron))
7262 debugEnviron = process.env.NODE_DEBUG || '';
7263 set = set.toUpperCase();
7264 if (!debugs[set]) {
7265 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7266 var pid = process.pid;
7267 debugs[set] = function() {
7268 var msg = exports.format.apply(exports, arguments);
7269 console.error('%s %d: %s', set, pid, msg);
7270 };
7271 } else {
7272 debugs[set] = function() {};
ebd8d4e8
IC
7273 }
7274 }
ab78acc6
IC
7275 return debugs[set];
7276};
ebd8d4e8 7277
ebd8d4e8
IC
7278
7279/**
ab78acc6
IC
7280 * Echos the value of a value. Trys to print the value out
7281 * in the best way possible given the different types.
7282 *
7283 * @param {Object} obj The object to print out.
7284 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7285 */
ab78acc6
IC
7286/* legacy: obj, showHidden, depth, colors*/
7287function inspect(obj, opts) {
7288 // default options
7289 var ctx = {
7290 seen: [],
7291 stylize: stylizeNoColor
7292 };
7293 // legacy...
7294 if (arguments.length >= 3) ctx.depth = arguments[2];
7295 if (arguments.length >= 4) ctx.colors = arguments[3];
7296 if (isBoolean(opts)) {
7297 // legacy...
7298 ctx.showHidden = opts;
7299 } else if (opts) {
7300 // got an "options" object
7301 exports._extend(ctx, opts);
ebd8d4e8 7302 }
ab78acc6
IC
7303 // set default options
7304 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7305 if (isUndefined(ctx.depth)) ctx.depth = 2;
7306 if (isUndefined(ctx.colors)) ctx.colors = false;
7307 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7308 if (ctx.colors) ctx.stylize = stylizeWithColor;
7309 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7310}
ab78acc6 7311exports.inspect = inspect;
ebd8d4e8 7312
ebd8d4e8 7313
ab78acc6
IC
7314// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7315inspect.colors = {
7316 'bold' : [1, 22],
7317 'italic' : [3, 23],
7318 'underline' : [4, 24],
7319 'inverse' : [7, 27],
7320 'white' : [37, 39],
7321 'grey' : [90, 39],
7322 'black' : [30, 39],
7323 'blue' : [34, 39],
7324 'cyan' : [36, 39],
7325 'green' : [32, 39],
7326 'magenta' : [35, 39],
7327 'red' : [31, 39],
7328 'yellow' : [33, 39]
7329};
ebd8d4e8 7330
ab78acc6
IC
7331// Don't use 'blue' not visible on cmd.exe
7332inspect.styles = {
7333 'special': 'cyan',
7334 'number': 'yellow',
7335 'boolean': 'yellow',
7336 'undefined': 'grey',
7337 'null': 'bold',
7338 'string': 'green',
7339 'date': 'magenta',
7340 // "name": intentionally not styling
7341 'regexp': 'red'
7342};
ebd8d4e8 7343
ebd8d4e8 7344
ab78acc6
IC
7345function stylizeWithColor(str, styleType) {
7346 var style = inspect.styles[styleType];
ebd8d4e8 7347
ab78acc6
IC
7348 if (style) {
7349 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7350 '\u001b[' + inspect.colors[style][1] + 'm';
7351 } else {
7352 return str;
ebd8d4e8 7353 }
ebd8d4e8
IC
7354}
7355
ebd8d4e8 7356
ab78acc6
IC
7357function stylizeNoColor(str, styleType) {
7358 return str;
ebd8d4e8
IC
7359}
7360
ebd8d4e8 7361
ab78acc6
IC
7362function arrayToHash(array) {
7363 var hash = {};
ebd8d4e8 7364
ab78acc6
IC
7365 array.forEach(function(val, idx) {
7366 hash[val] = true;
7367 });
ebd8d4e8 7368
ab78acc6 7369 return hash;
ebd8d4e8
IC
7370}
7371
ebd8d4e8 7372
ab78acc6
IC
7373function formatValue(ctx, value, recurseTimes) {
7374 // Provide a hook for user-specified inspect functions.
7375 // Check that value is an object with an inspect function on it
7376 if (ctx.customInspect &&
7377 value &&
7378 isFunction(value.inspect) &&
7379 // Filter out the util module, it's inspect function is special
7380 value.inspect !== exports.inspect &&
7381 // Also filter out any prototype objects using the circular check.
7382 !(value.constructor && value.constructor.prototype === value)) {
7383 var ret = value.inspect(recurseTimes, ctx);
7384 if (!isString(ret)) {
7385 ret = formatValue(ctx, ret, recurseTimes);
7386 }
7387 return ret;
ebd8d4e8 7388 }
ebd8d4e8 7389
ab78acc6
IC
7390 // Primitive types cannot have properties
7391 var primitive = formatPrimitive(ctx, value);
7392 if (primitive) {
7393 return primitive;
ebd8d4e8
IC
7394 }
7395
ab78acc6
IC
7396 // Look up the keys of the object.
7397 var keys = Object.keys(value);
7398 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7399
ab78acc6
IC
7400 if (ctx.showHidden) {
7401 keys = Object.getOwnPropertyNames(value);
7402 }
ebd8d4e8 7403
ab78acc6
IC
7404 // IE doesn't make error fields non-enumerable
7405 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7406 if (isError(value)
7407 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7408 return formatError(value);
ebd8d4e8 7409 }
ebd8d4e8 7410
ab78acc6
IC
7411 // Some type of object without properties can be shortcutted.
7412 if (keys.length === 0) {
7413 if (isFunction(value)) {
7414 var name = value.name ? ': ' + value.name : '';
7415 return ctx.stylize('[Function' + name + ']', 'special');
7416 }
7417 if (isRegExp(value)) {
7418 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7419 }
7420 if (isDate(value)) {
7421 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7422 }
7423 if (isError(value)) {
7424 return formatError(value);
7425 }
ebd8d4e8 7426 }
ebd8d4e8 7427
ab78acc6 7428 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7429
ab78acc6
IC
7430 // Make Array say that they are Array
7431 if (isArray(value)) {
7432 array = true;
7433 braces = ['[', ']'];
7434 }
ebd8d4e8 7435
ab78acc6
IC
7436 // Make functions say that they are functions
7437 if (isFunction(value)) {
7438 var n = value.name ? ': ' + value.name : '';
7439 base = ' [Function' + n + ']';
7440 }
ebd8d4e8 7441
ab78acc6
IC
7442 // Make RegExps say that they are RegExps
7443 if (isRegExp(value)) {
7444 base = ' ' + RegExp.prototype.toString.call(value);
7445 }
ebd8d4e8 7446
ab78acc6
IC
7447 // Make dates with properties first say the date
7448 if (isDate(value)) {
7449 base = ' ' + Date.prototype.toUTCString.call(value);
7450 }
ebd8d4e8 7451
ab78acc6
IC
7452 // Make error with message first say the error
7453 if (isError(value)) {
7454 base = ' ' + formatError(value);
7455 }
ebd8d4e8 7456
ab78acc6
IC
7457 if (keys.length === 0 && (!array || value.length == 0)) {
7458 return braces[0] + base + braces[1];
7459 }
ebd8d4e8 7460
ab78acc6
IC
7461 if (recurseTimes < 0) {
7462 if (isRegExp(value)) {
7463 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7464 } else {
7465 return ctx.stylize('[Object]', 'special');
7466 }
7467 }
ebd8d4e8 7468
ab78acc6 7469 ctx.seen.push(value);
ebd8d4e8 7470
ab78acc6
IC
7471 var output;
7472 if (array) {
7473 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7474 } else {
7475 output = keys.map(function(key) {
7476 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7477 });
7478 }
ebd8d4e8 7479
ab78acc6 7480 ctx.seen.pop();
ebd8d4e8 7481
ab78acc6
IC
7482 return reduceToSingleString(output, base, braces);
7483}
ebd8d4e8 7484
ebd8d4e8 7485
ab78acc6
IC
7486function formatPrimitive(ctx, value) {
7487 if (isUndefined(value))
7488 return ctx.stylize('undefined', 'undefined');
7489 if (isString(value)) {
7490 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7491 .replace(/'/g, "\\'")
7492 .replace(/\\"/g, '"') + '\'';
7493 return ctx.stylize(simple, 'string');
7494 }
7495 if (isNumber(value))
7496 return ctx.stylize('' + value, 'number');
7497 if (isBoolean(value))
7498 return ctx.stylize('' + value, 'boolean');
7499 // For some reason typeof null is "object", so special case here.
7500 if (isNull(value))
7501 return ctx.stylize('null', 'null');
7502}
ebd8d4e8 7503
ebd8d4e8 7504
ab78acc6
IC
7505function formatError(value) {
7506 return '[' + Error.prototype.toString.call(value) + ']';
7507}
ebd8d4e8 7508
ebd8d4e8 7509
ab78acc6
IC
7510function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7511 var output = [];
7512 for (var i = 0, l = value.length; i < l; ++i) {
7513 if (hasOwnProperty(value, String(i))) {
7514 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7515 String(i), true));
7516 } else {
7517 output.push('');
7518 }
7519 }
7520 keys.forEach(function(key) {
7521 if (!key.match(/^\d+$/)) {
7522 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7523 key, true));
7524 }
7525 });
7526 return output;
7527}
ebd8d4e8 7528
ebd8d4e8 7529
ab78acc6
IC
7530function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7531 var name, str, desc;
7532 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7533 if (desc.get) {
7534 if (desc.set) {
7535 str = ctx.stylize('[Getter/Setter]', 'special');
7536 } else {
7537 str = ctx.stylize('[Getter]', 'special');
7538 }
7539 } else {
7540 if (desc.set) {
7541 str = ctx.stylize('[Setter]', 'special');
7542 }
7543 }
7544 if (!hasOwnProperty(visibleKeys, key)) {
7545 name = '[' + key + ']';
7546 }
7547 if (!str) {
7548 if (ctx.seen.indexOf(desc.value) < 0) {
7549 if (isNull(recurseTimes)) {
7550 str = formatValue(ctx, desc.value, null);
7551 } else {
7552 str = formatValue(ctx, desc.value, recurseTimes - 1);
7553 }
7554 if (str.indexOf('\n') > -1) {
7555 if (array) {
7556 str = str.split('\n').map(function(line) {
7557 return ' ' + line;
7558 }).join('\n').substr(2);
7559 } else {
7560 str = '\n' + str.split('\n').map(function(line) {
7561 return ' ' + line;
7562 }).join('\n');
7563 }
7564 }
7565 } else {
7566 str = ctx.stylize('[Circular]', 'special');
7567 }
7568 }
7569 if (isUndefined(name)) {
7570 if (array && key.match(/^\d+$/)) {
7571 return str;
7572 }
7573 name = JSON.stringify('' + key);
7574 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7575 name = name.substr(1, name.length - 2);
7576 name = ctx.stylize(name, 'name');
7577 } else {
7578 name = name.replace(/'/g, "\\'")
7579 .replace(/\\"/g, '"')
7580 .replace(/(^"|"$)/g, "'");
7581 name = ctx.stylize(name, 'string');
7582 }
7583 }
ebd8d4e8 7584
ab78acc6
IC
7585 return name + ': ' + str;
7586}
ebd8d4e8 7587
ebd8d4e8 7588
ab78acc6
IC
7589function reduceToSingleString(output, base, braces) {
7590 var numLinesEst = 0;
7591 var length = output.reduce(function(prev, cur) {
7592 numLinesEst++;
7593 if (cur.indexOf('\n') >= 0) numLinesEst++;
7594 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7595 }, 0);
ebd8d4e8 7596
ab78acc6
IC
7597 if (length > 60) {
7598 return braces[0] +
7599 (base === '' ? '' : base + '\n ') +
7600 ' ' +
7601 output.join(',\n ') +
7602 ' ' +
7603 braces[1];
7604 }
ebd8d4e8 7605
ab78acc6
IC
7606 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7607}
ebd8d4e8 7608
ebd8d4e8 7609
ab78acc6
IC
7610// NOTE: These type checking functions intentionally don't use `instanceof`
7611// because it is fragile and can be easily faked with `Object.create()`.
7612function isArray(ar) {
7613 return Array.isArray(ar);
7614}
7615exports.isArray = isArray;
ebd8d4e8 7616
ab78acc6
IC
7617function isBoolean(arg) {
7618 return typeof arg === 'boolean';
7619}
7620exports.isBoolean = isBoolean;
ebd8d4e8 7621
ab78acc6
IC
7622function isNull(arg) {
7623 return arg === null;
7624}
7625exports.isNull = isNull;
ebd8d4e8 7626
ab78acc6
IC
7627function isNullOrUndefined(arg) {
7628 return arg == null;
7629}
7630exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7631
ab78acc6
IC
7632function isNumber(arg) {
7633 return typeof arg === 'number';
7634}
7635exports.isNumber = isNumber;
ebd8d4e8 7636
ab78acc6
IC
7637function isString(arg) {
7638 return typeof arg === 'string';
7639}
7640exports.isString = isString;
ebd8d4e8 7641
ab78acc6
IC
7642function isSymbol(arg) {
7643 return typeof arg === 'symbol';
7644}
7645exports.isSymbol = isSymbol;
ebd8d4e8 7646
ab78acc6
IC
7647function isUndefined(arg) {
7648 return arg === void 0;
7649}
7650exports.isUndefined = isUndefined;
ebd8d4e8 7651
ab78acc6
IC
7652function isRegExp(re) {
7653 return isObject(re) && objectToString(re) === '[object RegExp]';
7654}
7655exports.isRegExp = isRegExp;
ebd8d4e8 7656
ab78acc6
IC
7657function isObject(arg) {
7658 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7659}
ab78acc6 7660exports.isObject = isObject;
ebd8d4e8 7661
ab78acc6
IC
7662function isDate(d) {
7663 return isObject(d) && objectToString(d) === '[object Date]';
7664}
7665exports.isDate = isDate;
ebd8d4e8 7666
ab78acc6
IC
7667function isError(e) {
7668 return isObject(e) &&
7669 (objectToString(e) === '[object Error]' || e instanceof Error);
7670}
7671exports.isError = isError;
ebd8d4e8 7672
ab78acc6
IC
7673function isFunction(arg) {
7674 return typeof arg === 'function';
7675}
7676exports.isFunction = isFunction;
ebd8d4e8 7677
ab78acc6
IC
7678function isPrimitive(arg) {
7679 return arg === null ||
7680 typeof arg === 'boolean' ||
7681 typeof arg === 'number' ||
7682 typeof arg === 'string' ||
7683 typeof arg === 'symbol' || // ES6 symbol
7684 typeof arg === 'undefined';
7685}
7686exports.isPrimitive = isPrimitive;
ebd8d4e8 7687
ab78acc6 7688exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7689
ab78acc6
IC
7690function objectToString(o) {
7691 return Object.prototype.toString.call(o);
7692}
ebd8d4e8 7693
ebd8d4e8 7694
ab78acc6
IC
7695function pad(n) {
7696 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7697}
ebd8d4e8 7698
ebd8d4e8 7699
ab78acc6
IC
7700var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7701 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7702
ab78acc6
IC
7703// 26 Feb 16:19:34
7704function timestamp() {
7705 var d = new Date();
7706 var time = [pad(d.getHours()),
7707 pad(d.getMinutes()),
7708 pad(d.getSeconds())].join(':');
7709 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7710}
7711
ab78acc6
IC
7712
7713// log is just a thin wrapper to console.log that prepends a timestamp
7714exports.log = function() {
7715 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7716};
7717
ab78acc6
IC
7718
7719/**
7720 * Inherit the prototype methods from one constructor into another.
7721 *
7722 * The Function.prototype.inherits from lang.js rewritten as a standalone
7723 * function (not on Function.prototype). NOTE: If this file is to be loaded
7724 * during bootstrapping this function needs to be rewritten using some native
7725 * functions as prototype setup using normal JavaScript does not work as
7726 * expected during bootstrapping (see mirror.js in r114903).
7727 *
7728 * @param {function} ctor Constructor function which needs to inherit the
7729 * prototype.
7730 * @param {function} superCtor Constructor function to inherit prototype from.
7731 */
7732exports.inherits = require('inherits');
7733
7734exports._extend = function(origin, add) {
7735 // Don't do anything if add isn't an object
7736 if (!add || !isObject(add)) return origin;
7737
7738 var keys = Object.keys(add);
7739 var i = keys.length;
7740 while (i--) {
7741 origin[keys[i]] = add[keys[i]];
7742 }
7743 return origin;
7744};
7745
7746function hasOwnProperty(obj, prop) {
7747 return Object.prototype.hasOwnProperty.call(obj, prop);
7748}
7749
7750}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7751},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7752// Base58 encoding/decoding
7753// Originally written by Mike Hearn for BitcoinJ
7754// Copyright (c) 2011 Google Inc
7755// Ported to JavaScript by Stefan Thomas
7756// Merged Buffer refactorings from base58-native by Stephen Pair
7757// Copyright (c) 2013 BitPay Inc
7758
ebd8d4e8 7759var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7760var ALPHABET_MAP = {}
7761for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7762 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7763}
ab78acc6 7764var BASE = 58
ebd8d4e8
IC
7765
7766function encode(buffer) {
ab78acc6
IC
7767 if (buffer.length === 0) return ''
7768
7769 var i, j, digits = [0]
7770 for (i = 0; i < buffer.length; i++) {
7771 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7772
7773 digits[0] += buffer[i]
ebd8d4e8 7774
ab78acc6
IC
7775 var carry = 0
7776 for (j = 0; j < digits.length; ++j) {
7777 digits[j] += carry
ebd8d4e8 7778
ab78acc6
IC
7779 carry = (digits[j] / BASE) | 0
7780 digits[j] %= BASE
7781 }
7782
7783 while (carry) {
7784 digits.push(carry % BASE)
7785
7786 carry = (carry / BASE) | 0
7787 }
ebd8d4e8
IC
7788 }
7789
7790 // deal with leading zeros
ab78acc6 7791 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7792
ab78acc6
IC
7793 // convert digits to a string
7794 var stringOutput = ""
7795 for (var i = digits.length - 1; i >= 0; i--) {
7796 stringOutput = stringOutput + ALPHABET[digits[i]]
7797 }
7798 return stringOutput
ebd8d4e8
IC
7799}
7800
7801function decode(string) {
ab78acc6 7802 if (string.length === 0) return []
ebd8d4e8 7803
ab78acc6
IC
7804 var i, j, bytes = [0]
7805 for (i = 0; i < string.length; i++) {
7806 var c = string[i]
7807 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7808
ab78acc6
IC
7809 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7810 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7811
ab78acc6
IC
7812 var carry = 0
7813 for (j = 0; j < bytes.length; ++j) {
7814 bytes[j] += carry
ebd8d4e8 7815
ab78acc6
IC
7816 carry = bytes[j] >> 8
7817 bytes[j] &= 0xff
7818 }
ebd8d4e8 7819
ab78acc6
IC
7820 while (carry) {
7821 bytes.push(carry & 0xff)
7822
7823 carry >>= 8
7824 }
ebd8d4e8
IC
7825 }
7826
ab78acc6
IC
7827 // deal with leading zeros
7828 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7829
ab78acc6 7830 return bytes.reverse()
ebd8d4e8
IC
7831}
7832
7833module.exports = {
7834 encode: encode,
7835 decode: decode
7836}
7837
ab78acc6 7838},{}],31:[function(require,module,exports){
ebd8d4e8 7839(function (Buffer){
ab78acc6
IC
7840'use strict'
7841
7842var base58 = require('bs58')
7843var createHash = require('create-hash')
7844
7845// SHA256(SHA256(buffer))
7846function sha256x2 (buffer) {
7847 buffer = createHash('sha256').update(buffer).digest()
7848 return createHash('sha256').update(buffer).digest()
7849}
7850
7851// Encode a buffer as a base58-check encoded string
7852function encode (payload) {
7853 var checksum = sha256x2(payload).slice(0, 4)
7854
7855 return base58.encode(Buffer.concat([
7856 payload,
7857 checksum
7858 ]))
7859}
7860
7861// Decode a base58-check encoded string to a buffer
7862function decode (string) {
7863 var buffer = new Buffer(base58.decode(string))
7864
7865 var payload = buffer.slice(0, -4)
7866 var checksum = buffer.slice(-4)
7867 var newChecksum = sha256x2(payload).slice(0, 4)
7868
7869 for (var i = 0; i < newChecksum.length; ++i) {
7870 if (newChecksum[i] === checksum[i]) continue
7871
7872 throw new Error('Invalid checksum')
ebd8d4e8 7873 }
ab78acc6
IC
7874
7875 return payload
ebd8d4e8
IC
7876}
7877
ab78acc6
IC
7878module.exports = {
7879 encode: encode,
7880 decode: decode
ebd8d4e8
IC
7881}
7882
ab78acc6
IC
7883}).call(this,require("buffer").Buffer)
7884},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7885(function (Buffer){
ab78acc6
IC
7886'use strict';
7887var inherits = require('inherits')
7888var md5 = require('./md5')
7889var rmd160 = require('ripemd160')
7890var sha = require('sha.js')
ebd8d4e8 7891
ab78acc6 7892var Transform = require('stream').Transform
ebd8d4e8 7893
ab78acc6
IC
7894function HashNoConstructor(hash) {
7895 Transform.call(this)
ebd8d4e8 7896
ab78acc6
IC
7897 this._hash = hash
7898 this.buffers = []
7899}
ebd8d4e8 7900
ab78acc6 7901inherits(HashNoConstructor, Transform)
ebd8d4e8 7902
ab78acc6
IC
7903HashNoConstructor.prototype._transform = function (data, _, next) {
7904 this.buffers.push(data)
ebd8d4e8 7905
ab78acc6
IC
7906 next()
7907}
ebd8d4e8 7908
ab78acc6
IC
7909HashNoConstructor.prototype._flush = function (next) {
7910 this.push(this.digest())
7911 next()
7912}
7913
7914HashNoConstructor.prototype.update = function (data, enc) {
7915 if (typeof data === 'string') {
7916 data = new Buffer(data, enc)
ebd8d4e8
IC
7917 }
7918
ab78acc6
IC
7919 this.buffers.push(data)
7920 return this
7921}
7922
7923HashNoConstructor.prototype.digest = function (enc) {
7924 var buf = Buffer.concat(this.buffers)
7925 var r = this._hash(buf)
7926 this.buffers = null
7927
7928 return enc ? r.toString(enc) : r
7929}
7930
7931function Hash(hash) {
7932 Transform.call(this)
7933
7934 this._hash = hash
7935}
7936
7937inherits(Hash, Transform)
7938
7939Hash.prototype._transform = function (data, enc, next) {
7940 if (enc) data = new Buffer(data, enc)
7941
7942 this._hash.update(data)
7943
7944 next()
ebd8d4e8
IC
7945}
7946
ab78acc6
IC
7947Hash.prototype._flush = function (next) {
7948 this.push(this._hash.digest())
7949 this._hash = null
7950
7951 next()
7952}
7953
7954Hash.prototype.update = function (data, enc) {
7955 if (typeof data === 'string') {
7956 data = new Buffer(data, enc)
7957 }
7958
7959 this._hash.update(data)
ebd8d4e8
IC
7960 return this
7961}
7962
ab78acc6
IC
7963Hash.prototype.digest = function (enc) {
7964 var outData = this._hash.digest()
7965
7966 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7967}
7968
ab78acc6
IC
7969module.exports = function createHash (alg) {
7970 if ('md5' === alg) return new HashNoConstructor(md5)
7971 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7972
7973 return new Hash(sha(alg))
7974}
ebd8d4e8 7975
ab78acc6
IC
7976}).call(this,require("buffer").Buffer)
7977},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 7978(function (Buffer){
ab78acc6 7979'use strict';
ebd8d4e8
IC
7980var intSize = 4;
7981var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7982var chrsz = 8;
7983
7984function toArray(buf, bigEndian) {
7985 if ((buf.length % intSize) !== 0) {
7986 var len = buf.length + (intSize - (buf.length % intSize));
7987 buf = Buffer.concat([buf, zeroBuffer], len);
7988 }
7989
7990 var arr = [];
7991 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7992 for (var i = 0; i < buf.length; i += intSize) {
7993 arr.push(fn.call(buf, i));
7994 }
7995 return arr;
7996}
7997
7998function toBuffer(arr, size, bigEndian) {
7999 var buf = new Buffer(size);
8000 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8001 for (var i = 0; i < arr.length; i++) {
8002 fn.call(buf, arr[i], i * 4, true);
8003 }
8004 return buf;
8005}
8006
8007function hash(buf, fn, hashSize, bigEndian) {
8008 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8009 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8010 return toBuffer(arr, hashSize, bigEndian);
8011}
ab78acc6
IC
8012exports.hash = hash;
8013}).call(this,require("buffer").Buffer)
8014},{"buffer":7}],34:[function(require,module,exports){
8015'use strict';
ebd8d4e8
IC
8016/*
8017 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8018 * Digest Algorithm, as defined in RFC 1321.
8019 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8020 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8021 * Distributed under the BSD License
8022 * See http://pajhome.org.uk/crypt/md5 for more info.
8023 */
8024
ab78acc6 8025var helpers = require('./helpers');
ebd8d4e8
IC
8026
8027/*
8028 * Calculate the MD5 of an array of little-endian words, and a bit length
8029 */
8030function core_md5(x, len)
8031{
8032 /* append padding */
8033 x[len >> 5] |= 0x80 << ((len) % 32);
8034 x[(((len + 64) >>> 9) << 4) + 14] = len;
8035
8036 var a = 1732584193;
8037 var b = -271733879;
8038 var c = -1732584194;
8039 var d = 271733878;
8040
8041 for(var i = 0; i < x.length; i += 16)
8042 {
8043 var olda = a;
8044 var oldb = b;
8045 var oldc = c;
8046 var oldd = d;
8047
8048 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8049 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8050 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8051 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8052 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8053 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8054 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8055 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8056 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8057 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8058 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8059 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8060 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8061 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8062 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8063 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8064
8065 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8066 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8067 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8068 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8069 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8070 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8071 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8072 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8073 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8074 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8075 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8076 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8077 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8078 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8079 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8080 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8081
8082 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8083 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8084 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8085 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8086 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8087 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8088 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8089 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8090 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8091 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8092 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8093 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8094 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8095 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8096 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8097 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8098
8099 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8100 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8101 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8102 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8103 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8104 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8105 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8106 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8107 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8108 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8109 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8110 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8111 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8112 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8113 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8114 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8115
8116 a = safe_add(a, olda);
8117 b = safe_add(b, oldb);
8118 c = safe_add(c, oldc);
8119 d = safe_add(d, oldd);
8120 }
8121 return Array(a, b, c, d);
8122
8123}
8124
8125/*
8126 * These functions implement the four basic operations the algorithm uses.
8127 */
8128function md5_cmn(q, a, b, x, s, t)
8129{
8130 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8131}
8132function md5_ff(a, b, c, d, x, s, t)
8133{
8134 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8135}
8136function md5_gg(a, b, c, d, x, s, t)
8137{
8138 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8139}
8140function md5_hh(a, b, c, d, x, s, t)
8141{
8142 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8143}
8144function md5_ii(a, b, c, d, x, s, t)
8145{
8146 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8147}
8148
8149/*
8150 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8151 * to work around bugs in some JS interpreters.
8152 */
8153function safe_add(x, y)
8154{
8155 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8156 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8157 return (msw << 16) | (lsw & 0xFFFF);
8158}
8159
8160/*
8161 * Bitwise rotate a 32-bit number to the left.
8162 */
8163function bit_rol(num, cnt)
8164{
8165 return (num << cnt) | (num >>> (32 - cnt));
8166}
8167
8168module.exports = function md5(buf) {
8169 return helpers.hash(buf, core_md5, 16);
8170};
ab78acc6
IC
8171},{"./helpers":33}],35:[function(require,module,exports){
8172arguments[4][12][0].apply(exports,arguments)
8173},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8174(function (Buffer){
ebd8d4e8
IC
8175/*
8176CryptoJS v3.1.2
8177code.google.com/p/crypto-js
8178(c) 2009-2013 by Jeff Mott. All rights reserved.
8179code.google.com/p/crypto-js/wiki/License
8180*/
8181/** @preserve
8182(c) 2012 by Cédric Mesnil. All rights reserved.
8183
8184Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8185
8186 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8187 - 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.
8188
8189THIS 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.
8190*/
8191
ab78acc6 8192// constants table
ebd8d4e8 8193var zl = [
ab78acc6
IC
8194 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8195 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8196 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8197 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8198 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8199]
8200
ebd8d4e8 8201var zr = [
ab78acc6
IC
8202 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8203 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8204 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8205 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8206 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8207]
8208
ebd8d4e8 8209var sl = [
ab78acc6
IC
8210 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8211 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8212 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8213 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8214 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8215]
8216
ebd8d4e8 8217var sr = [
ab78acc6
IC
8218 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8219 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8220 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8221 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8222 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8223]
ebd8d4e8 8224
ab78acc6
IC
8225var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8226var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8227
ab78acc6
IC
8228function bytesToWords (bytes) {
8229 var words = []
ebd8d4e8 8230 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8231 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8232 }
ab78acc6
IC
8233 return words
8234}
ebd8d4e8 8235
ab78acc6
IC
8236function wordsToBytes (words) {
8237 var bytes = []
ebd8d4e8 8238 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8239 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8240 }
ab78acc6
IC
8241 return bytes
8242}
ebd8d4e8 8243
ab78acc6
IC
8244function processBlock (H, M, offset) {
8245 // swap endian
ebd8d4e8 8246 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8247 var offset_i = offset + i
8248 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8249
8250 // Swap
8251 M[offset_i] = (
ab78acc6
IC
8252 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8253 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8254 )
ebd8d4e8
IC
8255 }
8256
8257 // Working variables
ab78acc6
IC
8258 var al, bl, cl, dl, el
8259 var ar, br, cr, dr, er
8260
8261 ar = al = H[0]
8262 br = bl = H[1]
8263 cr = cl = H[2]
8264 dr = dl = H[3]
8265 er = el = H[4]
8266
8267 // computation
8268 var t
8269 for (i = 0; i < 80; i += 1) {
8270 t = (al + M[offset + zl[i]]) | 0
8271 if (i < 16) {
8272 t += f1(bl, cl, dl) + hl[0]
8273 } else if (i < 32) {
8274 t += f2(bl, cl, dl) + hl[1]
8275 } else if (i < 48) {
8276 t += f3(bl, cl, dl) + hl[2]
8277 } else if (i < 64) {
8278 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8279 } else {// if (i<80) {
ab78acc6
IC
8280 t += f5(bl, cl, dl) + hl[4]
8281 }
8282 t = t | 0
8283 t = rotl(t, sl[i])
8284 t = (t + el) | 0
8285 al = el
8286 el = dl
8287 dl = rotl(cl, 10)
8288 cl = bl
8289 bl = t
8290
8291 t = (ar + M[offset + zr[i]]) | 0
8292 if (i < 16) {
8293 t += f5(br, cr, dr) + hr[0]
8294 } else if (i < 32) {
8295 t += f4(br, cr, dr) + hr[1]
8296 } else if (i < 48) {
8297 t += f3(br, cr, dr) + hr[2]
8298 } else if (i < 64) {
8299 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8300 } else {// if (i<80) {
ab78acc6 8301 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8302 }
ebd8d4e8 8303
ab78acc6
IC
8304 t = t | 0
8305 t = rotl(t, sr[i])
8306 t = (t + er) | 0
8307 ar = er
8308 er = dr
8309 dr = rotl(cr, 10)
8310 cr = br
8311 br = t
8312 }
8313
8314 // intermediate hash value
8315 t = (H[1] + cl + dr) | 0
8316 H[1] = (H[2] + dl + er) | 0
8317 H[2] = (H[3] + el + ar) | 0
8318 H[3] = (H[4] + al + br) | 0
8319 H[4] = (H[0] + bl + cr) | 0
8320 H[0] = t
ebd8d4e8
IC
8321}
8322
ab78acc6
IC
8323function f1 (x, y, z) {
8324 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8325}
8326
ab78acc6
IC
8327function f2 (x, y, z) {
8328 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8329}
8330
ab78acc6
IC
8331function f3 (x, y, z) {
8332 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8333}
8334
ab78acc6
IC
8335function f4 (x, y, z) {
8336 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8337}
8338
ab78acc6
IC
8339function f5 (x, y, z) {
8340 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8341}
8342
ab78acc6
IC
8343function rotl (x, n) {
8344 return (x << n) | (x >>> (32 - n))
8345}
8346
8347function ripemd160 (message) {
8348 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8349
ab78acc6
IC
8350 if (typeof message === 'string') {
8351 message = new Buffer(message, 'utf8')
8352 }
ebd8d4e8 8353
ab78acc6 8354 var m = bytesToWords(message)
ebd8d4e8 8355
ab78acc6
IC
8356 var nBitsLeft = message.length * 8
8357 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8358
8359 // Add padding
ab78acc6 8360 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8361 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8362 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8363 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8364 )
ebd8d4e8 8365
ab78acc6
IC
8366 for (var i = 0; i < m.length; i += 16) {
8367 processBlock(H, m, i)
ebd8d4e8
IC
8368 }
8369
ab78acc6
IC
8370 // swap endian
8371 for (i = 0; i < 5; i++) {
8372 // shortcut
8373 var H_i = H[i]
ebd8d4e8
IC
8374
8375 // Swap
ab78acc6
IC
8376 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8377 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8378 }
8379
ab78acc6
IC
8380 var digestbytes = wordsToBytes(H)
8381 return new Buffer(digestbytes)
ebd8d4e8
IC
8382}
8383
ab78acc6
IC
8384module.exports = ripemd160
8385
8386}).call(this,require("buffer").Buffer)
8387},{"buffer":7}],37:[function(require,module,exports){
8388(function (Buffer){
8389// prototype class for hash functions
8390function Hash (blockSize, finalSize) {
8391 this._block = new Buffer(blockSize)
8392 this._finalSize = finalSize
8393 this._blockSize = blockSize
8394 this._len = 0
8395 this._s = 0
8396}
ebd8d4e8 8397
ab78acc6
IC
8398Hash.prototype.update = function (data, enc) {
8399 if (typeof data === 'string') {
8400 enc = enc || 'utf8'
8401 data = new Buffer(data, enc)
8402 }
ebd8d4e8 8403
ab78acc6
IC
8404 var l = this._len += data.length
8405 var s = this._s || 0
8406 var f = 0
8407 var buffer = this._block
ebd8d4e8 8408
ab78acc6
IC
8409 while (s < l) {
8410 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8411 var ch = (t - f)
ebd8d4e8 8412
ab78acc6
IC
8413 for (var i = 0; i < ch; i++) {
8414 buffer[(s % this._blockSize) + i] = data[i + f]
8415 }
8416
8417 s += ch
8418 f += ch
ebd8d4e8 8419
ab78acc6
IC
8420 if ((s % this._blockSize) === 0) {
8421 this._update(buffer)
8422 }
ebd8d4e8 8423 }
ab78acc6
IC
8424 this._s = s
8425
8426 return this
8427}
ebd8d4e8 8428
ab78acc6
IC
8429Hash.prototype.digest = function (enc) {
8430 // Suppose the length of the message M, in bits, is l
8431 var l = this._len * 8
8432
8433 // Append the bit 1 to the end of the message
8434 this._block[this._len % this._blockSize] = 0x80
8435
8436 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8437 this._block.fill(0, this._len % this._blockSize + 1)
8438
8439 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8440 this._update(this._block)
8441 this._block.fill(0)
ebd8d4e8
IC
8442 }
8443
ab78acc6
IC
8444 // to this append the block which is equal to the number l written in binary
8445 // TODO: handle case where l is > Math.pow(2, 29)
8446 this._block.writeInt32BE(l, this._blockSize - 4)
8447
8448 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8449
ab78acc6
IC
8450 return enc ? hash.toString(enc) : hash
8451}
ebd8d4e8 8452
ab78acc6
IC
8453Hash.prototype._update = function () {
8454 throw new Error('_update must be implemented by subclass')
8455}
ebd8d4e8 8456
ab78acc6 8457module.exports = Hash
ebd8d4e8 8458
ab78acc6
IC
8459}).call(this,require("buffer").Buffer)
8460},{"buffer":7}],38:[function(require,module,exports){
8461var exports = module.exports = function SHA (algorithm) {
8462 algorithm = algorithm.toLowerCase()
ebd8d4e8 8463
ab78acc6
IC
8464 var Algorithm = exports[algorithm]
8465 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8466
ab78acc6
IC
8467 return new Algorithm()
8468}
8469
8470exports.sha = require('./sha')
8471exports.sha1 = require('./sha1')
8472exports.sha224 = require('./sha224')
8473exports.sha256 = require('./sha256')
8474exports.sha384 = require('./sha384')
8475exports.sha512 = require('./sha512')
8476
8477},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8478(function (Buffer){
8479/*
8480 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8481 * in FIPS PUB 180-1
8482 * This source code is derived from sha1.js of the same repository.
8483 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8484 * operation was added.
8485 */
ebd8d4e8 8486
ab78acc6
IC
8487var inherits = require('inherits')
8488var Hash = require('./hash')
ebd8d4e8 8489
ab78acc6 8490var W = new Array(80)
ebd8d4e8 8491
ab78acc6
IC
8492function Sha () {
8493 this.init()
8494 this._w = W
ebd8d4e8 8495
ab78acc6
IC
8496 Hash.call(this, 64, 56)
8497}
ebd8d4e8 8498
ab78acc6 8499inherits(Sha, Hash)
ebd8d4e8 8500
ab78acc6
IC
8501Sha.prototype.init = function () {
8502 this._a = 0x67452301 | 0
8503 this._b = 0xefcdab89 | 0
8504 this._c = 0x98badcfe | 0
8505 this._d = 0x10325476 | 0
8506 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8507
ab78acc6
IC
8508 return this
8509}
8510
8511/*
8512 * Bitwise rotate a 32-bit number to the left.
8513 */
8514function rol (num, cnt) {
8515 return (num << cnt) | (num >>> (32 - cnt))
8516}
8517
8518Sha.prototype._update = function (M) {
8519 var W = this._w
8520
8521 var a = this._a
8522 var b = this._b
8523 var c = this._c
8524 var d = this._d
8525 var e = this._e
ebd8d4e8 8526
ab78acc6
IC
8527 var j = 0, k
8528
8529 /*
8530 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8531 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8532 */
8533 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8534 function loop (w, f) {
8535 W[j] = w
8536
8537 var t = rol(a, 5) + f + e + w + k
8538
8539 e = d
8540 d = c
8541 c = rol(b, 30)
8542 b = a
8543 a = t
8544 j++
ebd8d4e8
IC
8545 }
8546
ab78acc6
IC
8547 k = 1518500249
8548 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8549 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8550 k = 1859775393
8551 while (j < 40) loop(calcW(), b ^ c ^ d)
8552 k = -1894007588
8553 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8554 k = -899497514
8555 while (j < 80) loop(calcW(), b ^ c ^ d)
8556
8557 this._a = (a + this._a) | 0
8558 this._b = (b + this._b) | 0
8559 this._c = (c + this._c) | 0
8560 this._d = (d + this._d) | 0
8561 this._e = (e + this._e) | 0
ebd8d4e8
IC
8562}
8563
ab78acc6
IC
8564Sha.prototype._hash = function () {
8565 var H = new Buffer(20)
8566
8567 H.writeInt32BE(this._a | 0, 0)
8568 H.writeInt32BE(this._b | 0, 4)
8569 H.writeInt32BE(this._c | 0, 8)
8570 H.writeInt32BE(this._d | 0, 12)
8571 H.writeInt32BE(this._e | 0, 16)
8572
8573 return H
ebd8d4e8
IC
8574}
8575
ab78acc6 8576module.exports = Sha
ebd8d4e8 8577
ebd8d4e8 8578
ab78acc6
IC
8579}).call(this,require("buffer").Buffer)
8580},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8581(function (Buffer){
ebd8d4e8
IC
8582/*
8583 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8584 * in FIPS PUB 180-1
8585 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8586 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8587 * Distributed under the BSD License
8588 * See http://pajhome.org.uk/crypt/md5 for details.
8589 */
ebd8d4e8 8590
ab78acc6
IC
8591var inherits = require('inherits')
8592var Hash = require('./hash')
ebd8d4e8 8593
ab78acc6 8594var W = new Array(80)
ebd8d4e8 8595
ab78acc6
IC
8596function Sha1 () {
8597 this.init()
8598 this._w = W
ebd8d4e8 8599
ab78acc6
IC
8600 Hash.call(this, 64, 56)
8601}
ebd8d4e8 8602
ab78acc6 8603inherits(Sha1, Hash)
ebd8d4e8 8604
ab78acc6
IC
8605Sha1.prototype.init = function () {
8606 this._a = 0x67452301 | 0
8607 this._b = 0xefcdab89 | 0
8608 this._c = 0x98badcfe | 0
8609 this._d = 0x10325476 | 0
8610 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8611
ab78acc6
IC
8612 return this
8613}
ebd8d4e8 8614
ab78acc6
IC
8615/*
8616 * Bitwise rotate a 32-bit number to the left.
8617 */
8618function rol (num, cnt) {
8619 return (num << cnt) | (num >>> (32 - cnt))
8620}
ebd8d4e8 8621
ab78acc6
IC
8622Sha1.prototype._update = function (M) {
8623 var W = this._w
ebd8d4e8 8624
ab78acc6
IC
8625 var a = this._a
8626 var b = this._b
8627 var c = this._c
8628 var d = this._d
8629 var e = this._e
ebd8d4e8 8630
ab78acc6 8631 var j = 0, k
ebd8d4e8 8632
ab78acc6
IC
8633 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8634 function loop (w, f) {
8635 W[j] = w
ebd8d4e8 8636
ab78acc6 8637 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8638
ab78acc6
IC
8639 e = d
8640 d = c
8641 c = rol(b, 30)
8642 b = a
8643 a = t
8644 j++
ebd8d4e8
IC
8645 }
8646
ab78acc6
IC
8647 k = 1518500249
8648 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8649 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8650 k = 1859775393
8651 while (j < 40) loop(calcW(), b ^ c ^ d)
8652 k = -1894007588
8653 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8654 k = -899497514
8655 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8656
ab78acc6
IC
8657 this._a = (a + this._a) | 0
8658 this._b = (b + this._b) | 0
8659 this._c = (c + this._c) | 0
8660 this._d = (d + this._d) | 0
8661 this._e = (e + this._e) | 0
8662}
ebd8d4e8 8663
ab78acc6
IC
8664Sha1.prototype._hash = function () {
8665 var H = new Buffer(20)
ebd8d4e8 8666
ab78acc6
IC
8667 H.writeInt32BE(this._a | 0, 0)
8668 H.writeInt32BE(this._b | 0, 4)
8669 H.writeInt32BE(this._c | 0, 8)
8670 H.writeInt32BE(this._d | 0, 12)
8671 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8672
ab78acc6
IC
8673 return H
8674}
ebd8d4e8 8675
ab78acc6 8676module.exports = Sha1
ebd8d4e8 8677
ab78acc6
IC
8678}).call(this,require("buffer").Buffer)
8679},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8680(function (Buffer){
8681/**
8682 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8683 * in FIPS 180-2
8684 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8685 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8686 *
8687 */
ebd8d4e8 8688
ab78acc6
IC
8689var inherits = require('inherits')
8690var Sha256 = require('./sha256')
8691var Hash = require('./hash')
ebd8d4e8 8692
ab78acc6 8693var W = new Array(64)
ebd8d4e8 8694
ab78acc6
IC
8695function Sha224 () {
8696 this.init()
ebd8d4e8 8697
ab78acc6 8698 this._w = W // new Array(64)
ebd8d4e8 8699
ab78acc6
IC
8700 Hash.call(this, 64, 56)
8701}
ebd8d4e8 8702
ab78acc6 8703inherits(Sha224, Sha256)
ebd8d4e8 8704
ab78acc6
IC
8705Sha224.prototype.init = function () {
8706 this._a = 0xc1059ed8 | 0
8707 this._b = 0x367cd507 | 0
8708 this._c = 0x3070dd17 | 0
8709 this._d = 0xf70e5939 | 0
8710 this._e = 0xffc00b31 | 0
8711 this._f = 0x68581511 | 0
8712 this._g = 0x64f98fa7 | 0
8713 this._h = 0xbefa4fa4 | 0
8714
8715 return this
8716}
8717
8718Sha224.prototype._hash = function () {
8719 var H = new Buffer(28)
8720
8721 H.writeInt32BE(this._a, 0)
8722 H.writeInt32BE(this._b, 4)
8723 H.writeInt32BE(this._c, 8)
8724 H.writeInt32BE(this._d, 12)
8725 H.writeInt32BE(this._e, 16)
8726 H.writeInt32BE(this._f, 20)
8727 H.writeInt32BE(this._g, 24)
8728
8729 return H
ebd8d4e8
IC
8730}
8731
ab78acc6 8732module.exports = Sha224
ebd8d4e8 8733
ab78acc6
IC
8734}).call(this,require("buffer").Buffer)
8735},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8736(function (Buffer){
ebd8d4e8
IC
8737/**
8738 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8739 * in FIPS 180-2
8740 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8741 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8742 *
8743 */
8744
ab78acc6
IC
8745var inherits = require('inherits')
8746var Hash = require('./hash')
8747
8748var K = [
8749 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8750 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8751 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8752 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8753 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8754 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8755 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8756 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8757 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8758 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8759 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8760 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8761 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8762 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8763 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8764 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8765]
8766
8767var W = new Array(64)
8768
8769function Sha256 () {
8770 this.init()
8771
8772 this._w = W // new Array(64)
8773
8774 Hash.call(this, 64, 56)
8775}
8776
8777inherits(Sha256, Hash)
8778
8779Sha256.prototype.init = function () {
8780 this._a = 0x6a09e667 | 0
8781 this._b = 0xbb67ae85 | 0
8782 this._c = 0x3c6ef372 | 0
8783 this._d = 0xa54ff53a | 0
8784 this._e = 0x510e527f | 0
8785 this._f = 0x9b05688c | 0
8786 this._g = 0x1f83d9ab | 0
8787 this._h = 0x5be0cd19 | 0
ebd8d4e8 8788
ab78acc6
IC
8789 return this
8790}
ebd8d4e8 8791
ab78acc6
IC
8792function S (X, n) {
8793 return (X >>> n) | (X << (32 - n))
8794}
ebd8d4e8 8795
ab78acc6
IC
8796function R (X, n) {
8797 return (X >>> n)
8798}
ebd8d4e8 8799
ab78acc6
IC
8800function Ch (x, y, z) {
8801 return ((x & y) ^ ((~x) & z))
8802}
ebd8d4e8 8803
ab78acc6
IC
8804function Maj (x, y, z) {
8805 return ((x & y) ^ (x & z) ^ (y & z))
8806}
ebd8d4e8 8807
ab78acc6
IC
8808function Sigma0256 (x) {
8809 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8810}
ebd8d4e8 8811
ab78acc6
IC
8812function Sigma1256 (x) {
8813 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8814}
ebd8d4e8 8815
ab78acc6
IC
8816function Gamma0256 (x) {
8817 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8818}
ebd8d4e8 8819
ab78acc6
IC
8820function Gamma1256 (x) {
8821 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8822}
ebd8d4e8 8823
ab78acc6
IC
8824Sha256.prototype._update = function (M) {
8825 var W = this._w
ebd8d4e8 8826
ab78acc6
IC
8827 var a = this._a | 0
8828 var b = this._b | 0
8829 var c = this._c | 0
8830 var d = this._d | 0
8831 var e = this._e | 0
8832 var f = this._f | 0
8833 var g = this._g | 0
8834 var h = this._h | 0
ebd8d4e8 8835
ab78acc6 8836 var j = 0
ebd8d4e8 8837
ab78acc6
IC
8838 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8839 function loop (w) {
8840 W[j] = w
ebd8d4e8 8841
ab78acc6
IC
8842 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8843 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8844
ab78acc6
IC
8845 h = g
8846 g = f
8847 f = e
8848 e = d + T1
8849 d = c
8850 c = b
8851 b = a
8852 a = T1 + T2
ebd8d4e8 8853
ab78acc6 8854 j++
ebd8d4e8
IC
8855 }
8856
ab78acc6
IC
8857 while (j < 16) loop(M.readInt32BE(j * 4))
8858 while (j < 64) loop(calcW())
ebd8d4e8 8859
ab78acc6
IC
8860 this._a = (a + this._a) | 0
8861 this._b = (b + this._b) | 0
8862 this._c = (c + this._c) | 0
8863 this._d = (d + this._d) | 0
8864 this._e = (e + this._e) | 0
8865 this._f = (f + this._f) | 0
8866 this._g = (g + this._g) | 0
8867 this._h = (h + this._h) | 0
8868}
ebd8d4e8 8869
ab78acc6
IC
8870Sha256.prototype._hash = function () {
8871 var H = new Buffer(32)
ebd8d4e8 8872
ab78acc6
IC
8873 H.writeInt32BE(this._a, 0)
8874 H.writeInt32BE(this._b, 4)
8875 H.writeInt32BE(this._c, 8)
8876 H.writeInt32BE(this._d, 12)
8877 H.writeInt32BE(this._e, 16)
8878 H.writeInt32BE(this._f, 20)
8879 H.writeInt32BE(this._g, 24)
8880 H.writeInt32BE(this._h, 28)
ebd8d4e8 8881
ab78acc6
IC
8882 return H
8883}
ebd8d4e8 8884
ab78acc6 8885module.exports = Sha256
ebd8d4e8 8886
ab78acc6
IC
8887}).call(this,require("buffer").Buffer)
8888},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8889(function (Buffer){
8890var inherits = require('inherits')
8891var SHA512 = require('./sha512')
8892var Hash = require('./hash')
ebd8d4e8 8893
ab78acc6 8894var W = new Array(160)
ebd8d4e8 8895
ab78acc6
IC
8896function Sha384 () {
8897 this.init()
8898 this._w = W
ebd8d4e8 8899
ab78acc6
IC
8900 Hash.call(this, 128, 112)
8901}
ebd8d4e8 8902
ab78acc6 8903inherits(Sha384, SHA512)
ebd8d4e8 8904
ab78acc6
IC
8905Sha384.prototype.init = function () {
8906 this._a = 0xcbbb9d5d | 0
8907 this._b = 0x629a292a | 0
8908 this._c = 0x9159015a | 0
8909 this._d = 0x152fecd8 | 0
8910 this._e = 0x67332667 | 0
8911 this._f = 0x8eb44a87 | 0
8912 this._g = 0xdb0c2e0d | 0
8913 this._h = 0x47b5481d | 0
ebd8d4e8 8914
ab78acc6
IC
8915 this._al = 0xc1059ed8 | 0
8916 this._bl = 0x367cd507 | 0
8917 this._cl = 0x3070dd17 | 0
8918 this._dl = 0xf70e5939 | 0
8919 this._el = 0xffc00b31 | 0
8920 this._fl = 0x68581511 | 0
8921 this._gl = 0x64f98fa7 | 0
8922 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8923
ab78acc6 8924 return this
ebd8d4e8
IC
8925}
8926
ab78acc6
IC
8927Sha384.prototype._hash = function () {
8928 var H = new Buffer(48)
ebd8d4e8 8929
ab78acc6
IC
8930 function writeInt64BE (h, l, offset) {
8931 H.writeInt32BE(h, offset)
8932 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8933 }
ebd8d4e8 8934
ab78acc6
IC
8935 writeInt64BE(this._a, this._al, 0)
8936 writeInt64BE(this._b, this._bl, 8)
8937 writeInt64BE(this._c, this._cl, 16)
8938 writeInt64BE(this._d, this._dl, 24)
8939 writeInt64BE(this._e, this._el, 32)
8940 writeInt64BE(this._f, this._fl, 40)
8941
8942 return H
ebd8d4e8
IC
8943}
8944
ab78acc6 8945module.exports = Sha384
ebd8d4e8 8946
ab78acc6
IC
8947}).call(this,require("buffer").Buffer)
8948},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8949(function (Buffer){
ab78acc6
IC
8950var inherits = require('inherits')
8951var Hash = require('./hash')
8952
8953var K = [
8954 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8955 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8956 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8957 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8958 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8959 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8960 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8961 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8962 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8963 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8964 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8965 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8966 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8967 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8968 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8969 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8970 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8971 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8972 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8973 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8974 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8975 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8976 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8977 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8978 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8979 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8980 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8981 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8982 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8983 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8984 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8985 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8986 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8987 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8988 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8989 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8990 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8991 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8992 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8993 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8994]
8995
8996var W = new Array(160)
8997
8998function Sha512 () {
8999 this.init()
9000 this._w = W
9001
9002 Hash.call(this, 128, 112)
9003}
9004
9005inherits(Sha512, Hash)
9006
9007Sha512.prototype.init = function () {
9008 this._a = 0x6a09e667 | 0
9009 this._b = 0xbb67ae85 | 0
9010 this._c = 0x3c6ef372 | 0
9011 this._d = 0xa54ff53a | 0
9012 this._e = 0x510e527f | 0
9013 this._f = 0x9b05688c | 0
9014 this._g = 0x1f83d9ab | 0
9015 this._h = 0x5be0cd19 | 0
9016
9017 this._al = 0xf3bcc908 | 0
9018 this._bl = 0x84caa73b | 0
9019 this._cl = 0xfe94f82b | 0
9020 this._dl = 0x5f1d36f1 | 0
9021 this._el = 0xade682d1 | 0
9022 this._fl = 0x2b3e6c1f | 0
9023 this._gl = 0xfb41bd6b | 0
9024 this._hl = 0x137e2179 | 0
ebd8d4e8 9025
ab78acc6 9026 return this
ebd8d4e8
IC
9027}
9028
ab78acc6
IC
9029function S (X, Xl, n) {
9030 return (X >>> n) | (Xl << (32 - n))
9031}
9032
9033function Ch (x, y, z) {
9034 return ((x & y) ^ ((~x) & z))
9035}
9036
9037function Maj (x, y, z) {
9038 return ((x & y) ^ (x & z) ^ (y & z))
9039}
9040
9041Sha512.prototype._update = function (M) {
9042 var W = this._w
9043
9044 var a = this._a | 0
9045 var b = this._b | 0
9046 var c = this._c | 0
9047 var d = this._d | 0
9048 var e = this._e | 0
9049 var f = this._f | 0
9050 var g = this._g | 0
9051 var h = this._h | 0
9052
9053 var al = this._al | 0
9054 var bl = this._bl | 0
9055 var cl = this._cl | 0
9056 var dl = this._dl | 0
9057 var el = this._el | 0
9058 var fl = this._fl | 0
9059 var gl = this._gl | 0
9060 var hl = this._hl | 0
9061
9062 var i = 0, j = 0
9063 var Wi, Wil
9064 function calcW () {
9065 var x = W[j - 15 * 2]
9066 var xl = W[j - 15 * 2 + 1]
9067 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9068 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9069
9070 x = W[j - 2 * 2]
9071 xl = W[j - 2 * 2 + 1]
9072 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9073 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9074
9075 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9076 var Wi7 = W[j - 7 * 2]
9077 var Wi7l = W[j - 7 * 2 + 1]
9078
9079 var Wi16 = W[j - 16 * 2]
9080 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9081
ab78acc6
IC
9082 Wil = gamma0l + Wi7l
9083 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9084 Wil = Wil + gamma1l
9085 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9086 Wil = Wil + Wi16l
9087 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9088 }
9089
9090 function loop () {
9091 W[j] = Wi
9092 W[j + 1] = Wil
ebd8d4e8 9093
ab78acc6
IC
9094 var maj = Maj(a, b, c)
9095 var majl = Maj(al, bl, cl)
ebd8d4e8 9096
ab78acc6
IC
9097 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9098 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9099 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9100 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9101
ab78acc6
IC
9102 // t1 = h + sigma1 + ch + K[i] + W[i]
9103 var Ki = K[j]
9104 var Kil = K[j + 1]
ebd8d4e8 9105
ab78acc6
IC
9106 var ch = Ch(e, f, g)
9107 var chl = Ch(el, fl, gl)
ebd8d4e8 9108
ab78acc6
IC
9109 var t1l = hl + sigma1l
9110 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9111 t1l = t1l + chl
9112 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9113 t1l = t1l + Kil
9114 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9115 t1l = t1l + Wil
9116 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9117
ab78acc6
IC
9118 // t2 = sigma0 + maj
9119 var t2l = sigma0l + majl
9120 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9121
ab78acc6
IC
9122 h = g
9123 hl = gl
9124 g = f
9125 gl = fl
9126 f = e
9127 fl = el
9128 el = (dl + t1l) | 0
9129 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9130 d = c
9131 dl = cl
9132 c = b
9133 cl = bl
9134 b = a
9135 bl = al
9136 al = (t1l + t2l) | 0
9137 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9138
9139 i++
9140 j += 2
9141 }
9142
9143 while (i < 16) {
9144 Wi = M.readInt32BE(j * 4)
9145 Wil = M.readInt32BE(j * 4 + 4)
9146
9147 loop()
9148 }
9149
9150 while (i < 80) {
9151 calcW()
9152 loop()
9153 }
9154
9155 this._al = (this._al + al) | 0
9156 this._bl = (this._bl + bl) | 0
9157 this._cl = (this._cl + cl) | 0
9158 this._dl = (this._dl + dl) | 0
9159 this._el = (this._el + el) | 0
9160 this._fl = (this._fl + fl) | 0
9161 this._gl = (this._gl + gl) | 0
9162 this._hl = (this._hl + hl) | 0
9163
9164 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9165 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9166 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9167 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9168 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9169 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9170 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9171 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9172}
9173
9174Sha512.prototype._hash = function () {
9175 var H = new Buffer(64)
9176
9177 function writeInt64BE (h, l, offset) {
9178 H.writeInt32BE(h, offset)
9179 H.writeInt32BE(l, offset + 4)
9180 }
9181
9182 writeInt64BE(this._a, this._al, 0)
9183 writeInt64BE(this._b, this._bl, 8)
9184 writeInt64BE(this._c, this._cl, 16)
9185 writeInt64BE(this._d, this._dl, 24)
9186 writeInt64BE(this._e, this._el, 32)
9187 writeInt64BE(this._f, this._fl, 40)
9188 writeInt64BE(this._g, this._gl, 48)
9189 writeInt64BE(this._h, this._hl, 56)
9190
9191 return H
9192}
9193
9194module.exports = Sha512
9195
9196}).call(this,require("buffer").Buffer)
9197},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9198(function (Buffer){
9199'use strict';
9200var createHash = require('create-hash/browser');
9201var inherits = require('inherits')
ebd8d4e8 9202
ab78acc6 9203var Transform = require('stream').Transform
ebd8d4e8 9204
ab78acc6
IC
9205var ZEROS = new Buffer(128)
9206ZEROS.fill(0)
ebd8d4e8 9207
ab78acc6
IC
9208function Hmac(alg, key) {
9209 Transform.call(this)
ebd8d4e8 9210
ab78acc6
IC
9211 if (typeof key === 'string') {
9212 key = new Buffer(key)
9213 }
ebd8d4e8 9214
ab78acc6 9215 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9216
ab78acc6
IC
9217 this._alg = alg
9218 this._key = key
ebd8d4e8 9219
ab78acc6
IC
9220 if (key.length > blocksize) {
9221 key = createHash(alg).update(key).digest()
ebd8d4e8 9222
ab78acc6
IC
9223 } else if (key.length < blocksize) {
9224 key = Buffer.concat([key, ZEROS], blocksize)
9225 }
ebd8d4e8 9226
ab78acc6
IC
9227 var ipad = this._ipad = new Buffer(blocksize)
9228 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9229
ab78acc6
IC
9230 for (var i = 0; i < blocksize; i++) {
9231 ipad[i] = key[i] ^ 0x36
9232 opad[i] = key[i] ^ 0x5C
9233 }
ebd8d4e8 9234
ab78acc6
IC
9235 this._hash = createHash(alg).update(ipad)
9236}
ebd8d4e8 9237
ab78acc6 9238inherits(Hmac, Transform)
ebd8d4e8 9239
ab78acc6
IC
9240Hmac.prototype.update = function (data, enc) {
9241 this._hash.update(data, enc)
ebd8d4e8 9242
ab78acc6
IC
9243 return this
9244}
ebd8d4e8 9245
ab78acc6
IC
9246Hmac.prototype._transform = function (data, _, next) {
9247 this._hash.update(data)
ebd8d4e8 9248
ab78acc6
IC
9249 next()
9250}
ebd8d4e8 9251
ab78acc6
IC
9252Hmac.prototype._flush = function (next) {
9253 this.push(this.digest())
ebd8d4e8 9254
ab78acc6
IC
9255 next()
9256}
ebd8d4e8 9257
ab78acc6
IC
9258Hmac.prototype.digest = function (enc) {
9259 var h = this._hash.digest()
ebd8d4e8 9260
ab78acc6
IC
9261 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9262}
ebd8d4e8 9263
ab78acc6
IC
9264module.exports = function createHmac(alg, key) {
9265 return new Hmac(alg, key)
9266}
ebd8d4e8 9267
ab78acc6
IC
9268}).call(this,require("buffer").Buffer)
9269},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9270arguments[4][12][0].apply(exports,arguments)
9271},{"dup":12}],47:[function(require,module,exports){
9272var assert = require('assert')
9273var BigInteger = require('bigi')
ebd8d4e8 9274
ab78acc6 9275var Point = require('./point')
ebd8d4e8
IC
9276
9277function Curve(p, a, b, Gx, Gy, n, h) {
9278 this.p = p
9279 this.a = a
9280 this.b = b
9281 this.G = Point.fromAffine(this, Gx, Gy)
9282 this.n = n
9283 this.h = h
9284
9285 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9286
9287 // result caching
9288 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9289}
9290
9291Curve.prototype.pointFromX = function(isOdd, x) {
9292 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9293 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9294
9295 var y = beta
9296 if (beta.isEven() ^ !isOdd) {
9297 y = this.p.subtract(y) // -y % p
9298 }
9299
9300 return Point.fromAffine(this, x, y)
9301}
9302
9303Curve.prototype.isInfinity = function(Q) {
9304 if (Q === this.infinity) return true
9305
9306 return Q.z.signum() === 0 && Q.y.signum() !== 0
9307}
9308
9309Curve.prototype.isOnCurve = function(Q) {
9310 if (this.isInfinity(Q)) return true
9311
9312 var x = Q.affineX
9313 var y = Q.affineY
9314 var a = this.a
9315 var b = this.b
9316 var p = this.p
9317
9318 // Check that xQ and yQ are integers in the interval [0, p - 1]
9319 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9320 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9321
9322 // and check that y^2 = x^3 + ax + b (mod p)
9323 var lhs = y.square().mod(p)
9324 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9325 return lhs.equals(rhs)
9326}
9327
9328/**
9329 * Validate an elliptic curve point.
9330 *
9331 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9332 */
9333Curve.prototype.validate = function(Q) {
9334 // Check Q != O
9335 assert(!this.isInfinity(Q), 'Point is at infinity')
9336 assert(this.isOnCurve(Q), 'Point is not on the curve')
9337
9338 // Check nQ = O (where Q is a scalar multiple of G)
9339 var nQ = Q.multiply(this.n)
9340 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9341
9342 return true
9343}
9344
9345module.exports = Curve
9346
ab78acc6 9347},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9348module.exports={
9349 "secp128r1": {
9350 "p": "fffffffdffffffffffffffffffffffff",
9351 "a": "fffffffdfffffffffffffffffffffffc",
9352 "b": "e87579c11079f43dd824993c2cee5ed3",
9353 "n": "fffffffe0000000075a30d1b9038a115",
9354 "h": "01",
9355 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9356 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9357 },
9358 "secp160k1": {
9359 "p": "fffffffffffffffffffffffffffffffeffffac73",
9360 "a": "00",
9361 "b": "07",
9362 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9363 "h": "01",
9364 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9365 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9366 },
9367 "secp160r1": {
9368 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9369 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9370 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9371 "n": "0100000000000000000001f4c8f927aed3ca752257",
9372 "h": "01",
9373 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9374 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9375 },
9376 "secp192k1": {
9377 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9378 "a": "00",
9379 "b": "03",
9380 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9381 "h": "01",
9382 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9383 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9384 },
9385 "secp192r1": {
9386 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9387 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9388 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9389 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9390 "h": "01",
9391 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9392 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9393 },
ebd8d4e8
IC
9394 "secp256k1": {
9395 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9396 "a": "00",
9397 "b": "07",
9398 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9399 "h": "01",
9400 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9401 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9402 },
9403 "secp256r1": {
9404 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9405 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9406 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9407 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9408 "h": "01",
9409 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9410 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9411 }
9412}
9413
ab78acc6
IC
9414},{}],49:[function(require,module,exports){
9415var Point = require('./point')
9416var Curve = require('./curve')
ebd8d4e8 9417
ab78acc6 9418var getCurveByName = require('./names')
ebd8d4e8
IC
9419
9420module.exports = {
9421 Curve: Curve,
9422 Point: Point,
9423 getCurveByName: getCurveByName
9424}
9425
ab78acc6
IC
9426},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9427var BigInteger = require('bigi')
ebd8d4e8 9428
ab78acc6
IC
9429var curves = require('./curves')
9430var Curve = require('./curve')
ebd8d4e8
IC
9431
9432function getCurveByName(name) {
9433 var curve = curves[name]
9434 if (!curve) return null
9435
9436 var p = new BigInteger(curve.p, 16)
9437 var a = new BigInteger(curve.a, 16)
9438 var b = new BigInteger(curve.b, 16)
9439 var n = new BigInteger(curve.n, 16)
9440 var h = new BigInteger(curve.h, 16)
9441 var Gx = new BigInteger(curve.Gx, 16)
9442 var Gy = new BigInteger(curve.Gy, 16)
9443
9444 return new Curve(p, a, b, Gx, Gy, n, h)
9445}
9446
9447module.exports = getCurveByName
9448
ab78acc6 9449},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9450(function (Buffer){
ab78acc6
IC
9451var assert = require('assert')
9452var BigInteger = require('bigi')
ebd8d4e8
IC
9453
9454var THREE = BigInteger.valueOf(3)
9455
9456function Point(curve, x, y, z) {
9457 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9458
9459 this.curve = curve
9460 this.x = x
9461 this.y = y
9462 this.z = z
9463 this._zInv = null
9464
9465 this.compressed = true
9466}
9467
9468Object.defineProperty(Point.prototype, 'zInv', {
9469 get: function() {
9470 if (this._zInv === null) {
9471 this._zInv = this.z.modInverse(this.curve.p)
9472 }
9473
9474 return this._zInv
9475 }
9476})
9477
9478Object.defineProperty(Point.prototype, 'affineX', {
9479 get: function() {
9480 return this.x.multiply(this.zInv).mod(this.curve.p)
9481 }
9482})
9483
9484Object.defineProperty(Point.prototype, 'affineY', {
9485 get: function() {
9486 return this.y.multiply(this.zInv).mod(this.curve.p)
9487 }
9488})
9489
9490Point.fromAffine = function(curve, x, y) {
9491 return new Point(curve, x, y, BigInteger.ONE)
9492}
9493
9494Point.prototype.equals = function(other) {
9495 if (other === this) return true
9496 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9497 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9498
9499 // u = Y2 * Z1 - Y1 * Z2
9500 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9501
9502 if (u.signum() !== 0) return false
9503
9504 // v = X2 * Z1 - X1 * Z2
9505 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9506
9507 return v.signum() === 0
9508}
9509
9510Point.prototype.negate = function() {
9511 var y = this.curve.p.subtract(this.y)
9512
9513 return new Point(this.curve, this.x, y, this.z)
9514}
9515
9516Point.prototype.add = function(b) {
9517 if (this.curve.isInfinity(this)) return b
9518 if (this.curve.isInfinity(b)) return this
9519
9520 var x1 = this.x
9521 var y1 = this.y
9522 var x2 = b.x
9523 var y2 = b.y
9524
9525 // u = Y2 * Z1 - Y1 * Z2
9526 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9527 // v = X2 * Z1 - X1 * Z2
9528 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9529
9530 if (v.signum() === 0) {
9531 if (u.signum() === 0) {
9532 return this.twice() // this == b, so double
9533 }
9534
9535 return this.curve.infinity // this = -b, so infinity
9536 }
9537
9538 var v2 = v.square()
9539 var v3 = v2.multiply(v)
9540 var x1v2 = x1.multiply(v2)
9541 var zu2 = u.square().multiply(this.z)
9542
9543 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9544 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9545 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9546 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)
9547 // z3 = v^3 * z1 * z2
9548 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9549
9550 return new Point(this.curve, x3, y3, z3)
9551}
9552
9553Point.prototype.twice = function() {
9554 if (this.curve.isInfinity(this)) return this
9555 if (this.y.signum() === 0) return this.curve.infinity
9556
9557 var x1 = this.x
9558 var y1 = this.y
9559
9560 var y1z1 = y1.multiply(this.z)
9561 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9562 var a = this.curve.a
9563
9564 // w = 3 * x1^2 + a * z1^2
9565 var w = x1.square().multiply(THREE)
9566
9567 if (a.signum() !== 0) {
9568 w = w.add(this.z.square().multiply(a))
9569 }
9570
9571 w = w.mod(this.curve.p)
9572 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9573 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9574 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9575 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9576 // z3 = 8 * (y1 * z1)^3
9577 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9578
9579 return new Point(this.curve, x3, y3, z3)
9580}
9581
9582// Simple NAF (Non-Adjacent Form) multiplication algorithm
9583// TODO: modularize the multiplication algorithm
9584Point.prototype.multiply = function(k) {
9585 if (this.curve.isInfinity(this)) return this
9586 if (k.signum() === 0) return this.curve.infinity
9587
9588 var e = k
9589 var h = e.multiply(THREE)
9590
9591 var neg = this.negate()
9592 var R = this
9593
9594 for (var i = h.bitLength() - 2; i > 0; --i) {
9595 R = R.twice()
9596
9597 var hBit = h.testBit(i)
9598 var eBit = e.testBit(i)
9599
9600 if (hBit != eBit) {
9601 R = R.add(hBit ? this : neg)
9602 }
9603 }
9604
9605 return R
9606}
9607
9608// Compute this*j + x*k (simultaneous multiplication)
9609Point.prototype.multiplyTwo = function(j, x, k) {
9610 var i
9611
9612 if (j.bitLength() > k.bitLength())
9613 i = j.bitLength() - 1
9614 else
9615 i = k.bitLength() - 1
9616
9617 var R = this.curve.infinity
9618 var both = this.add(x)
9619
9620 while (i >= 0) {
9621 R = R.twice()
9622
9623 var jBit = j.testBit(i)
9624 var kBit = k.testBit(i)
9625
9626 if (jBit) {
9627 if (kBit) {
9628 R = R.add(both)
9629
9630 } else {
9631 R = R.add(this)
9632 }
9633
9634 } else {
9635 if (kBit) {
9636 R = R.add(x)
9637 }
9638 }
9639 --i
9640 }
9641
9642 return R
9643}
9644
9645Point.prototype.getEncoded = function(compressed) {
9646 if (compressed == undefined) compressed = this.compressed
9647 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9648
9649 var x = this.affineX
9650 var y = this.affineY
9651
9652 var buffer
9653
9654 // Determine size of q in bytes
9655 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9656
9657 // 0x02/0x03 | X
9658 if (compressed) {
9659 buffer = new Buffer(1 + byteLength)
9660 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9661
9662 // 0x04 | X | Y
9663 } else {
9664 buffer = new Buffer(1 + byteLength + byteLength)
9665 buffer.writeUInt8(0x04, 0)
9666
9667 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9668 }
9669
9670 x.toBuffer(byteLength).copy(buffer, 1)
9671
9672 return buffer
9673}
9674
9675Point.decodeFrom = function(curve, buffer) {
9676 var type = buffer.readUInt8(0)
9677 var compressed = (type !== 4)
9678
ebd8d4e8 9679 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9680 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9681
9682 var Q
9683 if (compressed) {
9684 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9685 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9686
9687 var isOdd = (type === 0x03)
9688 Q = curve.pointFromX(isOdd, x)
9689
9690 } else {
9691 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9692
9693 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9694 Q = Point.fromAffine(curve, x, y)
9695 }
9696
9697 Q.compressed = compressed
9698 return Q
9699}
9700
9701Point.prototype.toString = function () {
9702 if (this.curve.isInfinity(this)) return '(INFINITY)'
9703
9704 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9705}
9706
9707module.exports = Point
9708
ab78acc6
IC
9709}).call(this,require("buffer").Buffer)
9710},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9711(function (process,global,Buffer){
9712'use strict';
ebd8d4e8 9713
ab78acc6
IC
9714var crypto = global.crypto || global.msCrypto
9715if(crypto && crypto.getRandomValues) {
9716 module.exports = randomBytes;
9717} else {
9718 module.exports = oldBrowser;
9719}
9720function randomBytes(size, cb) {
9721 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9722 /* This will not work in older browsers.
9723 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9724 */
9725
9726 crypto.getRandomValues(bytes);
9727 if (typeof cb === 'function') {
9728 return process.nextTick(function () {
9729 cb(null, bytes);
9730 });
ebd8d4e8 9731 }
ab78acc6
IC
9732 return bytes;
9733}
9734function oldBrowser() {
9735 throw new Error(
9736 'secure random number generation not supported by this browser\n'+
9737 'use chrome, FireFox or Internet Explorer 11'
9738 )
ebd8d4e8
IC
9739}
9740
ab78acc6
IC
9741}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9742},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9743(function (Buffer){
9744'use strict';
ebd8d4e8 9745
ab78acc6
IC
9746function getFunctionName(fn) {
9747 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9748}
9749
9750function getTypeTypeName(type) {
9751 if (nativeTypes.Function(type)) {
9752 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9753 }
ab78acc6
IC
9754 if (nativeTypes.Object(type)) return JSON.stringify(type);
9755
9756 return type;
ebd8d4e8
IC
9757}
9758
ab78acc6
IC
9759function getValueTypeName(value) {
9760 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9761
ab78acc6
IC
9762 return getFunctionName(value.constructor);
9763}
9764
9765function tfErrorString(type, value) {
9766 var typeTypeName = getTypeTypeName(type);
9767 var valueTypeName = getValueTypeName(value);
9768
9769 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9770}
9771
9772function tfPropertyErrorString(type, name, value) {
9773 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9774}
9775
9776var nativeTypes = {
9777 Array: (function (_Array) {
9778 function Array(_x) {
9779 return _Array.apply(this, arguments);
9780 }
9781
9782 Array.toString = function () {
9783 return _Array.toString();
9784 };
9785
9786 return Array;
9787 })(function (value) {
9788 return value !== null && value !== undefined && value.constructor === Array;
9789 }),
9790 Boolean: function Boolean(value) {
9791 return typeof value === 'boolean';
9792 },
9793 Buffer: (function (_Buffer) {
9794 function Buffer(_x2) {
9795 return _Buffer.apply(this, arguments);
9796 }
9797
9798 Buffer.toString = function () {
9799 return _Buffer.toString();
9800 };
9801
9802 return Buffer;
9803 })(function (value) {
9804 return Buffer.isBuffer(value);
9805 }),
9806 Function: function Function(value) {
9807 return typeof value === 'function';
9808 },
9809 Null: function Null(value) {
9810 return value === undefined || value === null;
9811 },
9812 Number: function Number(value) {
9813 return typeof value === 'number';
9814 },
9815 Object: function Object(value) {
9816 return typeof value === 'object';
9817 },
9818 String: function String(value) {
9819 return typeof value === 'string';
9820 },
9821 '': function _() {
9822 return true;
ebd8d4e8 9823 }
ab78acc6
IC
9824};
9825
9826function tJSON(type) {
9827 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9828}
9829
ab78acc6
IC
9830function sJSON(type) {
9831 var json = tJSON(type);
9832 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9833}
9834
ab78acc6
IC
9835var otherTypes = {
9836 arrayOf: function arrayOf(type) {
9837 function arrayOf(value, strict) {
9838 try {
9839 return nativeTypes.Array(value) && value.every(function (x) {
9840 return typeforce(type, x, strict);
9841 });
9842 } catch (e) {
9843 return false;
9844 }
9845 }
9846 arrayOf.toJSON = function () {
9847 return [tJSON(type)];
9848 };
9849
9850 return arrayOf;
9851 },
9852
9853 maybe: function maybe(type) {
9854 function maybe(value, strict) {
9855 return nativeTypes.Null(value) || typeforce(type, value, strict);
9856 }
9857 maybe.toJSON = function () {
9858 return '?' + sJSON(type);
9859 };
9860
9861 return maybe;
9862 },
9863
9864 object: function object(type) {
9865 function object(value, strict) {
9866 typeforce(nativeTypes.Object, value, strict);
9867
9868 var propertyName, propertyType, propertyValue;
9869
9870 try {
9871 for (propertyName in type) {
9872 propertyType = type[propertyName];
9873 propertyValue = value[propertyName];
9874
9875 typeforce(propertyType, propertyValue, strict);
9876 }
9877 } catch (e) {
9878 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9879 }
9880
9881 if (strict) {
9882 for (propertyName in value) {
9883 if (type[propertyName]) continue;
9884
9885 throw new TypeError('Unexpected property "' + propertyName + '"');
9886 }
9887 }
9888
9889 return true;
9890 }
9891 object.toJSON = function () {
9892 return type;
9893 };
9894
9895 return object;
9896 },
9897
9898 oneOf: function oneOf() {
9899 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9900 types[_key] = arguments[_key];
9901 }
9902
9903 function oneOf(value, strict) {
9904 return types.some(function (type) {
9905 try {
9906 return typeforce(type, value, strict);
9907 } catch (e) {
9908 return false;
9909 }
9910 });
9911 }
9912 oneOf.toJSON = function () {
9913 return types.map(sJSON).join('|');
9914 };
9915
9916 return oneOf;
9917 },
9918
9919 quacksLike: function quacksLike(type) {
9920 function quacksLike(value, strict) {
9921 return type === getValueTypeName(value);
9922 }
9923 quacksLike.toJSON = function () {
9924 return type;
9925 };
9926
9927 return quacksLike;
9928 },
9929
9930 tuple: function tuple() {
9931 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9932 types[_key2] = arguments[_key2];
9933 }
9934
9935 function tuple(value, strict) {
9936 return types.every(function (type, i) {
9937 return typeforce(type, value[i], strict);
9938 });
9939 }
9940 tuple.toJSON = function () {
9941 return '(' + types.map(sJSON).join(', ') + ')';
9942 };
9943
9944 return tuple;
9945 },
9946
9947 value: function value(expected) {
9948 function value(actual) {
9949 return actual === expected;
9950 }
9951 value.toJSON = function () {
9952 return expected;
9953 };
9954
9955 return value;
9956 }
9957};
9958
9959function compile(type) {
9960 if (nativeTypes.String(type)) {
9961 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9962
9963 return nativeTypes[type] || otherTypes.quacksLike(type);
9964 } else if (type && nativeTypes.Object(type)) {
9965 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9966
9967 var compiled = {};
9968
9969 for (var propertyName in type) {
9970 compiled[propertyName] = compile(type[propertyName]);
9971 }
9972
9973 return otherTypes.object(compiled);
9974 } else if (nativeTypes.Function(type)) {
9975 return type;
9976 }
9977
9978 return otherTypes.value(type);
ebd8d4e8
IC
9979}
9980
ab78acc6
IC
9981function typeforce(_x3, _x4, _x5) {
9982 var _again = true;
9983
9984 _function: while (_again) {
9985 var type = _x3,
9986 value = _x4,
9987 strict = _x5;
9988 _again = false;
9989
9990 if (nativeTypes.Function(type)) {
9991 if (type(value, strict)) return true;
9992
9993 throw new TypeError(tfErrorString(type, value));
9994 }
9995
9996 // JIT
9997 _x3 = compile(type);
9998 _x4 = value;
9999 _x5 = strict;
10000 _again = true;
10001 continue _function;
10002 }
ebd8d4e8
IC
10003}
10004
ab78acc6
IC
10005// assign all types to typeforce function
10006var typeName;
10007Object.keys(nativeTypes).forEach(function (typeName) {
10008 var nativeType = nativeTypes[typeName];
10009 nativeType.toJSON = function () {
10010 return typeName;
10011 };
10012
10013 typeforce[typeName] = nativeType;
10014});
ebd8d4e8 10015
ab78acc6
IC
10016for (typeName in otherTypes) {
10017 typeforce[typeName] = otherTypes[typeName];
10018}
ebd8d4e8 10019
ab78acc6
IC
10020module.exports = typeforce;
10021module.exports.compile = compile;
10022}).call(this,require("buffer").Buffer)
10023},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10024(function (Buffer){
ab78acc6
IC
10025var assert = require('assert')
10026var base58check = require('bs58check')
10027var typeForce = require('typeforce')
10028var networks = require('./networks')
10029var scripts = require('./scripts')
ebd8d4e8 10030
ab78acc6 10031function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10032 for (var networkName in networks) {
10033 var network = networks[networkName]
10034
10035 if (version === network.pubKeyHash) return 'pubkeyhash'
10036 if (version === network.scriptHash) return 'scripthash'
10037 }
10038}
10039
ab78acc6
IC
10040function Address (hash, version) {
10041 typeForce('Buffer', hash)
10042
ebd8d4e8
IC
10043 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10044 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10045
10046 this.hash = hash
10047 this.version = version
10048}
10049
ab78acc6 10050Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10051 var payload = base58check.decode(string)
10052 var version = payload.readUInt8(0)
10053 var hash = payload.slice(1)
10054
10055 return new Address(hash, version)
10056}
10057
ab78acc6 10058Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10059 network = network || networks.bitcoin
10060
ab78acc6
IC
10061 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10062 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10063
ab78acc6 10064 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10065}
10066
ebd8d4e8
IC
10067Address.prototype.toBase58Check = function () {
10068 var payload = new Buffer(21)
10069 payload.writeUInt8(this.version, 0)
10070 this.hash.copy(payload, 1)
10071
10072 return base58check.encode(payload)
10073}
10074
ab78acc6 10075Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10076 var scriptType = findScriptTypeByVersion(this.version)
10077
10078 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10079 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10080
ab78acc6
IC
10081 assert(false, this.toString() + ' has no matching Script')
10082}
10083
10084Address.prototype.toString = Address.prototype.toBase58Check
10085
10086module.exports = Address
10087
10088}).call(this,require("buffer").Buffer)
10089},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10090var bs58check = require('bs58check')
10091
10092function decode () {
10093 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10094
10095 return bs58check.decode.apply(undefined, arguments)
10096}
10097
10098function encode () {
10099 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10100
10101 return bs58check.encode.apply(undefined, arguments)
10102}
10103
10104module.exports = {
10105 decode: decode,
10106 encode: encode
10107}
10108
10109},{"bs58check":31}],56:[function(require,module,exports){
10110(function (Buffer){
10111var assert = require('assert')
10112var bufferutils = require('./bufferutils')
10113var crypto = require('./crypto')
10114
10115var Transaction = require('./transaction')
10116
10117function Block () {
10118 this.version = 1
10119 this.prevHash = null
10120 this.merkleRoot = null
10121 this.timestamp = 0
10122 this.bits = 0
10123 this.nonce = 0
10124}
10125
10126Block.fromBuffer = function (buffer) {
10127 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10128
10129 var offset = 0
10130 function readSlice (n) {
10131 offset += n
10132 return buffer.slice(offset - n, offset)
10133 }
10134
10135 function readUInt32 () {
10136 var i = buffer.readUInt32LE(offset)
10137 offset += 4
10138 return i
10139 }
10140
10141 var block = new Block()
10142 block.version = readUInt32()
10143 block.prevHash = readSlice(32)
10144 block.merkleRoot = readSlice(32)
10145 block.timestamp = readUInt32()
10146 block.bits = readUInt32()
10147 block.nonce = readUInt32()
10148
10149 if (buffer.length === 80) return block
10150
10151 function readVarInt () {
10152 var vi = bufferutils.readVarInt(buffer, offset)
10153 offset += vi.size
10154 return vi.number
10155 }
10156
10157 // FIXME: poor performance
10158 function readTransaction () {
10159 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10160
10161 offset += tx.toBuffer().length
10162 return tx
10163 }
10164
10165 var nTransactions = readVarInt()
10166 block.transactions = []
10167
10168 for (var i = 0; i < nTransactions; ++i) {
10169 var tx = readTransaction()
10170 block.transactions.push(tx)
10171 }
10172
10173 return block
10174}
10175
10176Block.fromHex = function (hex) {
10177 return Block.fromBuffer(new Buffer(hex, 'hex'))
10178}
10179
10180Block.prototype.getHash = function () {
10181 return crypto.hash256(this.toBuffer(true))
10182}
10183
10184Block.prototype.getId = function () {
10185 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10186}
10187
ab78acc6
IC
10188Block.prototype.getUTCDate = function () {
10189 var date = new Date(0) // epoch
10190 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10191
ab78acc6
IC
10192 return date
10193}
ebd8d4e8 10194
ab78acc6
IC
10195Block.prototype.toBuffer = function (headersOnly) {
10196 var buffer = new Buffer(80)
ebd8d4e8 10197
ab78acc6
IC
10198 var offset = 0
10199 function writeSlice (slice) {
10200 slice.copy(buffer, offset)
10201 offset += slice.length
10202 }
ebd8d4e8 10203
ab78acc6
IC
10204 function writeUInt32 (i) {
10205 buffer.writeUInt32LE(i, offset)
10206 offset += 4
10207 }
ebd8d4e8 10208
ab78acc6
IC
10209 writeUInt32(this.version)
10210 writeSlice(this.prevHash)
10211 writeSlice(this.merkleRoot)
10212 writeUInt32(this.timestamp)
10213 writeUInt32(this.bits)
10214 writeUInt32(this.nonce)
ebd8d4e8 10215
ab78acc6 10216 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10217
ab78acc6
IC
10218 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10219 var txBuffers = this.transactions.map(function (tx) {
10220 return tx.toBuffer()
10221 })
ebd8d4e8 10222
ab78acc6 10223 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10224}
10225
ab78acc6
IC
10226Block.prototype.toHex = function (headersOnly) {
10227 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10228}
10229
ab78acc6
IC
10230module.exports = Block
10231
10232}).call(this,require("buffer").Buffer)
10233},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10234(function (Buffer){
10235var assert = require('assert')
10236var opcodes = require('./opcodes')
ebd8d4e8
IC
10237
10238// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10239function verifuint (value, max) {
ebd8d4e8
IC
10240 assert(typeof value === 'number', 'cannot write a non-number as a number')
10241 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10242 assert(value <= max, 'value is larger than maximum value for type')
10243 assert(Math.floor(value) === value, 'value has a fractional component')
10244}
10245
ab78acc6 10246function pushDataSize (i) {
ebd8d4e8 10247 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10248 : i < 0xff ? 2
10249 : i < 0xffff ? 3
10250 : 5
ebd8d4e8
IC
10251}
10252
ab78acc6 10253function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10254 var opcode = buffer.readUInt8(offset)
10255 var number, size
10256
10257 // ~6 bit
10258 if (opcode < opcodes.OP_PUSHDATA1) {
10259 number = opcode
10260 size = 1
10261
10262 // 8 bit
10263 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10264 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10265 number = buffer.readUInt8(offset + 1)
10266 size = 2
10267
10268 // 16 bit
10269 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10270 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10271 number = buffer.readUInt16LE(offset + 1)
10272 size = 3
10273
10274 // 32 bit
10275 } else {
ab78acc6 10276 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10277 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10278
10279 number = buffer.readUInt32LE(offset + 1)
10280 size = 5
ebd8d4e8
IC
10281 }
10282
10283 return {
10284 opcode: opcode,
10285 number: number,
10286 size: size
10287 }
10288}
10289
ab78acc6 10290function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10291 var a = buffer.readUInt32LE(offset)
10292 var b = buffer.readUInt32LE(offset + 4)
10293 b *= 0x100000000
10294
10295 verifuint(b + a, 0x001fffffffffffff)
10296
10297 return b + a
10298}
10299
ab78acc6 10300function readVarInt (buffer, offset) {
ebd8d4e8
IC
10301 var t = buffer.readUInt8(offset)
10302 var number, size
10303
10304 // 8 bit
10305 if (t < 253) {
10306 number = t
10307 size = 1
10308
10309 // 16 bit
10310 } else if (t < 254) {
10311 number = buffer.readUInt16LE(offset + 1)
10312 size = 3
10313
10314 // 32 bit
10315 } else if (t < 255) {
10316 number = buffer.readUInt32LE(offset + 1)
10317 size = 5
10318
10319 // 64 bit
10320 } else {
10321 number = readUInt64LE(buffer, offset + 1)
10322 size = 9
10323 }
10324
10325 return {
10326 number: number,
10327 size: size
10328 }
10329}
10330
ab78acc6 10331function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10332 var size = pushDataSize(number)
10333
10334 // ~6 bit
10335 if (size === 1) {
10336 buffer.writeUInt8(number, offset)
10337
10338 // 8 bit
10339 } else if (size === 2) {
10340 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10341 buffer.writeUInt8(number, offset + 1)
10342
10343 // 16 bit
10344 } else if (size === 3) {
10345 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10346 buffer.writeUInt16LE(number, offset + 1)
10347
10348 // 32 bit
10349 } else {
10350 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10351 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10352 }
10353
10354 return size
10355}
10356
ab78acc6 10357function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10358 verifuint(value, 0x001fffffffffffff)
10359
10360 buffer.writeInt32LE(value & -1, offset)
10361 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10362}
10363
ab78acc6
IC
10364function varIntSize (i) {
10365 return i < 253 ? 1
10366 : i < 0x10000 ? 3
10367 : i < 0x100000000 ? 5
10368 : 9
ebd8d4e8
IC
10369}
10370
ab78acc6 10371function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10372 var size = varIntSize(number)
10373
10374 // 8 bit
10375 if (size === 1) {
10376 buffer.writeUInt8(number, offset)
10377
10378 // 16 bit
10379 } else if (size === 3) {
10380 buffer.writeUInt8(253, offset)
10381 buffer.writeUInt16LE(number, offset + 1)
10382
10383 // 32 bit
10384 } else if (size === 5) {
10385 buffer.writeUInt8(254, offset)
10386 buffer.writeUInt32LE(number, offset + 1)
10387
10388 // 64 bit
10389 } else {
10390 buffer.writeUInt8(255, offset)
10391 writeUInt64LE(buffer, number, offset + 1)
10392 }
10393
10394 return size
10395}
10396
ab78acc6
IC
10397function varIntBuffer (i) {
10398 var size = varIntSize(i)
10399 var buffer = new Buffer(size)
10400 writeVarInt(buffer, i, 0)
10401
10402 return buffer
10403}
10404
10405function reverse (buffer) {
10406 var buffer2 = new Buffer(buffer)
10407 Array.prototype.reverse.call(buffer2)
10408 return buffer2
10409}
10410
ebd8d4e8
IC
10411module.exports = {
10412 pushDataSize: pushDataSize,
10413 readPushDataInt: readPushDataInt,
10414 readUInt64LE: readUInt64LE,
10415 readVarInt: readVarInt,
ab78acc6
IC
10416 reverse: reverse,
10417 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10418 varIntSize: varIntSize,
10419 writePushDataInt: writePushDataInt,
10420 writeUInt64LE: writeUInt64LE,
10421 writeVarInt: writeVarInt
10422}
10423
ab78acc6
IC
10424}).call(this,require("buffer").Buffer)
10425},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10426var createHash = require('create-hash')
ebd8d4e8 10427
ab78acc6 10428function hash160 (buffer) {
ebd8d4e8
IC
10429 return ripemd160(sha256(buffer))
10430}
10431
ab78acc6 10432function hash256 (buffer) {
ebd8d4e8
IC
10433 return sha256(sha256(buffer))
10434}
10435
ab78acc6
IC
10436function ripemd160 (buffer) {
10437 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10438}
10439
ab78acc6
IC
10440function sha1 (buffer) {
10441 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10442}
10443
ab78acc6
IC
10444function sha256 (buffer) {
10445 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10446}
10447
10448// FIXME: Name not consistent with others
ab78acc6 10449var createHmac = require('create-hmac')
ebd8d4e8 10450
ab78acc6
IC
10451function HmacSHA256 (buffer, secret) {
10452 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10453 return createHmac('sha256', secret).update(buffer).digest()
10454}
ebd8d4e8 10455
ab78acc6
IC
10456function HmacSHA512 (buffer, secret) {
10457 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10458 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10459}
10460
10461module.exports = {
10462 ripemd160: ripemd160,
10463 sha1: sha1,
10464 sha256: sha256,
10465 hash160: hash160,
10466 hash256: hash256,
10467 HmacSHA256: HmacSHA256,
10468 HmacSHA512: HmacSHA512
10469}
10470
ab78acc6 10471},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10472(function (Buffer){
ab78acc6
IC
10473var assert = require('assert')
10474var createHmac = require('create-hmac')
10475var typeForce = require('typeforce')
ebd8d4e8 10476
ab78acc6
IC
10477var BigInteger = require('bigi')
10478var ECSignature = require('./ecsignature')
10479
10480var ZERO = new Buffer([0])
10481var ONE = new Buffer([1])
ebd8d4e8
IC
10482
10483// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10484function deterministicGenerateK (curve, hash, d, checkSig) {
10485 typeForce('Buffer', hash)
10486 typeForce('BigInteger', d)
10487
10488 // FIXME: remove/uncomment for 2.0.0
10489 // typeForce('Function', checkSig)
10490
10491 if (typeof checkSig !== 'function') {
10492 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10493
10494 checkSig = function (k) {
10495 var G = curve.G
10496 var n = curve.n
10497 var e = BigInteger.fromBuffer(hash)
10498
10499 var Q = G.multiply(k)
10500
10501 if (curve.isInfinity(Q))
10502 return false
10503
10504 var r = Q.affineX.mod(n)
10505 if (r.signum() === 0)
10506 return false
10507
10508 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10509 if (s.signum() === 0)
10510 return false
10511
10512 return true
10513 }
10514 }
10515
10516 // sanity check
ebd8d4e8 10517 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10518
10519 var x = d.toBuffer(32)
10520 var k = new Buffer(32)
10521 var v = new Buffer(32)
10522
ab78acc6 10523 // Step A, ignored as hash already provided
ebd8d4e8
IC
10524 // Step B
10525 v.fill(1)
10526
10527 // Step C
10528 k.fill(0)
10529
10530 // Step D
ab78acc6
IC
10531 k = createHmac('sha256', k)
10532 .update(v)
10533 .update(ZERO)
10534 .update(x)
10535 .update(hash)
10536 .digest()
ebd8d4e8
IC
10537
10538 // Step E
ab78acc6 10539 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10540
10541 // Step F
ab78acc6
IC
10542 k = createHmac('sha256', k)
10543 .update(v)
10544 .update(ONE)
10545 .update(x)
10546 .update(hash)
10547 .digest()
ebd8d4e8
IC
10548
10549 // Step G
ab78acc6 10550 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10551
10552 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10553 // Step H2b
ab78acc6 10554 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10555
10556 var T = BigInteger.fromBuffer(v)
10557
ab78acc6
IC
10558 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10559 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10560 k = createHmac('sha256', k)
10561 .update(v)
10562 .update(ZERO)
10563 .digest()
10564
10565 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10566
ab78acc6
IC
10567 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10568 // Step H2b again
10569 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10570 T = BigInteger.fromBuffer(v)
10571 }
10572
10573 return T
10574}
10575
ab78acc6
IC
10576function sign (curve, hash, d) {
10577 var r, s
ebd8d4e8 10578
ab78acc6 10579 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10580 var n = curve.n
10581 var G = curve.G
ebd8d4e8 10582
ab78acc6
IC
10583 deterministicGenerateK(curve, hash, d, function (k) {
10584 var Q = G.multiply(k)
10585
10586 if (curve.isInfinity(Q))
10587 return false
10588
10589 r = Q.affineX.mod(n)
10590 if (r.signum() === 0)
10591 return false
10592
10593 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10594 if (s.signum() === 0)
10595 return false
ebd8d4e8 10596
ab78acc6
IC
10597 return true
10598 })
ebd8d4e8
IC
10599
10600 var N_OVER_TWO = n.shiftRight(1)
10601
10602 // enforce low S values, see bip62: 'low s values in signatures'
10603 if (s.compareTo(N_OVER_TWO) > 0) {
10604 s = n.subtract(s)
10605 }
10606
10607 return new ECSignature(r, s)
10608}
10609
ab78acc6 10610function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10611 var n = curve.n
10612 var G = curve.G
10613
10614 var r = signature.r
10615 var s = signature.s
10616
ab78acc6
IC
10617 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10618 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10619 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10620
ab78acc6 10621 // c = s^-1 mod n
ebd8d4e8
IC
10622 var c = s.modInverse(n)
10623
ab78acc6
IC
10624 // 1.4.4 Compute u1 = es^−1 mod n
10625 // u2 = rs^−1 mod n
ebd8d4e8
IC
10626 var u1 = e.multiply(c).mod(n)
10627 var u2 = r.multiply(c).mod(n)
10628
ab78acc6
IC
10629 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10630 var R = G.multiplyTwo(u1, Q, u2)
10631 var v = R.affineX.mod(n)
ebd8d4e8 10632
ab78acc6
IC
10633 // 1.4.5 (cont.) Enforce R is not at infinity
10634 if (curve.isInfinity(R)) return false
10635
10636 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10637 return v.equals(r)
10638}
10639
ab78acc6
IC
10640function verify (curve, hash, signature, Q) {
10641 // 1.4.2 H = Hash(M), already done by the user
10642 // 1.4.3 e = H
10643 var e = BigInteger.fromBuffer(hash)
10644
10645 return verifyRaw(curve, e, signature, Q)
10646}
10647
ebd8d4e8
IC
10648/**
10649 * Recover a public key from a signature.
10650 *
10651 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10652 * Key Recovery Operation".
10653 *
10654 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10655 */
ab78acc6 10656function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10657 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10658
ab78acc6
IC
10659 var n = curve.n
10660 var G = curve.G
10661
ebd8d4e8
IC
10662 var r = signature.r
10663 var s = signature.s
10664
ab78acc6
IC
10665 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10666 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10667
ebd8d4e8
IC
10668 // A set LSB signifies that the y-coordinate is odd
10669 var isYOdd = i & 1
10670
10671 // The more significant bit specifies whether we should use the
10672 // first or second candidate key.
10673 var isSecondKey = i >> 1
10674
ebd8d4e8
IC
10675 // 1.1 Let x = r + jn
10676 var x = isSecondKey ? r.add(n) : r
10677 var R = curve.pointFromX(isYOdd, x)
10678
10679 // 1.4 Check that nR is at infinity
10680 var nR = R.multiply(n)
10681 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10682
10683 // Compute -e from e
10684 var eNeg = e.negate().mod(n)
10685
10686 // 1.6.1 Compute Q = r^-1 (sR - eG)
10687 // Q = r^-1 (sR + -eG)
10688 var rInv = r.modInverse(n)
10689
10690 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10691 curve.validate(Q)
10692
10693 return Q
10694}
10695
10696/**
10697 * Calculate pubkey extraction parameter.
10698 *
10699 * When extracting a pubkey from a signature, we have to
10700 * distinguish four different cases. Rather than putting this
10701 * burden on the verifier, Bitcoin includes a 2-bit value with the
10702 * signature.
10703 *
10704 * This function simply tries all four cases and returns the value
10705 * that resulted in a successful pubkey recovery.
10706 */
ab78acc6 10707function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10708 for (var i = 0; i < 4; i++) {
10709 var Qprime = recoverPubKey(curve, e, signature, i)
10710
10711 // 1.6.2 Verify Q
10712 if (Qprime.equals(Q)) {
10713 return i
10714 }
10715 }
10716
10717 throw new Error('Unable to find valid recovery factor')
10718}
10719
10720module.exports = {
10721 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10722 deterministicGenerateK: deterministicGenerateK,
10723 recoverPubKey: recoverPubKey,
10724 sign: sign,
10725 verify: verify,
10726 verifyRaw: verifyRaw
10727}
10728
ab78acc6
IC
10729}).call(this,require("buffer").Buffer)
10730},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10731(function (Buffer){
ab78acc6
IC
10732var assert = require('assert')
10733var base58check = require('bs58check')
10734var ecdsa = require('./ecdsa')
10735var networks = require('./networks')
10736var randomBytes = require('randombytes')
10737var typeForce = require('typeforce')
ebd8d4e8 10738
ab78acc6
IC
10739var BigInteger = require('bigi')
10740var ECPubKey = require('./ecpubkey')
ebd8d4e8 10741
ab78acc6
IC
10742var ecurve = require('ecurve')
10743var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10744
ab78acc6 10745function ECKey (d, compressed) {
ebd8d4e8 10746 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10747 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10748
ab78acc6 10749 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10750
10751 this.d = d
10752 this.pub = new ECPubKey(Q, compressed)
10753}
10754
ab78acc6
IC
10755// Constants
10756ECKey.curve = secp256k1
10757
ebd8d4e8 10758// Static constructors
ab78acc6 10759ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10760 var payload = base58check.decode(string)
10761 var compressed = false
10762
10763 // Ignore the version byte
10764 payload = payload.slice(1)
10765
10766 if (payload.length === 33) {
10767 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10768
10769 // Truncate the compression flag
10770 payload = payload.slice(0, -1)
10771 compressed = true
10772 }
10773
10774 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10775
10776 var d = BigInteger.fromBuffer(payload)
10777 return new ECKey(d, compressed)
10778}
10779
ab78acc6
IC
10780ECKey.makeRandom = function (compressed, rng) {
10781 rng = rng || randomBytes
ebd8d4e8
IC
10782
10783 var buffer = rng(32)
ab78acc6
IC
10784 typeForce('Buffer', buffer)
10785 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10786
10787 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10788 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10789
10790 return new ECKey(d, compressed)
10791}
10792
10793// Export functions
ab78acc6 10794ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10795 network = network || networks.bitcoin
10796
10797 var bufferLen = this.pub.compressed ? 34 : 33
10798 var buffer = new Buffer(bufferLen)
10799
10800 buffer.writeUInt8(network.wif, 0)
10801 this.d.toBuffer(32).copy(buffer, 1)
10802
10803 if (this.pub.compressed) {
10804 buffer.writeUInt8(0x01, 33)
10805 }
10806
10807 return base58check.encode(buffer)
10808}
10809
10810// Operations
ab78acc6
IC
10811ECKey.prototype.sign = function (hash) {
10812 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10813}
10814
10815module.exports = ECKey
10816
ab78acc6
IC
10817}).call(this,require("buffer").Buffer)
10818},{"./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 10819(function (Buffer){
ab78acc6
IC
10820var crypto = require('./crypto')
10821var ecdsa = require('./ecdsa')
10822var typeForce = require('typeforce')
10823var networks = require('./networks')
ebd8d4e8 10824
ab78acc6 10825var Address = require('./address')
ebd8d4e8 10826
ab78acc6
IC
10827var ecurve = require('ecurve')
10828var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10829
ab78acc6
IC
10830function ECPubKey (Q, compressed) {
10831 if (compressed === undefined) {
10832 compressed = true
10833 }
ebd8d4e8 10834
ab78acc6
IC
10835 typeForce('Point', Q)
10836 typeForce('Boolean', compressed)
ebd8d4e8
IC
10837
10838 this.compressed = compressed
10839 this.Q = Q
10840}
10841
ab78acc6
IC
10842// Constants
10843ECPubKey.curve = secp256k1
10844
ebd8d4e8 10845// Static constructors
ab78acc6
IC
10846ECPubKey.fromBuffer = function (buffer) {
10847 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10848 return new ECPubKey(Q, Q.compressed)
10849}
10850
ab78acc6 10851ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10852 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10853}
10854
10855// Operations
ab78acc6 10856ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10857 network = network || networks.bitcoin
10858
10859 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10860}
10861
ab78acc6
IC
10862ECPubKey.prototype.verify = function (hash, signature) {
10863 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10864}
10865
10866// Export functions
ab78acc6 10867ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10868 return this.Q.getEncoded(this.compressed)
10869}
10870
ab78acc6 10871ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10872 return this.toBuffer().toString('hex')
10873}
10874
10875module.exports = ECPubKey
10876
ab78acc6
IC
10877}).call(this,require("buffer").Buffer)
10878},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10879(function (Buffer){
ab78acc6
IC
10880var assert = require('assert')
10881var typeForce = require('typeforce')
10882
10883var BigInteger = require('bigi')
10884
10885function ECSignature (r, s) {
10886 typeForce('BigInteger', r)
10887 typeForce('BigInteger', s)
ebd8d4e8 10888
ebd8d4e8
IC
10889 this.r = r
10890 this.s = s
10891}
10892
ab78acc6 10893ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10894 assert.equal(buffer.length, 65, 'Invalid signature length')
10895 var i = buffer.readUInt8(0) - 27
10896
10897 // At most 3 bits
10898 assert.equal(i, i & 7, 'Invalid signature parameter')
10899 var compressed = !!(i & 4)
10900
10901 // Recovery param only
10902 i = i & 3
10903
10904 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10905 var s = BigInteger.fromBuffer(buffer.slice(33))
10906
10907 return {
10908 compressed: compressed,
10909 i: i,
10910 signature: new ECSignature(r, s)
10911 }
10912}
10913
ab78acc6 10914ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10915 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10916 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10917 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10918
10919 var rLen = buffer.readUInt8(3)
10920 assert(rLen > 0, 'R length is zero')
10921
10922 var offset = 4 + rLen
10923 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10924
10925 var sLen = buffer.readUInt8(offset + 1)
10926 assert(sLen > 0, 'S length is zero')
10927
10928 var rB = buffer.slice(4, offset)
10929 var sB = buffer.slice(offset + 2)
10930 offset += 2 + sLen
10931
10932 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10933 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10934 }
10935
10936 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10937 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10938 }
10939
10940 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10941 var r = BigInteger.fromDERInteger(rB)
10942 var s = BigInteger.fromDERInteger(sB)
10943
10944 assert(r.signum() >= 0, 'R value is negative')
10945 assert(s.signum() >= 0, 'S value is negative')
10946
10947 return new ECSignature(r, s)
10948}
10949
ab78acc6
IC
10950// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10951ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10952 var hashType = buffer.readUInt8(buffer.length - 1)
10953 var hashTypeMod = hashType & ~0x80
10954
ab78acc6 10955 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10956
10957 return {
10958 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10959 hashType: hashType
10960 }
10961}
10962
ab78acc6
IC
10963ECSignature.prototype.toCompact = function (i, compressed) {
10964 if (compressed) {
10965 i += 4
10966 }
10967
ebd8d4e8
IC
10968 i += 27
10969
10970 var buffer = new Buffer(65)
10971 buffer.writeUInt8(i, 0)
10972
10973 this.r.toBuffer(32).copy(buffer, 1)
10974 this.s.toBuffer(32).copy(buffer, 33)
10975
10976 return buffer
10977}
10978
ab78acc6 10979ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
10980 var rBa = this.r.toDERInteger()
10981 var sBa = this.s.toDERInteger()
10982
10983 var sequence = []
ab78acc6
IC
10984
10985 // INTEGER
10986 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
10987 sequence = sequence.concat(rBa)
10988
ab78acc6
IC
10989 // INTEGER
10990 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
10991 sequence = sequence.concat(sBa)
10992
ab78acc6
IC
10993 // SEQUENCE
10994 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
10995
10996 return new Buffer(sequence)
10997}
10998
ab78acc6
IC
10999ECSignature.prototype.toScriptSignature = function (hashType) {
11000 var hashTypeMod = hashType & ~0x80
11001 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11002
ebd8d4e8
IC
11003 var hashTypeBuffer = new Buffer(1)
11004 hashTypeBuffer.writeUInt8(hashType, 0)
11005
11006 return Buffer.concat([this.toDER(), hashTypeBuffer])
11007}
11008
11009module.exports = ECSignature
11010
ab78acc6
IC
11011}).call(this,require("buffer").Buffer)
11012},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11013(function (Buffer){
ab78acc6
IC
11014var assert = require('assert')
11015var base58check = require('bs58check')
11016var bcrypto = require('./crypto')
11017var createHmac = require('create-hmac')
11018var typeForce = require('typeforce')
11019var networks = require('./networks')
11020
11021var BigInteger = require('bigi')
11022var ECKey = require('./eckey')
11023var ECPubKey = require('./ecpubkey')
11024
11025var ecurve = require('ecurve')
ebd8d4e8
IC
11026var curve = ecurve.getCurveByName('secp256k1')
11027
ab78acc6 11028function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11029 for (var name in networks) {
11030 var network = networks[name]
11031
ab78acc6
IC
11032 if (version === network.bip32.private || version === network.bip32.public) {
11033 return network
ebd8d4e8
IC
11034 }
11035 }
11036
ab78acc6 11037 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11038}
11039
ab78acc6 11040function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11041 network = network || networks.bitcoin
11042
ab78acc6
IC
11043 typeForce('Buffer', chainCode)
11044
11045 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11046 assert(network.bip32, 'Unknown BIP32 constants for network')
11047
11048 this.chainCode = chainCode
11049 this.depth = 0
11050 this.index = 0
ab78acc6 11051 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11052 this.network = network
11053
11054 if (K instanceof BigInteger) {
11055 this.privKey = new ECKey(K, true)
11056 this.pubKey = this.privKey.pub
ab78acc6
IC
11057 } else if (K instanceof ECKey) {
11058 assert(K.pub.compressed, 'ECKey must be compressed')
11059 this.privKey = K
11060 this.pubKey = K.pub
11061 } else if (K instanceof ECPubKey) {
11062 assert(K.compressed, 'ECPubKey must be compressed')
11063 this.pubKey = K
ebd8d4e8
IC
11064 } else {
11065 this.pubKey = new ECPubKey(K, true)
11066 }
11067}
11068
11069HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11070HDNode.HIGHEST_BIT = 0x80000000
11071HDNode.LENGTH = 78
11072
ab78acc6
IC
11073HDNode.fromSeedBuffer = function (seed, network) {
11074 typeForce('Buffer', seed)
11075
11076 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11077 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11078
11079 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11080 var IL = I.slice(0, 32)
11081 var IR = I.slice(32)
11082
11083 // In case IL is 0 or >= n, the master key is invalid
11084 // This is handled by `new ECKey` in the HDNode constructor
11085 var pIL = BigInteger.fromBuffer(IL)
11086
11087 return new HDNode(pIL, IR, network)
11088}
11089
ab78acc6 11090HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11091 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11092}
11093
ab78acc6
IC
11094HDNode.fromBase58 = function (string, network) {
11095 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11096}
11097
ab78acc6
IC
11098// FIXME: remove in 2.x.y
11099HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11100 if (!__ignoreDeprecation) {
11101 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11102 }
11103
ebd8d4e8
IC
11104 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11105
11106 // 4 byte: version bytes
11107 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11108
11109 if (network) {
11110 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11111
11112 // auto-detect
11113 } else {
11114 network = findBIP32NetworkByVersion(version)
11115 }
ebd8d4e8
IC
11116
11117 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11118 var depth = buffer.readUInt8(4)
11119
11120 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11121 var parentFingerprint = buffer.readUInt32BE(5)
11122 if (depth === 0) {
11123 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11124 }
11125
11126 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11127 // This is encoded in MSB order. (0x00000000 if master key)
11128 var index = buffer.readUInt32BE(9)
11129 assert(depth > 0 || index === 0, 'Invalid index')
11130
11131 // 32 bytes: the chain code
11132 var chainCode = buffer.slice(13, 45)
ab78acc6 11133 var data, hd
ebd8d4e8
IC
11134
11135 // 33 bytes: private key data (0x00 + k)
ab78acc6 11136 if (version === network.bip32.private) {
ebd8d4e8 11137 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11138 data = buffer.slice(46, 78)
ebd8d4e8 11139 var d = BigInteger.fromBuffer(data)
ab78acc6 11140 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11141
11142 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11143 } else {
ab78acc6 11144 data = buffer.slice(45, 78)
ebd8d4e8
IC
11145 var Q = ecurve.Point.decodeFrom(curve, data)
11146 assert.equal(Q.compressed, true, 'Invalid public key')
11147
11148 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11149 // If not, the extended public key is invalid.
11150 curve.validate(Q)
11151
ab78acc6 11152 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11153 }
11154
11155 hd.depth = depth
11156 hd.index = index
11157 hd.parentFingerprint = parentFingerprint
11158
11159 return hd
11160}
11161
ab78acc6
IC
11162// FIXME: remove in 2.x.y
11163HDNode.fromHex = function (hex, network) {
11164 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11165}
11166
ab78acc6
IC
11167HDNode.prototype.getIdentifier = function () {
11168 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11169}
11170
ab78acc6 11171HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11172 return this.getIdentifier().slice(0, 4)
11173}
11174
ab78acc6 11175HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11176 return this.pubKey.getAddress(this.network)
11177}
11178
ab78acc6
IC
11179HDNode.prototype.neutered = function () {
11180 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11181 neutered.depth = this.depth
11182 neutered.index = this.index
11183 neutered.parentFingerprint = this.parentFingerprint
11184
11185 return neutered
11186}
11187
11188HDNode.prototype.toBase58 = function (isPrivate) {
11189 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11190}
11191
ab78acc6
IC
11192// FIXME: remove in 2.x.y
11193HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11194 if (isPrivate === undefined) {
11195 isPrivate = !!this.privKey
11196
11197 // FIXME: remove in 2.x.y
11198 } else {
11199 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11200 }
11201
11202 if (!__ignoreDeprecation) {
11203 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11204 }
ebd8d4e8
IC
11205
11206 // Version
11207 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11208 var buffer = new Buffer(HDNode.LENGTH)
11209
11210 // 4 bytes: version bytes
11211 buffer.writeUInt32BE(version, 0)
11212
11213 // Depth
11214 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11215 buffer.writeUInt8(this.depth, 4)
11216
11217 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11218 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11219
11220 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11221 // This is encoded in Big endian. (0x00000000 if master key)
11222 buffer.writeUInt32BE(this.index, 9)
11223
11224 // 32 bytes: the chain code
11225 this.chainCode.copy(buffer, 13)
11226
11227 // 33 bytes: the public key or private key data
11228 if (isPrivate) {
ab78acc6 11229 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11230 assert(this.privKey, 'Missing private key')
11231
11232 // 0x00 + k for private keys
11233 buffer.writeUInt8(0, 45)
11234 this.privKey.d.toBuffer(32).copy(buffer, 46)
11235 } else {
ebd8d4e8
IC
11236 // X9.62 encoding for public keys
11237 this.pubKey.toBuffer().copy(buffer, 45)
11238 }
11239
11240 return buffer
11241}
11242
ab78acc6
IC
11243// FIXME: remove in 2.x.y
11244HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11245 return this.toBuffer(isPrivate).toString('hex')
11246}
11247
11248// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11249HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11250 var isHardened = index >= HDNode.HIGHEST_BIT
11251 var indexBuffer = new Buffer(4)
11252 indexBuffer.writeUInt32BE(index, 0)
11253
11254 var data
11255
11256 // Hardened child
11257 if (isHardened) {
11258 assert(this.privKey, 'Could not derive hardened child key')
11259
11260 // data = 0x00 || ser256(kpar) || ser32(index)
11261 data = Buffer.concat([
11262 this.privKey.d.toBuffer(33),
11263 indexBuffer
11264 ])
11265
11266 // Normal child
11267 } else {
11268 // data = serP(point(kpar)) || ser32(index)
11269 // = serP(Kpar) || ser32(index)
11270 data = Buffer.concat([
11271 this.pubKey.toBuffer(),
11272 indexBuffer
11273 ])
11274 }
11275
ab78acc6 11276 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11277 var IL = I.slice(0, 32)
11278 var IR = I.slice(32)
11279
11280 var pIL = BigInteger.fromBuffer(IL)
11281
11282 // In case parse256(IL) >= n, proceed with the next value for i
11283 if (pIL.compareTo(curve.n) >= 0) {
11284 return this.derive(index + 1)
11285 }
11286
11287 // Private parent key -> private child key
11288 var hd
11289 if (this.privKey) {
11290 // ki = parse256(IL) + kpar (mod n)
11291 var ki = pIL.add(this.privKey.d).mod(curve.n)
11292
11293 // In case ki == 0, proceed with the next value for i
11294 if (ki.signum() === 0) {
11295 return this.derive(index + 1)
11296 }
11297
11298 hd = new HDNode(ki, IR, this.network)
11299
11300 // Public parent key -> public child key
11301 } else {
11302 // Ki = point(parse256(IL)) + Kpar
11303 // = G*IL + Kpar
11304 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11305
11306 // In case Ki is the point at infinity, proceed with the next value for i
11307 if (curve.isInfinity(Ki)) {
11308 return this.derive(index + 1)
11309 }
11310
11311 hd = new HDNode(Ki, IR, this.network)
11312 }
11313
11314 hd.depth = this.depth + 1
11315 hd.index = index
11316 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11317
11318 return hd
11319}
11320
ab78acc6 11321HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11322 // Only derives hardened private keys by default
11323 return this.derive(index + HDNode.HIGHEST_BIT)
11324}
11325
11326HDNode.prototype.toString = HDNode.prototype.toBase58
11327
11328module.exports = HDNode
11329
ab78acc6
IC
11330}).call(this,require("buffer").Buffer)
11331},{"./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 11332module.exports = {
ab78acc6
IC
11333 Address: require('./address'),
11334 base58check: require('./base58check'),
11335 Block: require('./block'),
11336 bufferutils: require('./bufferutils'),
11337 crypto: require('./crypto'),
11338 ecdsa: require('./ecdsa'),
11339 ECKey: require('./eckey'),
11340 ECPubKey: require('./ecpubkey'),
11341 ECSignature: require('./ecsignature'),
11342 Message: require('./message'),
11343 opcodes: require('./opcodes'),
11344 HDNode: require('./hdnode'),
11345 Script: require('./script'),
11346 scripts: require('./scripts'),
11347 Transaction: require('./transaction'),
11348 TransactionBuilder: require('./transaction_builder'),
11349 networks: require('./networks'),
11350 Wallet: require('./wallet')
11351}
11352
11353},{"./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 11354(function (Buffer){
ab78acc6
IC
11355var bufferutils = require('./bufferutils')
11356var crypto = require('./crypto')
11357var ecdsa = require('./ecdsa')
11358var networks = require('./networks')
11359
11360var BigInteger = require('bigi')
11361var ECPubKey = require('./ecpubkey')
11362var ECSignature = require('./ecsignature')
11363
11364var ecurve = require('ecurve')
ebd8d4e8
IC
11365var ecparams = ecurve.getCurveByName('secp256k1')
11366
ab78acc6 11367function magicHash (message, network) {
ebd8d4e8
IC
11368 var magicPrefix = new Buffer(network.magicPrefix)
11369 var messageBuffer = new Buffer(message)
ab78acc6 11370 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11371
11372 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11373 return crypto.hash256(buffer)
11374}
11375
ab78acc6 11376function sign (privKey, message, network) {
ebd8d4e8
IC
11377 network = network || networks.bitcoin
11378
11379 var hash = magicHash(message, network)
11380 var signature = privKey.sign(hash)
11381 var e = BigInteger.fromBuffer(hash)
11382 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11383
11384 return signature.toCompact(i, privKey.pub.compressed)
11385}
11386
11387// TODO: network could be implied from address
ab78acc6
IC
11388function verify (address, signature, message, network) {
11389 if (!Buffer.isBuffer(signature)) {
11390 signature = new Buffer(signature, 'base64')
ebd8d4e8 11391 }
ab78acc6 11392
ebd8d4e8
IC
11393 network = network || networks.bitcoin
11394
11395 var hash = magicHash(message, network)
ab78acc6 11396 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11397 var e = BigInteger.fromBuffer(hash)
11398 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11399
11400 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11401 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11402}
11403
11404module.exports = {
11405 magicHash: magicHash,
11406 sign: sign,
11407 verify: verify
11408}
11409
ab78acc6
IC
11410}).call(this,require("buffer").Buffer)
11411},{"./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
11412// https://en.bitcoin.it/wiki/List_of_address_prefixes
11413// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11414
11415var networks = {
11416 bitcoin: {
11417 magicPrefix: '\x18Bitcoin Signed Message:\n',
11418 bip32: {
11419 public: 0x0488b21e,
11420 private: 0x0488ade4
11421 },
11422 pubKeyHash: 0x00,
11423 scriptHash: 0x05,
11424 wif: 0x80,
11425 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11426 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11427 estimateFee: estimateFee('bitcoin')
a9385c1b 11428 },
ab78acc6
IC
11429 testnet: {
11430 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11431 bip32: {
ab78acc6
IC
11432 public: 0x043587cf,
11433 private: 0x04358394
a9385c1b 11434 },
ab78acc6
IC
11435 pubKeyHash: 0x6f,
11436 scriptHash: 0xc4,
11437 wif: 0xef,
11438 dustThreshold: 546,
cb325c58 11439 feePerKb: 10000,
ab78acc6 11440 estimateFee: estimateFee('testnet')
a9385c1b 11441 },
ab78acc6
IC
11442 litecoin: {
11443 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11444 bip32: {
ab78acc6
IC
11445 public: 0x019da462,
11446 private: 0x019d9cfe
a9385c1b 11447 },
ab78acc6
IC
11448 pubKeyHash: 0x30,
11449 scriptHash: 0x05,
11450 wif: 0xb0,
11451 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11452 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11453 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11454 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11455 },
11456 dogecoin: {
11457 magicPrefix: '\x19Dogecoin Signed Message:\n',
11458 bip32: {
11459 public: 0x02facafd,
11460 private: 0x02fac398
11461 },
11462 pubKeyHash: 0x1e,
11463 scriptHash: 0x16,
11464 wif: 0x9e,
11465 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11466 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11467 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11468 estimateFee: estimateFee('dogecoin')
11469 },
ab78acc6
IC
11470 viacoin: {
11471 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11472 bip32: {
ab78acc6
IC
11473 public: 0x0488b21e,
11474 private: 0x0488ade4
ebd8d4e8 11475 },
ab78acc6
IC
11476 pubKeyHash: 0x47,
11477 scriptHash: 0x21,
11478 wif: 0xc7,
11479 dustThreshold: 560,
11480 dustSoftThreshold: 100000,
11481 feePerKb: 100000, //
11482 estimateFee: estimateFee('viacoin')
ebd8d4e8 11483 },
ab78acc6
IC
11484 viacointestnet: {
11485 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11486 bip32: {
11487 public: 0x043587cf,
11488 private: 0x04358394
11489 },
ab78acc6 11490 pubKeyHash: 0x7f,
ebd8d4e8 11491 scriptHash: 0xc4,
ab78acc6
IC
11492 wif: 0xff,
11493 dustThreshold: 560,
11494 dustSoftThreshold: 100000,
11495 feePerKb: 100000,
11496 estimateFee: estimateFee('viacointestnet')
11497 },
11498 gamerscoin: {
11499 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11500 bip32: {
11501 public: 0x019da462,
11502 private: 0x019d9cfe
11503 },
11504 pubKeyHash: 0x26,
11505 scriptHash: 0x05,
11506 wif: 0xA6,
11507 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11508 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11509 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11510 estimateFee: estimateFee('gamerscoin')
11511 },
11512 jumbucks: {
11513 magicPrefix: '\x19Jumbucks Signed Message:\n',
11514 bip32: {
11515 public: 0x037a689a,
11516 private: 0x037a6460
11517 },
11518 pubKeyHash: 0x2b,
11519 scriptHash: 0x05,
11520 wif: 0xab,
11521 dustThreshold: 0,
11522 dustSoftThreshold: 10000,
ebd8d4e8 11523 feePerKb: 10000,
ab78acc6
IC
11524 estimateFee: estimateFee('jumbucks')
11525 },
11526 zetacoin: {
11527 magicPrefix: '\x18Zetacoin Signed Message:\n',
11528 bip32: {
11529 public: 0x0488b21e,
11530 private: 0x0488ade4
11531 },
11532 pubKeyHash: 0x50,
11533 scriptHash: 0x09,
11534 wif: 0xe0,
11535 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11536 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11537 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11538 }
11539}
11540
ab78acc6
IC
11541function estimateFee (type) {
11542 return function (tx) {
ebd8d4e8
IC
11543 var network = networks[type]
11544 var baseFee = network.feePerKb
11545 var byteSize = tx.toBuffer().length
11546
11547 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11548 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11549
ab78acc6 11550 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11551 if (e.value < network.dustSoftThreshold) {
11552 fee += baseFee
11553 }
11554 })
11555
11556 return fee
11557 }
11558}
11559
11560module.exports = networks
11561
ab78acc6 11562},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11563module.exports = {
11564 // push value
ab78acc6
IC
11565 OP_FALSE: 0,
11566 OP_0: 0,
11567 OP_PUSHDATA1: 76,
11568 OP_PUSHDATA2: 77,
11569 OP_PUSHDATA4: 78,
11570 OP_1NEGATE: 79,
11571 OP_RESERVED: 80,
11572 OP_1: 81,
11573 OP_TRUE: 81,
11574 OP_2: 82,
11575 OP_3: 83,
11576 OP_4: 84,
11577 OP_5: 85,
11578 OP_6: 86,
11579 OP_7: 87,
11580 OP_8: 88,
11581 OP_9: 89,
11582 OP_10: 90,
11583 OP_11: 91,
11584 OP_12: 92,
11585 OP_13: 93,
11586 OP_14: 94,
11587 OP_15: 95,
11588 OP_16: 96,
ebd8d4e8
IC
11589
11590 // control
ab78acc6
IC
11591 OP_NOP: 97,
11592 OP_VER: 98,
11593 OP_IF: 99,
11594 OP_NOTIF: 100,
11595 OP_VERIF: 101,
11596 OP_VERNOTIF: 102,
11597 OP_ELSE: 103,
11598 OP_ENDIF: 104,
11599 OP_VERIFY: 105,
11600 OP_RETURN: 106,
ebd8d4e8
IC
11601
11602 // stack ops
ab78acc6
IC
11603 OP_TOALTSTACK: 107,
11604 OP_FROMALTSTACK: 108,
11605 OP_2DROP: 109,
11606 OP_2DUP: 110,
11607 OP_3DUP: 111,
11608 OP_2OVER: 112,
11609 OP_2ROT: 113,
11610 OP_2SWAP: 114,
11611 OP_IFDUP: 115,
11612 OP_DEPTH: 116,
11613 OP_DROP: 117,
11614 OP_DUP: 118,
11615 OP_NIP: 119,
11616 OP_OVER: 120,
11617 OP_PICK: 121,
11618 OP_ROLL: 122,
11619 OP_ROT: 123,
11620 OP_SWAP: 124,
11621 OP_TUCK: 125,
ebd8d4e8
IC
11622
11623 // splice ops
ab78acc6
IC
11624 OP_CAT: 126,
11625 OP_SUBSTR: 127,
11626 OP_LEFT: 128,
11627 OP_RIGHT: 129,
11628 OP_SIZE: 130,
ebd8d4e8
IC
11629
11630 // bit logic
ab78acc6
IC
11631 OP_INVERT: 131,
11632 OP_AND: 132,
11633 OP_OR: 133,
11634 OP_XOR: 134,
11635 OP_EQUAL: 135,
11636 OP_EQUALVERIFY: 136,
11637 OP_RESERVED1: 137,
11638 OP_RESERVED2: 138,
ebd8d4e8
IC
11639
11640 // numeric
ab78acc6
IC
11641 OP_1ADD: 139,
11642 OP_1SUB: 140,
11643 OP_2MUL: 141,
11644 OP_2DIV: 142,
11645 OP_NEGATE: 143,
11646 OP_ABS: 144,
11647 OP_NOT: 145,
11648 OP_0NOTEQUAL: 146,
11649
11650 OP_ADD: 147,
11651 OP_SUB: 148,
11652 OP_MUL: 149,
11653 OP_DIV: 150,
11654 OP_MOD: 151,
11655 OP_LSHIFT: 152,
11656 OP_RSHIFT: 153,
11657
11658 OP_BOOLAND: 154,
11659 OP_BOOLOR: 155,
11660 OP_NUMEQUAL: 156,
11661 OP_NUMEQUALVERIFY: 157,
11662 OP_NUMNOTEQUAL: 158,
11663 OP_LESSTHAN: 159,
11664 OP_GREATERTHAN: 160,
11665 OP_LESSTHANOREQUAL: 161,
11666 OP_GREATERTHANOREQUAL: 162,
11667 OP_MIN: 163,
11668 OP_MAX: 164,
11669
11670 OP_WITHIN: 165,
ebd8d4e8
IC
11671
11672 // crypto
ab78acc6
IC
11673 OP_RIPEMD160: 166,
11674 OP_SHA1: 167,
11675 OP_SHA256: 168,
11676 OP_HASH160: 169,
11677 OP_HASH256: 170,
11678 OP_CODESEPARATOR: 171,
11679 OP_CHECKSIG: 172,
11680 OP_CHECKSIGVERIFY: 173,
11681 OP_CHECKMULTISIG: 174,
11682 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11683
11684 // expansion
ab78acc6
IC
11685 OP_NOP1: 176,
11686 OP_NOP2: 177,
11687 OP_NOP3: 178,
11688 OP_NOP4: 179,
11689 OP_NOP5: 180,
11690 OP_NOP6: 181,
11691 OP_NOP7: 182,
11692 OP_NOP8: 183,
11693 OP_NOP9: 184,
11694 OP_NOP10: 185,
ebd8d4e8
IC
11695
11696 // template matching params
ab78acc6
IC
11697 OP_PUBKEYHASH: 253,
11698 OP_PUBKEY: 254,
11699 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11700}
11701
ab78acc6 11702},{}],68:[function(require,module,exports){
ebd8d4e8 11703(function (Buffer){
ab78acc6
IC
11704var assert = require('assert')
11705var bufferutils = require('./bufferutils')
11706var crypto = require('./crypto')
11707var typeForce = require('typeforce')
11708var opcodes = require('./opcodes')
ebd8d4e8 11709
ab78acc6
IC
11710function Script (buffer, chunks) {
11711 typeForce('Buffer', buffer)
11712 typeForce('Array', chunks)
ebd8d4e8
IC
11713
11714 this.buffer = buffer
11715 this.chunks = chunks
11716}
11717
ab78acc6 11718Script.fromASM = function (asm) {
ebd8d4e8 11719 var strChunks = asm.split(' ')
ab78acc6
IC
11720 var chunks = strChunks.map(function (strChunk) {
11721 // opcode
ebd8d4e8
IC
11722 if (strChunk in opcodes) {
11723 return opcodes[strChunk]
11724
ab78acc6 11725 // data chunk
ebd8d4e8
IC
11726 } else {
11727 return new Buffer(strChunk, 'hex')
11728 }
11729 })
11730
11731 return Script.fromChunks(chunks)
11732}
11733
ab78acc6 11734Script.fromBuffer = function (buffer) {
ebd8d4e8 11735 var chunks = []
ebd8d4e8
IC
11736 var i = 0
11737
11738 while (i < buffer.length) {
11739 var opcode = buffer.readUInt8(i)
11740
ab78acc6 11741 // data chunk
ebd8d4e8
IC
11742 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11743 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11744
11745 // did reading a pushDataInt fail? return non-chunked script
11746 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11747 i += d.size
11748
ab78acc6
IC
11749 // attempt to read too much data?
11750 if (i + d.number > buffer.length) return new Script(buffer, [])
11751
ebd8d4e8
IC
11752 var data = buffer.slice(i, i + d.number)
11753 i += d.number
11754
11755 chunks.push(data)
11756
ab78acc6 11757 // opcode
ebd8d4e8
IC
11758 } else {
11759 chunks.push(opcode)
11760
11761 i += 1
11762 }
11763 }
11764
11765 return new Script(buffer, chunks)
11766}
11767
ab78acc6
IC
11768Script.fromChunks = function (chunks) {
11769 typeForce('Array', chunks)
ebd8d4e8 11770
ab78acc6
IC
11771 var bufferSize = chunks.reduce(function (accum, chunk) {
11772 // data chunk
ebd8d4e8
IC
11773 if (Buffer.isBuffer(chunk)) {
11774 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11775 }
11776
ab78acc6 11777 // opcode
ebd8d4e8
IC
11778 return accum + 1
11779 }, 0.0)
11780
11781 var buffer = new Buffer(bufferSize)
11782 var offset = 0
11783
ab78acc6
IC
11784 chunks.forEach(function (chunk) {
11785 // data chunk
ebd8d4e8
IC
11786 if (Buffer.isBuffer(chunk)) {
11787 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11788
11789 chunk.copy(buffer, offset)
11790 offset += chunk.length
11791
ab78acc6 11792 // opcode
ebd8d4e8
IC
11793 } else {
11794 buffer.writeUInt8(chunk, offset)
11795 offset += 1
11796 }
11797 })
11798
11799 assert.equal(offset, buffer.length, 'Could not decode chunks')
11800 return new Script(buffer, chunks)
11801}
11802
ab78acc6 11803Script.fromHex = function (hex) {
ebd8d4e8
IC
11804 return Script.fromBuffer(new Buffer(hex, 'hex'))
11805}
11806
ebd8d4e8
IC
11807Script.EMPTY = Script.fromChunks([])
11808
ab78acc6 11809Script.prototype.getHash = function () {
ebd8d4e8
IC
11810 return crypto.hash160(this.buffer)
11811}
11812
11813// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11814Script.prototype.without = function (needle) {
11815 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11816 return op !== needle
11817 }))
11818}
11819
ebd8d4e8
IC
11820var reverseOps = []
11821for (var op in opcodes) {
11822 var code = opcodes[op]
11823 reverseOps[code] = op
11824}
11825
ab78acc6
IC
11826Script.prototype.toASM = function () {
11827 return this.chunks.map(function (chunk) {
11828 // data chunk
ebd8d4e8
IC
11829 if (Buffer.isBuffer(chunk)) {
11830 return chunk.toString('hex')
11831
ab78acc6 11832 // opcode
ebd8d4e8
IC
11833 } else {
11834 return reverseOps[chunk]
11835 }
11836 }).join(' ')
11837}
11838
ab78acc6 11839Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11840 return this.buffer
11841}
11842
ab78acc6 11843Script.prototype.toHex = function () {
ebd8d4e8
IC
11844 return this.toBuffer().toString('hex')
11845}
11846
11847module.exports = Script
11848
ab78acc6
IC
11849}).call(this,require("buffer").Buffer)
11850},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11851(function (Buffer){
ab78acc6
IC
11852var assert = require('assert')
11853var ops = require('./opcodes')
11854var typeForce = require('typeforce')
ebd8d4e8 11855
ab78acc6 11856var ecurve = require('ecurve')
ebd8d4e8
IC
11857var curve = ecurve.getCurveByName('secp256k1')
11858
ab78acc6
IC
11859var ECSignature = require('./ecsignature')
11860var Script = require('./script')
ebd8d4e8 11861
ab78acc6 11862function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11863 if (!Buffer.isBuffer(buffer)) return false
11864
11865 try {
ebd8d4e8
IC
11866 ecurve.Point.decodeFrom(curve, buffer)
11867 } catch (e) {
ab78acc6
IC
11868 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11869 throw e
ebd8d4e8
IC
11870
11871 return false
11872 }
11873
11874 return true
11875}
11876
ab78acc6 11877function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11878 if (!Buffer.isBuffer(buffer)) return false
11879
11880 try {
11881 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11882 } catch (e) {
11883 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/))) {
11884 throw e
11885 }
ebd8d4e8
IC
11886
11887 return false
11888 }
11889
11890 return true
11891}
11892
ab78acc6
IC
11893function isPubKeyHashInput (script) {
11894 return script.chunks.length === 2 &&
11895 isCanonicalSignature(script.chunks[0]) &&
11896 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11897}
11898
ab78acc6
IC
11899function isPubKeyHashOutput (script) {
11900 return script.chunks.length === 5 &&
11901 script.chunks[0] === ops.OP_DUP &&
11902 script.chunks[1] === ops.OP_HASH160 &&
11903 Buffer.isBuffer(script.chunks[2]) &&
11904 script.chunks[2].length === 20 &&
11905 script.chunks[3] === ops.OP_EQUALVERIFY &&
11906 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11907}
11908
ab78acc6
IC
11909function isPubKeyInput (script) {
11910 return script.chunks.length === 1 &&
11911 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11912}
11913
ab78acc6
IC
11914function isPubKeyOutput (script) {
11915 return script.chunks.length === 2 &&
11916 isCanonicalPubKey(script.chunks[0]) &&
11917 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11918}
11919
ab78acc6
IC
11920function isScriptHashInput (script, allowIncomplete) {
11921 if (script.chunks.length < 2) return false
ebd8d4e8 11922
ab78acc6 11923 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11924 if (!Buffer.isBuffer(lastChunk)) return false
11925
ab78acc6
IC
11926 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11927 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11928
ab78acc6
IC
11929 // is redeemScript a valid script?
11930 if (redeemScript.chunks.length === 0) return false
11931
11932 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11933}
11934
ab78acc6
IC
11935function isScriptHashOutput (script) {
11936 return script.chunks.length === 3 &&
11937 script.chunks[0] === ops.OP_HASH160 &&
11938 Buffer.isBuffer(script.chunks[1]) &&
11939 script.chunks[1].length === 20 &&
11940 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11941}
11942
ab78acc6
IC
11943// allowIncomplete is to account for combining signatures
11944// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11945function isMultisigInput (script, allowIncomplete) {
11946 if (script.chunks.length < 2) return false
11947 if (script.chunks[0] !== ops.OP_0) return false
11948
11949 if (allowIncomplete) {
11950 return script.chunks.slice(1).every(function (chunk) {
11951 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11952 })
11953 }
11954
11955 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11956}
11957
ab78acc6
IC
11958function isMultisigOutput (script) {
11959 if (script.chunks.length < 4) return false
11960 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11961
ab78acc6
IC
11962 var mOp = script.chunks[0]
11963 if (mOp === ops.OP_0) return false
11964 if (mOp < ops.OP_1) return false
11965 if (mOp > ops.OP_16) return false
ebd8d4e8 11966
ab78acc6
IC
11967 var nOp = script.chunks[script.chunks.length - 2]
11968 if (nOp === ops.OP_0) return false
11969 if (nOp < ops.OP_1) return false
11970 if (nOp > ops.OP_16) return false
ebd8d4e8 11971
ab78acc6
IC
11972 var m = mOp - (ops.OP_1 - 1)
11973 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
11974 if (n < m) return false
11975
ab78acc6 11976 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
11977 if (n < pubKeys.length) return false
11978
11979 return pubKeys.every(isCanonicalPubKey)
11980}
11981
ab78acc6
IC
11982function isNullDataOutput (script) {
11983 return script.chunks[0] === ops.OP_RETURN
11984}
11985
11986function classifyOutput (script) {
11987 typeForce('Script', script)
11988
11989 if (isPubKeyHashOutput(script)) {
11990 return 'pubkeyhash'
11991 } else if (isScriptHashOutput(script)) {
11992 return 'scripthash'
11993 } else if (isMultisigOutput(script)) {
11994 return 'multisig'
11995 } else if (isPubKeyOutput(script)) {
11996 return 'pubkey'
11997 } else if (isNullDataOutput(script)) {
11998 return 'nulldata'
11999 }
12000
12001 return 'nonstandard'
12002}
12003
12004function classifyInput (script, allowIncomplete) {
12005 typeForce('Script', script)
12006
12007 if (isPubKeyHashInput(script)) {
12008 return 'pubkeyhash'
12009 } else if (isMultisigInput(script, allowIncomplete)) {
12010 return 'multisig'
12011 } else if (isScriptHashInput(script, allowIncomplete)) {
12012 return 'scripthash'
12013 } else if (isPubKeyInput(script)) {
12014 return 'pubkey'
12015 }
12016
12017 return 'nonstandard'
ebd8d4e8
IC
12018}
12019
12020// Standard Script Templates
12021// {pubKey} OP_CHECKSIG
ab78acc6 12022function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12023 return Script.fromChunks([
12024 pubKey.toBuffer(),
ab78acc6 12025 ops.OP_CHECKSIG
ebd8d4e8
IC
12026 ])
12027}
12028
12029// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12030function pubKeyHashOutput (hash) {
12031 typeForce('Buffer', hash)
ebd8d4e8
IC
12032
12033 return Script.fromChunks([
ab78acc6
IC
12034 ops.OP_DUP,
12035 ops.OP_HASH160,
ebd8d4e8 12036 hash,
ab78acc6
IC
12037 ops.OP_EQUALVERIFY,
12038 ops.OP_CHECKSIG
ebd8d4e8
IC
12039 ])
12040}
12041
12042// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12043function scriptHashOutput (hash) {
12044 typeForce('Buffer', hash)
ebd8d4e8
IC
12045
12046 return Script.fromChunks([
ab78acc6 12047 ops.OP_HASH160,
ebd8d4e8 12048 hash,
ab78acc6 12049 ops.OP_EQUAL
ebd8d4e8
IC
12050 ])
12051}
12052
12053// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12054function multisigOutput (m, pubKeys) {
12055 typeForce(['ECPubKey'], pubKeys)
12056
ebd8d4e8
IC
12057 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12058
ab78acc6 12059 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12060 return pubKey.toBuffer()
12061 })
12062 var n = pubKeys.length
12063
12064 return Script.fromChunks([].concat(
ab78acc6 12065 (ops.OP_1 - 1) + m,
ebd8d4e8 12066 pubKeyBuffers,
ab78acc6
IC
12067 (ops.OP_1 - 1) + n,
12068 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12069 ))
12070}
12071
12072// {signature}
ab78acc6
IC
12073function pubKeyInput (signature) {
12074 typeForce('Buffer', signature)
ebd8d4e8
IC
12075
12076 return Script.fromChunks([signature])
12077}
12078
12079// {signature} {pubKey}
ab78acc6
IC
12080function pubKeyHashInput (signature, pubKey) {
12081 typeForce('Buffer', signature)
ebd8d4e8
IC
12082
12083 return Script.fromChunks([signature, pubKey.toBuffer()])
12084}
12085
12086// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12087function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12088 return Script.fromChunks([].concat(
12089 scriptSig.chunks,
12090 scriptPubKey.toBuffer()
12091 ))
12092}
12093
12094// OP_0 [signatures ...]
ab78acc6 12095function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12096 if (scriptPubKey) {
ab78acc6
IC
12097 assert(isMultisigOutput(scriptPubKey))
12098
12099 var mOp = scriptPubKey.chunks[0]
12100 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12101 var m = mOp - (ops.OP_1 - 1)
12102 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12103
ab78acc6
IC
12104 assert(signatures.length >= m, 'Not enough signatures provided')
12105 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12106 }
12107
ab78acc6
IC
12108 return Script.fromChunks([].concat(ops.OP_0, signatures))
12109}
12110
12111function nullDataOutput (data) {
12112 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12113}
12114
12115module.exports = {
ab78acc6
IC
12116 isCanonicalPubKey: isCanonicalPubKey,
12117 isCanonicalSignature: isCanonicalSignature,
12118 isPubKeyHashInput: isPubKeyHashInput,
12119 isPubKeyHashOutput: isPubKeyHashOutput,
12120 isPubKeyInput: isPubKeyInput,
12121 isPubKeyOutput: isPubKeyOutput,
12122 isScriptHashInput: isScriptHashInput,
12123 isScriptHashOutput: isScriptHashOutput,
12124 isMultisigInput: isMultisigInput,
12125 isMultisigOutput: isMultisigOutput,
12126 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12127 classifyOutput: classifyOutput,
ab78acc6
IC
12128 classifyInput: classifyInput,
12129 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12130 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12131 scriptHashOutput: scriptHashOutput,
12132 multisigOutput: multisigOutput,
ebd8d4e8 12133 pubKeyInput: pubKeyInput,
ab78acc6 12134 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12135 scriptHashInput: scriptHashInput,
ab78acc6
IC
12136 multisigInput: multisigInput,
12137 dataOutput: function (data) {
12138 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12139 return nullDataOutput(data)
12140 },
12141 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12142}
12143
ab78acc6
IC
12144}).call(this,require("buffer").Buffer)
12145},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12146(function (Buffer){
ab78acc6
IC
12147var assert = require('assert')
12148var bufferutils = require('./bufferutils')
12149var crypto = require('./crypto')
12150var typeForce = require('typeforce')
12151var opcodes = require('./opcodes')
12152var scripts = require('./scripts')
12153
12154var Address = require('./address')
12155var ECSignature = require('./ecsignature')
12156var Script = require('./script')
12157
12158function Transaction () {
12159 this.version = 1
12160 this.locktime = 0
12161 this.ins = []
12162 this.outs = []
12163}
ebd8d4e8
IC
12164
12165Transaction.DEFAULT_SEQUENCE = 0xffffffff
12166Transaction.SIGHASH_ALL = 0x01
12167Transaction.SIGHASH_NONE = 0x02
12168Transaction.SIGHASH_SINGLE = 0x03
12169Transaction.SIGHASH_ANYONECANPAY = 0x80
12170
ab78acc6
IC
12171Transaction.fromBuffer = function (buffer, __disableAssert) {
12172 var offset = 0
12173 function readSlice (n) {
12174 offset += n
12175 return buffer.slice(offset - n, offset)
12176 }
12177
12178 function readUInt32 () {
12179 var i = buffer.readUInt32LE(offset)
12180 offset += 4
12181 return i
12182 }
12183
12184 function readUInt64 () {
12185 var i = bufferutils.readUInt64LE(buffer, offset)
12186 offset += 8
12187 return i
12188 }
12189
12190 function readVarInt () {
12191 var vi = bufferutils.readVarInt(buffer, offset)
12192 offset += vi.size
12193 return vi.number
12194 }
12195
12196 function readScript () {
12197 return Script.fromBuffer(readSlice(readVarInt()))
12198 }
12199
12200 function readGenerationScript () {
12201 return new Script(readSlice(readVarInt()), [])
12202 }
12203
12204 var tx = new Transaction()
12205 tx.version = readUInt32()
12206
12207 var vinLen = readVarInt()
12208 for (var i = 0; i < vinLen; ++i) {
12209 var hash = readSlice(32)
12210
12211 if (Transaction.isCoinbaseHash(hash)) {
12212 tx.ins.push({
12213 hash: hash,
12214 index: readUInt32(),
12215 script: readGenerationScript(),
12216 sequence: readUInt32()
12217 })
12218 } else {
12219 tx.ins.push({
12220 hash: hash,
12221 index: readUInt32(),
12222 script: readScript(),
12223 sequence: readUInt32()
12224 })
12225 }
12226 }
12227
12228 var voutLen = readVarInt()
12229 for (i = 0; i < voutLen; ++i) {
12230 tx.outs.push({
12231 value: readUInt64(),
12232 script: readScript()
12233 })
12234 }
12235
12236 tx.locktime = readUInt32()
12237
12238 if (!__disableAssert) {
12239 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12240 }
12241
12242 return tx
12243}
12244
12245Transaction.fromHex = function (hex) {
12246 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12247}
12248
12249Transaction.isCoinbaseHash = function (buffer) {
12250 return Array.prototype.every.call(buffer, function (x) {
12251 return x === 0
12252 })
ebd8d4e8
IC
12253}
12254
12255/**
ab78acc6 12256 * Create a new txIn.
ebd8d4e8
IC
12257 *
12258 * Can be called with any of:
12259 *
12260 * - A transaction and an index
12261 * - A transaction hash and an index
12262 *
12263 * Note that this method does not sign the created input.
12264 */
ab78acc6
IC
12265Transaction.prototype.addInput = function (hash, index, sequence, script) {
12266 if (sequence === undefined || sequence === null) {
12267 sequence = Transaction.DEFAULT_SEQUENCE
12268 }
ebd8d4e8 12269
ab78acc6 12270 script = script || Script.EMPTY
ebd8d4e8 12271
ab78acc6 12272 if (typeof hash === 'string') {
ebd8d4e8 12273 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12274 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12275 } else if (hash instanceof Transaction) {
12276 hash = hash.getHash()
ebd8d4e8
IC
12277 }
12278
ab78acc6
IC
12279 typeForce('Buffer', hash)
12280 typeForce('Number', index)
12281 typeForce('Number', sequence)
12282 typeForce('Script', script)
12283
ebd8d4e8 12284 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12285
ab78acc6 12286 // Add the input and return the input's index
ebd8d4e8
IC
12287 return (this.ins.push({
12288 hash: hash,
12289 index: index,
ab78acc6 12290 script: script,
ebd8d4e8
IC
12291 sequence: sequence
12292 }) - 1)
12293}
12294
12295/**
ab78acc6 12296 * Create a new txOut.
ebd8d4e8
IC
12297 *
12298 * Can be called with:
12299 *
12300 * - A base58 address string and a value
12301 * - An Address object and a value
12302 * - A scriptPubKey Script and a value
12303 */
ab78acc6 12304Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12305 // Attempt to get a valid address if it's a base58 address string
12306 if (typeof scriptPubKey === 'string') {
12307 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12308 }
12309
12310 // Attempt to get a valid script if it's an Address object
12311 if (scriptPubKey instanceof Address) {
ab78acc6 12312 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12313 }
12314
ab78acc6
IC
12315 typeForce('Script', scriptPubKey)
12316 typeForce('Number', value)
12317
12318 // Add the output and return the output's index
ebd8d4e8
IC
12319 return (this.outs.push({
12320 script: scriptPubKey,
ab78acc6 12321 value: value
ebd8d4e8
IC
12322 }) - 1)
12323}
12324
ab78acc6
IC
12325Transaction.prototype.clone = function () {
12326 var newTx = new Transaction()
12327 newTx.version = this.version
12328 newTx.locktime = this.locktime
12329
12330 newTx.ins = this.ins.map(function (txIn) {
12331 return {
12332 hash: txIn.hash,
12333 index: txIn.index,
12334 script: txIn.script,
12335 sequence: txIn.sequence
12336 }
12337 })
12338
12339 newTx.outs = this.outs.map(function (txOut) {
12340 return {
12341 script: txOut.script,
12342 value: txOut.value
12343 }
12344 })
12345
12346 return newTx
12347}
12348
12349/**
12350 * Hash transaction for signing a specific input.
12351 *
12352 * Bitcoin uses a different hash for each signed transaction input. This
12353 * method copies the transaction, makes the necessary changes based on the
12354 * hashType, serializes and finally hashes the result. This hash can then be
12355 * used to sign the transaction input in question.
12356 */
12357Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12358 // FIXME: remove in 2.x.y
12359 if (arguments[0] instanceof Script) {
12360 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12361
12362 // swap the arguments (must be stored in tmp, arguments is special)
12363 var tmp = arguments[0]
12364 inIndex = arguments[1]
12365 prevOutScript = tmp
12366 }
12367
12368 typeForce('Number', inIndex)
12369 typeForce('Script', prevOutScript)
12370 typeForce('Number', hashType)
12371
12372 assert(inIndex >= 0, 'Invalid vin index')
12373 assert(inIndex < this.ins.length, 'Invalid vin index')
12374
12375 var txTmp = this.clone()
12376 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12377
12378 // Blank out other inputs' signatures
12379 txTmp.ins.forEach(function (txIn) {
12380 txIn.script = Script.EMPTY
12381 })
12382 txTmp.ins[inIndex].script = hashScript
12383
12384 var hashTypeModifier = hashType & 0x1f
12385
12386 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12387 assert(false, 'SIGHASH_NONE not yet supported')
12388 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12389 assert(false, 'SIGHASH_SINGLE not yet supported')
12390 }
12391
12392 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12393 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12394 }
12395
12396 var hashTypeBuffer = new Buffer(4)
12397 hashTypeBuffer.writeInt32LE(hashType, 0)
12398
12399 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12400 return crypto.hash256(buffer)
12401}
12402
12403Transaction.prototype.getHash = function () {
12404 return crypto.hash256(this.toBuffer())
12405}
12406
12407Transaction.prototype.getId = function () {
12408 // TxHash is little-endian, we need big-endian
12409 return bufferutils.reverse(this.getHash()).toString('hex')
12410}
12411
ebd8d4e8 12412Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12413 function scriptSize (script) {
12414 var length = script.buffer.length
ebd8d4e8 12415
ab78acc6
IC
12416 return bufferutils.varIntSize(length) + length
12417 }
ebd8d4e8
IC
12418
12419 var buffer = new Buffer(
12420 8 +
12421 bufferutils.varIntSize(this.ins.length) +
12422 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12423 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12424 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12425 )
12426
12427 var offset = 0
ab78acc6 12428 function writeSlice (slice) {
ebd8d4e8
IC
12429 slice.copy(buffer, offset)
12430 offset += slice.length
12431 }
ab78acc6
IC
12432
12433 function writeUInt32 (i) {
ebd8d4e8
IC
12434 buffer.writeUInt32LE(i, offset)
12435 offset += 4
12436 }
ab78acc6
IC
12437
12438 function writeUInt64 (i) {
ebd8d4e8
IC
12439 bufferutils.writeUInt64LE(buffer, i, offset)
12440 offset += 8
12441 }
ab78acc6
IC
12442
12443 function writeVarInt (i) {
ebd8d4e8
IC
12444 var n = bufferutils.writeVarInt(buffer, i, offset)
12445 offset += n
12446 }
12447
12448 writeUInt32(this.version)
12449 writeVarInt(this.ins.length)
12450
ab78acc6
IC
12451 this.ins.forEach(function (txIn) {
12452 writeSlice(txIn.hash)
12453 writeUInt32(txIn.index)
12454 writeVarInt(txIn.script.buffer.length)
12455 writeSlice(txIn.script.buffer)
12456 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12457 })
12458
12459 writeVarInt(this.outs.length)
ab78acc6
IC
12460 this.outs.forEach(function (txOut) {
12461 writeUInt64(txOut.value)
12462 writeVarInt(txOut.script.buffer.length)
12463 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12464 })
12465
12466 writeUInt32(this.locktime)
12467
12468 return buffer
12469}
12470
ab78acc6 12471Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12472 return this.toBuffer().toString('hex')
12473}
12474
ab78acc6
IC
12475Transaction.prototype.setInputScript = function (index, script) {
12476 typeForce('Number', index)
12477 typeForce('Script', script)
12478
12479 this.ins[index].script = script
12480}
12481
12482// FIXME: remove in 2.x.y
12483Transaction.prototype.sign = function (index, privKey, hashType) {
12484 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12485
12486 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12487 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12488
12489 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12490 this.setInputScript(index, scriptSig)
12491}
12492
12493// FIXME: remove in 2.x.y
12494Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12495 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12496
12497 hashType = hashType || Transaction.SIGHASH_ALL
12498
12499 var hash = this.hashForSignature(index, prevOutScript, hashType)
12500 var signature = privKey.sign(hash)
12501
12502 return signature.toScriptSignature(hashType)
12503}
12504
12505// FIXME: remove in 2.x.y
12506Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12507 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12508
12509 var parsed = ECSignature.parseScriptSignature(buffer)
12510 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12511
12512 return pubKey.verify(hash, parsed.signature)
12513}
12514
12515module.exports = Transaction
12516
12517}).call(this,require("buffer").Buffer)
12518},{"./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){
12519(function (Buffer){
12520var assert = require('assert')
12521var ops = require('./opcodes')
12522var scripts = require('./scripts')
12523
12524var ECPubKey = require('./ecpubkey')
12525var ECSignature = require('./ecsignature')
12526var Script = require('./script')
12527var Transaction = require('./transaction')
12528
12529function extractInput (txIn) {
12530 var redeemScript
12531 var scriptSig = txIn.script
12532 var prevOutScript
12533 var prevOutType = scripts.classifyInput(scriptSig, true)
12534 var scriptType
12535
12536 // Re-classify if scriptHash
12537 if (prevOutType === 'scripthash') {
12538 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12539 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12540
12541 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12542 scriptType = scripts.classifyInput(scriptSig, true)
12543 } else {
12544 scriptType = prevOutType
12545 }
12546
12547 // Extract hashType, pubKeys and signatures
12548 var hashType, parsed, pubKeys, signatures
12549
12550 switch (scriptType) {
12551 case 'pubkeyhash': {
12552 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12553 hashType = parsed.hashType
12554 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12555 signatures = [parsed.signature]
12556 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12557
12558 break
12559 }
12560
12561 case 'pubkey': {
12562 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12563 hashType = parsed.hashType
12564 signatures = [parsed.signature]
12565
12566 if (redeemScript) {
12567 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12568 }
12569
12570 break
12571 }
12572
12573 case 'multisig': {
12574 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12575 if (chunk === ops.OP_0) return chunk
12576
12577 var parsed = ECSignature.parseScriptSignature(chunk)
12578 hashType = parsed.hashType
12579
12580 return parsed.signature
12581 })
12582
12583 if (redeemScript) {
12584 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12585 }
12586
12587 break
12588 }
12589 }
12590
12591 return {
12592 hashType: hashType,
12593 prevOutScript: prevOutScript,
12594 prevOutType: prevOutType,
12595 pubKeys: pubKeys,
12596 redeemScript: redeemScript,
12597 scriptType: scriptType,
12598 signatures: signatures
12599 }
12600}
12601
12602function TransactionBuilder () {
12603 this.prevTxMap = {}
12604 this.prevOutScripts = {}
12605 this.prevOutTypes = {}
12606
12607 this.inputs = []
12608 this.tx = new Transaction()
12609}
12610
12611TransactionBuilder.fromTransaction = function (transaction) {
12612 var txb = new TransactionBuilder()
12613
12614 // Copy other transaction fields
12615 txb.tx.version = transaction.version
12616 txb.tx.locktime = transaction.locktime
12617
12618 // Extract/add inputs
12619 transaction.ins.forEach(function (txIn) {
12620 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12621 })
12622
12623 // Extract/add outputs
12624 transaction.outs.forEach(function (txOut) {
12625 txb.addOutput(txOut.script, txOut.value)
12626 })
12627
12628 // Extract/add signatures
12629 txb.inputs = transaction.ins.map(function (txIn) {
12630 // TODO: remove me after testcase added
12631 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12632
12633 // Ignore empty scripts
12634 if (txIn.script.buffer.length === 0) return {}
12635
12636 return extractInput(txIn)
12637 })
12638
12639 return txb
12640}
12641
12642TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12643 var prevOutHash
12644
12645 // txId
12646 if (typeof prevTx === 'string') {
12647 prevOutHash = new Buffer(prevTx, 'hex')
12648
12649 // TxId hex is big-endian, we want little-endian hash
12650 Array.prototype.reverse.call(prevOutHash)
12651
12652 // Transaction
12653 } else if (prevTx instanceof Transaction) {
12654 prevOutHash = prevTx.getHash()
12655 prevOutScript = prevTx.outs[index].script
12656
12657 // txHash
12658 } else {
12659 prevOutHash = prevTx
12660 }
12661
12662 var input = {}
12663 if (prevOutScript) {
12664 var prevOutType = scripts.classifyOutput(prevOutScript)
12665
12666 // if we can, extract pubKey information
12667 switch (prevOutType) {
12668 case 'multisig': {
12669 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12670 break
12671 }
12672
12673 case 'pubkey': {
12674 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12675 break
12676 }
12677 }
12678
12679 if (prevOutType !== 'scripthash') {
12680 input.scriptType = prevOutType
12681 }
12682
12683 input.prevOutScript = prevOutScript
12684 input.prevOutType = prevOutType
12685 }
12686
12687 assert(this.inputs.every(function (input2) {
12688 if (input2.hashType === undefined) return true
12689
12690 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12691 }), 'No, this would invalidate signatures')
12692
12693 var prevOut = prevOutHash.toString('hex') + ':' + index
12694 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12695
12696 var vin = this.tx.addInput(prevOutHash, index, sequence)
12697 this.inputs[vin] = input
12698 this.prevTxMap[prevOut] = vin
12699
12700 return vin
12701}
12702
12703TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12704 assert(this.inputs.every(function (input) {
12705 if (input.hashType === undefined) return true
ebd8d4e8 12706
ab78acc6
IC
12707 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12708 }), 'No, this would invalidate signatures')
ebd8d4e8 12709
ab78acc6
IC
12710 return this.tx.addOutput(scriptPubKey, value)
12711}
ebd8d4e8 12712
ab78acc6
IC
12713TransactionBuilder.prototype.build = function () {
12714 return this.__build(false)
12715}
12716TransactionBuilder.prototype.buildIncomplete = function () {
12717 return this.__build(true)
12718}
ebd8d4e8 12719
ab78acc6
IC
12720var canSignTypes = {
12721 'pubkeyhash': true,
12722 'multisig': true,
12723 'pubkey': true
12724}
ebd8d4e8 12725
ab78acc6
IC
12726TransactionBuilder.prototype.__build = function (allowIncomplete) {
12727 if (!allowIncomplete) {
12728 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12729 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12730 }
12731
ab78acc6 12732 var tx = this.tx.clone()
ebd8d4e8 12733
ab78acc6
IC
12734 // Create script signatures from signature meta-data
12735 this.inputs.forEach(function (input, index) {
12736 var scriptType = input.scriptType
12737 var scriptSig
ebd8d4e8 12738
ab78acc6
IC
12739 if (!allowIncomplete) {
12740 assert(!!scriptType, 'Transaction is not complete')
12741 assert(scriptType in canSignTypes, scriptType + ' not supported')
12742 assert(input.signatures, 'Transaction is missing signatures')
12743 }
ebd8d4e8 12744
ab78acc6
IC
12745 if (input.signatures) {
12746 switch (scriptType) {
12747 case 'pubkeyhash': {
12748 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12749 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12750 break
12751 }
ebd8d4e8 12752
ab78acc6
IC
12753 case 'multisig': {
12754 // Array.prototype.map is sparse-compatible
12755 var msSignatures = input.signatures.map(function (signature) {
12756 return signature && signature.toScriptSignature(input.hashType)
12757 })
ebd8d4e8 12758
ab78acc6
IC
12759 // fill in blanks with OP_0
12760 if (allowIncomplete) {
12761 for (var i = 0; i < msSignatures.length; ++i) {
12762 if (msSignatures[i]) continue
ebd8d4e8 12763
ab78acc6
IC
12764 msSignatures[i] = ops.OP_0
12765 }
12766 } else {
12767 // Array.prototype.filter returns non-sparse array
12768 msSignatures = msSignatures.filter(function (x) { return x })
12769 }
ebd8d4e8 12770
ab78acc6
IC
12771 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12772 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12773 break
12774 }
ebd8d4e8 12775
ab78acc6
IC
12776 case 'pubkey': {
12777 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12778 scriptSig = scripts.pubKeyInput(pkSignature)
12779 break
12780 }
12781 }
ebd8d4e8 12782 }
ebd8d4e8 12783
ab78acc6
IC
12784 // did we build a scriptSig?
12785 if (scriptSig) {
12786 // wrap as scriptHash if necessary
12787 if (input.prevOutType === 'scripthash') {
12788 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12789 }
12790
12791 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12792 }
12793 })
12794
ab78acc6 12795 return tx
ebd8d4e8
IC
12796}
12797
ab78acc6
IC
12798TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12799 assert(index in this.inputs, 'No input at index: ' + index)
12800 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12801
ab78acc6
IC
12802 var input = this.inputs[index]
12803 var canSign = input.hashType &&
12804 input.prevOutScript &&
12805 input.prevOutType &&
12806 input.pubKeys &&
12807 input.scriptType &&
12808 input.signatures
ebd8d4e8 12809
ab78acc6
IC
12810 // are we almost ready to sign?
12811 if (canSign) {
12812 // if redeemScript was provided, enforce consistency
12813 if (redeemScript) {
12814 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12815 }
ebd8d4e8 12816
ab78acc6 12817 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12818
ab78acc6
IC
12819 // no? prepare
12820 } else {
12821 // must be pay-to-scriptHash?
12822 if (redeemScript) {
12823 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12824 if (input.prevOutScript) {
12825 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12826
12827 var scriptHash = input.prevOutScript.chunks[1]
12828 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12829 }
ebd8d4e8 12830
ab78acc6
IC
12831 var scriptType = scripts.classifyOutput(redeemScript)
12832 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12833
ab78acc6
IC
12834 var pubKeys = []
12835 switch (scriptType) {
12836 case 'multisig': {
12837 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12838 break
12839 }
ebd8d4e8 12840
ab78acc6
IC
12841 case 'pubkeyhash': {
12842 var pkh1 = redeemScript.chunks[2]
12843 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12844
ab78acc6
IC
12845 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12846 pubKeys = [privKey.pub]
12847 break
12848 }
ebd8d4e8 12849
ab78acc6
IC
12850 case 'pubkey': {
12851 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12852 break
12853 }
12854 }
ebd8d4e8 12855
ab78acc6
IC
12856 if (!input.prevOutScript) {
12857 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12858 input.prevOutType = 'scripthash'
12859 }
ebd8d4e8 12860
ab78acc6
IC
12861 input.pubKeys = pubKeys
12862 input.redeemScript = redeemScript
12863 input.scriptType = scriptType
ebd8d4e8 12864
ab78acc6
IC
12865 // cannot be pay-to-scriptHash
12866 } else {
12867 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12868
ab78acc6
IC
12869 // can we otherwise sign this?
12870 if (input.scriptType) {
12871 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12872
ab78acc6
IC
12873 // we know nothin' Jon Snow, assume pubKeyHash
12874 } else {
12875 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12876 input.prevOutType = 'pubkeyhash'
12877 input.pubKeys = [privKey.pub]
12878 input.scriptType = input.prevOutType
12879 }
12880 }
ebd8d4e8 12881
ab78acc6
IC
12882 input.hashType = hashType
12883 input.signatures = input.signatures || []
12884 }
12885
12886 var signatureScript = input.redeemScript || input.prevOutScript
12887 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12888
12889 // enforce signature order matches public keys
12890 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12891 // maintain a local copy of unmatched signatures
12892 var unmatched = input.signatures.slice()
12893
12894 input.signatures = input.pubKeys.map(function (pubKey) {
12895 var match
12896
12897 // check for any matching signatures
12898 unmatched.some(function (signature, i) {
12899 if (!pubKey.verify(signatureHash, signature)) return false
12900 match = signature
12901
12902 // remove matched signature from unmatched
12903 unmatched.splice(i, 1)
12904
12905 return true
12906 })
12907
12908 return match || undefined
12909 })
12910 }
12911
12912 // enforce in order signing of public keys
12913 assert(input.pubKeys.some(function (pubKey, i) {
12914 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12915
12916 assert(!input.signatures[i], 'Signature already exists')
12917 var signature = privKey.sign(signatureHash)
12918 input.signatures[i] = signature
12919
12920 return true
12921 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12922}
12923
ab78acc6 12924module.exports = TransactionBuilder
ebd8d4e8 12925
ab78acc6
IC
12926}).call(this,require("buffer").Buffer)
12927},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12928(function (Buffer){
ab78acc6
IC
12929var assert = require('assert')
12930var bufferutils = require('./bufferutils')
12931var typeForce = require('typeforce')
12932var networks = require('./networks')
12933var randomBytes = require('randombytes')
ebd8d4e8 12934
ab78acc6
IC
12935var Address = require('./address')
12936var HDNode = require('./hdnode')
12937var TransactionBuilder = require('./transaction_builder')
12938var Script = require('./script')
ebd8d4e8 12939
ab78acc6
IC
12940function Wallet (seed, network) {
12941 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12942
12943 seed = seed || randomBytes(32)
ebd8d4e8
IC
12944 network = network || networks.bitcoin
12945
12946 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12947 var masterKey = HDNode.fromSeedBuffer(seed, network)
12948
12949 // HD first-level child derivation method should be hardened
12950 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12951 var accountZero = masterKey.deriveHardened(0)
12952 var externalAccount = accountZero.derive(0)
12953 var internalAccount = accountZero.derive(1)
ebd8d4e8 12954
ebd8d4e8
IC
12955 this.addresses = []
12956 this.changeAddresses = []
ab78acc6
IC
12957 this.network = network
12958 this.unspents = []
ebd8d4e8 12959
ab78acc6
IC
12960 // FIXME: remove in 2.0.0
12961 this.unspentMap = {}
ebd8d4e8 12962
ab78acc6
IC
12963 // FIXME: remove in 2.0.0
12964 var me = this
12965 this.newMasterKey = function (seed) {
12966 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12967
12968 seed = seed || randomBytes(32)
12969 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 12970
ab78acc6 12971 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
12972 externalAccount = accountZero.derive(0)
12973 internalAccount = accountZero.derive(1)
12974
12975 me.addresses = []
12976 me.changeAddresses = []
12977
ab78acc6
IC
12978 me.unspents = []
12979 me.unspentMap = {}
ebd8d4e8
IC
12980 }
12981
ab78acc6
IC
12982 this.getMasterKey = function () {
12983 return masterKey
ebd8d4e8 12984 }
ab78acc6
IC
12985 this.getAccountZero = function () {
12986 return accountZero
ebd8d4e8 12987 }
ab78acc6
IC
12988 this.getExternalAccount = function () {
12989 return externalAccount
12990 }
12991 this.getInternalAccount = function () {
12992 return internalAccount
ebd8d4e8 12993 }
ab78acc6 12994}
ebd8d4e8 12995
ab78acc6
IC
12996Wallet.prototype.createTransaction = function (to, value, options) {
12997 // FIXME: remove in 2.0.0
12998 if (typeof options !== 'object') {
12999 if (options !== undefined) {
13000 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13001
ab78acc6
IC
13002 options = {
13003 fixedFee: arguments[2],
13004 changeAddress: arguments[3]
13005 }
ebd8d4e8 13006 }
ebd8d4e8
IC
13007 }
13008
ab78acc6 13009 options = options || {}
ebd8d4e8 13010
ab78acc6 13011 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13012
ab78acc6
IC
13013 var changeAddress = options.changeAddress
13014 var fixedFee = options.fixedFee
13015 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13016
ab78acc6
IC
13017 // filter by minConf, then pending and sort by descending value
13018 var unspents = this.unspents.filter(function (unspent) {
13019 return unspent.confirmations >= minConf
13020 }).filter(function (unspent) {
13021 return !unspent.pending
13022 }).sort(function (o1, o2) {
13023 return o2.value - o1.value
13024 })
ebd8d4e8 13025
ab78acc6
IC
13026 var accum = 0
13027 var addresses = []
13028 var subTotal = value
ebd8d4e8 13029
ab78acc6
IC
13030 var txb = new TransactionBuilder()
13031 txb.addOutput(to, value)
ebd8d4e8 13032
ab78acc6
IC
13033 for (var i = 0; i < unspents.length; ++i) {
13034 var unspent = unspents[i]
13035 addresses.push(unspent.address)
ebd8d4e8 13036
ab78acc6
IC
13037 txb.addInput(unspent.txHash, unspent.index)
13038
13039 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13040
ab78acc6
IC
13041 accum += unspent.value
13042 subTotal = value + fee
13043
13044 if (accum >= subTotal) {
13045 var change = accum - subTotal
13046
13047 if (change > this.network.dustThreshold) {
13048 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13049 }
ebd8d4e8 13050
ab78acc6 13051 break
ebd8d4e8
IC
13052 }
13053 }
13054
ab78acc6 13055 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13056
ab78acc6
IC
13057 return this.signWith(txb, addresses).build()
13058}
ebd8d4e8 13059
ab78acc6
IC
13060// FIXME: remove in 2.0.0
13061Wallet.prototype.processPendingTx = function (tx) {
13062 this.__processTx(tx, true)
13063}
ebd8d4e8 13064
ab78acc6
IC
13065// FIXME: remove in 2.0.0
13066Wallet.prototype.processConfirmedTx = function (tx) {
13067 this.__processTx(tx, false)
13068}
ebd8d4e8 13069
ab78acc6
IC
13070// FIXME: remove in 2.0.0
13071Wallet.prototype.__processTx = function (tx, isPending) {
13072 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13073
ab78acc6
IC
13074 var txId = tx.getId()
13075 var txHash = tx.getHash()
ebd8d4e8 13076
ab78acc6
IC
13077 tx.outs.forEach(function (txOut, i) {
13078 var address
ebd8d4e8 13079
ab78acc6
IC
13080 try {
13081 address = Address.fromOutputScript(txOut.script, this.network).toString()
13082 } catch (e) {
13083 if (!(e.message.match(/has no matching Address/)))
13084 throw e
13085 }
13086
13087 var myAddresses = this.addresses.concat(this.changeAddresses)
13088 if (myAddresses.indexOf(address) > -1) {
13089 var lookup = txId + ':' + i
13090 if (lookup in this.unspentMap) return
13091
13092 // its unique, add it
13093 var unspent = {
13094 address: address,
13095 confirmations: 0, // no way to determine this without more information
13096 index: i,
13097 txHash: txHash,
13098 txId: txId,
13099 value: txOut.value,
13100 pending: isPending
ebd8d4e8 13101 }
ebd8d4e8 13102
ab78acc6
IC
13103 this.unspentMap[lookup] = unspent
13104 this.unspents.push(unspent)
13105 }
13106 }, this)
ebd8d4e8 13107
ab78acc6
IC
13108 tx.ins.forEach(function (txIn) {
13109 // copy and convert to big-endian hex
13110 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13111
ab78acc6
IC
13112 var lookup = txInId + ':' + txIn.index
13113 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13114
ab78acc6 13115 var unspent = this.unspentMap[lookup]
ebd8d4e8 13116
ab78acc6
IC
13117 if (isPending) {
13118 unspent.pending = true
13119 unspent.spent = true
13120 } else {
13121 delete this.unspentMap[lookup]
ebd8d4e8 13122
ab78acc6
IC
13123 this.unspents = this.unspents.filter(function (unspent2) {
13124 return unspent !== unspent2
13125 })
13126 }
13127 }, this)
13128}
ebd8d4e8 13129
ab78acc6
IC
13130Wallet.prototype.generateAddress = function () {
13131 var k = this.addresses.length
13132 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13133
ab78acc6 13134 this.addresses.push(address.toString())
ebd8d4e8 13135
ab78acc6
IC
13136 return this.getReceiveAddress()
13137}
ebd8d4e8 13138
ab78acc6
IC
13139Wallet.prototype.generateChangeAddress = function () {
13140 var k = this.changeAddresses.length
13141 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13142
ab78acc6 13143 this.changeAddresses.push(address.toString())
ebd8d4e8 13144
ab78acc6
IC
13145 return this.getChangeAddress()
13146}
ebd8d4e8 13147
ab78acc6
IC
13148Wallet.prototype.getAddress = function () {
13149 if (this.addresses.length === 0) {
13150 this.generateAddress()
ebd8d4e8
IC
13151 }
13152
ab78acc6
IC
13153 return this.addresses[this.addresses.length - 1]
13154}
ebd8d4e8 13155
ab78acc6
IC
13156Wallet.prototype.getBalance = function (minConf) {
13157 minConf = minConf || 0
ebd8d4e8 13158
ab78acc6
IC
13159 return this.unspents.filter(function (unspent) {
13160 return unspent.confirmations >= minConf
13161
13162 // FIXME: remove spent filter in 2.0.0
13163 }).filter(function (unspent) {
13164 return !unspent.spent
13165 }).reduce(function (accum, unspent) {
13166 return accum + unspent.value
13167 }, 0)
13168}
ebd8d4e8 13169
ab78acc6
IC
13170Wallet.prototype.getChangeAddress = function () {
13171 if (this.changeAddresses.length === 0) {
13172 this.generateChangeAddress()
ebd8d4e8
IC
13173 }
13174
ab78acc6
IC
13175 return this.changeAddresses[this.changeAddresses.length - 1]
13176}
13177
13178Wallet.prototype.getInternalPrivateKey = function (index) {
13179 return this.getInternalAccount().derive(index).privKey
13180}
13181
13182Wallet.prototype.getPrivateKey = function (index) {
13183 return this.getExternalAccount().derive(index).privKey
13184}
13185
13186Wallet.prototype.getPrivateKeyForAddress = function (address) {
13187 var index
ebd8d4e8 13188
ab78acc6
IC
13189 if ((index = this.addresses.indexOf(address)) > -1) {
13190 return this.getPrivateKey(index)
ebd8d4e8
IC
13191 }
13192
ab78acc6
IC
13193 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13194 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13195 }
13196
ab78acc6
IC
13197 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13198}
ebd8d4e8 13199
ab78acc6
IC
13200Wallet.prototype.getUnspentOutputs = function (minConf) {
13201 minConf = minConf || 0
ebd8d4e8 13202
ab78acc6
IC
13203 return this.unspents.filter(function (unspent) {
13204 return unspent.confirmations >= minConf
ebd8d4e8 13205
ab78acc6
IC
13206 // FIXME: remove spent filter in 2.0.0
13207 }).filter(function (unspent) {
13208 return !unspent.spent
13209 }).map(function (unspent) {
13210 return {
13211 address: unspent.address,
13212 confirmations: unspent.confirmations,
13213 index: unspent.index,
13214 txId: unspent.txId,
13215 value: unspent.value,
13216
13217 // FIXME: remove in 2.0.0
13218 hash: unspent.txId,
13219 pending: unspent.pending
13220 }
13221 })
13222}
ebd8d4e8 13223
ab78acc6
IC
13224Wallet.prototype.setUnspentOutputs = function (unspents) {
13225 this.unspentMap = {}
13226 this.unspents = unspents.map(function (unspent) {
13227 // FIXME: remove unspent.hash in 2.0.0
13228 var txId = unspent.txId || unspent.hash
13229 var index = unspent.index
ebd8d4e8 13230
ab78acc6
IC
13231 // FIXME: remove in 2.0.0
13232 if (unspent.hash !== undefined) {
13233 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13234 }
ebd8d4e8 13235
ab78acc6
IC
13236 // FIXME: remove in 2.0.0
13237 if (index === undefined) {
13238 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13239 index = unspent.outputIndex
13240 }
ebd8d4e8 13241
ab78acc6
IC
13242 typeForce('String', txId)
13243 typeForce('Number', index)
13244 typeForce('Number', unspent.value)
13245
13246 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13247 assert.doesNotThrow(function () {
13248 Address.fromBase58Check(unspent.address)
13249 }, 'Expected Base58 Address, got ' + unspent.address)
13250 assert(isFinite(index), 'Expected finite index, got ' + index)
13251
13252 // FIXME: remove branch in 2.0.0
13253 if (unspent.confirmations !== undefined) {
13254 typeForce('Number', unspent.confirmations)
ebd8d4e8 13255 }
ebd8d4e8 13256
ab78acc6 13257 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13258
ab78acc6
IC
13259 unspent = {
13260 address: unspent.address,
13261 confirmations: unspent.confirmations || 0,
13262 index: index,
13263 txHash: txHash,
13264 txId: txId,
13265 value: unspent.value,
ebd8d4e8 13266
ab78acc6
IC
13267 // FIXME: remove in 2.0.0
13268 pending: unspent.pending || false
13269 }
13270
13271 // FIXME: remove in 2.0.0
13272 this.unspentMap[txId + ':' + index] = unspent
13273
13274 return unspent
13275 }, this)
13276}
13277
13278Wallet.prototype.signWith = function (tx, addresses) {
13279 addresses.forEach(function (address, i) {
13280 var privKey = this.getPrivateKeyForAddress(address)
13281
13282 tx.sign(i, privKey)
13283 }, this)
13284
13285 return tx
13286}
13287
13288function estimatePaddedFee (tx, network) {
13289 var tmpTx = tx.clone()
13290 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13291
13292 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13293}
13294
ab78acc6
IC
13295// FIXME: 1.0.0 shims, remove in 2.0.0
13296Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13297Wallet.prototype.createTx = Wallet.prototype.createTransaction
13298
ebd8d4e8
IC
13299module.exports = Wallet
13300
ab78acc6
IC
13301}).call(this,require("buffer").Buffer)
13302},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13303});</script>
d5dc92fd
IC
13304 <script>bitcoin.networks.shadow = {
13305 magicPrefix: '\x19ShadowCash Signed Message:\n',
13306 bip32: {
13307 public: 0xEE80286A,
13308 private: 0xEE8031E8
13309 },
13310 pubKeyHash: 0x3f,
13311 scriptHash: 0x7d,
13312 wif: 0xbf,
13313 dustThreshold: 0,
13314 feePerKb: 1000,
13315 estimateFee: function() { return "unused in this app" },
13316};
13317
13318bitcoin.networks.shadowtn = {
13319 magicPrefix: '\x19ShadowCash Signed Message:\n',
13320 bip32: {
13321 public: 0x76C0FDFB,
13322 private: 0x76C1077A
13323 },
13324 pubKeyHash: 0x7f,
13325 scriptHash: 0xc4,
13326 wif: 0xff,
13327 dustThreshold: 0,
13328 feePerKb: 1000,
13329 estimateFee: function() { return "unused in this app" },
13330};
5c434a8a
CM
13331
13332bitcoin.networks.clam = {
13333 bip32: {
13334 public: 0xa8c26d64,
13335 private: 0xa8c17826
13336 },
13337 pubKeyHash: 0x89,
13338 wif: 0x85,
13339};
d5dc92fd 13340</script>
ab78acc6 13341 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13342
13343//// base.js
13344
13345/** @fileOverview Javascript cryptography implementation.
13346 *
13347 * Crush to remove comments, shorten variable names and
13348 * generally reduce transmission size.
13349 *
13350 * @author Emily Stark
13351 * @author Mike Hamburg
13352 * @author Dan Boneh
13353 */
13354
13355"use strict";
13356/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13357/*global document, window, escape, unescape, module, require, Uint32Array */
13358
13359/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13360var sjcl = {
13361 /** @namespace Symmetric ciphers. */
13362 cipher: {},
13363
13364 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13365 hash: {},
13366
13367 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13368 keyexchange: {},
13369
13370 /** @namespace Block cipher modes of operation. */
13371 mode: {},
13372
13373 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13374 misc: {},
13375
13376 /**
13377 * @namespace Bit array encoders and decoders.
13378 *
13379 * @description
13380 * The members of this namespace are functions which translate between
13381 * SJCL's bitArrays and other objects (usually strings). Because it
13382 * isn't always clear which direction is encoding and which is decoding,
13383 * the method names are "fromBits" and "toBits".
13384 */
13385 codec: {},
13386
13387 /** @namespace Exceptions. */
13388 exception: {
13389 /** @constructor Ciphertext is corrupt. */
13390 corrupt: function(message) {
13391 this.toString = function() { return "CORRUPT: "+this.message; };
13392 this.message = message;
13393 },
13394
13395 /** @constructor Invalid parameter. */
13396 invalid: function(message) {
13397 this.toString = function() { return "INVALID: "+this.message; };
13398 this.message = message;
13399 },
13400
13401 /** @constructor Bug or missing feature in SJCL. @constructor */
13402 bug: function(message) {
13403 this.toString = function() { return "BUG: "+this.message; };
13404 this.message = message;
13405 },
13406
13407 /** @constructor Something isn't ready. */
13408 notReady: function(message) {
13409 this.toString = function() { return "NOT READY: "+this.message; };
13410 this.message = message;
ebd8d4e8 13411 }
80c4dd2a
IC
13412 }
13413};
13414
13415if(typeof module !== 'undefined' && module.exports){
13416 module.exports = sjcl;
13417}
13418if (typeof define === "function") {
13419 define([], function () {
13420 return sjcl;
13421 });
13422}
13423
13424
13425//// bitArray.js
13426
13427/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13428 *
13429 * @author Emily Stark
13430 * @author Mike Hamburg
13431 * @author Dan Boneh
13432 */
13433
13434/** @namespace Arrays of bits, encoded as arrays of Numbers.
13435 *
13436 * @description
13437 * <p>
13438 * These objects are the currency accepted by SJCL's crypto functions.
13439 * </p>
13440 *
13441 * <p>
13442 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13443 * but many of them can take arguments that are not a multiple of 4 bytes.
13444 * This library encodes arrays of bits (whose size need not be a multiple of 8
13445 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13446 * array of words, 32 bits at a time. Since the words are double-precision
13447 * floating point numbers, they fit some extra data. We use this (in a private,
13448 * possibly-changing manner) to encode the number of bits actually present
13449 * in the last word of the array.
13450 * </p>
13451 *
13452 * <p>
13453 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13454 * to ciphers like AES which want arrays of words.
13455 * </p>
13456 */
13457sjcl.bitArray = {
13458 /**
13459 * Array slices in units of bits.
13460 * @param {bitArray} a The array to slice.
13461 * @param {Number} bstart The offset to the start of the slice, in bits.
13462 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13463 * slice until the end of the array.
13464 * @return {bitArray} The requested slice.
13465 */
13466 bitSlice: function (a, bstart, bend) {
13467 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13468 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13469 },
13470
13471 /**
13472 * Extract a number packed into a bit array.
13473 * @param {bitArray} a The array to slice.
13474 * @param {Number} bstart The offset to the start of the slice, in bits.
13475 * @param {Number} length The length of the number to extract.
13476 * @return {Number} The requested slice.
13477 */
13478 extract: function(a, bstart, blength) {
13479 // FIXME: this Math.floor is not necessary at all, but for some reason
13480 // seems to suppress a bug in the Chromium JIT.
13481 var x, sh = Math.floor((-bstart-blength) & 31);
13482 if ((bstart + blength - 1 ^ bstart) & -32) {
13483 // it crosses a boundary
13484 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13485 } else {
13486 // within a single word
13487 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13488 }
80c4dd2a
IC
13489 return x & ((1<<blength) - 1);
13490 },
13491
13492 /**
13493 * Concatenate two bit arrays.
13494 * @param {bitArray} a1 The first array.
13495 * @param {bitArray} a2 The second array.
13496 * @return {bitArray} The concatenation of a1 and a2.
13497 */
13498 concat: function (a1, a2) {
13499 if (a1.length === 0 || a2.length === 0) {
13500 return a1.concat(a2);
13501 }
13502
13503 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13504 if (shift === 32) {
13505 return a1.concat(a2);
13506 } else {
13507 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13508 }
80c4dd2a
IC
13509 },
13510
13511 /**
13512 * Find the length of an array of bits.
13513 * @param {bitArray} a The array.
13514 * @return {Number} The length of a, in bits.
13515 */
13516 bitLength: function (a) {
13517 var l = a.length, x;
13518 if (l === 0) { return 0; }
13519 x = a[l - 1];
13520 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13521 },
13522
13523 /**
13524 * Truncate an array.
13525 * @param {bitArray} a The array.
13526 * @param {Number} len The length to truncate to, in bits.
13527 * @return {bitArray} A new array, truncated to len bits.
13528 */
13529 clamp: function (a, len) {
13530 if (a.length * 32 < len) { return a; }
13531 a = a.slice(0, Math.ceil(len / 32));
13532 var l = a.length;
13533 len = len & 31;
13534 if (l > 0 && len) {
13535 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13536 }
13537 return a;
13538 },
13539
13540 /**
13541 * Make a partial word for a bit array.
13542 * @param {Number} len The number of bits in the word.
13543 * @param {Number} x The bits.
13544 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13545 * @return {Number} The partial word.
13546 */
13547 partial: function (len, x, _end) {
13548 if (len === 32) { return x; }
13549 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13550 },
13551
13552 /**
13553 * Get the number of bits used by a partial word.
13554 * @param {Number} x The partial word.
13555 * @return {Number} The number of bits used by the partial word.
13556 */
13557 getPartial: function (x) {
13558 return Math.round(x/0x10000000000) || 32;
13559 },
13560
13561 /**
13562 * Compare two arrays for equality in a predictable amount of time.
13563 * @param {bitArray} a The first array.
13564 * @param {bitArray} b The second array.
13565 * @return {boolean} true if a == b; false otherwise.
13566 */
13567 equal: function (a, b) {
13568 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13569 return false;
ebd8d4e8 13570 }
80c4dd2a
IC
13571 var x = 0, i;
13572 for (i=0; i<a.length; i++) {
13573 x |= a[i]^b[i];
ebd8d4e8 13574 }
80c4dd2a
IC
13575 return (x === 0);
13576 },
13577
13578 /** Shift an array right.
13579 * @param {bitArray} a The array to shift.
13580 * @param {Number} shift The number of bits to shift.
13581 * @param {Number} [carry=0] A byte to carry in
13582 * @param {bitArray} [out=[]] An array to prepend to the output.
13583 * @private
13584 */
13585 _shiftRight: function (a, shift, carry, out) {
13586 var i, last2=0, shift2;
13587 if (out === undefined) { out = []; }
13588
13589 for (; shift >= 32; shift -= 32) {
13590 out.push(carry);
13591 carry = 0;
13592 }
13593 if (shift === 0) {
13594 return out.concat(a);
13595 }
13596
13597 for (i=0; i<a.length; i++) {
13598 out.push(carry | a[i]>>>shift);
13599 carry = a[i] << (32-shift);
13600 }
13601 last2 = a.length ? a[a.length-1] : 0;
13602 shift2 = sjcl.bitArray.getPartial(last2);
13603 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13604 return out;
13605 },
13606
13607 /** xor a block of 4 words together.
13608 * @private
13609 */
13610 _xor4: function(x,y) {
13611 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13612 },
13613
13614 /** byteswap a word array inplace.
13615 * (does not handle partial words)
13616 * @param {sjcl.bitArray} a word array
13617 * @return {sjcl.bitArray} byteswapped array
13618 */
13619 byteswapM: function(a) {
13620 var i, v, m = 0xff00;
13621 for (i = 0; i < a.length; ++i) {
13622 v = a[i];
13623 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13624 }
80c4dd2a
IC
13625 return a;
13626 }
13627};
13628
13629
13630//// codecString.js
13631
13632/** @fileOverview Bit array codec implementations.
13633 *
13634 * @author Emily Stark
13635 * @author Mike Hamburg
13636 * @author Dan Boneh
13637 */
13638
13639/** @namespace UTF-8 strings */
13640sjcl.codec.utf8String = {
13641 /** Convert from a bitArray to a UTF-8 string. */
13642 fromBits: function (arr) {
13643 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13644 for (i=0; i<bl/8; i++) {
13645 if ((i&3) === 0) {
13646 tmp = arr[i/4];
13647 }
13648 out += String.fromCharCode(tmp >>> 24);
13649 tmp <<= 8;
ebd8d4e8 13650 }
80c4dd2a
IC
13651 return decodeURIComponent(escape(out));
13652 },
13653
13654 /** Convert from a UTF-8 string to a bitArray. */
13655 toBits: function (str) {
13656 str = unescape(encodeURIComponent(str));
13657 var out = [], i, tmp=0;
13658 for (i=0; i<str.length; i++) {
13659 tmp = tmp << 8 | str.charCodeAt(i);
13660 if ((i&3) === 3) {
13661 out.push(tmp);
13662 tmp = 0;
13663 }
ebd8d4e8 13664 }
80c4dd2a
IC
13665 if (i&3) {
13666 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13667 }
80c4dd2a
IC
13668 return out;
13669 }
13670};
13671
13672
13673//// codecHex.js
13674
13675/** @fileOverview Bit array codec implementations.
13676 *
13677 * @author Emily Stark
13678 * @author Mike Hamburg
13679 * @author Dan Boneh
13680 */
13681
13682/** @namespace Hexadecimal */
13683sjcl.codec.hex = {
13684 /** Convert from a bitArray to a hex string. */
13685 fromBits: function (arr) {
13686 var out = "", i;
13687 for (i=0; i<arr.length; i++) {
13688 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13689 }
80c4dd2a
IC
13690 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13691 },
13692 /** Convert from a hex string to a bitArray. */
13693 toBits: function (str) {
13694 var i, out=[], len;
13695 str = str.replace(/\s|0x/g, "");
13696 len = str.length;
13697 str = str + "00000000";
13698 for (i=0; i<str.length; i+=8) {
13699 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13700 }
80c4dd2a
IC
13701 return sjcl.bitArray.clamp(out, len*4);
13702 }
13703};
13704
13705
13706//// sha512.js
13707
13708/** @fileOverview Javascript SHA-512 implementation.
13709 *
13710 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13711 * SJCL by Stefan Thomas.
13712 *
13713 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13714 * Released with New BSD License
13715 *
13716 * @author Emily Stark
13717 * @author Mike Hamburg
13718 * @author Dan Boneh
13719 * @author Jeff Mott
13720 * @author Stefan Thomas
13721 */
13722
13723/**
13724 * Context for a SHA-512 operation in progress.
13725 * @constructor
13726 * @class Secure Hash Algorithm, 512 bits.
13727 */
13728sjcl.hash.sha512 = function (hash) {
13729 if (!this._key[0]) { this._precompute(); }
13730 if (hash) {
13731 this._h = hash._h.slice(0);
13732 this._buffer = hash._buffer.slice(0);
13733 this._length = hash._length;
13734 } else {
13735 this.reset();
13736 }
13737};
13738
13739/**
13740 * Hash a string or an array of words.
13741 * @static
13742 * @param {bitArray|String} data the data to hash.
13743 * @return {bitArray} The hash value, an array of 16 big-endian words.
13744 */
13745sjcl.hash.sha512.hash = function (data) {
13746 return (new sjcl.hash.sha512()).update(data).finalize();
13747};
13748
13749sjcl.hash.sha512.prototype = {
13750 /**
13751 * The hash's block size, in bits.
13752 * @constant
13753 */
13754 blockSize: 1024,
13755
13756 /**
13757 * Reset the hash state.
13758 * @return this
13759 */
13760 reset:function () {
13761 this._h = this._init.slice(0);
13762 this._buffer = [];
13763 this._length = 0;
13764 return this;
13765 },
13766
13767 /**
13768 * Input several words to the hash.
13769 * @param {bitArray|String} data the data to hash.
13770 * @return this
13771 */
13772 update: function (data) {
13773 if (typeof data === "string") {
13774 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13775 }
80c4dd2a
IC
13776 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13777 ol = this._length,
13778 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13779 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13780 this._block(b.splice(0,32));
ebd8d4e8 13781 }
80c4dd2a
IC
13782 return this;
13783 },
13784
13785 /**
13786 * Complete hashing and output the hash value.
13787 * @return {bitArray} The hash value, an array of 16 big-endian words.
13788 */
13789 finalize:function () {
13790 var i, b = this._buffer, h = this._h;
13791
13792 // Round out and push the buffer
13793 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13794
13795 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13796 for (i = b.length + 4; i & 31; i++) {
13797 b.push(0);
ebd8d4e8 13798 }
80c4dd2a
IC
13799
13800 // append the length
13801 b.push(0);
13802 b.push(0);
13803 b.push(Math.floor(this._length / 0x100000000));
13804 b.push(this._length | 0);
13805
13806 while (b.length) {
13807 this._block(b.splice(0,32));
ebd8d4e8 13808 }
80c4dd2a
IC
13809
13810 this.reset();
13811 return h;
13812 },
13813
13814 /**
13815 * The SHA-512 initialization vector, to be precomputed.
13816 * @private
13817 */
13818 _init:[],
13819
13820 /**
13821 * Least significant 24 bits of SHA512 initialization values.
13822 *
13823 * Javascript only has 53 bits of precision, so we compute the 40 most
13824 * significant bits and add the remaining 24 bits as constants.
13825 *
13826 * @private
13827 */
13828 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13829
13830 /*
13831 _init:
13832 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13833 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13834 */
13835
13836 /**
13837 * The SHA-512 hash key, to be precomputed.
13838 * @private
13839 */
13840 _key:[],
13841
13842 /**
13843 * Least significant 24 bits of SHA512 key values.
13844 * @private
13845 */
13846 _keyr:
13847 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13848 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13849 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13850 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13851 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13852 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13853 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13854 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13855 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13856 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13857
13858 /*
13859 _key:
13860 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13861 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13862 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13863 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13864 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13865 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13866 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13867 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13868 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13869 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13870 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13871 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13872 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13873 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13874 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13875 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13876 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13877 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13878 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13879 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13880 */
13881
13882 /**
13883 * Function to precompute _init and _key.
13884 * @private
13885 */
13886 _precompute: function () {
13887 // XXX: This code is for precomputing the SHA256 constants, change for
13888 // SHA512 and re-enable.
13889 var i = 0, prime = 2, factor;
13890
13891 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13892 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13893
13894 outer: for (; i<80; prime++) {
13895 for (factor=2; factor*factor <= prime; factor++) {
13896 if (prime % factor === 0) {
13897 // not a prime
13898 continue outer;
ebd8d4e8 13899 }
80c4dd2a
IC
13900 }
13901
13902 if (i<8) {
13903 this._init[i*2] = frac(Math.pow(prime, 1/2));
13904 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13905 }
13906 this._key[i*2] = frac(Math.pow(prime, 1/3));
13907 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13908 i++;
ebd8d4e8 13909 }
80c4dd2a
IC
13910 },
13911
13912 /**
13913 * Perform one cycle of SHA-512.
13914 * @param {bitArray} words one block of words.
13915 * @private
13916 */
13917 _block:function (words) {
13918 var i, wrh, wrl,
13919 w = words.slice(0),
13920 h = this._h,
13921 k = this._key,
13922 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13923 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13924 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13925 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13926
13927 // Working variables
13928 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13929 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13930 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13931 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13932
13933 for (i=0; i<80; i++) {
13934 // load up the input word for this round
13935 if (i<16) {
13936 wrh = w[i * 2];
13937 wrl = w[i * 2 + 1];
13938 } else {
13939 // Gamma0
13940 var gamma0xh = w[(i-15) * 2];
13941 var gamma0xl = w[(i-15) * 2 + 1];
13942 var gamma0h =
13943 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13944 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13945 (gamma0xh >>> 7);
13946 var gamma0l =
13947 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13948 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13949 ((gamma0xh << 25) | (gamma0xl >>> 7));
13950
13951 // Gamma1
13952 var gamma1xh = w[(i-2) * 2];
13953 var gamma1xl = w[(i-2) * 2 + 1];
13954 var gamma1h =
13955 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13956 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13957 (gamma1xh >>> 6);
13958 var gamma1l =
13959 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13960 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13961 ((gamma1xh << 26) | (gamma1xl >>> 6));
13962
13963 // Shortcuts
13964 var wr7h = w[(i-7) * 2];
13965 var wr7l = w[(i-7) * 2 + 1];
13966
13967 var wr16h = w[(i-16) * 2];
13968 var wr16l = w[(i-16) * 2 + 1];
13969
13970 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13971 wrl = gamma0l + wr7l;
13972 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13973 wrl += gamma1l;
13974 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13975 wrl += wr16l;
13976 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13977 }
13978
13979 w[i*2] = wrh |= 0;
13980 w[i*2 + 1] = wrl |= 0;
13981
13982 // Ch
13983 var chh = (eh & fh) ^ (~eh & gh);
13984 var chl = (el & fl) ^ (~el & gl);
13985
13986 // Maj
13987 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13988 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13989
13990 // Sigma0
13991 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13992 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13993
13994 // Sigma1
13995 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13996 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13997
13998 // K(round)
13999 var krh = k[i*2];
14000 var krl = k[i*2+1];
14001
14002 // t1 = h + sigma1 + ch + K(round) + W(round)
14003 var t1l = hl + sigma1l;
14004 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14005 t1l += chl;
14006 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14007 t1l += krl;
14008 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14009 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14010 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14011
14012 // t2 = sigma0 + maj
14013 var t2l = sigma0l + majl;
14014 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14015
14016 // Update working variables
14017 hh = gh;
14018 hl = gl;
14019 gh = fh;
14020 gl = fl;
14021 fh = eh;
14022 fl = el;
14023 el = (dl + t1l) | 0;
14024 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14025 dh = ch;
14026 dl = cl;
14027 ch = bh;
14028 cl = bl;
14029 bh = ah;
14030 bl = al;
14031 al = (t1l + t2l) | 0;
14032 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14033 }
14034
14035 // Intermediate hash
14036 h0l = h[1] = (h0l + al) | 0;
14037 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14038 h1l = h[3] = (h1l + bl) | 0;
14039 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14040 h2l = h[5] = (h2l + cl) | 0;
14041 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14042 h3l = h[7] = (h3l + dl) | 0;
14043 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14044 h4l = h[9] = (h4l + el) | 0;
14045 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14046 h5l = h[11] = (h5l + fl) | 0;
14047 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14048 h6l = h[13] = (h6l + gl) | 0;
14049 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14050 h7l = h[15] = (h7l + hl) | 0;
14051 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14052 }
14053};
14054
14055
14056//// hmac.js
14057
14058/** @fileOverview HMAC implementation.
14059 *
14060 * @author Emily Stark
14061 * @author Mike Hamburg
14062 * @author Dan Boneh
14063 */
14064
14065/** HMAC with the specified hash function.
14066 * @constructor
14067 * @param {bitArray} key the key for HMAC.
14068 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14069 */
14070sjcl.misc.hmac = function (key, Hash) {
14071 this._hash = Hash = Hash || sjcl.hash.sha256;
14072 var exKey = [[],[]], i,
14073 bs = Hash.prototype.blockSize / 32;
14074 this._baseHash = [new Hash(), new Hash()];
14075
14076 if (key.length > bs) {
14077 key = Hash.hash(key);
14078 }
14079
14080 for (i=0; i<bs; i++) {
14081 exKey[0][i] = key[i]^0x36363636;
14082 exKey[1][i] = key[i]^0x5C5C5C5C;
14083 }
14084
14085 this._baseHash[0].update(exKey[0]);
14086 this._baseHash[1].update(exKey[1]);
14087 this._resultHash = new Hash(this._baseHash[0]);
14088};
14089
14090/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14091 * @param {bitArray|String} data The data to mac.
14092 */
14093sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14094 if (!this._updated) {
14095 this.update(data);
14096 return this.digest(data);
14097 } else {
14098 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14099 }
14100};
14101
14102sjcl.misc.hmac.prototype.reset = function () {
14103 this._resultHash = new this._hash(this._baseHash[0]);
14104 this._updated = false;
14105};
14106
14107sjcl.misc.hmac.prototype.update = function (data) {
14108 this._updated = true;
14109 this._resultHash.update(data);
14110};
14111
14112sjcl.misc.hmac.prototype.digest = function () {
14113 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14114
14115 this.reset();
14116
14117 return result;
14118};
14119
14120
14121//// pbkdf2.js
14122
14123
14124/** @fileOverview Password-based key-derivation function, version 2.0.
14125 *
14126 * @author Emily Stark
14127 * @author Mike Hamburg
14128 * @author Dan Boneh
14129 */
14130
14131/** Password-Based Key-Derivation Function, version 2.0.
14132 *
14133 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14134 *
14135 * This is the method specified by RSA's PKCS #5 standard.
14136 *
14137 * @param {bitArray|String} password The password.
14138 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14139 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14140 * @param {Number} [length] The length of the derived key. Defaults to the
14141 output size of the hash function.
14142 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14143 * @return {bitArray} the derived key.
14144 */
14145sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14146 count = count || 1000;
14147
14148 if (length < 0 || count < 0) {
14149 throw sjcl.exception.invalid("invalid params to pbkdf2");
14150 }
14151
14152 if (typeof password === "string") {
14153 password = sjcl.codec.utf8String.toBits(password);
14154 }
14155
14156 if (typeof salt === "string") {
14157 salt = sjcl.codec.utf8String.toBits(salt);
14158 }
14159
14160 Prff = Prff || sjcl.misc.hmac;
14161
14162 var prf = new Prff(password),
14163 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14164
14165 for (k = 1; 32 * out.length < (length || 1); k++) {
14166 u = ui = prf.encrypt(b.concat(salt,[k]));
14167
14168 for (i=1; i<count; i++) {
14169 ui = prf.encrypt(ui);
14170 for (j=0; j<ui.length; j++) {
14171 u[j] ^= ui[j];
14172 }
ebd8d4e8 14173 }
80c4dd2a
IC
14174
14175 out = out.concat(u);
14176 }
14177
14178 if (length) { out = b.clamp(out, length); }
14179
14180 return out;
14181};
14182
14183
14184//// sha256.js
14185
14186/** @fileOverview Javascript SHA-256 implementation.
14187 *
14188 * An older version of this implementation is available in the public
14189 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14190 * Stanford University 2008-2010 and BSD-licensed for liability
14191 * reasons.
14192 *
14193 * Special thanks to Aldo Cortesi for pointing out several bugs in
14194 * this code.
14195 *
14196 * @author Emily Stark
14197 * @author Mike Hamburg
14198 * @author Dan Boneh
14199 */
14200
14201/**
14202 * Context for a SHA-256 operation in progress.
14203 * @constructor
14204 * @class Secure Hash Algorithm, 256 bits.
14205 */
14206sjcl.hash.sha256 = function (hash) {
14207 if (!this._key[0]) { this._precompute(); }
14208 if (hash) {
14209 this._h = hash._h.slice(0);
14210 this._buffer = hash._buffer.slice(0);
14211 this._length = hash._length;
14212 } else {
14213 this.reset();
14214 }
14215};
14216
14217/**
14218 * Hash a string or an array of words.
14219 * @static
14220 * @param {bitArray|String} data the data to hash.
14221 * @return {bitArray} The hash value, an array of 16 big-endian words.
14222 */
14223sjcl.hash.sha256.hash = function (data) {
14224 return (new sjcl.hash.sha256()).update(data).finalize();
14225};
14226
14227sjcl.hash.sha256.prototype = {
14228 /**
14229 * The hash's block size, in bits.
14230 * @constant
14231 */
14232 blockSize: 512,
14233
14234 /**
14235 * Reset the hash state.
14236 * @return this
14237 */
14238 reset:function () {
14239 this._h = this._init.slice(0);
14240 this._buffer = [];
14241 this._length = 0;
14242 return this;
14243 },
14244
14245 /**
14246 * Input several words to the hash.
14247 * @param {bitArray|String} data the data to hash.
14248 * @return this
14249 */
14250 update: function (data) {
14251 if (typeof data === "string") {
14252 data = sjcl.codec.utf8String.toBits(data);
14253 }
14254 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14255 ol = this._length,
14256 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14257 for (i = 512+ol & -512; i <= nl; i+= 512) {
14258 this._block(b.splice(0,16));
ebd8d4e8 14259 }
3af2954a 14260 return this;
80c4dd2a
IC
14261 },
14262
14263 /**
14264 * Complete hashing and output the hash value.
14265 * @return {bitArray} The hash value, an array of 8 big-endian words.
14266 */
14267 finalize:function () {
14268 var i, b = this._buffer, h = this._h;
14269
14270 // Round out and push the buffer
14271 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14272
14273 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14274 for (i = b.length + 2; i & 15; i++) {
14275 b.push(0);
14276 }
14277
14278 // append the length
14279 b.push(Math.floor(this._length / 0x100000000));
14280 b.push(this._length | 0);
14281
14282 while (b.length) {
14283 this._block(b.splice(0,16));
14284 }
14285
14286 this.reset();
14287 return h;
14288 },
14289
14290 /**
14291 * The SHA-256 initialization vector, to be precomputed.
14292 * @private
14293 */
14294 _init:[],
14295 /*
14296 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14297 */
14298
14299 /**
14300 * The SHA-256 hash key, to be precomputed.
14301 * @private
14302 */
14303 _key:[],
14304 /*
14305 _key:
14306 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14307 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14308 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14309 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14310 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14311 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14312 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14313 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14314 */
14315
14316
14317 /**
14318 * Function to precompute _init and _key.
14319 * @private
14320 */
14321 _precompute: function () {
14322 var i = 0, prime = 2, factor;
14323
14324 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14325
14326 outer: for (; i<64; prime++) {
14327 for (factor=2; factor*factor <= prime; factor++) {
14328 if (prime % factor === 0) {
14329 // not a prime
14330 continue outer;
ebd8d4e8 14331 }
80c4dd2a
IC
14332 }
14333
14334 if (i<8) {
14335 this._init[i] = frac(Math.pow(prime, 1/2));
14336 }
14337 this._key[i] = frac(Math.pow(prime, 1/3));
14338 i++;
ebd8d4e8 14339 }
80c4dd2a
IC
14340 },
14341
14342 /**
14343 * Perform one cycle of SHA-256.
14344 * @param {bitArray} words one block of words.
14345 * @private
14346 */
14347 _block:function (words) {
14348 var i, tmp, a, b,
14349 w = words.slice(0),
14350 h = this._h,
14351 k = this._key,
14352 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14353 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14354
14355 /* Rationale for placement of |0 :
14356 * If a value can overflow is original 32 bits by a factor of more than a few
14357 * million (2^23 ish), there is a possibility that it might overflow the
14358 * 53-bit mantissa and lose precision.
14359 *
14360 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14361 * propagates around the loop, and on the hash state h[]. I don't believe
14362 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14363 * (for h4 anyway), and better safe than sorry.
14364 *
14365 * The clamps on h[] are necessary for the output to be correct even in the
14366 * common case and for short inputs.
14367 */
14368 for (i=0; i<64; i++) {
14369 // load up the input word for this round
14370 if (i<16) {
14371 tmp = w[i];
14372 } else {
14373 a = w[(i+1 ) & 15];
14374 b = w[(i+14) & 15];
14375 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14376 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14377 w[i&15] + w[(i+9) & 15]) | 0;
14378 }
14379
14380 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14381
14382 // shift register
14383 h7 = h6; h6 = h5; h5 = h4;
14384 h4 = h3 + tmp | 0;
14385 h3 = h2; h2 = h1; h1 = h0;
14386
14387 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14388 }
14389
14390 h[0] = h[0]+h0 | 0;
14391 h[1] = h[1]+h1 | 0;
14392 h[2] = h[2]+h2 | 0;
14393 h[3] = h[3]+h3 | 0;
14394 h[4] = h[4]+h4 | 0;
14395 h[5] = h[5]+h5 | 0;
14396 h[6] = h[6]+h6 | 0;
14397 h[7] = h[7]+h7 | 0;
14398 }
14399};
dc55c6b0 14400</script>
ab78acc6 14401 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14402WORDLISTS["english"] = [
ebd8d4e8
IC
14403"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14404"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14405"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14406"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14407"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14408"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14409"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14410"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14411"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14412"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14413"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14414"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14415"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14416"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14417"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14418"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14419"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14420"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14421"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14422"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14423"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14424"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14425"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14426"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14427"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14428"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14429"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14430"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14431"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14432"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14433"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14434"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14435"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14436"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14437"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14438"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14439"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14440"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14441"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14442"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14443"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14444"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14445"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14446"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14447"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14448"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14449"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14450"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14451"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14452"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14453"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14454"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14455"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14456"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14457"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14458"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14459"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14460"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14461"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14462"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14463"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14464"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14465"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14466"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14467"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14468"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14469"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14470"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14471"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14472"film","filter","final","find","fine","finger","finish","fire","firm","first",
14473"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14474"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14475"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14476"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14477"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14478"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14479"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14480"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14481"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14482"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14483"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14484"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14485"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14486"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14487"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14488"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14489"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14490"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14491"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14492"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14493"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14494"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14495"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14496"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14497"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14498"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14499"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14500"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14501"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14502"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14503"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14504"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14505"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14506"liar","liberty","library","license","life","lift","light","like","limb","limit",
14507"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14508"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14509"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14510"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14511"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14512"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14513"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14514"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14515"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14516"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14517"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14518"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14519"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14520"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14521"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14522"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14523"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14524"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14525"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14526"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14527"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14528"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14529"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14530"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14531"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14532"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14533"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14534"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14535"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14536"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14537"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14538"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14539"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14540"prize","problem","process","produce","profit","program","project","promote","proof","property",
14541"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14542"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14543"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14544"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14545"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14546"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14547"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14548"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14549"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14550"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14551"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14552"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14553"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14554"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14555"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14556"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14557"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14558"scrub","sea","search","season","seat","second","secret","section","security","seed",
14559"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14560"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14561"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14562"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14563"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14564"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14565"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14566"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14567"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14568"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14569"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14570"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14571"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14572"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14573"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14574"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14575"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14576"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14577"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14578"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14579"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14580"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14581"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14582"thank","that","theme","then","theory","there","they","thing","this","thought",
14583"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14584"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14585"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14586"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14587"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14588"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14589"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14590"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14591"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14592"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14593"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14594"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14595"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14596"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14597"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14598"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14599"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14600"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14601"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14602"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14603"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14604"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14605"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14606"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14607"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14608</script>
ab78acc6 14609 <script>/*
3af2954a
IC
14610 * Copyright (c) 2013 Pavol Rusnak
14611 *
14612 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14613 * this software and associated documentation files (the "Software"), to deal in
14614 * the Software without restriction, including without limitation the rights to
14615 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14616 * of the Software, and to permit persons to whom the Software is furnished to do
14617 * so, subject to the following conditions:
14618 *
14619 * The above copyright notice and this permission notice shall be included in all
14620 * copies or substantial portions of the Software.
14621 *
14622 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14623 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14624 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14625 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14626 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14627 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14628 */
14629
14630/*
14631 * Javascript port from python by Ian Coleman
14632 *
80c4dd2a
IC
14633 * Requires code from sjcl
14634 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14635 */
14636
14637var Mnemonic = function(language) {
14638
14639 var PBKDF2_ROUNDS = 2048;
14640 var RADIX = 2048;
14641
14642 var self = this;
14643 var wordlist = [];
14644
80c4dd2a
IC
14645 var hmacSHA512 = function(key) {
14646 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14647 this.encrypt = function() {
14648 return hasher.encrypt.apply(hasher, arguments);
14649 };
14650 };
14651
3af2954a
IC
14652 function init() {
14653 wordlist = WORDLISTS[language];
14654 if (wordlist.length != RADIX) {
14655 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14656 throw err;
14657 }
14658 }
14659
14660 self.generate = function(strength) {
14661 strength = strength || 128;
14662 var r = strength % 32;
14663 if (r > 0) {
14664 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14665 }
14666 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14667 if (!hasStrongCrypto) {
14668 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14669 }
14670 var buffer = new Uint8Array(strength / 8);
14671 var data = crypto.getRandomValues(buffer);
14672 return self.toMnemonic(data);
14673 }
14674
80c4dd2a
IC
14675 self.toMnemonic = function(byteArray) {
14676 if (byteArray.length % 4 > 0) {
14677 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14678 }
14679
14680 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14681 var data = byteArrayToWordArray(byteArray);
14682 var hash = sjcl.hash.sha256.hash(data);
14683 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14684
14685 // b is a binary string, eg '00111010101100...'
14686 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14687 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14688 //
14689 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14690 // c = bin(int(h, 16))[2:].zfill(256)
14691 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14692 var a = byteArrayToBinaryString(byteArray);
14693 var c = zfill(hexStringToBinaryString(h), 256);
14694 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14695 // b = line1 + line2
14696 var b = a + d;
14697
14698 var result = [];
14699 var blen = b.length / 11;
14700 for (var i=0; i<blen; i++) {
14701 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14702 result.push(wordlist[idx]);
14703 }
14704 return result.join(' ');
14705 }
14706
14707 self.check = function(mnemonic) {
14708 var mnemonic = mnemonic.split(' ')
14709 if (mnemonic.length % 3 > 0) {
14710 return false
14711 }
14712 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14713 var idx = [];
14714 for (var i=0; i<mnemonic.length; i++) {
14715 var word = mnemonic[i];
14716 var wordIndex = wordlist.indexOf(word);
14717 if (wordIndex == -1) {
14718 return false;
14719 }
14720 var binaryIndex = zfill(wordIndex.toString(2), 11);
14721 idx.push(binaryIndex);
14722 }
14723 var b = idx.join('');
14724 var l = b.length;
14725 //d = b[:l / 33 * 32]
14726 //h = b[-l / 33:]
14727 var d = b.substring(0, l / 33 * 32);
14728 var h = b.substring(l - l / 33, l);
14729 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14730 var nd = binaryStringToWordArray(d);
3af2954a 14731 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14732 var ndHash = sjcl.hash.sha256.hash(nd);
14733 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14734 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14735 var nh = ndBstr.substring(0,l/33);
14736 return h == nh;
14737 }
14738
14739 self.toSeed = function(mnemonic, passphrase) {
14740 passphrase = passphrase || '';
7772c641 14741 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
3af2954a
IC
14742 passphrase = self.normalizeString(passphrase)
14743 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14744 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14745 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14746 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14747 var hashHex = sjcl.codec.hex.fromBits(result);
14748 return hashHex;
3af2954a
IC
14749 }
14750
14751 self.normalizeString = function(str) {
14752 if (typeof str.normalize == "function") {
14753 return str.normalize("NFKD");
14754 }
14755 else {
14756 // TODO decide how to handle this in the future.
14757 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14758 return str;
14759 }
14760 }
14761
80c4dd2a
IC
14762 function byteArrayToWordArray(data) {
14763 var a = [];
14764 for (var i=0; i<data.length/4; i++) {
14765 v = 0;
14766 v += data[i*4 + 0] << 8 * 3;
14767 v += data[i*4 + 1] << 8 * 2;
14768 v += data[i*4 + 2] << 8 * 1;
14769 v += data[i*4 + 3] << 8 * 0;
14770 a.push(v);
14771 }
14772 return a;
14773 }
14774
3af2954a
IC
14775 function byteArrayToBinaryString(data) {
14776 var bin = "";
14777 for (var i=0; i<data.length; i++) {
14778 bin += zfill(data[i].toString(2), 8);
14779 }
14780 return bin;
14781 }
14782
80c4dd2a
IC
14783 function hexStringToBinaryString(hexString) {
14784 binaryString = "";
14785 for (var i=0; i<hexString.length; i++) {
14786 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14787 }
14788 return binaryString;
14789 }
14790
14791 function binaryStringToWordArray(binary) {
14792 var aLen = binary.length / 32;
14793 var a = [];
14794 for (var i=0; i<aLen; i++) {
14795 var valueStr = binary.substring(0,32);
3af2954a 14796 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14797 a.push(value);
14798 binary = binary.slice(32);
3af2954a 14799 }
80c4dd2a 14800 return a;
3af2954a
IC
14801 }
14802
14803 // Pad a numeric string on the left with zero digits until the given width
14804 // is reached.
14805 // Note this differs to the python implementation because it does not
14806 // handle numbers starting with a sign.
14807 function zfill(source, length) {
14808 source = source.toString();
14809 while (source.length < length) {
14810 source = '0' + source;
14811 }
14812 return source;
14813 }
14814
14815 init();
ebd8d4e8 14816
3af2954a 14817}
dc55c6b0 14818</script>
ab78acc6 14819 <script>(function() {
ebd8d4e8
IC
14820
14821 var mnemonic = new Mnemonic("english");
73161a92 14822 var seed = null
ebd8d4e8
IC
14823 var bip32RootKey = null;
14824 var bip32ExtendedKey = null;
ab78acc6 14825 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14826 var addressRowTemplate = $("#address-row-template");
14827
80c4dd2a
IC
14828 var showIndex = true;
14829 var showAddress = true;
14830 var showPrivKey = true;
14831
ebd8d4e8 14832 var phraseChangeTimeoutEvent = null;
efe41586 14833 var rootKeyChangedTimeoutEvent = null;
ebd8d4e8
IC
14834
14835 var DOM = {};
d6cedc94
IC
14836 DOM.network = $(".network");
14837 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14838 DOM.phrase = $(".phrase");
721b7284 14839 DOM.passphrase = $(".passphrase");
ebd8d4e8 14840 DOM.generate = $(".generate");
73161a92 14841 DOM.seed = $(".seed");
ebd8d4e8
IC
14842 DOM.rootKey = $(".root-key");
14843 DOM.extendedPrivKey = $(".extended-priv-key");
14844 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14845 DOM.bip32tab = $("#bip32-tab");
14846 DOM.bip44tab = $("#bip44-tab");
14847 DOM.bip32panel = $("#bip32");
14848 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14849 DOM.bip32path = $("#bip32-path");
14850 DOM.bip44path = $("#bip44-path");
14851 DOM.bip44purpose = $("#bip44 .purpose");
14852 DOM.bip44coin = $("#bip44 .coin");
14853 DOM.bip44account = $("#bip44 .account");
14854 DOM.bip44change = $("#bip44 .change");
14855 DOM.strength = $(".strength");
14856 DOM.addresses = $(".addresses");
14857 DOM.rowsToAdd = $(".rows-to-add");
14858 DOM.more = $(".more");
14859 DOM.feedback = $(".feedback");
14860 DOM.tab = $(".derivation-type a");
14861 DOM.indexToggle = $(".index-toggle");
14862 DOM.addressToggle = $(".address-toggle");
14863 DOM.privateKeyToggle = $(".private-key-toggle");
14864
ebd8d4e8
IC
14865 function init() {
14866 // Events
d6cedc94 14867 DOM.network.on("change", networkChanged);
a19a5498
IC
14868 DOM.phrase.on("input", delayedPhraseChanged);
14869 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14870 DOM.generate.on("click", generateClicked);
14871 DOM.more.on("click", showMore);
efe41586
IC
14872 DOM.rootKey.on("input", delayedRootKeyChanged);
14873 DOM.bip32path.on("input", calcForDerivationPath);
14874 DOM.bip44purpose.on("input", calcForDerivationPath);
14875 DOM.bip44coin.on("input", calcForDerivationPath);
14876 DOM.bip44account.on("input", calcForDerivationPath);
14877 DOM.bip44change.on("input", calcForDerivationPath);
14878 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
ebd8d4e8
IC
14879 DOM.indexToggle.on("click", toggleIndexes);
14880 DOM.addressToggle.on("click", toggleAddresses);
14881 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14882 disableForms();
14883 hidePending();
14884 hideValidationError();
ab78acc6 14885 populateNetworkSelect();
ebd8d4e8
IC
14886 }
14887
14888 // Event handlers
14889
d6cedc94 14890 function networkChanged(e) {
ab78acc6
IC
14891 var network = e.target.value;
14892 networks[network].onSelect();
efe41586 14893 displayBip32Info();
d6cedc94
IC
14894 }
14895
ebd8d4e8
IC
14896 function delayedPhraseChanged() {
14897 hideValidationError();
14898 showPending();
14899 if (phraseChangeTimeoutEvent != null) {
14900 clearTimeout(phraseChangeTimeoutEvent);
14901 }
14902 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14903 }
14904
14905 function phraseChanged() {
14906 showPending();
14907 hideValidationError();
14908 // Get the mnemonic phrase
14909 var phrase = DOM.phrase.val();
14910 var errorText = findPhraseErrors(phrase);
14911 if (errorText) {
14912 showValidationError(errorText);
14913 return;
14914 }
efe41586
IC
14915 // Calculate and display
14916 var passphrase = DOM.passphrase.val();
14917 calcBip32RootKeyFromSeed(phrase, passphrase);
14918 calcForDerivationPath();
14919 hidePending();
14920 }
14921
14922 function delayedRootKeyChanged() {
14923 // Warn if there is an existing mnemonic or passphrase.
14924 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14925 if (!confirm("This will clear existing mnemonic and passphrase")) {
14926 DOM.rootKey.val(bip32RootKey);
14927 return
14928 }
14929 }
14930 hideValidationError();
14931 showPending();
14932 // Clear existing mnemonic and passphrase
14933 DOM.phrase.val("");
14934 DOM.passphrase.val("");
14935 seed = null;
14936 if (rootKeyChangedTimeoutEvent != null) {
14937 clearTimeout(rootKeyChangedTimeoutEvent);
14938 }
14939 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
14940 }
14941
14942 function rootKeyChanged() {
14943 showPending();
14944 hideValidationError();
14945 // Validate the root key TODO
14946 var rootKeyBase58 = DOM.rootKey.val();
14947 var errorText = validateRootKey(rootKeyBase58);
14948 if (errorText) {
14949 showValidationError(errorText);
14950 return;
14951 }
14952 // Calculate and display
14953 calcBip32RootKeyFromBase58(rootKeyBase58);
14954 calcForDerivationPath();
14955 hidePending();
14956 }
14957
14958 function calcForDerivationPath() {
14959 showPending();
14960 hideValidationError();
ebd8d4e8 14961 // Get the derivation path
38523d36
IC
14962 var derivationPath = getDerivationPath();
14963 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
14964 if (errorText) {
14965 showValidationError(errorText);
14966 return;
14967 }
efe41586 14968 calcBip32ExtendedKey(derivationPath);
ebd8d4e8
IC
14969 displayBip32Info();
14970 hidePending();
14971 }
14972
14973 function generateClicked() {
14974 clearDisplay();
14975 showPending();
14976 setTimeout(function() {
14977 var phrase = generateRandomPhrase();
14978 if (!phrase) {
14979 return;
14980 }
14981 phraseChanged();
14982 }, 50);
14983 }
14984
ebd8d4e8 14985 function toggleIndexes() {
80c4dd2a 14986 showIndex = !showIndex;
ebd8d4e8
IC
14987 $("td.index span").toggleClass("invisible");
14988 }
14989
14990 function toggleAddresses() {
80c4dd2a 14991 showAddress = !showAddress;
ebd8d4e8
IC
14992 $("td.address span").toggleClass("invisible");
14993 }
14994
14995 function togglePrivateKeys() {
80c4dd2a 14996 showPrivKey = !showPrivKey;
ebd8d4e8
IC
14997 $("td.privkey span").toggleClass("invisible");
14998 }
14999
15000 // Private methods
15001
15002 function generateRandomPhrase() {
15003 if (!hasStrongRandom()) {
15004 var errorText = "This browser does not support strong randomness";
15005 showValidationError(errorText);
15006 return;
15007 }
15008 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
15009 var strength = numWords / 3 * 32;
15010 var words = mnemonic.generate(strength);
15011 DOM.phrase.val(words);
15012 return words;
15013 }
15014
efe41586 15015 function calcBip32RootKeyFromSeed(phrase, passphrase) {
73161a92 15016 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 15017 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
efe41586
IC
15018 }
15019
15020 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15021 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58);
15022 }
15023
15024 function calcBip32ExtendedKey(path) {
ebd8d4e8
IC
15025 bip32ExtendedKey = bip32RootKey;
15026 // Derive the key from the path
15027 var pathBits = path.split("/");
15028 for (var i=0; i<pathBits.length; i++) {
15029 var bit = pathBits[i];
15030 var index = parseInt(bit);
15031 if (isNaN(index)) {
15032 continue;
15033 }
15034 var hardened = bit[bit.length-1] == "'";
15035 if (hardened) {
15036 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15037 }
15038 else {
15039 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15040 }
15041 }
15042 }
15043
15044 function showValidationError(errorText) {
15045 DOM.feedback
15046 .text(errorText)
15047 .show();
15048 }
15049
15050 function hideValidationError() {
15051 DOM.feedback
15052 .text("")
15053 .hide();
15054 }
15055
15056 function findPhraseErrors(phrase) {
15057 // TODO make this right
15058 // Preprocess the words
783981de 15059 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
15060 var parts = phrase.split(" ");
15061 var proper = [];
15062 for (var i=0; i<parts.length; i++) {
15063 var part = parts[i];
15064 if (part.length > 0) {
15065 // TODO check that lowercasing is always valid to do
15066 proper.push(part.toLowerCase());
15067 }
15068 }
ebd8d4e8 15069 var properPhrase = proper.join(' ');
563e401a
IC
15070 // Check each word
15071 for (var i=0; i<proper.length; i++) {
15072 var word = proper[i];
15073 if (WORDLISTS["english"].indexOf(word) == -1) {
15074 console.log("Finding closest match to " + word);
15075 var nearestWord = findNearestWord(word);
15076 return word + " not in wordlist, did you mean " + nearestWord + "?";
15077 }
15078 }
ebd8d4e8
IC
15079 // Check the words are valid
15080 var isValid = mnemonic.check(properPhrase);
15081 if (!isValid) {
15082 return "Invalid mnemonic";
15083 }
15084 return false;
15085 }
15086
efe41586
IC
15087 function validateRootKey(rootKeyBase58) {
15088 try {
15089 bitcoin.HDNode.fromBase58(rootKeyBase58);
15090 }
15091 catch (e) {
15092 return "Invalid root key";
15093 }
15094 return "";
15095 }
15096
38523d36
IC
15097 function getDerivationPath() {
15098 if (DOM.bip44tab.hasClass("active")) {
15099 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15100 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15101 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15102 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15103 var path = "m/";
15104 path += purpose + "'/";
15105 path += coin + "'/";
15106 path += account + "'/";
15107 path += change;
15108 DOM.bip44path.val(path);
15109 var derivationPath = DOM.bip44path.val();
15110 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15111 return derivationPath;
15112 }
15113 else if (DOM.bip32tab.hasClass("active")) {
15114 var derivationPath = DOM.bip32path.val();
15115 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15116 return derivationPath;
15117 }
15118 else {
15119 console.log("Unknown derivation path");
15120 }
15121 }
15122
ebd8d4e8 15123 function findDerivationPathErrors(path) {
30c9e79d
IC
15124 // TODO is not perfect but is better than nothing
15125 // Inspired by
15126 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15127 // and
15128 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15129 var maxDepth = 255; // TODO verify this!!
15130 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15131 if (path[0] != "m") {
15132 return "First character must be 'm'";
15133 }
15134 if (path.length > 1) {
15135 if (path[1] != "/") {
15136 return "Separator must be '/'";
15137 }
15138 var indexes = path.split("/");
15139 if (indexes.length > maxDepth) {
15140 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15141 }
15142 for (var depth = 1; depth<indexes.length; depth++) {
15143 var index = indexes[depth];
15144 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15145 if (invalidChars.length > 0) {
15146 return "Invalid characters " + invalidChars + " found at depth " + depth;
15147 }
15148 var indexValue = parseInt(index.replace("'", ""));
15149 if (isNaN(depth)) {
15150 return "Invalid number at depth " + depth;
15151 }
15152 if (indexValue > maxIndexValue) {
15153 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15154 }
15155 }
15156 }
ebd8d4e8
IC
15157 return false;
15158 }
15159
15160 function displayBip32Info() {
15161 // Display the key
73161a92 15162 DOM.seed.val(seed);
ebd8d4e8
IC
15163 var rootKey = bip32RootKey.toBase58();
15164 DOM.rootKey.val(rootKey);
15165 var extendedPrivKey = bip32ExtendedKey.toBase58();
15166 DOM.extendedPrivKey.val(extendedPrivKey);
15167 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15168 DOM.extendedPubKey.val(extendedPubKey);
15169 // Display the addresses and privkeys
15170 clearAddressesList();
15171 displayAddresses(0, 20);
15172 }
15173
15174 function displayAddresses(start, total) {
15175 for (var i=0; i<total; i++) {
80c4dd2a
IC
15176 var index = i + start;
15177 new TableRow(index);
15178 }
15179 }
15180
15181 function TableRow(index) {
15182
15183 function init() {
15184 calculateValues();
15185 }
15186
15187 function calculateValues() {
15188 setTimeout(function() {
15189 var key = bip32ExtendedKey.derive(index);
15190 var address = key.getAddress().toString();
15191 var privkey = key.privKey.toWIF(network);
38523d36
IC
15192 var indexText = getDerivationPath() + "/" + index;
15193 addAddressToList(indexText, address, privkey);
80c4dd2a 15194 }, 50)
ebd8d4e8 15195 }
80c4dd2a
IC
15196
15197 init();
15198
ebd8d4e8
IC
15199 }
15200
15201 function showMore() {
15202 var start = DOM.addresses.children().length;
15203 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15204 if (isNaN(rowsToAdd)) {
15205 rowsToAdd = 20;
15206 DOM.rowsToAdd.val("20");
15207 }
15208 if (rowsToAdd > 200) {
15209 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15210 msg += "Do you want to continue?";
15211 if (!confirm(msg)) {
15212 return;
15213 }
15214 }
ebd8d4e8 15215 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
15216 }
15217
15218 function clearDisplay() {
15219 clearAddressesList();
15220 clearKey();
15221 hideValidationError();
15222 }
15223
15224 function clearAddressesList() {
15225 DOM.addresses.empty();
15226 }
15227
15228 function clearKey() {
15229 DOM.rootKey.val("");
15230 DOM.extendedPrivKey.val("");
15231 DOM.extendedPubKey.val("");
15232 }
15233
38523d36 15234 function addAddressToList(indexText, address, privkey) {
ebd8d4e8 15235 var row = $(addressRowTemplate.html());
80c4dd2a
IC
15236 // Elements
15237 var indexCell = row.find(".index span");
15238 var addressCell = row.find(".address span");
15239 var privkeyCell = row.find(".privkey span");
15240 // Content
ae30fed8 15241 indexCell.text(indexText);
80c4dd2a
IC
15242 addressCell.text(address);
15243 privkeyCell.text(privkey);
15244 // Visibility
15245 if (!showIndex) {
15246 indexCell.addClass("invisible");
15247 }
15248 if (!showAddress) {
15249 addressCell.addClass("invisible");
15250 }
15251 if (!showPrivKey) {
6d628db7 15252 privkeyCell.addClass("invisible");
80c4dd2a 15253 }
ebd8d4e8
IC
15254 DOM.addresses.append(row);
15255 }
15256
15257 function hasStrongRandom() {
15258 return 'crypto' in window && window['crypto'] !== null;
15259 }
15260
15261 function disableForms() {
15262 $("form").on("submit", function(e) {
15263 e.preventDefault();
15264 });
15265 }
15266
ebd8d4e8
IC
15267 function parseIntNoNaN(val, defaultVal) {
15268 var v = parseInt(val);
15269 if (isNaN(v)) {
15270 return defaultVal;
15271 }
15272 return v;
15273 }
15274
15275 function showPending() {
15276 DOM.feedback
15277 .text("Calculating...")
15278 .show();
15279 }
15280
563e401a
IC
15281 function findNearestWord(word) {
15282 var words = WORDLISTS["english"];
15283 var minDistance = 99;
15284 var closestWord = words[0];
15285 for (var i=0; i<words.length; i++) {
15286 var comparedTo = words[i];
15287 var distance = Levenshtein.get(word, comparedTo);
15288 if (distance < minDistance) {
15289 closestWord = comparedTo;
15290 minDistance = distance;
15291 }
15292 }
15293 return closestWord;
15294 }
15295
ebd8d4e8
IC
15296 function hidePending() {
15297 DOM.feedback
15298 .text("")
15299 .hide();
15300 }
15301
ab78acc6
IC
15302 function populateNetworkSelect() {
15303 for (var i=0; i<networks.length; i++) {
15304 var network = networks[i];
15305 var option = $("<option>");
15306 option.attr("value", i);
15307 option.text(network.name);
15308 DOM.phraseNetwork.append(option);
15309 }
15310 }
15311
15312 var networks = [
15313 {
15314 name: "Bitcoin",
15315 onSelect: function() {
15316 network = bitcoin.networks.bitcoin;
15317 DOM.bip44coin.val(0);
ab78acc6
IC
15318 },
15319 },
15320 {
15321 name: "Bitcoin Testnet",
15322 onSelect: function() {
15323 network = bitcoin.networks.testnet;
15324 DOM.bip44coin.val(1);
ab78acc6
IC
15325 },
15326 },
15327 {
15328 name: "Litecoin",
15329 onSelect: function() {
15330 network = bitcoin.networks.litecoin;
15331 DOM.bip44coin.val(2);
15332 },
15333 },
15334 {
15335 name: "Dogecoin",
15336 onSelect: function() {
15337 network = bitcoin.networks.dogecoin;
15338 DOM.bip44coin.val(3);
15339 },
15340 },
d5dc92fd
IC
15341 {
15342 name: "ShadowCash",
15343 onSelect: function() {
15344 network = bitcoin.networks.shadow;
15345 DOM.bip44coin.val(35);
15346 },
15347 },
15348 {
15349 name: "ShadowCash Testnet",
15350 onSelect: function() {
15351 network = bitcoin.networks.shadowtn;
15352 DOM.bip44coin.val(1);
15353 },
15354 },
a3baa26e
IC
15355 {
15356 name: "Viacoin",
15357 onSelect: function() {
15358 network = bitcoin.networks.viacoin;
15359 DOM.bip44coin.val(14);
15360 },
15361 },
15362 {
15363 name: "Viacoin Testnet",
15364 onSelect: function() {
15365 network = bitcoin.networks.viacointestnet;
15366 DOM.bip44coin.val(1);
15367 },
15368 },
15369 {
15370 name: "Jumbucks",
15371 onSelect: function() {
15372 network = bitcoin.networks.jumbucks;
15373 DOM.bip44coin.val(26);
15374 },
15375 },
5c434a8a
CM
15376 {
15377 name: "CLAM",
15378 onSelect: function() {
15379 network = bitcoin.networks.clam;
15380 DOM.bip44coin.val(23);
15381 },
15382 },
ab78acc6
IC
15383 ]
15384
ebd8d4e8
IC
15385 init();
15386
15387})();
dc55c6b0 15388</script>
ebd8d4e8
IC
15389 </body>
15390</html>