]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Merge pull request #20 from dooglus/ignore_space_changes
[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>
95 <div class="form-group">
96 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
97 <div class="col-sm-10">
98 <select id="network-phrase" class="network form-control">
99 <!-- populated by javascript -->
100 </select>
101 </div>
102 </div>
103 <div class="form-group">
104 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
105 <div class="col-sm-10">
106 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
107 </div>
108 </div>
109 </form>
110 </div>
111 </div>
3af2954a 112
ab78acc6 113 <hr>
3af2954a 114
ab78acc6
IC
115 <div class="row">
116 <div class="col-md-12">
117 <h2>Derivation Path</h2>
118 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 119 <li id="bip44-tab" class="active">
ab78acc6
IC
120 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
121 </li>
122 <li id="bip32-tab">
123 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
124 </li>
125 </ul>
126 <div class="derivation-type tab-content">
d5dc92fd 127 <div id="bip44" class="tab-pane active">
ab78acc6
IC
128 <form class="form-horizontal" role="form">
129 <br>
130 <div class="col-sm-2"></div>
131 <div class="col-sm-10">
132 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
133 </div>
134 <div class="form-group">
135 <label for="purpose" class="col-sm-2 control-label">
136 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
137 </label>
138 <div class="col-sm-10">
139 <input id="purpose" type="text" class="purpose form-control" value="44">
140 </div>
141 </div>
142 <div class="form-group">
143 <label for="coin" class="col-sm-2 control-label">
144 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
145 </label>
146 <div class="col-sm-10">
147 <input id="coin" type="text" class="coin form-control" value="0">
148 </div>
149 </div>
150 <div class="form-group">
151 <label for="account" class="col-sm-2 control-label">
152 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
153 </label>
154 <div class="col-sm-10">
155 <input id="account" type="text" class="account form-control" value="0">
156 </div>
157 </div>
158 <div class="form-group">
159 <label for="change" class="col-sm-2 control-label">
160 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
161 </label>
162 <div class="col-sm-10">
163 <input id="change" type="text" class="change form-control" value="0">
164 </div>
165 </div>
166 <div class="form-group">
167 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
168 <div class="col-sm-10">
169 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
170 </div>
171 </div>
172 </form>
173 </div>
174 <div id="bip32" class="tab-pane">
175 <form class="form-horizontal" role="form">
176 <br>
177 <div class="col-sm-2"></div>
178 <div class="col-sm-10">
179 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
180 </div>
181 <div class="form-group">
182 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
183 <div class="col-sm-10">
184 <input id="bip32-path" type="text" class="path form-control" value="m/0">
185 </div>
186 </div>
d5dc92fd
IC
187 <div class="form-group">
188 <label class="col-sm-2 control-label">Hive Wallet</label>
189 <div class="col-sm-10">
190 <p class="form-control no-border">
191 Use path <code>m/0'/0</code>.
192 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
193 </p>
194 </div>
195 </div>
196 <div class="form-group">
197 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
198 <div class="col-sm-10">
199 <p class="form-control no-border">
200 Use path <code>m/44'/0'/0'/0</code>.
201 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
202 </p>
203 </div>
204 </div>
ab78acc6
IC
205 </form>
206 </div>
207 </div>
208 <form class="form-horizontal" role="form">
209 <div class="form-group">
210 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
211 <div class="col-sm-10">
212 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
213 </div>
214 </div>
215 <div class="form-group">
216 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
217 <div class="col-sm-10">
218 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
219 </div>
220 </div>
221 </form>
222 </div>
223 </div>
3af2954a 224
ab78acc6 225 <hr>
3af2954a 226
ab78acc6
IC
227 <div class="row">
228 <div class="col-md-12">
229 <h2>Derived Addresses</h2>
230 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
231 <table class="table table-striped">
232 <thead>
233 <th>
234 <div class="input-group">
ae30fed8 235 Path&nbsp;&nbsp;
ab78acc6
IC
236 <button class="index-toggle">Toggle</button>
237 </div>
238 </th>
239 <th>
240 <div class="input-group">
241 Address&nbsp;&nbsp;
242 <button class="address-toggle">Toggle</button>
243 </div>
244 </th>
245 <th>
246 <div class="input-group">
247 Private Key&nbsp;&nbsp;
248 <button class="private-key-toggle">Toggle</button>
249 </div>
250 </th>
251 </thead>
252 <tbody class="addresses">
253 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
254 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
255 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
256 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
257 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
258 </tbody>
259 </table>
260 </div>
261 </div>
262 <span>Show next </button>
263 <input type="number" class="rows-to-add" value="20">
264 <button class="more">Show</button>
3af2954a 265
ab78acc6 266 <hr>
3af2954a 267
ab78acc6
IC
268 <div class="row">
269 <div class="col-md-12">
270 <h2>More info</h2>
271 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
272 <p>
273 Read more at the
274 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
275 </p>
276 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
277 <p>
278 Read more at the
279 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
280 and see the demo at
281 <a href="http://bip32.org/" target="_blank">bip32.org</a>
282 </p>
283 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
284 <p>
285 Read more at the
286 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
287 </p>
288 <h3>Private Keys</h3>
289 <p>
290 Use private keys at
291 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
292 but be careful - it can be easy to make mistakes if you
293 don't know what you're doing
294 </p>
295 </div>
296 </div>
3af2954a 297
ab78acc6 298 <hr>
3af2954a 299
ab78acc6
IC
300 <div class="row">
301 <div class="col-md-12">
3af2954a 302
ab78acc6 303 <h2>Offline Usage</h2>
3af2954a 304
ab78acc6
IC
305 <p>
306 You can use this tool without having to be online.
307 </p>
308 <p>
309 In your browser, select file save-as, and save this page
310 as a file.
311 </p>
312 <p>
313 Double-click that file to open it in a browser
314 on any offline computer.
315 </p>
316 <p>
317 Alternatively, download it from
318 <a href="https://github.com/dcpos/bip39">
319 https://github.com/dcpos/bip39
320 </a>
3af2954a 321
ab78acc6
IC
322 </div>
323 </div>
3af2954a 324
ab78acc6 325 <hr>
3af2954a 326
ab78acc6
IC
327 <div class="row">
328 <div class="col-md-12">
3af2954a 329
ab78acc6 330 <h2>This project is 100% open-source code</h2>
3af2954a 331
ab78acc6
IC
332 <p>
333 <span>Get the source code at - </span>
334 <a href="https://github.com/dcpos/bip39" target="_blank">
335 https://github.com/dcpos/bip39
336 </a>
337 </p>
3af2954a 338
ab78acc6 339 <h3>Libraries</h3>
3af2954a 340
ab78acc6
IC
341 <p>
342 <span>BitcoinJS - </span>
343 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
344 https://github.com/bitcoinjs/bitcoinjs-lib
345 </a>
346 </p>
3af2954a 347
ab78acc6
IC
348 <p>
349 <span>jsBIP39 - </span>
350 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
351 https://github.com/iancoleman/jsbip39
352 </a>
353 </p>
3af2954a 354
ab78acc6
IC
355 <p>
356 <span>sjcl - </span>
357 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
358 https://github.com/bitwiseshiftleft/sjcl
359 </a>
360 </p>
3af2954a 361
ab78acc6
IC
362 <p>
363 <span>jQuery - </span>
364 <a href="https://jquery.com/" target="_blank">
365 https://jquery.com/
366 </a>
367 </p>
3af2954a 368
ab78acc6
IC
369 <p>
370 <span>Twitter Bootstrap - </span>
371 <a href="http://getbootstrap.com/" target="_blank">
372 http://getbootstrap.com/
373 </a>
374 </p>
3af2954a 375
ab78acc6
IC
376 </div>
377 </div>
3af2954a 378
ab78acc6 379 </div>
3af2954a 380
ab78acc6
IC
381 <div class="feedback-container">
382 <div class="feedback">Loading...</div>
383 </div>
3af2954a 384
ab78acc6
IC
385 <script type="text/template" id="address-row-template">
386 <tr>
387 <td class="index"><span></span></td>
388 <td class="address"><span></span></td>
389 <td class="privkey"><span></span></td>
390 </tr>
391 </script>
392 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
393!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)
394},_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))
395},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});
396</script>
397 <script>/*!
398 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
399 * Copyright 2011-2014 Twitter, Inc.
400 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
401 */
402if("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>
403 <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){
404// (public) Constructor
405function BigInteger(a, b, c) {
406 if (!(this instanceof BigInteger))
407 return new BigInteger(a, b, c)
3af2954a 408
ab78acc6
IC
409 if (a != null) {
410 if ("number" == typeof a) this.fromNumber(a, b, c)
411 else if (b == null && "string" != typeof a) this.fromString(a, 256)
412 else this.fromString(a, b)
413 }
414}
3af2954a 415
ab78acc6 416var proto = BigInteger.prototype
3af2954a 417
ab78acc6
IC
418// duck-typed isBigInteger
419proto.__bigi = require('../package.json').version
420BigInteger.isBigInteger = function (obj, check_ver) {
421 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
422}
3af2954a 423
ab78acc6
IC
424// Bits per digit
425var dbits
3af2954a 426
ab78acc6
IC
427// am: Compute w_j += (x*this_i), propagate carries,
428// c is initial carry, returns final carry.
429// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
430// We need to select the fastest one that works in this environment.
3af2954a 431
ab78acc6
IC
432// am1: use a single mult and divide to get the high bits,
433// max digit bits should be 26 because
434// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
435function am1(i, x, w, j, c, n) {
436 while (--n >= 0) {
437 var v = x * this[i++] + w[j] + c
438 c = Math.floor(v / 0x4000000)
439 w[j++] = v & 0x3ffffff
3af2954a 440 }
ab78acc6
IC
441 return c
442}
443// am2 avoids a big mult-and-extract completely.
444// Max digit bits should be <= 30 because we do bitwise ops
445// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
446function am2(i, x, w, j, c, n) {
447 var xl = x & 0x7fff,
448 xh = x >> 15
449 while (--n >= 0) {
450 var l = this[i] & 0x7fff
451 var h = this[i++] >> 15
452 var m = xh * l + h * xl
453 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
454 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
455 w[j++] = l & 0x3fffffff
456 }
457 return c
458}
459// Alternately, set max digit bits to 28 since some
460// browsers slow down when dealing with 32-bit numbers.
461function am3(i, x, w, j, c, n) {
462 var xl = x & 0x3fff,
463 xh = x >> 14
464 while (--n >= 0) {
465 var l = this[i] & 0x3fff
466 var h = this[i++] >> 14
467 var m = xh * l + h * xl
468 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
469 c = (l >> 28) + (m >> 14) + xh * h
470 w[j++] = l & 0xfffffff
3af2954a 471 }
ab78acc6
IC
472 return c
473}
3af2954a 474
ab78acc6
IC
475// wtf?
476BigInteger.prototype.am = am1
477dbits = 26
3af2954a 478
ab78acc6
IC
479BigInteger.prototype.DB = dbits
480BigInteger.prototype.DM = ((1 << dbits) - 1)
481var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 482
ab78acc6
IC
483var BI_FP = 52
484BigInteger.prototype.FV = Math.pow(2, BI_FP)
485BigInteger.prototype.F1 = BI_FP - dbits
486BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 487
ab78acc6
IC
488// Digit conversions
489var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
490var BI_RC = new Array()
491var rr, vv
492rr = "0".charCodeAt(0)
493for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
494rr = "a".charCodeAt(0)
495for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
496rr = "A".charCodeAt(0)
497for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 498
ab78acc6
IC
499function int2char(n) {
500 return BI_RM.charAt(n)
501}
3af2954a 502
ab78acc6
IC
503function intAt(s, i) {
504 var c = BI_RC[s.charCodeAt(i)]
505 return (c == null) ? -1 : c
506}
3af2954a 507
ab78acc6
IC
508// (protected) copy this to r
509function bnpCopyTo(r) {
510 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
511 r.t = this.t
512 r.s = this.s
513}
3af2954a 514
ab78acc6
IC
515// (protected) set from integer value x, -DV <= x < DV
516function bnpFromInt(x) {
517 this.t = 1
518 this.s = (x < 0) ? -1 : 0
519 if (x > 0) this[0] = x
520 else if (x < -1) this[0] = x + DV
521 else this.t = 0
522}
3af2954a 523
ab78acc6
IC
524// return bigint initialized to value
525function nbv(i) {
526 var r = new BigInteger()
527 r.fromInt(i)
528 return r
529}
3af2954a 530
ab78acc6
IC
531// (protected) set from string and radix
532function bnpFromString(s, b) {
533 var self = this
3af2954a 534
ab78acc6
IC
535 var k
536 if (b == 16) k = 4
537 else if (b == 8) k = 3
538 else if (b == 256) k = 8; // byte array
539 else if (b == 2) k = 1
540 else if (b == 32) k = 5
541 else if (b == 4) k = 2
542 else {
543 self.fromRadix(s, b)
544 return
545 }
546 self.t = 0
547 self.s = 0
548 var i = s.length,
549 mi = false,
550 sh = 0
551 while (--i >= 0) {
552 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
553 if (x < 0) {
554 if (s.charAt(i) == "-") mi = true
555 continue
556 }
557 mi = false
558 if (sh == 0)
559 self[self.t++] = x
560 else if (sh + k > self.DB) {
561 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
562 self[self.t++] = (x >> (self.DB - sh))
563 } else
564 self[self.t - 1] |= x << sh
565 sh += k
566 if (sh >= self.DB) sh -= self.DB
567 }
568 if (k == 8 && (s[0] & 0x80) != 0) {
569 self.s = -1
570 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
571 }
572 self.clamp()
573 if (mi) BigInteger.ZERO.subTo(self, self)
574}
3af2954a 575
ab78acc6
IC
576// (protected) clamp off excess high words
577function bnpClamp() {
578 var c = this.s & this.DM
579 while (this.t > 0 && this[this.t - 1] == c)--this.t
580}
3af2954a 581
ab78acc6
IC
582// (public) return string representation in given radix
583function bnToString(b) {
584 var self = this
585 if (self.s < 0) return "-" + self.negate()
586 .toString(b)
587 var k
588 if (b == 16) k = 4
589 else if (b == 8) k = 3
590 else if (b == 2) k = 1
591 else if (b == 32) k = 5
592 else if (b == 4) k = 2
593 else return self.toRadix(b)
594 var km = (1 << k) - 1,
595 d, m = false,
596 r = "",
597 i = self.t
598 var p = self.DB - (i * self.DB) % k
599 if (i-- > 0) {
600 if (p < self.DB && (d = self[i] >> p) > 0) {
601 m = true
602 r = int2char(d)
603 }
604 while (i >= 0) {
605 if (p < k) {
606 d = (self[i] & ((1 << p) - 1)) << (k - p)
607 d |= self[--i] >> (p += self.DB - k)
608 } else {
609 d = (self[i] >> (p -= k)) & km
610 if (p <= 0) {
611 p += self.DB
612 --i
613 }
614 }
615 if (d > 0) m = true
616 if (m) r += int2char(d)
3af2954a 617 }
3af2954a 618 }
ab78acc6
IC
619 return m ? r : "0"
620}
3af2954a 621
ab78acc6
IC
622// (public) -this
623function bnNegate() {
624 var r = new BigInteger()
625 BigInteger.ZERO.subTo(this, r)
626 return r
627}
3af2954a 628
ab78acc6
IC
629// (public) |this|
630function bnAbs() {
631 return (this.s < 0) ? this.negate() : this
632}
3af2954a 633
ab78acc6
IC
634// (public) return + if this > a, - if this < a, 0 if equal
635function bnCompareTo(a) {
636 var r = this.s - a.s
637 if (r != 0) return r
638 var i = this.t
639 r = i - a.t
640 if (r != 0) return (this.s < 0) ? -r : r
641 while (--i >= 0)
642 if ((r = this[i] - a[i]) != 0) return r
643 return 0
644}
3af2954a 645
ab78acc6
IC
646// returns bit length of the integer x
647function nbits(x) {
648 var r = 1,
649 t
650 if ((t = x >>> 16) != 0) {
651 x = t
652 r += 16
653 }
654 if ((t = x >> 8) != 0) {
655 x = t
656 r += 8
657 }
658 if ((t = x >> 4) != 0) {
659 x = t
660 r += 4
661 }
662 if ((t = x >> 2) != 0) {
663 x = t
664 r += 2
3af2954a 665 }
ab78acc6
IC
666 if ((t = x >> 1) != 0) {
667 x = t
668 r += 1
669 }
670 return r
671}
672
673// (public) return the number of bits in "this"
674function bnBitLength() {
675 if (this.t <= 0) return 0
676 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
677}
3af2954a 678
ab78acc6
IC
679// (public) return the number of bytes in "this"
680function bnByteLength() {
681 return this.bitLength() >> 3
682}
3af2954a 683
ab78acc6
IC
684// (protected) r = this << n*DB
685function bnpDLShiftTo(n, r) {
686 var i
687 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
688 for (i = n - 1; i >= 0; --i) r[i] = 0
689 r.t = this.t + n
690 r.s = this.s
691}
3af2954a 692
ab78acc6
IC
693// (protected) r = this >> n*DB
694function bnpDRShiftTo(n, r) {
695 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
696 r.t = Math.max(this.t - n, 0)
697 r.s = this.s
698}
3af2954a 699
ab78acc6
IC
700// (protected) r = this << n
701function bnpLShiftTo(n, r) {
702 var self = this
703 var bs = n % self.DB
704 var cbs = self.DB - bs
705 var bm = (1 << cbs) - 1
706 var ds = Math.floor(n / self.DB),
707 c = (self.s << bs) & self.DM,
708 i
709 for (i = self.t - 1; i >= 0; --i) {
710 r[i + ds + 1] = (self[i] >> cbs) | c
711 c = (self[i] & bm) << bs
712 }
713 for (i = ds - 1; i >= 0; --i) r[i] = 0
714 r[ds] = c
715 r.t = self.t + ds + 1
716 r.s = self.s
717 r.clamp()
718}
3af2954a 719
ab78acc6
IC
720// (protected) r = this >> n
721function bnpRShiftTo(n, r) {
722 var self = this
723 r.s = self.s
724 var ds = Math.floor(n / self.DB)
725 if (ds >= self.t) {
726 r.t = 0
727 return
3af2954a 728 }
ab78acc6
IC
729 var bs = n % self.DB
730 var cbs = self.DB - bs
731 var bm = (1 << bs) - 1
732 r[0] = self[ds] >> bs
733 for (var i = ds + 1; i < self.t; ++i) {
734 r[i - ds - 1] |= (self[i] & bm) << cbs
735 r[i - ds] = self[i] >> bs
736 }
737 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
738 r.t = self.t - ds
739 r.clamp()
740}
3af2954a 741
ab78acc6
IC
742// (protected) r = this - a
743function bnpSubTo(a, r) {
744 var self = this
745 var i = 0,
746 c = 0,
747 m = Math.min(a.t, self.t)
748 while (i < m) {
749 c += self[i] - a[i]
750 r[i++] = c & self.DM
751 c >>= self.DB
752 }
753 if (a.t < self.t) {
754 c -= a.s
755 while (i < self.t) {
756 c += self[i]
757 r[i++] = c & self.DM
758 c >>= self.DB
759 }
760 c += self.s
761 } else {
762 c += self.s
763 while (i < a.t) {
764 c -= a[i]
765 r[i++] = c & self.DM
766 c >>= self.DB
767 }
768 c -= a.s
769 }
770 r.s = (c < 0) ? -1 : 0
771 if (c < -1) r[i++] = self.DV + c
772 else if (c > 0) r[i++] = c
773 r.t = i
774 r.clamp()
775}
3af2954a 776
ab78acc6
IC
777// (protected) r = this * a, r != this,a (HAC 14.12)
778// "this" should be the larger one if appropriate.
779function bnpMultiplyTo(a, r) {
780 var x = this.abs(),
781 y = a.abs()
782 var i = x.t
783 r.t = i + y.t
784 while (--i >= 0) r[i] = 0
785 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
786 r.s = 0
787 r.clamp()
788 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
789}
3af2954a 790
ab78acc6
IC
791// (protected) r = this^2, r != this (HAC 14.16)
792function bnpSquareTo(r) {
793 var x = this.abs()
794 var i = r.t = 2 * x.t
795 while (--i >= 0) r[i] = 0
796 for (i = 0; i < x.t - 1; ++i) {
797 var c = x.am(i, x[i], r, 2 * i, 0, 1)
798 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
799 r[i + x.t] -= x.DV
800 r[i + x.t + 1] = 1
801 }
802 }
803 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
804 r.s = 0
805 r.clamp()
806}
3af2954a 807
ab78acc6
IC
808// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
809// r != q, this != m. q or r may be null.
810function bnpDivRemTo(m, q, r) {
811 var self = this
812 var pm = m.abs()
813 if (pm.t <= 0) return
814 var pt = self.abs()
815 if (pt.t < pm.t) {
816 if (q != null) q.fromInt(0)
817 if (r != null) self.copyTo(r)
818 return
819 }
820 if (r == null) r = new BigInteger()
821 var y = new BigInteger(),
822 ts = self.s,
823 ms = m.s
824 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
825 if (nsh > 0) {
826 pm.lShiftTo(nsh, y)
827 pt.lShiftTo(nsh, r)
828 } else {
829 pm.copyTo(y)
830 pt.copyTo(r)
831 }
832 var ys = y.t
833 var y0 = y[ys - 1]
834 if (y0 == 0) return
835 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
836 var d1 = self.FV / yt,
837 d2 = (1 << self.F1) / yt,
838 e = 1 << self.F2
839 var i = r.t,
840 j = i - ys,
841 t = (q == null) ? new BigInteger() : q
842 y.dlShiftTo(j, t)
843 if (r.compareTo(t) >= 0) {
844 r[r.t++] = 1
845 r.subTo(t, r)
846 }
847 BigInteger.ONE.dlShiftTo(ys, t)
848 t.subTo(y, y); // "negative" y so we can replace sub with am later
849 while (y.t < ys) y[y.t++] = 0
850 while (--j >= 0) {
851 // Estimate quotient digit
852 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
853 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
854 y.dlShiftTo(j, t)
855 r.subTo(t, r)
856 while (r[i] < --qd) r.subTo(t, r)
3af2954a 857 }
ab78acc6
IC
858 }
859 if (q != null) {
860 r.drShiftTo(ys, q)
861 if (ts != ms) BigInteger.ZERO.subTo(q, q)
862 }
863 r.t = ys
864 r.clamp()
865 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
866 if (ts < 0) BigInteger.ZERO.subTo(r, r)
867}
3af2954a 868
ab78acc6
IC
869// (public) this mod a
870function bnMod(a) {
871 var r = new BigInteger()
872 this.abs()
873 .divRemTo(a, null, r)
874 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
875 return r
876}
3af2954a 877
ab78acc6
IC
878// Modular reduction using "classic" algorithm
879function Classic(m) {
880 this.m = m
881}
3af2954a 882
ab78acc6
IC
883function cConvert(x) {
884 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
885 else return x
886}
887
888function cRevert(x) {
889 return x
890}
3af2954a 891
ab78acc6
IC
892function cReduce(x) {
893 x.divRemTo(this.m, null, x)
894}
3af2954a 895
ab78acc6
IC
896function cMulTo(x, y, r) {
897 x.multiplyTo(y, r)
898 this.reduce(r)
899}
3af2954a 900
ab78acc6
IC
901function cSqrTo(x, r) {
902 x.squareTo(r)
903 this.reduce(r)
904}
3af2954a 905
ab78acc6
IC
906Classic.prototype.convert = cConvert
907Classic.prototype.revert = cRevert
908Classic.prototype.reduce = cReduce
909Classic.prototype.mulTo = cMulTo
910Classic.prototype.sqrTo = cSqrTo
3af2954a 911
ab78acc6
IC
912// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
913// justification:
914// xy == 1 (mod m)
915// xy = 1+km
916// xy(2-xy) = (1+km)(1-km)
917// x[y(2-xy)] = 1-k^2m^2
918// x[y(2-xy)] == 1 (mod m^2)
919// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
920// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
921// JS multiply "overflows" differently from C/C++, so care is needed here.
922function bnpInvDigit() {
923 if (this.t < 1) return 0
924 var x = this[0]
925 if ((x & 1) == 0) return 0
926 var y = x & 3; // y == 1/x mod 2^2
927 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
928 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
929 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
930 // last step - calculate inverse mod DV directly
931 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
932 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
933 // we really want the negative inverse, and -DV < y < DV
934 return (y > 0) ? this.DV - y : -y
935}
3af2954a 936
ab78acc6
IC
937// Montgomery reduction
938function Montgomery(m) {
939 this.m = m
940 this.mp = m.invDigit()
941 this.mpl = this.mp & 0x7fff
942 this.mph = this.mp >> 15
943 this.um = (1 << (m.DB - 15)) - 1
944 this.mt2 = 2 * m.t
945}
3af2954a 946
ab78acc6
IC
947// xR mod m
948function montConvert(x) {
949 var r = new BigInteger()
950 x.abs()
951 .dlShiftTo(this.m.t, r)
952 r.divRemTo(this.m, null, r)
953 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
954 return r
955}
3af2954a 956
ab78acc6
IC
957// x/R mod m
958function montRevert(x) {
959 var r = new BigInteger()
960 x.copyTo(r)
961 this.reduce(r)
962 return r
963}
3af2954a 964
ab78acc6
IC
965// x = x/R mod m (HAC 14.32)
966function montReduce(x) {
967 while (x.t <= this.mt2) // pad x so am has enough room later
968 x[x.t++] = 0
969 for (var i = 0; i < this.m.t; ++i) {
970 // faster way of calculating u0 = x[i]*mp mod DV
971 var j = x[i] & 0x7fff
972 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
973 // use am to combine the multiply-shift-add into one call
974 j = i + this.m.t
975 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
976 // propagate carry
977 while (x[j] >= x.DV) {
978 x[j] -= x.DV
979 x[++j]++
980 }
981 }
982 x.clamp()
983 x.drShiftTo(this.m.t, x)
984 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
985}
3af2954a 986
ab78acc6
IC
987// r = "x^2/R mod m"; x != r
988function montSqrTo(x, r) {
989 x.squareTo(r)
990 this.reduce(r)
991}
3af2954a 992
ab78acc6
IC
993// r = "xy/R mod m"; x,y != r
994function montMulTo(x, y, r) {
995 x.multiplyTo(y, r)
996 this.reduce(r)
997}
3af2954a 998
ab78acc6
IC
999Montgomery.prototype.convert = montConvert
1000Montgomery.prototype.revert = montRevert
1001Montgomery.prototype.reduce = montReduce
1002Montgomery.prototype.mulTo = montMulTo
1003Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1004
ab78acc6
IC
1005// (protected) true iff this is even
1006function bnpIsEven() {
1007 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1008}
3af2954a 1009
ab78acc6
IC
1010// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1011function bnpExp(e, z) {
1012 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1013 var r = new BigInteger(),
1014 r2 = new BigInteger(),
1015 g = z.convert(this),
1016 i = nbits(e) - 1
1017 g.copyTo(r)
1018 while (--i >= 0) {
1019 z.sqrTo(r, r2)
1020 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1021 else {
1022 var t = r
1023 r = r2
1024 r2 = t
3af2954a 1025 }
3af2954a 1026 }
ab78acc6
IC
1027 return z.revert(r)
1028}
3af2954a 1029
ab78acc6
IC
1030// (public) this^e % m, 0 <= e < 2^32
1031function bnModPowInt(e, m) {
1032 var z
1033 if (e < 256 || m.isEven()) z = new Classic(m)
1034 else z = new Montgomery(m)
1035 return this.exp(e, z)
1036}
3af2954a 1037
ab78acc6
IC
1038// protected
1039proto.copyTo = bnpCopyTo
1040proto.fromInt = bnpFromInt
1041proto.fromString = bnpFromString
1042proto.clamp = bnpClamp
1043proto.dlShiftTo = bnpDLShiftTo
1044proto.drShiftTo = bnpDRShiftTo
1045proto.lShiftTo = bnpLShiftTo
1046proto.rShiftTo = bnpRShiftTo
1047proto.subTo = bnpSubTo
1048proto.multiplyTo = bnpMultiplyTo
1049proto.squareTo = bnpSquareTo
1050proto.divRemTo = bnpDivRemTo
1051proto.invDigit = bnpInvDigit
1052proto.isEven = bnpIsEven
1053proto.exp = bnpExp
3af2954a 1054
ab78acc6
IC
1055// public
1056proto.toString = bnToString
1057proto.negate = bnNegate
1058proto.abs = bnAbs
1059proto.compareTo = bnCompareTo
1060proto.bitLength = bnBitLength
1061proto.byteLength = bnByteLength
1062proto.mod = bnMod
1063proto.modPowInt = bnModPowInt
3af2954a 1064
ab78acc6
IC
1065// (public)
1066function bnClone() {
1067 var r = new BigInteger()
1068 this.copyTo(r)
1069 return r
1070}
3af2954a 1071
ab78acc6
IC
1072// (public) return value as integer
1073function bnIntValue() {
1074 if (this.s < 0) {
1075 if (this.t == 1) return this[0] - this.DV
1076 else if (this.t == 0) return -1
1077 } else if (this.t == 1) return this[0]
1078 else if (this.t == 0) return 0
1079 // assumes 16 < DB < 32
1080 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1081}
3af2954a 1082
ab78acc6
IC
1083// (public) return value as byte
1084function bnByteValue() {
1085 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1086}
3af2954a 1087
ab78acc6
IC
1088// (public) return value as short (assumes DB>=16)
1089function bnShortValue() {
1090 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1091}
3af2954a 1092
ab78acc6
IC
1093// (protected) return x s.t. r^x < DV
1094function bnpChunkSize(r) {
1095 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1096}
3af2954a 1097
ab78acc6
IC
1098// (public) 0 if this == 0, 1 if this > 0
1099function bnSigNum() {
1100 if (this.s < 0) return -1
1101 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1102 else return 1
1103}
3af2954a 1104
ab78acc6
IC
1105// (protected) convert to radix string
1106function bnpToRadix(b) {
1107 if (b == null) b = 10
1108 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1109 var cs = this.chunkSize(b)
1110 var a = Math.pow(b, cs)
1111 var d = nbv(a),
1112 y = new BigInteger(),
1113 z = new BigInteger(),
1114 r = ""
1115 this.divRemTo(d, y, z)
1116 while (y.signum() > 0) {
1117 r = (a + z.intValue())
1118 .toString(b)
1119 .substr(1) + r
1120 y.divRemTo(d, y, z)
1121 }
1122 return z.intValue()
1123 .toString(b) + r
1124}
3af2954a 1125
ab78acc6
IC
1126// (protected) convert from radix string
1127function bnpFromRadix(s, b) {
1128 var self = this
1129 self.fromInt(0)
1130 if (b == null) b = 10
1131 var cs = self.chunkSize(b)
1132 var d = Math.pow(b, cs),
1133 mi = false,
1134 j = 0,
1135 w = 0
1136 for (var i = 0; i < s.length; ++i) {
1137 var x = intAt(s, i)
1138 if (x < 0) {
1139 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1140 continue
1141 }
1142 w = b * w + x
1143 if (++j >= cs) {
1144 self.dMultiply(d)
1145 self.dAddOffset(w, 0)
1146 j = 0
1147 w = 0
1148 }
1149 }
1150 if (j > 0) {
1151 self.dMultiply(Math.pow(b, j))
1152 self.dAddOffset(w, 0)
1153 }
1154 if (mi) BigInteger.ZERO.subTo(self, self)
1155}
3af2954a 1156
ab78acc6
IC
1157// (protected) alternate constructor
1158function bnpFromNumber(a, b, c) {
1159 var self = this
1160 if ("number" == typeof b) {
1161 // new BigInteger(int,int,RNG)
1162 if (a < 2) self.fromInt(1)
1163 else {
1164 self.fromNumber(a, c)
1165 if (!self.testBit(a - 1)) // force MSB set
1166 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1167 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1168 while (!self.isProbablePrime(b)) {
1169 self.dAddOffset(2, 0)
1170 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1171 }
1172 }
1173 } else {
1174 // new BigInteger(int,RNG)
1175 var x = new Array(),
1176 t = a & 7
1177 x.length = (a >> 3) + 1
1178 b.nextBytes(x)
1179 if (t > 0) x[0] &= ((1 << t) - 1)
1180 else x[0] = 0
1181 self.fromString(x, 256)
3af2954a 1182 }
ab78acc6 1183}
3af2954a 1184
ab78acc6
IC
1185// (public) convert to bigendian byte array
1186function bnToByteArray() {
1187 var self = this
1188 var i = self.t,
1189 r = new Array()
1190 r[0] = self.s
1191 var p = self.DB - (i * self.DB) % 8,
1192 d, k = 0
1193 if (i-- > 0) {
1194 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1195 r[k++] = d | (self.s << (self.DB - p))
1196 while (i >= 0) {
1197 if (p < 8) {
1198 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1199 d |= self[--i] >> (p += self.DB - 8)
1200 } else {
1201 d = (self[i] >> (p -= 8)) & 0xff
1202 if (p <= 0) {
1203 p += self.DB
1204 --i
1205 }
1206 }
1207 if ((d & 0x80) != 0) d |= -256
1208 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1209 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1210 }
3af2954a 1211 }
ab78acc6
IC
1212 return r
1213}
3af2954a 1214
ab78acc6
IC
1215function bnEquals(a) {
1216 return (this.compareTo(a) == 0)
1217}
3af2954a 1218
ab78acc6
IC
1219function bnMin(a) {
1220 return (this.compareTo(a) < 0) ? this : a
1221}
3af2954a 1222
ab78acc6
IC
1223function bnMax(a) {
1224 return (this.compareTo(a) > 0) ? this : a
1225}
3af2954a 1226
ab78acc6
IC
1227// (protected) r = this op a (bitwise)
1228function bnpBitwiseTo(a, op, r) {
1229 var self = this
1230 var i, f, m = Math.min(a.t, self.t)
1231 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1232 if (a.t < self.t) {
1233 f = a.s & self.DM
1234 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1235 r.t = self.t
1236 } else {
1237 f = self.s & self.DM
1238 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1239 r.t = a.t
3af2954a 1240 }
ab78acc6
IC
1241 r.s = op(self.s, a.s)
1242 r.clamp()
1243}
3af2954a 1244
ab78acc6
IC
1245// (public) this & a
1246function op_and(x, y) {
1247 return x & y
1248}
3af2954a 1249
ab78acc6
IC
1250function bnAnd(a) {
1251 var r = new BigInteger()
1252 this.bitwiseTo(a, op_and, r)
1253 return r
1254}
3af2954a 1255
ab78acc6
IC
1256// (public) this | a
1257function op_or(x, y) {
1258 return x | y
1259}
3af2954a 1260
ab78acc6
IC
1261function bnOr(a) {
1262 var r = new BigInteger()
1263 this.bitwiseTo(a, op_or, r)
1264 return r
1265}
3af2954a 1266
ab78acc6
IC
1267// (public) this ^ a
1268function op_xor(x, y) {
1269 return x ^ y
1270}
3af2954a 1271
ab78acc6
IC
1272function bnXor(a) {
1273 var r = new BigInteger()
1274 this.bitwiseTo(a, op_xor, r)
1275 return r
1276}
3af2954a 1277
ab78acc6
IC
1278// (public) this & ~a
1279function op_andnot(x, y) {
1280 return x & ~y
1281}
3af2954a 1282
ab78acc6
IC
1283function bnAndNot(a) {
1284 var r = new BigInteger()
1285 this.bitwiseTo(a, op_andnot, r)
1286 return r
1287}
3af2954a 1288
ab78acc6
IC
1289// (public) ~this
1290function bnNot() {
1291 var r = new BigInteger()
1292 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1293 r.t = this.t
1294 r.s = ~this.s
1295 return r
1296}
3af2954a 1297
ab78acc6
IC
1298// (public) this << n
1299function bnShiftLeft(n) {
1300 var r = new BigInteger()
1301 if (n < 0) this.rShiftTo(-n, r)
1302 else this.lShiftTo(n, r)
1303 return r
1304}
3af2954a 1305
ab78acc6
IC
1306// (public) this >> n
1307function bnShiftRight(n) {
1308 var r = new BigInteger()
1309 if (n < 0) this.lShiftTo(-n, r)
1310 else this.rShiftTo(n, r)
1311 return r
1312}
3af2954a 1313
ab78acc6
IC
1314// return index of lowest 1-bit in x, x < 2^31
1315function lbit(x) {
1316 if (x == 0) return -1
1317 var r = 0
1318 if ((x & 0xffff) == 0) {
1319 x >>= 16
1320 r += 16
3af2954a 1321 }
ab78acc6
IC
1322 if ((x & 0xff) == 0) {
1323 x >>= 8
1324 r += 8
1325 }
1326 if ((x & 0xf) == 0) {
1327 x >>= 4
1328 r += 4
1329 }
1330 if ((x & 3) == 0) {
1331 x >>= 2
1332 r += 2
1333 }
1334 if ((x & 1) == 0)++r
1335 return r
1336}
3af2954a 1337
ab78acc6
IC
1338// (public) returns index of lowest 1-bit (or -1 if none)
1339function bnGetLowestSetBit() {
1340 for (var i = 0; i < this.t; ++i)
1341 if (this[i] != 0) return i * this.DB + lbit(this[i])
1342 if (this.s < 0) return this.t * this.DB
1343 return -1
1344}
3af2954a 1345
ab78acc6
IC
1346// return number of 1 bits in x
1347function cbit(x) {
1348 var r = 0
1349 while (x != 0) {
1350 x &= x - 1
1351 ++r
3af2954a 1352 }
ab78acc6
IC
1353 return r
1354}
3af2954a 1355
ab78acc6
IC
1356// (public) return number of set bits
1357function bnBitCount() {
1358 var r = 0,
1359 x = this.s & this.DM
1360 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1361 return r
1362}
1363
1364// (public) true iff nth bit is set
1365function bnTestBit(n) {
1366 var j = Math.floor(n / this.DB)
1367 if (j >= this.t) return (this.s != 0)
1368 return ((this[j] & (1 << (n % this.DB))) != 0)
1369}
3af2954a 1370
ab78acc6
IC
1371// (protected) this op (1<<n)
1372function bnpChangeBit(n, op) {
1373 var r = BigInteger.ONE.shiftLeft(n)
1374 this.bitwiseTo(r, op, r)
1375 return r
1376}
3af2954a 1377
ab78acc6
IC
1378// (public) this | (1<<n)
1379function bnSetBit(n) {
1380 return this.changeBit(n, op_or)
1381}
3af2954a 1382
ab78acc6
IC
1383// (public) this & ~(1<<n)
1384function bnClearBit(n) {
1385 return this.changeBit(n, op_andnot)
1386}
3af2954a 1387
ab78acc6
IC
1388// (public) this ^ (1<<n)
1389function bnFlipBit(n) {
1390 return this.changeBit(n, op_xor)
1391}
3af2954a 1392
ab78acc6
IC
1393// (protected) r = this + a
1394function bnpAddTo(a, r) {
1395 var self = this
3af2954a 1396
ab78acc6
IC
1397 var i = 0,
1398 c = 0,
1399 m = Math.min(a.t, self.t)
1400 while (i < m) {
1401 c += self[i] + a[i]
1402 r[i++] = c & self.DM
1403 c >>= self.DB
1404 }
1405 if (a.t < self.t) {
1406 c += a.s
1407 while (i < self.t) {
1408 c += self[i]
1409 r[i++] = c & self.DM
1410 c >>= self.DB
1411 }
1412 c += self.s
1413 } else {
1414 c += self.s
1415 while (i < a.t) {
1416 c += a[i]
1417 r[i++] = c & self.DM
1418 c >>= self.DB
1419 }
1420 c += a.s
1421 }
1422 r.s = (c < 0) ? -1 : 0
1423 if (c > 0) r[i++] = c
1424 else if (c < -1) r[i++] = self.DV + c
1425 r.t = i
1426 r.clamp()
1427}
3af2954a 1428
ab78acc6
IC
1429// (public) this + a
1430function bnAdd(a) {
1431 var r = new BigInteger()
1432 this.addTo(a, r)
1433 return r
1434}
3af2954a 1435
ab78acc6
IC
1436// (public) this - a
1437function bnSubtract(a) {
1438 var r = new BigInteger()
1439 this.subTo(a, r)
1440 return r
1441}
3af2954a 1442
ab78acc6
IC
1443// (public) this * a
1444function bnMultiply(a) {
1445 var r = new BigInteger()
1446 this.multiplyTo(a, r)
1447 return r
1448}
3af2954a 1449
ab78acc6
IC
1450// (public) this^2
1451function bnSquare() {
1452 var r = new BigInteger()
1453 this.squareTo(r)
1454 return r
1455}
3af2954a 1456
ab78acc6
IC
1457// (public) this / a
1458function bnDivide(a) {
1459 var r = new BigInteger()
1460 this.divRemTo(a, r, null)
1461 return r
1462}
3af2954a 1463
ab78acc6
IC
1464// (public) this % a
1465function bnRemainder(a) {
1466 var r = new BigInteger()
1467 this.divRemTo(a, null, r)
1468 return r
1469}
3af2954a 1470
ab78acc6
IC
1471// (public) [this/a,this%a]
1472function bnDivideAndRemainder(a) {
1473 var q = new BigInteger(),
1474 r = new BigInteger()
1475 this.divRemTo(a, q, r)
1476 return new Array(q, r)
1477}
3af2954a 1478
ab78acc6
IC
1479// (protected) this *= n, this >= 0, 1 < n < DV
1480function bnpDMultiply(n) {
1481 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1482 ++this.t
1483 this.clamp()
1484}
3af2954a 1485
ab78acc6
IC
1486// (protected) this += n << w words, this >= 0
1487function bnpDAddOffset(n, w) {
1488 if (n == 0) return
1489 while (this.t <= w) this[this.t++] = 0
1490 this[w] += n
1491 while (this[w] >= this.DV) {
1492 this[w] -= this.DV
1493 if (++w >= this.t) this[this.t++] = 0
1494 ++this[w]
3af2954a 1495 }
ab78acc6 1496}
3af2954a 1497
ab78acc6
IC
1498// A "null" reducer
1499function NullExp() {}
3af2954a 1500
ab78acc6
IC
1501function nNop(x) {
1502 return x
1503}
3af2954a 1504
ab78acc6
IC
1505function nMulTo(x, y, r) {
1506 x.multiplyTo(y, r)
1507}
3af2954a 1508
ab78acc6
IC
1509function nSqrTo(x, r) {
1510 x.squareTo(r)
1511}
3af2954a 1512
ab78acc6
IC
1513NullExp.prototype.convert = nNop
1514NullExp.prototype.revert = nNop
1515NullExp.prototype.mulTo = nMulTo
1516NullExp.prototype.sqrTo = nSqrTo
3af2954a 1517
ab78acc6
IC
1518// (public) this^e
1519function bnPow(e) {
1520 return this.exp(e, new NullExp())
1521}
3af2954a 1522
ab78acc6
IC
1523// (protected) r = lower n words of "this * a", a.t <= n
1524// "this" should be the larger one if appropriate.
1525function bnpMultiplyLowerTo(a, n, r) {
1526 var i = Math.min(this.t + a.t, n)
1527 r.s = 0; // assumes a,this >= 0
1528 r.t = i
1529 while (i > 0) r[--i] = 0
1530 var j
1531 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1532 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1533 r.clamp()
1534}
3af2954a 1535
ab78acc6
IC
1536// (protected) r = "this * a" without lower n words, n > 0
1537// "this" should be the larger one if appropriate.
1538function bnpMultiplyUpperTo(a, n, r) {
1539 --n
1540 var i = r.t = this.t + a.t - n
1541 r.s = 0; // assumes a,this >= 0
1542 while (--i >= 0) r[i] = 0
1543 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1544 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1545 r.clamp()
1546 r.drShiftTo(1, r)
1547}
3af2954a 1548
ab78acc6
IC
1549// Barrett modular reduction
1550function Barrett(m) {
1551 // setup Barrett
1552 this.r2 = new BigInteger()
1553 this.q3 = new BigInteger()
1554 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1555 this.mu = this.r2.divide(m)
1556 this.m = m
1557}
3af2954a 1558
ab78acc6
IC
1559function barrettConvert(x) {
1560 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1561 else if (x.compareTo(this.m) < 0) return x
1562 else {
1563 var r = new BigInteger()
1564 x.copyTo(r)
1565 this.reduce(r)
1566 return r
3af2954a 1567 }
ab78acc6 1568}
3af2954a 1569
ab78acc6
IC
1570function barrettRevert(x) {
1571 return x
1572}
3af2954a 1573
ab78acc6
IC
1574// x = x mod m (HAC 14.42)
1575function barrettReduce(x) {
1576 var self = this
1577 x.drShiftTo(self.m.t - 1, self.r2)
1578 if (x.t > self.m.t + 1) {
1579 x.t = self.m.t + 1
1580 x.clamp()
3af2954a 1581 }
ab78acc6
IC
1582 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1583 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1584 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1585 x.subTo(self.r2, x)
1586 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1587}
3af2954a 1588
ab78acc6
IC
1589// r = x^2 mod m; x != r
1590function barrettSqrTo(x, r) {
1591 x.squareTo(r)
1592 this.reduce(r)
1593}
3af2954a 1594
ab78acc6
IC
1595// r = x*y mod m; x,y != r
1596function barrettMulTo(x, y, r) {
1597 x.multiplyTo(y, r)
1598 this.reduce(r)
1599}
3af2954a 1600
ab78acc6
IC
1601Barrett.prototype.convert = barrettConvert
1602Barrett.prototype.revert = barrettRevert
1603Barrett.prototype.reduce = barrettReduce
1604Barrett.prototype.mulTo = barrettMulTo
1605Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1606
ab78acc6
IC
1607// (public) this^e % m (HAC 14.85)
1608function bnModPow(e, m) {
1609 var i = e.bitLength(),
1610 k, r = nbv(1),
1611 z
1612 if (i <= 0) return r
1613 else if (i < 18) k = 1
1614 else if (i < 48) k = 3
1615 else if (i < 144) k = 4
1616 else if (i < 768) k = 5
1617 else k = 6
1618 if (i < 8)
1619 z = new Classic(m)
1620 else if (m.isEven())
1621 z = new Barrett(m)
1622 else
1623 z = new Montgomery(m)
3af2954a 1624
ab78acc6
IC
1625 // precomputation
1626 var g = new Array(),
1627 n = 3,
1628 k1 = k - 1,
1629 km = (1 << k) - 1
1630 g[1] = z.convert(this)
1631 if (k > 1) {
1632 var g2 = new BigInteger()
1633 z.sqrTo(g[1], g2)
1634 while (n <= km) {
1635 g[n] = new BigInteger()
1636 z.mulTo(g2, g[n - 2], g[n])
1637 n += 2
1638 }
1639 }
1640
1641 var j = e.t - 1,
1642 w, is1 = true,
1643 r2 = new BigInteger(),
1644 t
1645 i = nbits(e[j]) - 1
1646 while (j >= 0) {
1647 if (i >= k1) w = (e[j] >> (i - k1)) & km
1648 else {
1649 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1650 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1651 }
3af2954a 1652
ab78acc6
IC
1653 n = k
1654 while ((w & 1) == 0) {
1655 w >>= 1
1656 --n
1657 }
1658 if ((i -= n) < 0) {
1659 i += this.DB
1660 --j
1661 }
1662 if (is1) { // ret == 1, don't bother squaring or multiplying it
1663 g[w].copyTo(r)
1664 is1 = false
1665 } else {
1666 while (n > 1) {
1667 z.sqrTo(r, r2)
1668 z.sqrTo(r2, r)
1669 n -= 2
1670 }
1671 if (n > 0) z.sqrTo(r, r2)
1672 else {
1673 t = r
1674 r = r2
1675 r2 = t
1676 }
1677 z.mulTo(r2, g[w], r)
1678 }
3af2954a 1679
ab78acc6
IC
1680 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1681 z.sqrTo(r, r2)
1682 t = r
1683 r = r2
1684 r2 = t
1685 if (--i < 0) {
1686 i = this.DB - 1
1687 --j
3af2954a 1688 }
3af2954a
IC
1689 }
1690 }
ab78acc6
IC
1691 return z.revert(r)
1692}
3af2954a 1693
ab78acc6
IC
1694// (public) gcd(this,a) (HAC 14.54)
1695function bnGCD(a) {
1696 var x = (this.s < 0) ? this.negate() : this.clone()
1697 var y = (a.s < 0) ? a.negate() : a.clone()
1698 if (x.compareTo(y) < 0) {
1699 var t = x
1700 x = y
1701 y = t
1702 }
1703 var i = x.getLowestSetBit(),
1704 g = y.getLowestSetBit()
1705 if (g < 0) return x
1706 if (i < g) g = i
1707 if (g > 0) {
1708 x.rShiftTo(g, x)
1709 y.rShiftTo(g, y)
1710 }
1711 while (x.signum() > 0) {
1712 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1713 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1714 if (x.compareTo(y) >= 0) {
1715 x.subTo(y, x)
1716 x.rShiftTo(1, x)
1717 } else {
1718 y.subTo(x, y)
1719 y.rShiftTo(1, y)
1720 }
3af2954a 1721 }
ab78acc6
IC
1722 if (g > 0) y.lShiftTo(g, y)
1723 return y
1724}
3af2954a 1725
ab78acc6
IC
1726// (protected) this % n, n < 2^26
1727function bnpModInt(n) {
1728 if (n <= 0) return 0
1729 var d = this.DV % n,
1730 r = (this.s < 0) ? n - 1 : 0
1731 if (this.t > 0)
1732 if (d == 0) r = this[0] % n
1733 else
1734 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1735 return r
1736}
3af2954a 1737
ab78acc6
IC
1738// (public) 1/this % m (HAC 14.61)
1739function bnModInverse(m) {
1740 var ac = m.isEven()
1741 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1742 var u = m.clone(),
1743 v = this.clone()
1744 var a = nbv(1),
1745 b = nbv(0),
1746 c = nbv(0),
1747 d = nbv(1)
1748 while (u.signum() != 0) {
1749 while (u.isEven()) {
1750 u.rShiftTo(1, u)
1751 if (ac) {
1752 if (!a.isEven() || !b.isEven()) {
1753 a.addTo(this, a)
1754 b.subTo(m, b)
1755 }
1756 a.rShiftTo(1, a)
1757 } else if (!b.isEven()) b.subTo(m, b)
1758 b.rShiftTo(1, b)
1759 }
1760 while (v.isEven()) {
1761 v.rShiftTo(1, v)
1762 if (ac) {
1763 if (!c.isEven() || !d.isEven()) {
1764 c.addTo(this, c)
1765 d.subTo(m, d)
1766 }
1767 c.rShiftTo(1, c)
1768 } else if (!d.isEven()) d.subTo(m, d)
1769 d.rShiftTo(1, d)
1770 }
1771 if (u.compareTo(v) >= 0) {
1772 u.subTo(v, u)
1773 if (ac) a.subTo(c, a)
1774 b.subTo(d, b)
1775 } else {
1776 v.subTo(u, v)
1777 if (ac) c.subTo(a, c)
1778 d.subTo(b, d)
1779 }
1780 }
1781 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1782 if (d.compareTo(m) >= 0) return d.subtract(m)
1783 if (d.signum() < 0) d.addTo(m, d)
1784 else return d
1785 if (d.signum() < 0) return d.add(m)
1786 else return d
1787}
1788
1789var lowprimes = [
1790 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1791 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1792 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1793 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1794 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1795 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1796 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1797 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1798 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1799 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1800 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1801]
1802
1803var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1804
1805// (public) test primality with certainty >= 1-.5^t
1806function bnIsProbablePrime(t) {
1807 var i, x = this.abs()
1808 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1809 for (i = 0; i < lowprimes.length; ++i)
1810 if (x[0] == lowprimes[i]) return true
1811 return false
3af2954a 1812 }
ab78acc6
IC
1813 if (x.isEven()) return false
1814 i = 1
1815 while (i < lowprimes.length) {
1816 var m = lowprimes[i],
1817 j = i + 1
1818 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1819 m = x.modInt(m)
1820 while (i < j) if (m % lowprimes[i++] == 0) return false
1821 }
1822 return x.millerRabin(t)
1823}
1824
1825// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1826function bnpMillerRabin(t) {
1827 var n1 = this.subtract(BigInteger.ONE)
1828 var k = n1.getLowestSetBit()
1829 if (k <= 0) return false
1830 var r = n1.shiftRight(k)
1831 t = (t + 1) >> 1
1832 if (t > lowprimes.length) t = lowprimes.length
1833 var a = new BigInteger(null)
1834 var j, bases = []
1835 for (var i = 0; i < t; ++i) {
1836 for (;;) {
1837 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1838 if (bases.indexOf(j) == -1) break
1839 }
1840 bases.push(j)
1841 a.fromInt(j)
1842 var y = a.modPow(r, this)
1843 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1844 var j = 1
1845 while (j++ < k && y.compareTo(n1) != 0) {
1846 y = y.modPowInt(2, this)
1847 if (y.compareTo(BigInteger.ONE) == 0) return false
1848 }
1849 if (y.compareTo(n1) != 0) return false
1850 }
3af2954a 1851 }
ab78acc6
IC
1852 return true
1853}
3af2954a 1854
ab78acc6
IC
1855// protected
1856proto.chunkSize = bnpChunkSize
1857proto.toRadix = bnpToRadix
1858proto.fromRadix = bnpFromRadix
1859proto.fromNumber = bnpFromNumber
1860proto.bitwiseTo = bnpBitwiseTo
1861proto.changeBit = bnpChangeBit
1862proto.addTo = bnpAddTo
1863proto.dMultiply = bnpDMultiply
1864proto.dAddOffset = bnpDAddOffset
1865proto.multiplyLowerTo = bnpMultiplyLowerTo
1866proto.multiplyUpperTo = bnpMultiplyUpperTo
1867proto.modInt = bnpModInt
1868proto.millerRabin = bnpMillerRabin
3af2954a 1869
ab78acc6
IC
1870// public
1871proto.clone = bnClone
1872proto.intValue = bnIntValue
1873proto.byteValue = bnByteValue
1874proto.shortValue = bnShortValue
1875proto.signum = bnSigNum
1876proto.toByteArray = bnToByteArray
1877proto.equals = bnEquals
1878proto.min = bnMin
1879proto.max = bnMax
1880proto.and = bnAnd
1881proto.or = bnOr
1882proto.xor = bnXor
1883proto.andNot = bnAndNot
1884proto.not = bnNot
1885proto.shiftLeft = bnShiftLeft
1886proto.shiftRight = bnShiftRight
1887proto.getLowestSetBit = bnGetLowestSetBit
1888proto.bitCount = bnBitCount
1889proto.testBit = bnTestBit
1890proto.setBit = bnSetBit
1891proto.clearBit = bnClearBit
1892proto.flipBit = bnFlipBit
1893proto.add = bnAdd
1894proto.subtract = bnSubtract
1895proto.multiply = bnMultiply
1896proto.divide = bnDivide
1897proto.remainder = bnRemainder
1898proto.divideAndRemainder = bnDivideAndRemainder
1899proto.modPow = bnModPow
1900proto.modInverse = bnModInverse
1901proto.pow = bnPow
1902proto.gcd = bnGCD
1903proto.isProbablePrime = bnIsProbablePrime
3af2954a 1904
ab78acc6
IC
1905// JSBN-specific extension
1906proto.square = bnSquare
3af2954a 1907
ab78acc6
IC
1908// constants
1909BigInteger.ZERO = nbv(0)
1910BigInteger.ONE = nbv(1)
1911BigInteger.valueOf = nbv
3af2954a 1912
ab78acc6 1913module.exports = BigInteger
3af2954a 1914
ab78acc6
IC
1915},{"../package.json":4}],2:[function(require,module,exports){
1916(function (Buffer){
1917// FIXME: Kind of a weird way to throw exceptions, consider removing
1918var assert = require('assert')
1919var BigInteger = require('./bigi')
3af2954a 1920
ab78acc6
IC
1921/**
1922 * Turns a byte array into a big integer.
1923 *
1924 * This function will interpret a byte array as a big integer in big
1925 * endian notation.
1926 */
1927BigInteger.fromByteArrayUnsigned = function(byteArray) {
1928 // BigInteger expects a DER integer conformant byte array
1929 if (byteArray[0] & 0x80) {
1930 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1931 }
1932
ab78acc6
IC
1933 return new BigInteger(byteArray)
1934}
3af2954a 1935
ab78acc6
IC
1936/**
1937 * Returns a byte array representation of the big integer.
1938 *
1939 * This returns the absolute of the contained value in big endian
1940 * form. A value of zero results in an empty array.
1941 */
1942BigInteger.prototype.toByteArrayUnsigned = function() {
1943 var byteArray = this.toByteArray()
1944 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1945}
3af2954a 1946
ab78acc6
IC
1947BigInteger.fromDERInteger = function(byteArray) {
1948 return new BigInteger(byteArray)
1949}
3af2954a 1950
ab78acc6
IC
1951/*
1952 * Converts BigInteger to a DER integer representation.
1953 *
1954 * The format for this value uses the most significant bit as a sign
1955 * bit. If the most significant bit is already set and the integer is
1956 * positive, a 0x00 is prepended.
1957 *
1958 * Examples:
1959 *
1960 * 0 => 0x00
1961 * 1 => 0x01
1962 * -1 => 0xff
1963 * 127 => 0x7f
1964 * -127 => 0x81
1965 * 128 => 0x0080
1966 * -128 => 0x80
1967 * 255 => 0x00ff
1968 * -255 => 0xff01
1969 * 16300 => 0x3fac
1970 * -16300 => 0xc054
1971 * 62300 => 0x00f35c
1972 * -62300 => 0xff0ca4
1973*/
1974BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 1975
ab78acc6
IC
1976BigInteger.fromBuffer = function(buffer) {
1977 // BigInteger expects a DER integer conformant byte array
1978 if (buffer[0] & 0x80) {
1979 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 1980
ab78acc6 1981 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1982 }
1983
ab78acc6
IC
1984 return new BigInteger(buffer)
1985}
3af2954a 1986
ab78acc6
IC
1987BigInteger.fromHex = function(hex) {
1988 if (hex === '') return BigInteger.ZERO
3af2954a 1989
ab78acc6
IC
1990 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1991 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1992 return new BigInteger(hex, 16)
1993}
3af2954a 1994
ab78acc6
IC
1995BigInteger.prototype.toBuffer = function(size) {
1996 var byteArray = this.toByteArrayUnsigned()
1997 var zeros = []
3af2954a 1998
ab78acc6
IC
1999 var padding = size - byteArray.length
2000 while (zeros.length < padding) zeros.push(0)
3af2954a 2001
ab78acc6
IC
2002 return new Buffer(zeros.concat(byteArray))
2003}
3af2954a 2004
ab78acc6
IC
2005BigInteger.prototype.toHex = function(size) {
2006 return this.toBuffer(size).toString('hex')
2007}
3af2954a 2008
ab78acc6
IC
2009}).call(this,require("buffer").Buffer)
2010},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2011var BigInteger = require('./bigi')
3af2954a 2012
ab78acc6
IC
2013//addons
2014require('./convert')
3af2954a 2015
ab78acc6
IC
2016module.exports = BigInteger
2017},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2018module.exports={
2019 "name": "bigi",
2020 "version": "1.4.0",
2021 "description": "Big integers.",
2022 "keywords": [
2023 "cryptography",
2024 "math",
2025 "bitcoin",
2026 "arbitrary",
2027 "precision",
2028 "arithmetic",
2029 "big",
2030 "integer",
2031 "int",
2032 "number",
2033 "biginteger",
2034 "bigint",
2035 "bignumber",
2036 "decimal",
2037 "float"
2038 ],
2039 "devDependencies": {
2040 "mocha": "^1.20.1",
2041 "jshint": "^2.5.1",
2042 "coveralls": "^2.10.0",
2043 "istanbul": "^0.2.11"
2044 },
2045 "repository": {
2046 "url": "https://github.com/cryptocoinjs/bigi",
2047 "type": "git"
2048 },
2049 "main": "./lib/index.js",
2050 "scripts": {
2051 "test": "_mocha -- test/*.js",
2052 "jshint": "jshint --config jshint.json lib/*.js ; true",
2053 "unit": "mocha",
2054 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2055 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2056 },
2057 "dependencies": {},
2058 "testling": {
2059 "files": "test/*.js",
2060 "harness": "mocha",
2061 "browsers": [
2062 "ie/9..latest",
2063 "firefox/latest",
2064 "chrome/latest",
2065 "safari/6.0..latest",
2066 "iphone/6.0..latest",
2067 "android-browser/4.2..latest"
2068 ]
2069 },
2070 "bugs": {
2071 "url": "https://github.com/cryptocoinjs/bigi/issues"
2072 },
2073 "homepage": "https://github.com/cryptocoinjs/bigi",
2074 "_id": "bigi@1.4.0",
2075 "dist": {
2076 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2077 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2078 },
2079 "_from": "bigi@^1.4.0",
2080 "_npmVersion": "1.4.3",
2081 "_npmUser": {
2082 "name": "jp",
2083 "email": "jprichardson@gmail.com"
2084 },
2085 "maintainers": [
2086 {
2087 "name": "jp",
2088 "email": "jprichardson@gmail.com"
2089 },
2090 {
2091 "name": "midnightlightning",
2092 "email": "boydb@midnightdesign.ws"
2093 },
2094 {
2095 "name": "sidazhang",
2096 "email": "sidazhang89@gmail.com"
2097 },
2098 {
2099 "name": "nadav",
2100 "email": "npm@shesek.info"
3af2954a 2101 }
ab78acc6
IC
2102 ],
2103 "directories": {},
2104 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2105 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2106}
3af2954a 2107
ab78acc6
IC
2108},{}],5:[function(require,module,exports){
2109// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2110//
2111// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2112//
2113// Originally from narwhal.js (http://narwhaljs.org)
2114// Copyright (c) 2009 Thomas Robinson <280north.com>
2115//
2116// Permission is hereby granted, free of charge, to any person obtaining a copy
2117// of this software and associated documentation files (the 'Software'), to
2118// deal in the Software without restriction, including without limitation the
2119// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2120// sell copies of the Software, and to permit persons to whom the Software is
2121// furnished to do so, subject to the following conditions:
2122//
2123// The above copyright notice and this permission notice shall be included in
2124// all copies or substantial portions of the Software.
2125//
2126// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2127// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2128// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2129// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2130// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2131// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2132
ab78acc6
IC
2133// when used in node, this will actually load the util module we depend on
2134// versus loading the builtin util module as happens otherwise
2135// this is a bug in node module loading as far as I am concerned
2136var util = require('util/');
3af2954a 2137
ab78acc6
IC
2138var pSlice = Array.prototype.slice;
2139var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2140
ab78acc6
IC
2141// 1. The assert module provides functions that throw
2142// AssertionError's when particular conditions are not met. The
2143// assert module must conform to the following interface.
3af2954a 2144
ab78acc6 2145var assert = module.exports = ok;
3af2954a 2146
ab78acc6
IC
2147// 2. The AssertionError is defined in assert.
2148// new assert.AssertionError({ message: message,
2149// actual: actual,
2150// expected: expected })
3af2954a 2151
ab78acc6
IC
2152assert.AssertionError = function AssertionError(options) {
2153 this.name = 'AssertionError';
2154 this.actual = options.actual;
2155 this.expected = options.expected;
2156 this.operator = options.operator;
2157 if (options.message) {
2158 this.message = options.message;
2159 this.generatedMessage = false;
2160 } else {
2161 this.message = getMessage(this);
2162 this.generatedMessage = true;
2163 }
2164 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2165
ab78acc6
IC
2166 if (Error.captureStackTrace) {
2167 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2168 }
ab78acc6
IC
2169 else {
2170 // non v8 browsers so we can have a stacktrace
2171 var err = new Error();
2172 if (err.stack) {
2173 var out = err.stack;
3af2954a 2174
ab78acc6
IC
2175 // try to strip useless frames
2176 var fn_name = stackStartFunction.name;
2177 var idx = out.indexOf('\n' + fn_name);
2178 if (idx >= 0) {
2179 // once we have located the function frame
2180 // we need to strip out everything before it (and its line)
2181 var next_line = out.indexOf('\n', idx + 1);
2182 out = out.substring(next_line + 1);
2183 }
3af2954a 2184
ab78acc6 2185 this.stack = out;
3af2954a 2186 }
3af2954a 2187 }
ab78acc6 2188};
3af2954a 2189
ab78acc6
IC
2190// assert.AssertionError instanceof Error
2191util.inherits(assert.AssertionError, Error);
3af2954a 2192
ab78acc6
IC
2193function replacer(key, value) {
2194 if (util.isUndefined(value)) {
2195 return '' + value;
2196 }
2197 if (util.isNumber(value) && !isFinite(value)) {
2198 return value.toString();
2199 }
2200 if (util.isFunction(value) || util.isRegExp(value)) {
2201 return value.toString();
2202 }
2203 return value;
2204}
3af2954a 2205
ab78acc6
IC
2206function truncate(s, n) {
2207 if (util.isString(s)) {
2208 return s.length < n ? s : s.slice(0, n);
2209 } else {
2210 return s;
2211 }
2212}
3af2954a 2213
ab78acc6
IC
2214function getMessage(self) {
2215 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2216 self.operator + ' ' +
2217 truncate(JSON.stringify(self.expected, replacer), 128);
2218}
3af2954a 2219
ab78acc6
IC
2220// At present only the three keys mentioned above are used and
2221// understood by the spec. Implementations or sub modules can pass
2222// other keys to the AssertionError's constructor - they will be
2223// ignored.
3af2954a 2224
ab78acc6
IC
2225// 3. All of the following functions must throw an AssertionError
2226// when a corresponding condition is not met, with a message that
2227// may be undefined if not provided. All assertion methods provide
2228// both the actual and expected values to the assertion error for
2229// display purposes.
3af2954a 2230
ab78acc6
IC
2231function fail(actual, expected, message, operator, stackStartFunction) {
2232 throw new assert.AssertionError({
2233 message: message,
2234 actual: actual,
2235 expected: expected,
2236 operator: operator,
2237 stackStartFunction: stackStartFunction
2238 });
2239}
3af2954a 2240
ab78acc6
IC
2241// EXTENSION! allows for well behaved errors defined elsewhere.
2242assert.fail = fail;
ebd8d4e8 2243
ab78acc6
IC
2244// 4. Pure assertion tests whether a value is truthy, as determined
2245// by !!guard.
2246// assert.ok(guard, message_opt);
2247// This statement is equivalent to assert.equal(true, !!guard,
2248// message_opt);. To test strictly for the value true, use
2249// assert.strictEqual(true, guard, message_opt);.
3af2954a 2250
ab78acc6
IC
2251function ok(value, message) {
2252 if (!value) fail(value, true, message, '==', assert.ok);
2253}
2254assert.ok = ok;
3af2954a 2255
ab78acc6
IC
2256// 5. The equality assertion tests shallow, coercive equality with
2257// ==.
2258// assert.equal(actual, expected, message_opt);
3af2954a 2259
ab78acc6
IC
2260assert.equal = function equal(actual, expected, message) {
2261 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2262};
3af2954a 2263
ab78acc6
IC
2264// 6. The non-equality assertion tests for whether two objects are not equal
2265// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2266
ab78acc6
IC
2267assert.notEqual = function notEqual(actual, expected, message) {
2268 if (actual == expected) {
2269 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2270 }
ab78acc6 2271};
3af2954a 2272
ab78acc6
IC
2273// 7. The equivalence assertion tests a deep equality relation.
2274// assert.deepEqual(actual, expected, message_opt);
3af2954a 2275
ab78acc6
IC
2276assert.deepEqual = function deepEqual(actual, expected, message) {
2277 if (!_deepEqual(actual, expected)) {
2278 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2279 }
2280};
3af2954a 2281
ab78acc6
IC
2282function _deepEqual(actual, expected) {
2283 // 7.1. All identical values are equivalent, as determined by ===.
2284 if (actual === expected) {
2285 return true;
3af2954a 2286
ab78acc6
IC
2287 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2288 if (actual.length != expected.length) return false;
3af2954a 2289
ab78acc6
IC
2290 for (var i = 0; i < actual.length; i++) {
2291 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2292 }
2293
ab78acc6 2294 return true;
3af2954a 2295
ab78acc6
IC
2296 // 7.2. If the expected value is a Date object, the actual value is
2297 // equivalent if it is also a Date object that refers to the same time.
2298 } else if (util.isDate(actual) && util.isDate(expected)) {
2299 return actual.getTime() === expected.getTime();
3af2954a 2300
ab78acc6
IC
2301 // 7.3 If the expected value is a RegExp object, the actual value is
2302 // equivalent if it is also a RegExp object with the same source and
2303 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2304 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2305 return actual.source === expected.source &&
2306 actual.global === expected.global &&
2307 actual.multiline === expected.multiline &&
2308 actual.lastIndex === expected.lastIndex &&
2309 actual.ignoreCase === expected.ignoreCase;
3af2954a 2310
ab78acc6
IC
2311 // 7.4. Other pairs that do not both pass typeof value == 'object',
2312 // equivalence is determined by ==.
2313 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2314 return actual == expected;
3af2954a 2315
ab78acc6
IC
2316 // 7.5 For all other Object pairs, including Array objects, equivalence is
2317 // determined by having the same number of owned properties (as verified
2318 // with Object.prototype.hasOwnProperty.call), the same set of keys
2319 // (although not necessarily the same order), equivalent values for every
2320 // corresponding key, and an identical 'prototype' property. Note: this
2321 // accounts for both named and indexed properties on Arrays.
2322 } else {
2323 return objEquiv(actual, expected);
3af2954a 2324 }
ab78acc6 2325}
3af2954a 2326
ab78acc6
IC
2327function isArguments(object) {
2328 return Object.prototype.toString.call(object) == '[object Arguments]';
2329}
3af2954a 2330
ab78acc6
IC
2331function objEquiv(a, b) {
2332 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2333 return false;
2334 // an identical 'prototype' property.
2335 if (a.prototype !== b.prototype) return false;
2336 // if one is a primitive, the other must be same
2337 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2338 return a === b;
3af2954a 2339 }
ab78acc6
IC
2340 var aIsArgs = isArguments(a),
2341 bIsArgs = isArguments(b);
2342 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2343 return false;
2344 if (aIsArgs) {
2345 a = pSlice.call(a);
2346 b = pSlice.call(b);
2347 return _deepEqual(a, b);
3af2954a 2348 }
ab78acc6
IC
2349 var ka = objectKeys(a),
2350 kb = objectKeys(b),
2351 key, i;
2352 // having the same number of owned properties (keys incorporates
2353 // hasOwnProperty)
2354 if (ka.length != kb.length)
2355 return false;
2356 //the same set of keys (although not necessarily the same order),
2357 ka.sort();
2358 kb.sort();
2359 //~~~cheap key test
2360 for (i = ka.length - 1; i >= 0; i--) {
2361 if (ka[i] != kb[i])
2362 return false;
3af2954a 2363 }
ab78acc6
IC
2364 //equivalent values for every corresponding key, and
2365 //~~~possibly expensive deep test
2366 for (i = ka.length - 1; i >= 0; i--) {
2367 key = ka[i];
2368 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2369 }
ab78acc6
IC
2370 return true;
2371}
2372
2373// 8. The non-equivalence assertion tests for any deep inequality.
2374// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2375
ab78acc6
IC
2376assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2377 if (_deepEqual(actual, expected)) {
2378 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2379 }
ab78acc6 2380};
3af2954a 2381
ab78acc6
IC
2382// 9. The strict equality assertion tests strict equality, as determined by ===.
2383// assert.strictEqual(actual, expected, message_opt);
3af2954a 2384
ab78acc6
IC
2385assert.strictEqual = function strictEqual(actual, expected, message) {
2386 if (actual !== expected) {
2387 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2388 }
ab78acc6 2389};
3af2954a 2390
ab78acc6
IC
2391// 10. The strict non-equality assertion tests for strict inequality, as
2392// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2393
ab78acc6
IC
2394assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2395 if (actual === expected) {
2396 fail(actual, expected, message, '!==', assert.notStrictEqual);
2397 }
2398};
3af2954a 2399
ab78acc6
IC
2400function expectedException(actual, expected) {
2401 if (!actual || !expected) {
2402 return false;
2403 }
3af2954a 2404
ab78acc6
IC
2405 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2406 return expected.test(actual);
2407 } else if (actual instanceof expected) {
2408 return true;
2409 } else if (expected.call({}, actual) === true) {
2410 return true;
3af2954a
IC
2411 }
2412
ab78acc6
IC
2413 return false;
2414}
3af2954a 2415
ab78acc6
IC
2416function _throws(shouldThrow, block, expected, message) {
2417 var actual;
3af2954a 2418
ab78acc6
IC
2419 if (util.isString(expected)) {
2420 message = expected;
2421 expected = null;
3af2954a
IC
2422 }
2423
ab78acc6
IC
2424 try {
2425 block();
2426 } catch (e) {
2427 actual = e;
3af2954a
IC
2428 }
2429
ab78acc6
IC
2430 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2431 (message ? ' ' + message : '.');
3af2954a 2432
ab78acc6
IC
2433 if (shouldThrow && !actual) {
2434 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2435 }
2436
ab78acc6
IC
2437 if (!shouldThrow && expectedException(actual, expected)) {
2438 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2439 }
2440
ab78acc6
IC
2441 if ((shouldThrow && actual && expected &&
2442 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2443 throw actual;
3af2954a 2444 }
ab78acc6 2445}
3af2954a 2446
ab78acc6
IC
2447// 11. Expected to throw an error:
2448// assert.throws(block, Error_opt, message_opt);
3af2954a 2449
ab78acc6
IC
2450assert.throws = function(block, /*optional*/error, /*optional*/message) {
2451 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2452};
3af2954a 2453
ab78acc6
IC
2454// EXTENSION! This is annoying to write outside this module.
2455assert.doesNotThrow = function(block, /*optional*/message) {
2456 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2457};
3af2954a 2458
ab78acc6 2459assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2460
ab78acc6
IC
2461var objectKeys = Object.keys || function (obj) {
2462 var keys = [];
2463 for (var key in obj) {
2464 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2465 }
ab78acc6
IC
2466 return keys;
2467};
3af2954a 2468
ab78acc6 2469},{"util/":29}],6:[function(require,module,exports){
3af2954a 2470
ab78acc6
IC
2471},{}],7:[function(require,module,exports){
2472/*!
2473 * The buffer module from node.js, for the browser.
2474 *
2475 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2476 * @license MIT
2477 */
3af2954a 2478
ab78acc6
IC
2479var base64 = require('base64-js')
2480var ieee754 = require('ieee754')
2481var isArray = require('is-array')
3af2954a 2482
ab78acc6
IC
2483exports.Buffer = Buffer
2484exports.SlowBuffer = SlowBuffer
2485exports.INSPECT_MAX_BYTES = 50
2486Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2487
ab78acc6 2488var rootParent = {}
3af2954a 2489
ab78acc6
IC
2490/**
2491 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2492 * === true Use Uint8Array implementation (fastest)
2493 * === false Use Object implementation (most compatible, even IE6)
2494 *
2495 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2496 * Opera 11.6+, iOS 4.2+.
2497 *
2498 * Due to various browser bugs, sometimes the Object implementation will be used even
2499 * when the browser supports typed arrays.
2500 *
2501 * Note:
2502 *
2503 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2504 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2505 *
2506 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2507 * on objects.
2508 *
2509 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2510 *
2511 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2512 * incorrect length in some situations.
3af2954a 2513
ab78acc6
IC
2514 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2515 * get the Object implementation, which is slower but behaves correctly.
2516 */
2517Buffer.TYPED_ARRAY_SUPPORT = (function () {
2518 function Bar () {}
2519 try {
2520 var arr = new Uint8Array(1)
2521 arr.foo = function () { return 42 }
2522 arr.constructor = Bar
2523 return arr.foo() === 42 && // typed array instances can be augmented
2524 arr.constructor === Bar && // constructor can be set
2525 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2526 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2527 } catch (e) {
2528 return false
2529 }
2530})()
3af2954a 2531
ab78acc6
IC
2532function kMaxLength () {
2533 return Buffer.TYPED_ARRAY_SUPPORT
2534 ? 0x7fffffff
2535 : 0x3fffffff
2536}
3af2954a 2537
ab78acc6
IC
2538/**
2539 * Class: Buffer
2540 * =============
2541 *
2542 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2543 * with function properties for all the node `Buffer` API functions. We use
2544 * `Uint8Array` so that square bracket notation works as expected -- it returns
2545 * a single octet.
2546 *
2547 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2548 * prototype.
2549 */
2550function Buffer (arg) {
2551 if (!(this instanceof Buffer)) {
2552 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2553 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2554 return new Buffer(arg)
3af2954a
IC
2555 }
2556
ab78acc6
IC
2557 this.length = 0
2558 this.parent = undefined
3af2954a 2559
ab78acc6
IC
2560 // Common case.
2561 if (typeof arg === 'number') {
2562 return fromNumber(this, arg)
2563 }
3af2954a 2564
ab78acc6
IC
2565 // Slightly less common case.
2566 if (typeof arg === 'string') {
2567 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2568 }
3af2954a 2569
ab78acc6
IC
2570 // Unusual.
2571 return fromObject(this, arg)
2572}
3af2954a 2573
ab78acc6
IC
2574function fromNumber (that, length) {
2575 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2576 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2577 for (var i = 0; i < length; i++) {
2578 that[i] = 0
2579 }
3af2954a 2580 }
ab78acc6
IC
2581 return that
2582}
3af2954a 2583
ab78acc6
IC
2584function fromString (that, string, encoding) {
2585 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2586
ab78acc6
IC
2587 // Assumption: byteLength() return value is always < kMaxLength.
2588 var length = byteLength(string, encoding) | 0
2589 that = allocate(that, length)
3af2954a 2590
ab78acc6
IC
2591 that.write(string, encoding)
2592 return that
2593}
3af2954a 2594
ab78acc6
IC
2595function fromObject (that, object) {
2596 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2597
ab78acc6 2598 if (isArray(object)) return fromArray(that, object)
3af2954a 2599
ab78acc6
IC
2600 if (object == null) {
2601 throw new TypeError('must start with number, buffer, array or string')
2602 }
3af2954a 2603
ab78acc6
IC
2604 if (typeof ArrayBuffer !== 'undefined') {
2605 if (object.buffer instanceof ArrayBuffer) {
2606 return fromTypedArray(that, object)
2607 }
2608 if (object instanceof ArrayBuffer) {
2609 return fromArrayBuffer(that, object)
2610 }
3af2954a
IC
2611 }
2612
ab78acc6 2613 if (object.length) return fromArrayLike(that, object)
3af2954a 2614
ab78acc6
IC
2615 return fromJsonObject(that, object)
2616}
3af2954a 2617
ab78acc6
IC
2618function fromBuffer (that, buffer) {
2619 var length = checked(buffer.length) | 0
2620 that = allocate(that, length)
2621 buffer.copy(that, 0, 0, length)
2622 return that
2623}
3af2954a 2624
ab78acc6
IC
2625function fromArray (that, array) {
2626 var length = checked(array.length) | 0
2627 that = allocate(that, length)
2628 for (var i = 0; i < length; i += 1) {
2629 that[i] = array[i] & 255
3af2954a 2630 }
ab78acc6
IC
2631 return that
2632}
3af2954a 2633
ab78acc6
IC
2634// Duplicate of fromArray() to keep fromArray() monomorphic.
2635function fromTypedArray (that, array) {
2636 var length = checked(array.length) | 0
2637 that = allocate(that, length)
2638 // Truncating the elements is probably not what people expect from typed
2639 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2640 // of the old Buffer constructor.
2641 for (var i = 0; i < length; i += 1) {
2642 that[i] = array[i] & 255
3af2954a 2643 }
ab78acc6
IC
2644 return that
2645}
3af2954a 2646
ab78acc6
IC
2647function fromArrayBuffer (that, array) {
2648 if (Buffer.TYPED_ARRAY_SUPPORT) {
2649 // Return an augmented `Uint8Array` instance, for best performance
2650 array.byteLength
2651 that = Buffer._augment(new Uint8Array(array))
2652 } else {
2653 // Fallback: Return an object instance of the Buffer class
2654 that = fromTypedArray(that, new Uint8Array(array))
2655 }
2656 return that
2657}
3af2954a 2658
ab78acc6
IC
2659function fromArrayLike (that, array) {
2660 var length = checked(array.length) | 0
2661 that = allocate(that, length)
2662 for (var i = 0; i < length; i += 1) {
2663 that[i] = array[i] & 255
3af2954a 2664 }
ab78acc6
IC
2665 return that
2666}
3af2954a 2667
ab78acc6
IC
2668// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2669// Returns a zero-length buffer for inputs that don't conform to the spec.
2670function fromJsonObject (that, object) {
2671 var array
2672 var length = 0
2673
2674 if (object.type === 'Buffer' && isArray(object.data)) {
2675 array = object.data
2676 length = checked(array.length) | 0
3af2954a 2677 }
ab78acc6 2678 that = allocate(that, length)
3af2954a 2679
ab78acc6
IC
2680 for (var i = 0; i < length; i += 1) {
2681 that[i] = array[i] & 255
3af2954a 2682 }
ab78acc6
IC
2683 return that
2684}
3af2954a 2685
ab78acc6
IC
2686function allocate (that, length) {
2687 if (Buffer.TYPED_ARRAY_SUPPORT) {
2688 // Return an augmented `Uint8Array` instance, for best performance
2689 that = Buffer._augment(new Uint8Array(length))
2690 } else {
2691 // Fallback: Return an object instance of the Buffer class
2692 that.length = length
2693 that._isBuffer = true
2694 }
3af2954a 2695
ab78acc6
IC
2696 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2697 if (fromPool) that.parent = rootParent
3af2954a 2698
ab78acc6
IC
2699 return that
2700}
3af2954a 2701
ab78acc6
IC
2702function checked (length) {
2703 // Note: cannot use `length < kMaxLength` here because that fails when
2704 // length is NaN (which is otherwise coerced to zero.)
2705 if (length >= kMaxLength()) {
2706 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2707 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2708 }
ab78acc6
IC
2709 return length | 0
2710}
3af2954a 2711
ab78acc6
IC
2712function SlowBuffer (subject, encoding) {
2713 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2714
ab78acc6
IC
2715 var buf = new Buffer(subject, encoding)
2716 delete buf.parent
2717 return buf
2718}
3af2954a 2719
ab78acc6
IC
2720Buffer.isBuffer = function isBuffer (b) {
2721 return !!(b != null && b._isBuffer)
2722}
3af2954a 2723
ab78acc6
IC
2724Buffer.compare = function compare (a, b) {
2725 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2726 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2727 }
2728
ab78acc6 2729 if (a === b) return 0
3af2954a 2730
ab78acc6
IC
2731 var x = a.length
2732 var y = b.length
3af2954a 2733
ab78acc6
IC
2734 var i = 0
2735 var len = Math.min(x, y)
2736 while (i < len) {
2737 if (a[i] !== b[i]) break
3af2954a 2738
ab78acc6
IC
2739 ++i
2740 }
3af2954a 2741
ab78acc6
IC
2742 if (i !== len) {
2743 x = a[i]
2744 y = b[i]
2745 }
3af2954a 2746
ab78acc6
IC
2747 if (x < y) return -1
2748 if (y < x) return 1
2749 return 0
2750}
3af2954a 2751
ab78acc6
IC
2752Buffer.isEncoding = function isEncoding (encoding) {
2753 switch (String(encoding).toLowerCase()) {
2754 case 'hex':
2755 case 'utf8':
2756 case 'utf-8':
2757 case 'ascii':
2758 case 'binary':
2759 case 'base64':
2760 case 'raw':
2761 case 'ucs2':
2762 case 'ucs-2':
2763 case 'utf16le':
2764 case 'utf-16le':
2765 return true
2766 default:
2767 return false
3af2954a 2768 }
ab78acc6 2769}
3af2954a 2770
ab78acc6
IC
2771Buffer.concat = function concat (list, length) {
2772 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 2773
ab78acc6
IC
2774 if (list.length === 0) {
2775 return new Buffer(0)
3af2954a
IC
2776 }
2777
ab78acc6
IC
2778 var i
2779 if (length === undefined) {
2780 length = 0
2781 for (i = 0; i < list.length; i++) {
2782 length += list[i].length
2783 }
3af2954a
IC
2784 }
2785
ab78acc6
IC
2786 var buf = new Buffer(length)
2787 var pos = 0
2788 for (i = 0; i < list.length; i++) {
2789 var item = list[i]
2790 item.copy(buf, pos)
2791 pos += item.length
2792 }
2793 return buf
2794}
3af2954a 2795
ab78acc6
IC
2796function byteLength (string, encoding) {
2797 if (typeof string !== 'string') string = '' + string
2798
2799 var len = string.length
2800 if (len === 0) return 0
2801
2802 // Use a for loop to avoid recursion
2803 var loweredCase = false
2804 for (;;) {
2805 switch (encoding) {
2806 case 'ascii':
2807 case 'binary':
2808 // Deprecated
2809 case 'raw':
2810 case 'raws':
2811 return len
2812 case 'utf8':
2813 case 'utf-8':
2814 return utf8ToBytes(string).length
2815 case 'ucs2':
2816 case 'ucs-2':
2817 case 'utf16le':
2818 case 'utf-16le':
2819 return len * 2
2820 case 'hex':
2821 return len >>> 1
2822 case 'base64':
2823 return base64ToBytes(string).length
2824 default:
2825 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2826 encoding = ('' + encoding).toLowerCase()
2827 loweredCase = true
3af2954a 2828 }
3af2954a 2829 }
ab78acc6
IC
2830}
2831Buffer.byteLength = byteLength
3af2954a 2832
ab78acc6
IC
2833// pre-set for values that may exist in the future
2834Buffer.prototype.length = undefined
2835Buffer.prototype.parent = undefined
3af2954a 2836
ab78acc6
IC
2837function slowToString (encoding, start, end) {
2838 var loweredCase = false
3af2954a 2839
ab78acc6
IC
2840 start = start | 0
2841 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 2842
ab78acc6
IC
2843 if (!encoding) encoding = 'utf8'
2844 if (start < 0) start = 0
2845 if (end > this.length) end = this.length
2846 if (end <= start) return ''
3af2954a 2847
ab78acc6
IC
2848 while (true) {
2849 switch (encoding) {
2850 case 'hex':
2851 return hexSlice(this, start, end)
3af2954a 2852
ab78acc6
IC
2853 case 'utf8':
2854 case 'utf-8':
2855 return utf8Slice(this, start, end)
3af2954a 2856
ab78acc6
IC
2857 case 'ascii':
2858 return asciiSlice(this, start, end)
3af2954a 2859
ab78acc6
IC
2860 case 'binary':
2861 return binarySlice(this, start, end)
3af2954a 2862
ab78acc6
IC
2863 case 'base64':
2864 return base64Slice(this, start, end)
3af2954a 2865
ab78acc6
IC
2866 case 'ucs2':
2867 case 'ucs-2':
2868 case 'utf16le':
2869 case 'utf-16le':
2870 return utf16leSlice(this, start, end)
3af2954a 2871
ab78acc6
IC
2872 default:
2873 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2874 encoding = (encoding + '').toLowerCase()
2875 loweredCase = true
2876 }
3af2954a 2877 }
ab78acc6 2878}
3af2954a 2879
ab78acc6
IC
2880Buffer.prototype.toString = function toString () {
2881 var length = this.length | 0
2882 if (length === 0) return ''
2883 if (arguments.length === 0) return utf8Slice(this, 0, length)
2884 return slowToString.apply(this, arguments)
2885}
3af2954a 2886
ab78acc6
IC
2887Buffer.prototype.equals = function equals (b) {
2888 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2889 if (this === b) return true
2890 return Buffer.compare(this, b) === 0
2891}
3af2954a 2892
ab78acc6
IC
2893Buffer.prototype.inspect = function inspect () {
2894 var str = ''
2895 var max = exports.INSPECT_MAX_BYTES
2896 if (this.length > 0) {
2897 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2898 if (this.length > max) str += ' ... '
3af2954a 2899 }
ab78acc6
IC
2900 return '<Buffer ' + str + '>'
2901}
3af2954a 2902
ab78acc6
IC
2903Buffer.prototype.compare = function compare (b) {
2904 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2905 if (this === b) return 0
2906 return Buffer.compare(this, b)
2907}
3af2954a 2908
ab78acc6
IC
2909Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2910 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2911 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2912 byteOffset >>= 0
3af2954a 2913
ab78acc6
IC
2914 if (this.length === 0) return -1
2915 if (byteOffset >= this.length) return -1
3af2954a 2916
ab78acc6
IC
2917 // Negative offsets start from the end of the buffer
2918 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 2919
ab78acc6
IC
2920 if (typeof val === 'string') {
2921 if (val.length === 0) return -1 // special case: looking for empty string always fails
2922 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2923 }
ab78acc6
IC
2924 if (Buffer.isBuffer(val)) {
2925 return arrayIndexOf(this, val, byteOffset)
3af2954a 2926 }
ab78acc6
IC
2927 if (typeof val === 'number') {
2928 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2929 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2930 }
ab78acc6 2931 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
2932 }
2933
ab78acc6
IC
2934 function arrayIndexOf (arr, val, byteOffset) {
2935 var foundIndex = -1
2936 for (var i = 0; byteOffset + i < arr.length; i++) {
2937 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2938 if (foundIndex === -1) foundIndex = i
2939 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 2940 } else {
ab78acc6 2941 foundIndex = -1
3af2954a 2942 }
3af2954a 2943 }
ab78acc6
IC
2944 return -1
2945 }
3af2954a 2946
ab78acc6
IC
2947 throw new TypeError('val must be string, number or Buffer')
2948}
3af2954a 2949
ab78acc6
IC
2950// `get` is deprecated
2951Buffer.prototype.get = function get (offset) {
2952 console.log('.get() is deprecated. Access using array indexes instead.')
2953 return this.readUInt8(offset)
2954}
3af2954a 2955
ab78acc6
IC
2956// `set` is deprecated
2957Buffer.prototype.set = function set (v, offset) {
2958 console.log('.set() is deprecated. Access using array indexes instead.')
2959 return this.writeUInt8(v, offset)
2960}
3af2954a 2961
ab78acc6
IC
2962function hexWrite (buf, string, offset, length) {
2963 offset = Number(offset) || 0
2964 var remaining = buf.length - offset
2965 if (!length) {
2966 length = remaining
2967 } else {
2968 length = Number(length)
2969 if (length > remaining) {
2970 length = remaining
2971 }
2972 }
3af2954a 2973
ab78acc6
IC
2974 // must be an even number of digits
2975 var strLen = string.length
2976 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 2977
ab78acc6
IC
2978 if (length > strLen / 2) {
2979 length = strLen / 2
2980 }
2981 for (var i = 0; i < length; i++) {
2982 var parsed = parseInt(string.substr(i * 2, 2), 16)
2983 if (isNaN(parsed)) throw new Error('Invalid hex string')
2984 buf[offset + i] = parsed
3af2954a 2985 }
ab78acc6
IC
2986 return i
2987}
2988
2989function utf8Write (buf, string, offset, length) {
2990 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2991}
3af2954a 2992
ab78acc6
IC
2993function asciiWrite (buf, string, offset, length) {
2994 return blitBuffer(asciiToBytes(string), buf, offset, length)
2995}
3af2954a 2996
ab78acc6
IC
2997function binaryWrite (buf, string, offset, length) {
2998 return asciiWrite(buf, string, offset, length)
2999}
3af2954a 3000
ab78acc6
IC
3001function base64Write (buf, string, offset, length) {
3002 return blitBuffer(base64ToBytes(string), buf, offset, length)
3003}
3af2954a 3004
ab78acc6
IC
3005function ucs2Write (buf, string, offset, length) {
3006 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3007}
3af2954a 3008
ab78acc6
IC
3009Buffer.prototype.write = function write (string, offset, length, encoding) {
3010 // Buffer#write(string)
3011 if (offset === undefined) {
3012 encoding = 'utf8'
3013 length = this.length
3014 offset = 0
3015 // Buffer#write(string, encoding)
3016 } else if (length === undefined && typeof offset === 'string') {
3017 encoding = offset
3018 length = this.length
3019 offset = 0
3020 // Buffer#write(string, offset[, length][, encoding])
3021 } else if (isFinite(offset)) {
3022 offset = offset | 0
3023 if (isFinite(length)) {
3024 length = length | 0
3025 if (encoding === undefined) encoding = 'utf8'
3026 } else {
3027 encoding = length
3028 length = undefined
3029 }
3030 // legacy write(string, encoding, offset, length) - remove in v0.13
3031 } else {
3032 var swap = encoding
3033 encoding = offset
3034 offset = length | 0
3035 length = swap
3af2954a
IC
3036 }
3037
ab78acc6
IC
3038 var remaining = this.length - offset
3039 if (length === undefined || length > remaining) length = remaining
3af2954a 3040
ab78acc6
IC
3041 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3042 throw new RangeError('attempt to write outside buffer bounds')
3043 }
3af2954a 3044
ab78acc6 3045 if (!encoding) encoding = 'utf8'
3af2954a 3046
ab78acc6
IC
3047 var loweredCase = false
3048 for (;;) {
3049 switch (encoding) {
3050 case 'hex':
3051 return hexWrite(this, string, offset, length)
ebd8d4e8 3052
ab78acc6
IC
3053 case 'utf8':
3054 case 'utf-8':
3055 return utf8Write(this, string, offset, length)
ebd8d4e8 3056
ab78acc6
IC
3057 case 'ascii':
3058 return asciiWrite(this, string, offset, length)
ebd8d4e8 3059
ab78acc6
IC
3060 case 'binary':
3061 return binaryWrite(this, string, offset, length)
ebd8d4e8 3062
ab78acc6
IC
3063 case 'base64':
3064 // Warning: maxLength not taken into account in base64Write
3065 return base64Write(this, string, offset, length)
ebd8d4e8 3066
ab78acc6
IC
3067 case 'ucs2':
3068 case 'ucs-2':
3069 case 'utf16le':
3070 case 'utf-16le':
3071 return ucs2Write(this, string, offset, length)
ebd8d4e8 3072
ab78acc6
IC
3073 default:
3074 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3075 encoding = ('' + encoding).toLowerCase()
3076 loweredCase = true
3077 }
3078 }
3079}
212b1b46 3080
ab78acc6
IC
3081Buffer.prototype.toJSON = function toJSON () {
3082 return {
3083 type: 'Buffer',
3084 data: Array.prototype.slice.call(this._arr || this, 0)
3085 }
3086}
212b1b46 3087
ab78acc6
IC
3088function base64Slice (buf, start, end) {
3089 if (start === 0 && end === buf.length) {
3090 return base64.fromByteArray(buf)
3091 } else {
3092 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3093 }
ab78acc6
IC
3094}
3095
3096function utf8Slice (buf, start, end) {
3097 end = Math.min(buf.length, end)
3098 var firstByte
3099 var secondByte
3100 var thirdByte
3101 var fourthByte
3102 var bytesPerSequence
3103 var tempCodePoint
3104 var codePoint
3105 var res = []
3106 var i = start
3107
3108 for (; i < end; i += bytesPerSequence) {
3109 firstByte = buf[i]
3110 codePoint = 0xFFFD
3111
3112 if (firstByte > 0xEF) {
3113 bytesPerSequence = 4
3114 } else if (firstByte > 0xDF) {
3115 bytesPerSequence = 3
3116 } else if (firstByte > 0xBF) {
3117 bytesPerSequence = 2
3118 } else {
3119 bytesPerSequence = 1
3120 }
212b1b46 3121
ab78acc6
IC
3122 if (i + bytesPerSequence <= end) {
3123 switch (bytesPerSequence) {
3124 case 1:
3125 if (firstByte < 0x80) {
3126 codePoint = firstByte
3127 }
3128 break
3129 case 2:
3130 secondByte = buf[i + 1]
3131 if ((secondByte & 0xC0) === 0x80) {
3132 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3133 if (tempCodePoint > 0x7F) {
3134 codePoint = tempCodePoint
3135 }
3136 }
3137 break
3138 case 3:
3139 secondByte = buf[i + 1]
3140 thirdByte = buf[i + 2]
3141 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3142 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3143 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3144 codePoint = tempCodePoint
3145 }
3146 }
3147 break
3148 case 4:
3149 secondByte = buf[i + 1]
3150 thirdByte = buf[i + 2]
3151 fourthByte = buf[i + 3]
3152 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3153 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3154 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3155 codePoint = tempCodePoint
3156 }
3157 }
3158 }
3159 }
212b1b46 3160
ab78acc6
IC
3161 if (codePoint === 0xFFFD) {
3162 // we generated an invalid codePoint so make sure to only advance by 1 byte
3163 bytesPerSequence = 1
3164 } else if (codePoint > 0xFFFF) {
3165 // encode to utf16 (surrogate pair dance)
3166 codePoint -= 0x10000
3167 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3168 codePoint = 0xDC00 | codePoint & 0x3FF
3169 }
212b1b46 3170
ab78acc6 3171 res.push(codePoint)
3af2954a 3172 }
212b1b46 3173
ab78acc6
IC
3174 return String.fromCharCode.apply(String, res)
3175}
212b1b46 3176
ab78acc6
IC
3177function asciiSlice (buf, start, end) {
3178 var ret = ''
3179 end = Math.min(buf.length, end)
3180
3181 for (var i = start; i < end; i++) {
3182 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3183 }
ab78acc6
IC
3184 return ret
3185}
212b1b46 3186
ab78acc6
IC
3187function binarySlice (buf, start, end) {
3188 var ret = ''
3189 end = Math.min(buf.length, end)
212b1b46 3190
ab78acc6
IC
3191 for (var i = start; i < end; i++) {
3192 ret += String.fromCharCode(buf[i])
3193 }
3194 return ret
3195}
212b1b46 3196
ab78acc6
IC
3197function hexSlice (buf, start, end) {
3198 var len = buf.length
212b1b46 3199
ab78acc6
IC
3200 if (!start || start < 0) start = 0
3201 if (!end || end < 0 || end > len) end = len
212b1b46 3202
ab78acc6
IC
3203 var out = ''
3204 for (var i = start; i < end; i++) {
3205 out += toHex(buf[i])
3206 }
3207 return out
3208}
212b1b46 3209
ab78acc6
IC
3210function utf16leSlice (buf, start, end) {
3211 var bytes = buf.slice(start, end)
3212 var res = ''
3213 for (var i = 0; i < bytes.length; i += 2) {
3214 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3215 }
3216 return res
3217}
212b1b46 3218
ab78acc6
IC
3219Buffer.prototype.slice = function slice (start, end) {
3220 var len = this.length
3221 start = ~~start
3222 end = end === undefined ? len : ~~end
212b1b46 3223
ab78acc6
IC
3224 if (start < 0) {
3225 start += len
3226 if (start < 0) start = 0
3227 } else if (start > len) {
3228 start = len
3229 }
212b1b46 3230
ab78acc6
IC
3231 if (end < 0) {
3232 end += len
3233 if (end < 0) end = 0
3234 } else if (end > len) {
3235 end = len
3236 }
212b1b46 3237
ab78acc6 3238 if (end < start) end = start
212b1b46 3239
ab78acc6
IC
3240 var newBuf
3241 if (Buffer.TYPED_ARRAY_SUPPORT) {
3242 newBuf = Buffer._augment(this.subarray(start, end))
3243 } else {
3244 var sliceLen = end - start
3245 newBuf = new Buffer(sliceLen, undefined)
3246 for (var i = 0; i < sliceLen; i++) {
3247 newBuf[i] = this[i + start]
3af2954a
IC
3248 }
3249 }
212b1b46 3250
ab78acc6 3251 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3252
ab78acc6
IC
3253 return newBuf
3254}
ebd8d4e8 3255
ab78acc6
IC
3256/*
3257 * Need to make sure that buffer isn't trying to write out of bounds.
3258 */
3259function checkOffset (offset, ext, length) {
3260 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3261 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3262}
ebd8d4e8 3263
ab78acc6
IC
3264Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3265 offset = offset | 0
3266 byteLength = byteLength | 0
3267 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3268
ab78acc6
IC
3269 var val = this[offset]
3270 var mul = 1
3271 var i = 0
3272 while (++i < byteLength && (mul *= 0x100)) {
3273 val += this[offset + i] * mul
3274 }
3af2954a 3275
ab78acc6
IC
3276 return val
3277}
3af2954a 3278
ab78acc6
IC
3279Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3280 offset = offset | 0
3281 byteLength = byteLength | 0
3282 if (!noAssert) {
3283 checkOffset(offset, byteLength, this.length)
3284 }
3af2954a 3285
ab78acc6
IC
3286 var val = this[offset + --byteLength]
3287 var mul = 1
3288 while (byteLength > 0 && (mul *= 0x100)) {
3289 val += this[offset + --byteLength] * mul
3af2954a
IC
3290 }
3291
ab78acc6
IC
3292 return val
3293}
3af2954a 3294
ab78acc6
IC
3295Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3296 if (!noAssert) checkOffset(offset, 1, this.length)
3297 return this[offset]
3298}
3af2954a 3299
ab78acc6
IC
3300Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3301 if (!noAssert) checkOffset(offset, 2, this.length)
3302 return this[offset] | (this[offset + 1] << 8)
3303}
3af2954a 3304
ab78acc6
IC
3305Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3306 if (!noAssert) checkOffset(offset, 2, this.length)
3307 return (this[offset] << 8) | this[offset + 1]
3308}
ebd8d4e8 3309
ab78acc6
IC
3310Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3311 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3312
ab78acc6
IC
3313 return ((this[offset]) |
3314 (this[offset + 1] << 8) |
3315 (this[offset + 2] << 16)) +
3316 (this[offset + 3] * 0x1000000)
3317}
3af2954a 3318
ab78acc6
IC
3319Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3320 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3321
ab78acc6
IC
3322 return (this[offset] * 0x1000000) +
3323 ((this[offset + 1] << 16) |
3324 (this[offset + 2] << 8) |
3325 this[offset + 3])
3326}
ebd8d4e8 3327
ab78acc6
IC
3328Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3329 offset = offset | 0
3330 byteLength = byteLength | 0
3331 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3332
ab78acc6
IC
3333 var val = this[offset]
3334 var mul = 1
3335 var i = 0
3336 while (++i < byteLength && (mul *= 0x100)) {
3337 val += this[offset + i] * mul
ebd8d4e8 3338 }
ab78acc6 3339 mul *= 0x80
ebd8d4e8 3340
ab78acc6
IC
3341 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3342
3343 return val
ebd8d4e8
IC
3344}
3345
ab78acc6
IC
3346Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3347 offset = offset | 0
3348 byteLength = byteLength | 0
3349 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3350
ab78acc6
IC
3351 var i = byteLength
3352 var mul = 1
3353 var val = this[offset + --i]
3354 while (i > 0 && (mul *= 0x100)) {
3355 val += this[offset + --i] * mul
3356 }
3357 mul *= 0x80
ebd8d4e8 3358
ab78acc6 3359 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3360
ab78acc6
IC
3361 return val
3362}
ebd8d4e8 3363
ab78acc6
IC
3364Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3365 if (!noAssert) checkOffset(offset, 1, this.length)
3366 if (!(this[offset] & 0x80)) return (this[offset])
3367 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3368}
ab78acc6
IC
3369
3370Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3371 if (!noAssert) checkOffset(offset, 2, this.length)
3372 var val = this[offset] | (this[offset + 1] << 8)
3373 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3374}
ab78acc6
IC
3375
3376Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3377 if (!noAssert) checkOffset(offset, 2, this.length)
3378 var val = this[offset + 1] | (this[offset] << 8)
3379 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3380}
3381
ab78acc6
IC
3382Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3384
ab78acc6
IC
3385 return (this[offset]) |
3386 (this[offset + 1] << 8) |
3387 (this[offset + 2] << 16) |
3388 (this[offset + 3] << 24)
ebd8d4e8 3389}
ebd8d4e8 3390
ab78acc6
IC
3391Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3392 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3393
ab78acc6
IC
3394 return (this[offset] << 24) |
3395 (this[offset + 1] << 16) |
3396 (this[offset + 2] << 8) |
3397 (this[offset + 3])
ebd8d4e8
IC
3398}
3399
ab78acc6
IC
3400Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3401 if (!noAssert) checkOffset(offset, 4, this.length)
3402 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3403}
3404
ab78acc6
IC
3405Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3406 if (!noAssert) checkOffset(offset, 4, this.length)
3407 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3408}
3409
ab78acc6
IC
3410Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3411 if (!noAssert) checkOffset(offset, 8, this.length)
3412 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3413}
3414
ab78acc6
IC
3415Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3416 if (!noAssert) checkOffset(offset, 8, this.length)
3417 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3418}
3419
ab78acc6
IC
3420function checkInt (buf, value, offset, ext, max, min) {
3421 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3422 if (value > max || value < min) throw new RangeError('value is out of bounds')
3423 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3424}
3425
ab78acc6
IC
3426Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3427 value = +value
3428 offset = offset | 0
3429 byteLength = byteLength | 0
3430 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3431
ab78acc6
IC
3432 var mul = 1
3433 var i = 0
3434 this[offset] = value & 0xFF
3435 while (++i < byteLength && (mul *= 0x100)) {
3436 this[offset + i] = (value / mul) & 0xFF
3437 }
ebd8d4e8 3438
ab78acc6 3439 return offset + byteLength
ebd8d4e8
IC
3440}
3441
ab78acc6
IC
3442Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3443 value = +value
3444 offset = offset | 0
3445 byteLength = byteLength | 0
3446 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3447
ab78acc6
IC
3448 var i = byteLength - 1
3449 var mul = 1
3450 this[offset + i] = value & 0xFF
3451 while (--i >= 0 && (mul *= 0x100)) {
3452 this[offset + i] = (value / mul) & 0xFF
3453 }
ebd8d4e8 3454
ab78acc6 3455 return offset + byteLength
ebd8d4e8
IC
3456}
3457
ab78acc6
IC
3458Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3459 value = +value
3460 offset = offset | 0
3461 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3462 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3463 this[offset] = value
3464 return offset + 1
ebd8d4e8
IC
3465}
3466
ab78acc6
IC
3467function objectWriteUInt16 (buf, value, offset, littleEndian) {
3468 if (value < 0) value = 0xffff + value + 1
3469 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3470 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3471 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3472 }
ebd8d4e8
IC
3473}
3474
ab78acc6
IC
3475Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3476 value = +value
3477 offset = offset | 0
3478 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3479 if (Buffer.TYPED_ARRAY_SUPPORT) {
3480 this[offset] = value
3481 this[offset + 1] = (value >>> 8)
3482 } else {
3483 objectWriteUInt16(this, value, offset, true)
3484 }
3485 return offset + 2
ebd8d4e8
IC
3486}
3487
ab78acc6
IC
3488Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3489 value = +value
3490 offset = offset | 0
3491 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3492 if (Buffer.TYPED_ARRAY_SUPPORT) {
3493 this[offset] = (value >>> 8)
3494 this[offset + 1] = value
3495 } else {
3496 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3497 }
ab78acc6 3498 return offset + 2
ebd8d4e8
IC
3499}
3500
ab78acc6
IC
3501function objectWriteUInt32 (buf, value, offset, littleEndian) {
3502 if (value < 0) value = 0xffffffff + value + 1
3503 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3504 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3505 }
ebd8d4e8
IC
3506}
3507
ab78acc6
IC
3508Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3509 value = +value
3510 offset = offset | 0
3511 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3512 if (Buffer.TYPED_ARRAY_SUPPORT) {
3513 this[offset + 3] = (value >>> 24)
3514 this[offset + 2] = (value >>> 16)
3515 this[offset + 1] = (value >>> 8)
3516 this[offset] = value
3517 } else {
3518 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3519 }
ab78acc6 3520 return offset + 4
ebd8d4e8
IC
3521}
3522
ab78acc6
IC
3523Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3524 value = +value
3525 offset = offset | 0
3526 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3527 if (Buffer.TYPED_ARRAY_SUPPORT) {
3528 this[offset] = (value >>> 24)
3529 this[offset + 1] = (value >>> 16)
3530 this[offset + 2] = (value >>> 8)
3531 this[offset + 3] = value
3532 } else {
3533 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3534 }
ab78acc6
IC
3535 return offset + 4
3536}
3537
3538Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3539 value = +value
3540 offset = offset | 0
3541 if (!noAssert) {
3542 var limit = Math.pow(2, 8 * byteLength - 1)
3543
3544 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3545 }
ab78acc6
IC
3546
3547 var i = 0
3548 var mul = 1
3549 var sub = value < 0 ? 1 : 0
3550 this[offset] = value & 0xFF
3551 while (++i < byteLength && (mul *= 0x100)) {
3552 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3553 }
ebd8d4e8 3554
ab78acc6 3555 return offset + byteLength
ebd8d4e8
IC
3556}
3557
ab78acc6
IC
3558Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3559 value = +value
3560 offset = offset | 0
3561 if (!noAssert) {
3562 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3563
ab78acc6
IC
3564 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3565 }
ebd8d4e8 3566
ab78acc6
IC
3567 var i = byteLength - 1
3568 var mul = 1
3569 var sub = value < 0 ? 1 : 0
3570 this[offset + i] = value & 0xFF
3571 while (--i >= 0 && (mul *= 0x100)) {
3572 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3573 }
3574
3575 return offset + byteLength
ebd8d4e8
IC
3576}
3577
ab78acc6
IC
3578Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3579 value = +value
3580 offset = offset | 0
3581 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3582 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3583 if (value < 0) value = 0xff + value + 1
3584 this[offset] = value
3585 return offset + 1
ebd8d4e8
IC
3586}
3587
ab78acc6
IC
3588Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3589 value = +value
3590 offset = offset | 0
3591 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3592 if (Buffer.TYPED_ARRAY_SUPPORT) {
3593 this[offset] = value
3594 this[offset + 1] = (value >>> 8)
3595 } else {
3596 objectWriteUInt16(this, value, offset, true)
3597 }
3598 return offset + 2
ebd8d4e8
IC
3599}
3600
ab78acc6
IC
3601Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3602 value = +value
3603 offset = offset | 0
3604 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3605 if (Buffer.TYPED_ARRAY_SUPPORT) {
3606 this[offset] = (value >>> 8)
3607 this[offset + 1] = value
3608 } else {
3609 objectWriteUInt16(this, value, offset, false)
3610 }
3611 return offset + 2
ebd8d4e8
IC
3612}
3613
ab78acc6
IC
3614Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3615 value = +value
3616 offset = offset | 0
3617 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3618 if (Buffer.TYPED_ARRAY_SUPPORT) {
3619 this[offset] = value
3620 this[offset + 1] = (value >>> 8)
3621 this[offset + 2] = (value >>> 16)
3622 this[offset + 3] = (value >>> 24)
3623 } else {
3624 objectWriteUInt32(this, value, offset, true)
3625 }
3626 return offset + 4
3627}
3628
3629Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3630 value = +value
3631 offset = offset | 0
3632 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3633 if (value < 0) value = 0xffffffff + value + 1
3634 if (Buffer.TYPED_ARRAY_SUPPORT) {
3635 this[offset] = (value >>> 24)
3636 this[offset + 1] = (value >>> 16)
3637 this[offset + 2] = (value >>> 8)
3638 this[offset + 3] = value
3639 } else {
3640 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3641 }
ab78acc6 3642 return offset + 4
ebd8d4e8
IC
3643}
3644
ab78acc6
IC
3645function checkIEEE754 (buf, value, offset, ext, max, min) {
3646 if (value > max || value < min) throw new RangeError('value is out of bounds')
3647 if (offset + ext > buf.length) throw new RangeError('index out of range')
3648 if (offset < 0) throw new RangeError('index out of range')
3649}
ebd8d4e8 3650
ab78acc6
IC
3651function writeFloat (buf, value, offset, littleEndian, noAssert) {
3652 if (!noAssert) {
3653 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3654 }
3655 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3656 return offset + 4
3657}
ebd8d4e8 3658
ab78acc6
IC
3659Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3660 return writeFloat(this, value, offset, true, noAssert)
3661}
ebd8d4e8 3662
ab78acc6
IC
3663Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3664 return writeFloat(this, value, offset, false, noAssert)
3665}
ebd8d4e8 3666
ab78acc6
IC
3667function writeDouble (buf, value, offset, littleEndian, noAssert) {
3668 if (!noAssert) {
3669 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3670 }
ab78acc6
IC
3671 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3672 return offset + 8
ebd8d4e8
IC
3673}
3674
ab78acc6
IC
3675Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3676 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3677}
3678
ab78acc6
IC
3679Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3680 return writeDouble(this, value, offset, false, noAssert)
3681}
ebd8d4e8 3682
ab78acc6
IC
3683// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3684Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3685 if (!start) start = 0
3686 if (!end && end !== 0) end = this.length
3687 if (targetStart >= target.length) targetStart = target.length
3688 if (!targetStart) targetStart = 0
3689 if (end > 0 && end < start) end = start
3690
3691 // Copy 0 bytes; we're done
3692 if (end === start) return 0
3693 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3694
ab78acc6
IC
3695 // Fatal error conditions
3696 if (targetStart < 0) {
3697 throw new RangeError('targetStart out of bounds')
3698 }
3699 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3700 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3701
ab78acc6
IC
3702 // Are we oob?
3703 if (end > this.length) end = this.length
3704 if (target.length - targetStart < end - start) {
3705 end = target.length - targetStart + start
3706 }
ebd8d4e8 3707
ab78acc6
IC
3708 var len = end - start
3709 var i
ebd8d4e8 3710
ab78acc6
IC
3711 if (this === target && start < targetStart && targetStart < end) {
3712 // descending copy from end
3713 for (i = len - 1; i >= 0; i--) {
3714 target[i + targetStart] = this[i + start]
3715 }
3716 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3717 // ascending copy from start
3718 for (i = 0; i < len; i++) {
3719 target[i + targetStart] = this[i + start]
3720 }
3721 } else {
3722 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3723 }
ebd8d4e8 3724
ab78acc6
IC
3725 return len
3726}
ebd8d4e8 3727
ab78acc6
IC
3728// fill(value, start=0, end=buffer.length)
3729Buffer.prototype.fill = function fill (value, start, end) {
3730 if (!value) value = 0
3731 if (!start) start = 0
3732 if (!end) end = this.length
ebd8d4e8 3733
ab78acc6 3734 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3735
ab78acc6
IC
3736 // Fill 0 bytes; we're done
3737 if (end === start) return
3738 if (this.length === 0) return
ebd8d4e8 3739
ab78acc6
IC
3740 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3741 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3742
ab78acc6
IC
3743 var i
3744 if (typeof value === 'number') {
3745 for (i = start; i < end; i++) {
3746 this[i] = value
ebd8d4e8 3747 }
ab78acc6
IC
3748 } else {
3749 var bytes = utf8ToBytes(value.toString())
3750 var len = bytes.length
3751 for (i = start; i < end; i++) {
3752 this[i] = bytes[i % len]
ebd8d4e8
IC
3753 }
3754 }
ebd8d4e8 3755
ab78acc6 3756 return this
ebd8d4e8
IC
3757}
3758
ab78acc6
IC
3759/**
3760 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3761 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3762 */
3763Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3764 if (typeof Uint8Array !== 'undefined') {
3765 if (Buffer.TYPED_ARRAY_SUPPORT) {
3766 return (new Buffer(this)).buffer
3767 } else {
3768 var buf = new Uint8Array(this.length)
3769 for (var i = 0, len = buf.length; i < len; i += 1) {
3770 buf[i] = this[i]
ebd8d4e8 3771 }
ab78acc6 3772 return buf.buffer
ebd8d4e8 3773 }
ab78acc6
IC
3774 } else {
3775 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 3776 }
ebd8d4e8
IC
3777}
3778
ab78acc6
IC
3779// HELPER FUNCTIONS
3780// ================
ebd8d4e8 3781
ab78acc6 3782var BP = Buffer.prototype
ebd8d4e8 3783
ab78acc6
IC
3784/**
3785 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3786 */
3787Buffer._augment = function _augment (arr) {
3788 arr.constructor = Buffer
3789 arr._isBuffer = true
ebd8d4e8 3790
ab78acc6
IC
3791 // save reference to original Uint8Array set method before overwriting
3792 arr._set = arr.set
ebd8d4e8 3793
ab78acc6
IC
3794 // deprecated
3795 arr.get = BP.get
3796 arr.set = BP.set
ebd8d4e8 3797
ab78acc6
IC
3798 arr.write = BP.write
3799 arr.toString = BP.toString
3800 arr.toLocaleString = BP.toString
3801 arr.toJSON = BP.toJSON
3802 arr.equals = BP.equals
3803 arr.compare = BP.compare
3804 arr.indexOf = BP.indexOf
3805 arr.copy = BP.copy
3806 arr.slice = BP.slice
3807 arr.readUIntLE = BP.readUIntLE
3808 arr.readUIntBE = BP.readUIntBE
3809 arr.readUInt8 = BP.readUInt8
3810 arr.readUInt16LE = BP.readUInt16LE
3811 arr.readUInt16BE = BP.readUInt16BE
3812 arr.readUInt32LE = BP.readUInt32LE
3813 arr.readUInt32BE = BP.readUInt32BE
3814 arr.readIntLE = BP.readIntLE
3815 arr.readIntBE = BP.readIntBE
3816 arr.readInt8 = BP.readInt8
3817 arr.readInt16LE = BP.readInt16LE
3818 arr.readInt16BE = BP.readInt16BE
3819 arr.readInt32LE = BP.readInt32LE
3820 arr.readInt32BE = BP.readInt32BE
3821 arr.readFloatLE = BP.readFloatLE
3822 arr.readFloatBE = BP.readFloatBE
3823 arr.readDoubleLE = BP.readDoubleLE
3824 arr.readDoubleBE = BP.readDoubleBE
3825 arr.writeUInt8 = BP.writeUInt8
3826 arr.writeUIntLE = BP.writeUIntLE
3827 arr.writeUIntBE = BP.writeUIntBE
3828 arr.writeUInt16LE = BP.writeUInt16LE
3829 arr.writeUInt16BE = BP.writeUInt16BE
3830 arr.writeUInt32LE = BP.writeUInt32LE
3831 arr.writeUInt32BE = BP.writeUInt32BE
3832 arr.writeIntLE = BP.writeIntLE
3833 arr.writeIntBE = BP.writeIntBE
3834 arr.writeInt8 = BP.writeInt8
3835 arr.writeInt16LE = BP.writeInt16LE
3836 arr.writeInt16BE = BP.writeInt16BE
3837 arr.writeInt32LE = BP.writeInt32LE
3838 arr.writeInt32BE = BP.writeInt32BE
3839 arr.writeFloatLE = BP.writeFloatLE
3840 arr.writeFloatBE = BP.writeFloatBE
3841 arr.writeDoubleLE = BP.writeDoubleLE
3842 arr.writeDoubleBE = BP.writeDoubleBE
3843 arr.fill = BP.fill
3844 arr.inspect = BP.inspect
3845 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 3846
ab78acc6 3847 return arr
ebd8d4e8
IC
3848}
3849
ab78acc6 3850var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 3851
ab78acc6
IC
3852function base64clean (str) {
3853 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3854 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3855 // Node converts strings with length < 2 to ''
3856 if (str.length < 2) return ''
3857 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3858 while (str.length % 4 !== 0) {
3859 str = str + '='
3860 }
3861 return str
ebd8d4e8
IC
3862}
3863
ab78acc6
IC
3864function stringtrim (str) {
3865 if (str.trim) return str.trim()
3866 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
3867}
3868
ab78acc6
IC
3869function toHex (n) {
3870 if (n < 16) return '0' + n.toString(16)
3871 return n.toString(16)
ebd8d4e8
IC
3872}
3873
ab78acc6
IC
3874function utf8ToBytes (string, units) {
3875 units = units || Infinity
3876 var codePoint
3877 var length = string.length
3878 var leadSurrogate = null
3879 var bytes = []
ebd8d4e8 3880
ab78acc6
IC
3881 for (var i = 0; i < length; i++) {
3882 codePoint = string.charCodeAt(i)
ebd8d4e8 3883
ab78acc6
IC
3884 // is surrogate component
3885 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3886 // last char was a lead
3887 if (!leadSurrogate) {
3888 // no lead yet
3889 if (codePoint > 0xDBFF) {
3890 // unexpected trail
3891 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3892 continue
ebd8d4e8 3893
ab78acc6
IC
3894 } else if (i + 1 === length) {
3895 // unpaired lead
3896 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3897 continue
3898 }
ebd8d4e8 3899
ab78acc6
IC
3900 // valid lead
3901 leadSurrogate = codePoint
ebd8d4e8 3902
ab78acc6
IC
3903 continue
3904 }
ebd8d4e8 3905
ab78acc6
IC
3906 // 2 leads in a row
3907 if (codePoint < 0xDC00) {
3908 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3909 leadSurrogate = codePoint
3910 continue
3911 }
ebd8d4e8 3912
ab78acc6
IC
3913 // valid surrogate pair
3914 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3915
3916 } else if (leadSurrogate) {
3917 // valid bmp char, but last char was a lead
3918 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3919 }
3920
3921 leadSurrogate = null
3922
3923 // encode utf8
3924 if (codePoint < 0x80) {
3925 if ((units -= 1) < 0) break
3926 bytes.push(codePoint)
3927 } else if (codePoint < 0x800) {
3928 if ((units -= 2) < 0) break
3929 bytes.push(
3930 codePoint >> 0x6 | 0xC0,
3931 codePoint & 0x3F | 0x80
3932 )
3933 } else if (codePoint < 0x10000) {
3934 if ((units -= 3) < 0) break
3935 bytes.push(
3936 codePoint >> 0xC | 0xE0,
3937 codePoint >> 0x6 & 0x3F | 0x80,
3938 codePoint & 0x3F | 0x80
3939 )
3940 } else if (codePoint < 0x110000) {
3941 if ((units -= 4) < 0) break
3942 bytes.push(
3943 codePoint >> 0x12 | 0xF0,
3944 codePoint >> 0xC & 0x3F | 0x80,
3945 codePoint >> 0x6 & 0x3F | 0x80,
3946 codePoint & 0x3F | 0x80
3947 )
3948 } else {
3949 throw new Error('Invalid code point')
ebd8d4e8 3950 }
ebd8d4e8 3951 }
ab78acc6
IC
3952
3953 return bytes
3954}
3955
3956function asciiToBytes (str) {
3957 var byteArray = []
3958 for (var i = 0; i < str.length; i++) {
3959 // Node's code seems to be doing this and not & 0x7F..
3960 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 3961 }
ab78acc6 3962 return byteArray
ebd8d4e8
IC
3963}
3964
ab78acc6
IC
3965function utf16leToBytes (str, units) {
3966 var c, hi, lo
3967 var byteArray = []
3968 for (var i = 0; i < str.length; i++) {
3969 if ((units -= 2) < 0) break
ebd8d4e8 3970
ab78acc6
IC
3971 c = str.charCodeAt(i)
3972 hi = c >> 8
3973 lo = c % 256
3974 byteArray.push(lo)
3975 byteArray.push(hi)
3976 }
ebd8d4e8 3977
ab78acc6
IC
3978 return byteArray
3979}
ebd8d4e8 3980
ab78acc6
IC
3981function base64ToBytes (str) {
3982 return base64.toByteArray(base64clean(str))
3983}
ebd8d4e8 3984
ab78acc6
IC
3985function blitBuffer (src, dst, offset, length) {
3986 for (var i = 0; i < length; i++) {
3987 if ((i + offset >= dst.length) || (i >= src.length)) break
3988 dst[i + offset] = src[i]
3989 }
3990 return i
3991}
3992
3993},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
3994var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3995
3996;(function (exports) {
3997 'use strict';
3998
3999 var Arr = (typeof Uint8Array !== 'undefined')
4000 ? Uint8Array
4001 : Array
ebd8d4e8 4002
ab78acc6
IC
4003 var PLUS = '+'.charCodeAt(0)
4004 var SLASH = '/'.charCodeAt(0)
4005 var NUMBER = '0'.charCodeAt(0)
4006 var LOWER = 'a'.charCodeAt(0)
4007 var UPPER = 'A'.charCodeAt(0)
4008 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4009 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4010
ab78acc6
IC
4011 function decode (elt) {
4012 var code = elt.charCodeAt(0)
4013 if (code === PLUS ||
4014 code === PLUS_URL_SAFE)
4015 return 62 // '+'
4016 if (code === SLASH ||
4017 code === SLASH_URL_SAFE)
4018 return 63 // '/'
4019 if (code < NUMBER)
4020 return -1 //no match
4021 if (code < NUMBER + 10)
4022 return code - NUMBER + 26 + 26
4023 if (code < UPPER + 26)
4024 return code - UPPER
4025 if (code < LOWER + 26)
4026 return code - LOWER + 26
4027 }
ebd8d4e8 4028
ab78acc6
IC
4029 function b64ToByteArray (b64) {
4030 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4031
ab78acc6
IC
4032 if (b64.length % 4 > 0) {
4033 throw new Error('Invalid string. Length must be a multiple of 4')
4034 }
ebd8d4e8 4035
ab78acc6
IC
4036 // the number of equal signs (place holders)
4037 // if there are two placeholders, than the two characters before it
4038 // represent one byte
4039 // if there is only one, then the three characters before it represent 2 bytes
4040 // this is just a cheap hack to not do indexOf twice
4041 var len = b64.length
4042 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4043
ab78acc6
IC
4044 // base64 is 4/3 + up to two characters of the original data
4045 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4046
ab78acc6
IC
4047 // if there are placeholders, only get up to the last complete 4 chars
4048 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4049
ab78acc6 4050 var L = 0
ebd8d4e8 4051
ab78acc6
IC
4052 function push (v) {
4053 arr[L++] = v
4054 }
ebd8d4e8 4055
ab78acc6
IC
4056 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4057 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4058 push((tmp & 0xFF0000) >> 16)
4059 push((tmp & 0xFF00) >> 8)
4060 push(tmp & 0xFF)
4061 }
ebd8d4e8 4062
ab78acc6
IC
4063 if (placeHolders === 2) {
4064 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4065 push(tmp & 0xFF)
4066 } else if (placeHolders === 1) {
4067 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4068 push((tmp >> 8) & 0xFF)
4069 push(tmp & 0xFF)
4070 }
ebd8d4e8 4071
ab78acc6
IC
4072 return arr
4073 }
ebd8d4e8 4074
ab78acc6
IC
4075 function uint8ToBase64 (uint8) {
4076 var i,
4077 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4078 output = "",
4079 temp, length
ebd8d4e8 4080
ab78acc6
IC
4081 function encode (num) {
4082 return lookup.charAt(num)
4083 }
ebd8d4e8 4084
ab78acc6
IC
4085 function tripletToBase64 (num) {
4086 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4087 }
ebd8d4e8 4088
ab78acc6
IC
4089 // go through the array every three bytes, we'll deal with trailing stuff later
4090 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4091 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4092 output += tripletToBase64(temp)
4093 }
ebd8d4e8 4094
ab78acc6
IC
4095 // pad the end with zeros, but make sure to not forget the extra bytes
4096 switch (extraBytes) {
4097 case 1:
4098 temp = uint8[uint8.length - 1]
4099 output += encode(temp >> 2)
4100 output += encode((temp << 4) & 0x3F)
4101 output += '=='
4102 break
4103 case 2:
4104 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4105 output += encode(temp >> 10)
4106 output += encode((temp >> 4) & 0x3F)
4107 output += encode((temp << 2) & 0x3F)
4108 output += '='
4109 break
4110 }
ebd8d4e8 4111
ab78acc6
IC
4112 return output
4113 }
ebd8d4e8 4114
ab78acc6
IC
4115 exports.toByteArray = b64ToByteArray
4116 exports.fromByteArray = uint8ToBase64
4117}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4118
ab78acc6
IC
4119},{}],9:[function(require,module,exports){
4120exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4121 var e, m
4122 var eLen = nBytes * 8 - mLen - 1
4123 var eMax = (1 << eLen) - 1
4124 var eBias = eMax >> 1
4125 var nBits = -7
4126 var i = isLE ? (nBytes - 1) : 0
4127 var d = isLE ? -1 : 1
4128 var s = buffer[offset + i]
4129
4130 i += d
4131
4132 e = s & ((1 << (-nBits)) - 1)
4133 s >>= (-nBits)
4134 nBits += eLen
4135 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4136
4137 m = e & ((1 << (-nBits)) - 1)
4138 e >>= (-nBits)
4139 nBits += mLen
4140 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4141
ab78acc6
IC
4142 if (e === 0) {
4143 e = 1 - eBias
4144 } else if (e === eMax) {
4145 return m ? NaN : ((s ? -1 : 1) * Infinity)
4146 } else {
4147 m = m + Math.pow(2, mLen)
4148 e = e - eBias
ebd8d4e8 4149 }
ab78acc6 4150 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4151}
4152
ab78acc6
IC
4153exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4154 var e, m, c
4155 var eLen = nBytes * 8 - mLen - 1
4156 var eMax = (1 << eLen) - 1
4157 var eBias = eMax >> 1
4158 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4159 var i = isLE ? 0 : (nBytes - 1)
4160 var d = isLE ? 1 : -1
4161 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4162
ab78acc6 4163 value = Math.abs(value)
ebd8d4e8 4164
ab78acc6
IC
4165 if (isNaN(value) || value === Infinity) {
4166 m = isNaN(value) ? 1 : 0
4167 e = eMax
4168 } else {
4169 e = Math.floor(Math.log(value) / Math.LN2)
4170 if (value * (c = Math.pow(2, -e)) < 1) {
4171 e--
4172 c *= 2
ebd8d4e8 4173 }
ab78acc6
IC
4174 if (e + eBias >= 1) {
4175 value += rt / c
4176 } else {
4177 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4178 }
ab78acc6
IC
4179 if (value * c >= 2) {
4180 e++
4181 c /= 2
ebd8d4e8 4182 }
ab78acc6
IC
4183
4184 if (e + eBias >= eMax) {
4185 m = 0
4186 e = eMax
4187 } else if (e + eBias >= 1) {
4188 m = (value * c - 1) * Math.pow(2, mLen)
4189 e = e + eBias
4190 } else {
4191 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4192 e = 0
ebd8d4e8
IC
4193 }
4194 }
ebd8d4e8 4195
ab78acc6 4196 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4197
ab78acc6
IC
4198 e = (e << mLen) | m
4199 eLen += mLen
4200 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4201
ab78acc6
IC
4202 buffer[offset + i - d] |= s * 128
4203}
ebd8d4e8 4204
ab78acc6 4205},{}],10:[function(require,module,exports){
ebd8d4e8 4206
ab78acc6
IC
4207/**
4208 * isArray
4209 */
ebd8d4e8 4210
ab78acc6 4211var isArray = Array.isArray;
ebd8d4e8
IC
4212
4213/**
ab78acc6 4214 * toString
ebd8d4e8 4215 */
ebd8d4e8 4216
ab78acc6 4217var str = Object.prototype.toString;
ebd8d4e8
IC
4218
4219/**
ab78acc6
IC
4220 * Whether or not the given `val`
4221 * is an array.
ebd8d4e8 4222 *
ab78acc6
IC
4223 * example:
4224 *
4225 * isArray([]);
4226 * // > true
4227 * isArray(arguments);
4228 * // > false
4229 * isArray('');
4230 * // > false
4231 *
4232 * @param {mixed} val
4233 * @return {bool}
ebd8d4e8 4234 */
ebd8d4e8 4235
ab78acc6
IC
4236module.exports = isArray || function (val) {
4237 return !! val && '[object Array]' == str.call(val);
4238};
4239
4240},{}],11:[function(require,module,exports){
4241// Copyright Joyent, Inc. and other Node contributors.
4242//
4243// Permission is hereby granted, free of charge, to any person obtaining a
4244// copy of this software and associated documentation files (the
4245// "Software"), to deal in the Software without restriction, including
4246// without limitation the rights to use, copy, modify, merge, publish,
4247// distribute, sublicense, and/or sell copies of the Software, and to permit
4248// persons to whom the Software is furnished to do so, subject to the
4249// following conditions:
4250//
4251// The above copyright notice and this permission notice shall be included
4252// in all copies or substantial portions of the Software.
4253//
4254// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4255// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4256// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4257// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4258// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4259// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4260// USE OR OTHER DEALINGS IN THE SOFTWARE.
4261
4262function EventEmitter() {
4263 this._events = this._events || {};
4264 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4265}
ab78acc6 4266module.exports = EventEmitter;
ebd8d4e8 4267
ab78acc6
IC
4268// Backwards-compat with node 0.10.x
4269EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4270
ab78acc6
IC
4271EventEmitter.prototype._events = undefined;
4272EventEmitter.prototype._maxListeners = undefined;
4273
4274// By default EventEmitters will print a warning if more than 10 listeners are
4275// added to it. This is a useful default which helps finding memory leaks.
4276EventEmitter.defaultMaxListeners = 10;
4277
4278// Obviously not all Emitters should be limited to 10. This function allows
4279// that to be increased. Set to zero for unlimited.
4280EventEmitter.prototype.setMaxListeners = function(n) {
4281 if (!isNumber(n) || n < 0 || isNaN(n))
4282 throw TypeError('n must be a positive number');
4283 this._maxListeners = n;
4284 return this;
4285};
4286
4287EventEmitter.prototype.emit = function(type) {
4288 var er, handler, len, args, i, listeners;
4289
4290 if (!this._events)
4291 this._events = {};
4292
4293 // If there is no 'error' event listener then throw.
4294 if (type === 'error') {
4295 if (!this._events.error ||
4296 (isObject(this._events.error) && !this._events.error.length)) {
4297 er = arguments[1];
4298 if (er instanceof Error) {
4299 throw er; // Unhandled 'error' event
4300 }
4301 throw TypeError('Uncaught, unspecified "error" event.');
4302 }
4303 }
4304
4305 handler = this._events[type];
4306
4307 if (isUndefined(handler))
4308 return false;
4309
4310 if (isFunction(handler)) {
4311 switch (arguments.length) {
4312 // fast cases
4313 case 1:
4314 handler.call(this);
4315 break;
4316 case 2:
4317 handler.call(this, arguments[1]);
4318 break;
4319 case 3:
4320 handler.call(this, arguments[1], arguments[2]);
4321 break;
4322 // slower
4323 default:
4324 len = arguments.length;
4325 args = new Array(len - 1);
4326 for (i = 1; i < len; i++)
4327 args[i - 1] = arguments[i];
4328 handler.apply(this, args);
4329 }
4330 } else if (isObject(handler)) {
4331 len = arguments.length;
4332 args = new Array(len - 1);
4333 for (i = 1; i < len; i++)
4334 args[i - 1] = arguments[i];
ebd8d4e8 4335
ab78acc6
IC
4336 listeners = handler.slice();
4337 len = listeners.length;
4338 for (i = 0; i < len; i++)
4339 listeners[i].apply(this, args);
ebd8d4e8
IC
4340 }
4341
ab78acc6
IC
4342 return true;
4343};
ebd8d4e8 4344
ab78acc6
IC
4345EventEmitter.prototype.addListener = function(type, listener) {
4346 var m;
ebd8d4e8 4347
ab78acc6
IC
4348 if (!isFunction(listener))
4349 throw TypeError('listener must be a function');
ebd8d4e8 4350
ab78acc6
IC
4351 if (!this._events)
4352 this._events = {};
ebd8d4e8 4353
ab78acc6
IC
4354 // To avoid recursion in the case that type === "newListener"! Before
4355 // adding it to the listeners, first emit "newListener".
4356 if (this._events.newListener)
4357 this.emit('newListener', type,
4358 isFunction(listener.listener) ?
4359 listener.listener : listener);
ebd8d4e8 4360
ab78acc6
IC
4361 if (!this._events[type])
4362 // Optimize the case of one listener. Don't need the extra array object.
4363 this._events[type] = listener;
4364 else if (isObject(this._events[type]))
4365 // If we've already got an array, just append.
4366 this._events[type].push(listener);
4367 else
4368 // Adding the second element, need to change to array.
4369 this._events[type] = [this._events[type], listener];
4370
4371 // Check for listener leak
4372 if (isObject(this._events[type]) && !this._events[type].warned) {
4373 var m;
4374 if (!isUndefined(this._maxListeners)) {
4375 m = this._maxListeners;
4376 } else {
4377 m = EventEmitter.defaultMaxListeners;
4378 }
4379
4380 if (m && m > 0 && this._events[type].length > m) {
4381 this._events[type].warned = true;
4382 console.error('(node) warning: possible EventEmitter memory ' +
4383 'leak detected. %d listeners added. ' +
4384 'Use emitter.setMaxListeners() to increase limit.',
4385 this._events[type].length);
4386 if (typeof console.trace === 'function') {
4387 // not supported in IE 10
4388 console.trace();
4389 }
4390 }
4391 }
ebd8d4e8 4392
ab78acc6
IC
4393 return this;
4394};
ebd8d4e8 4395
ab78acc6 4396EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4397
ab78acc6
IC
4398EventEmitter.prototype.once = function(type, listener) {
4399 if (!isFunction(listener))
4400 throw TypeError('listener must be a function');
ebd8d4e8 4401
ab78acc6 4402 var fired = false;
ebd8d4e8 4403
ab78acc6
IC
4404 function g() {
4405 this.removeListener(type, g);
ebd8d4e8 4406
ab78acc6
IC
4407 if (!fired) {
4408 fired = true;
4409 listener.apply(this, arguments);
4410 }
4411 }
ebd8d4e8 4412
ab78acc6
IC
4413 g.listener = listener;
4414 this.on(type, g);
ebd8d4e8 4415
ab78acc6
IC
4416 return this;
4417};
ebd8d4e8 4418
ab78acc6
IC
4419// emits a 'removeListener' event iff the listener was removed
4420EventEmitter.prototype.removeListener = function(type, listener) {
4421 var list, position, length, i;
ebd8d4e8 4422
ab78acc6
IC
4423 if (!isFunction(listener))
4424 throw TypeError('listener must be a function');
ebd8d4e8 4425
ab78acc6
IC
4426 if (!this._events || !this._events[type])
4427 return this;
ebd8d4e8 4428
ab78acc6
IC
4429 list = this._events[type];
4430 length = list.length;
4431 position = -1;
4432
4433 if (list === listener ||
4434 (isFunction(list.listener) && list.listener === listener)) {
4435 delete this._events[type];
4436 if (this._events.removeListener)
4437 this.emit('removeListener', type, listener);
4438
4439 } else if (isObject(list)) {
4440 for (i = length; i-- > 0;) {
4441 if (list[i] === listener ||
4442 (list[i].listener && list[i].listener === listener)) {
4443 position = i;
4444 break;
ebd8d4e8 4445 }
ab78acc6 4446 }
ebd8d4e8 4447
ab78acc6
IC
4448 if (position < 0)
4449 return this;
4450
4451 if (list.length === 1) {
4452 list.length = 0;
4453 delete this._events[type];
4454 } else {
4455 list.splice(position, 1);
ebd8d4e8 4456 }
ab78acc6
IC
4457
4458 if (this._events.removeListener)
4459 this.emit('removeListener', type, listener);
ebd8d4e8 4460 }
ab78acc6
IC
4461
4462 return this;
ebd8d4e8
IC
4463};
4464
ab78acc6
IC
4465EventEmitter.prototype.removeAllListeners = function(type) {
4466 var key, listeners;
ebd8d4e8 4467
ab78acc6
IC
4468 if (!this._events)
4469 return this;
4470
4471 // not listening for removeListener, no need to emit
4472 if (!this._events.removeListener) {
4473 if (arguments.length === 0)
4474 this._events = {};
4475 else if (this._events[type])
4476 delete this._events[type];
4477 return this;
ebd8d4e8 4478 }
ab78acc6
IC
4479
4480 // emit removeListener for all listeners on all events
4481 if (arguments.length === 0) {
4482 for (key in this._events) {
4483 if (key === 'removeListener') continue;
4484 this.removeAllListeners(key);
4485 }
4486 this.removeAllListeners('removeListener');
4487 this._events = {};
4488 return this;
ebd8d4e8 4489 }
ebd8d4e8 4490
ab78acc6
IC
4491 listeners = this._events[type];
4492
4493 if (isFunction(listeners)) {
4494 this.removeListener(type, listeners);
ebd8d4e8 4495 } else {
ab78acc6
IC
4496 // LIFO order
4497 while (listeners.length)
4498 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4499 }
ab78acc6 4500 delete this._events[type];
ebd8d4e8 4501
ab78acc6
IC
4502 return this;
4503};
ebd8d4e8 4504
ab78acc6
IC
4505EventEmitter.prototype.listeners = function(type) {
4506 var ret;
4507 if (!this._events || !this._events[type])
4508 ret = [];
4509 else if (isFunction(this._events[type]))
4510 ret = [this._events[type]];
4511 else
4512 ret = this._events[type].slice();
4513 return ret;
4514};
ebd8d4e8 4515
ab78acc6
IC
4516EventEmitter.listenerCount = function(emitter, type) {
4517 var ret;
4518 if (!emitter._events || !emitter._events[type])
4519 ret = 0;
4520 else if (isFunction(emitter._events[type]))
4521 ret = 1;
4522 else
4523 ret = emitter._events[type].length;
4524 return ret;
4525};
ebd8d4e8 4526
ab78acc6
IC
4527function isFunction(arg) {
4528 return typeof arg === 'function';
ebd8d4e8
IC
4529}
4530
ab78acc6
IC
4531function isNumber(arg) {
4532 return typeof arg === 'number';
4533}
ebd8d4e8 4534
ab78acc6
IC
4535function isObject(arg) {
4536 return typeof arg === 'object' && arg !== null;
4537}
ebd8d4e8 4538
ab78acc6
IC
4539function isUndefined(arg) {
4540 return arg === void 0;
ebd8d4e8 4541}
ebd8d4e8 4542
ab78acc6
IC
4543},{}],12:[function(require,module,exports){
4544if (typeof Object.create === 'function') {
4545 // implementation from standard node.js 'util' module
4546 module.exports = function inherits(ctor, superCtor) {
4547 ctor.super_ = superCtor
4548 ctor.prototype = Object.create(superCtor.prototype, {
4549 constructor: {
4550 value: ctor,
4551 enumerable: false,
4552 writable: true,
4553 configurable: true
4554 }
4555 });
4556 };
4557} else {
4558 // old school shim for old browsers
4559 module.exports = function inherits(ctor, superCtor) {
4560 ctor.super_ = superCtor
4561 var TempCtor = function () {}
4562 TempCtor.prototype = superCtor.prototype
4563 ctor.prototype = new TempCtor()
4564 ctor.prototype.constructor = ctor
4565 }
4566}
ebd8d4e8 4567
ab78acc6
IC
4568},{}],13:[function(require,module,exports){
4569module.exports = Array.isArray || function (arr) {
4570 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4571};
4572
ab78acc6
IC
4573},{}],14:[function(require,module,exports){
4574// shim for using process in browser
ebd8d4e8 4575
ab78acc6
IC
4576var process = module.exports = {};
4577var queue = [];
4578var draining = false;
4579var currentQueue;
4580var queueIndex = -1;
4581
4582function cleanUpNextTick() {
4583 draining = false;
4584 if (currentQueue.length) {
4585 queue = currentQueue.concat(queue);
4586 } else {
4587 queueIndex = -1;
4588 }
4589 if (queue.length) {
4590 drainQueue();
4591 }
4592}
ebd8d4e8 4593
ab78acc6
IC
4594function drainQueue() {
4595 if (draining) {
4596 return;
4597 }
4598 var timeout = setTimeout(cleanUpNextTick);
4599 draining = true;
ebd8d4e8 4600
ab78acc6
IC
4601 var len = queue.length;
4602 while(len) {
4603 currentQueue = queue;
4604 queue = [];
4605 while (++queueIndex < len) {
4606 currentQueue[queueIndex].run();
4607 }
4608 queueIndex = -1;
4609 len = queue.length;
4610 }
4611 currentQueue = null;
4612 draining = false;
4613 clearTimeout(timeout);
4614}
4615
4616process.nextTick = function (fun) {
4617 var args = new Array(arguments.length - 1);
4618 if (arguments.length > 1) {
4619 for (var i = 1; i < arguments.length; i++) {
4620 args[i - 1] = arguments[i];
4621 }
4622 }
4623 queue.push(new Item(fun, args));
4624 if (queue.length === 1 && !draining) {
4625 setTimeout(drainQueue, 0);
4626 }
ebd8d4e8
IC
4627};
4628
ab78acc6
IC
4629// v8 likes predictible objects
4630function Item(fun, array) {
4631 this.fun = fun;
4632 this.array = array;
4633}
4634Item.prototype.run = function () {
4635 this.fun.apply(null, this.array);
4636};
4637process.title = 'browser';
4638process.browser = true;
4639process.env = {};
4640process.argv = [];
4641process.version = ''; // empty string to avoid regexp issues
4642process.versions = {};
ebd8d4e8 4643
ab78acc6
IC
4644function noop() {}
4645
4646process.on = noop;
4647process.addListener = noop;
4648process.once = noop;
4649process.off = noop;
4650process.removeListener = noop;
4651process.removeAllListeners = noop;
4652process.emit = noop;
4653
4654process.binding = function (name) {
4655 throw new Error('process.binding is not supported');
4656};
ebd8d4e8 4657
ab78acc6
IC
4658// TODO(shtylman)
4659process.cwd = function () { return '/' };
4660process.chdir = function (dir) {
4661 throw new Error('process.chdir is not supported');
4662};
4663process.umask = function() { return 0; };
ebd8d4e8 4664
ab78acc6
IC
4665},{}],15:[function(require,module,exports){
4666module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4667
ab78acc6
IC
4668},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4669(function (process){
4670// Copyright Joyent, Inc. and other Node contributors.
4671//
4672// Permission is hereby granted, free of charge, to any person obtaining a
4673// copy of this software and associated documentation files (the
4674// "Software"), to deal in the Software without restriction, including
4675// without limitation the rights to use, copy, modify, merge, publish,
4676// distribute, sublicense, and/or sell copies of the Software, and to permit
4677// persons to whom the Software is furnished to do so, subject to the
4678// following conditions:
4679//
4680// The above copyright notice and this permission notice shall be included
4681// in all copies or substantial portions of the Software.
4682//
4683// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4684// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4685// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4686// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4687// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4688// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4689// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4690
ab78acc6
IC
4691// a duplex stream is just a stream that is both readable and writable.
4692// Since JS doesn't have multiple prototypal inheritance, this class
4693// prototypally inherits from Readable, and then parasitically from
4694// Writable.
ebd8d4e8 4695
ab78acc6 4696module.exports = Duplex;
ebd8d4e8 4697
ab78acc6
IC
4698/*<replacement>*/
4699var objectKeys = Object.keys || function (obj) {
4700 var keys = [];
4701 for (var key in obj) keys.push(key);
4702 return keys;
ebd8d4e8 4703}
ab78acc6 4704/*</replacement>*/
ebd8d4e8 4705
ebd8d4e8 4706
ab78acc6
IC
4707/*<replacement>*/
4708var util = require('core-util-is');
4709util.inherits = require('inherits');
4710/*</replacement>*/
ebd8d4e8 4711
ab78acc6
IC
4712var Readable = require('./_stream_readable');
4713var Writable = require('./_stream_writable');
ebd8d4e8 4714
ab78acc6 4715util.inherits(Duplex, Readable);
ebd8d4e8 4716
ab78acc6
IC
4717forEach(objectKeys(Writable.prototype), function(method) {
4718 if (!Duplex.prototype[method])
4719 Duplex.prototype[method] = Writable.prototype[method];
4720});
ebd8d4e8 4721
ab78acc6
IC
4722function Duplex(options) {
4723 if (!(this instanceof Duplex))
4724 return new Duplex(options);
ebd8d4e8 4725
ab78acc6
IC
4726 Readable.call(this, options);
4727 Writable.call(this, options);
ebd8d4e8 4728
ab78acc6
IC
4729 if (options && options.readable === false)
4730 this.readable = false;
ebd8d4e8 4731
ab78acc6
IC
4732 if (options && options.writable === false)
4733 this.writable = false;
ebd8d4e8 4734
ab78acc6
IC
4735 this.allowHalfOpen = true;
4736 if (options && options.allowHalfOpen === false)
4737 this.allowHalfOpen = false;
ebd8d4e8 4738
ab78acc6 4739 this.once('end', onend);
ebd8d4e8
IC
4740}
4741
ab78acc6
IC
4742// the no-half-open enforcer
4743function onend() {
4744 // if we allow half-open state, or if the writable side ended,
4745 // then we're ok.
4746 if (this.allowHalfOpen || this._writableState.ended)
4747 return;
ebd8d4e8 4748
ab78acc6
IC
4749 // no more data can be written.
4750 // But allow more writes to happen in this tick.
4751 process.nextTick(this.end.bind(this));
4752}
ebd8d4e8 4753
ab78acc6
IC
4754function forEach (xs, f) {
4755 for (var i = 0, l = xs.length; i < l; i++) {
4756 f(xs[i], i);
ebd8d4e8 4757 }
ab78acc6 4758}
ebd8d4e8 4759
ab78acc6
IC
4760}).call(this,require('_process'))
4761},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4762// Copyright Joyent, Inc. and other Node contributors.
4763//
4764// Permission is hereby granted, free of charge, to any person obtaining a
4765// copy of this software and associated documentation files (the
4766// "Software"), to deal in the Software without restriction, including
4767// without limitation the rights to use, copy, modify, merge, publish,
4768// distribute, sublicense, and/or sell copies of the Software, and to permit
4769// persons to whom the Software is furnished to do so, subject to the
4770// following conditions:
4771//
4772// The above copyright notice and this permission notice shall be included
4773// in all copies or substantial portions of the Software.
4774//
4775// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4776// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4777// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4778// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4779// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4780// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4781// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4782
ab78acc6
IC
4783// a passthrough stream.
4784// basically just the most minimal sort of Transform stream.
4785// Every written chunk gets output as-is.
ebd8d4e8 4786
ab78acc6 4787module.exports = PassThrough;
ebd8d4e8 4788
ab78acc6 4789var Transform = require('./_stream_transform');
ebd8d4e8 4790
ab78acc6
IC
4791/*<replacement>*/
4792var util = require('core-util-is');
4793util.inherits = require('inherits');
4794/*</replacement>*/
ebd8d4e8 4795
ab78acc6 4796util.inherits(PassThrough, Transform);
ebd8d4e8 4797
ab78acc6
IC
4798function PassThrough(options) {
4799 if (!(this instanceof PassThrough))
4800 return new PassThrough(options);
ebd8d4e8 4801
ab78acc6
IC
4802 Transform.call(this, options);
4803}
ebd8d4e8 4804
ab78acc6
IC
4805PassThrough.prototype._transform = function(chunk, encoding, cb) {
4806 cb(null, chunk);
ebd8d4e8
IC
4807};
4808
ab78acc6
IC
4809},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4810(function (process){
ebd8d4e8
IC
4811// Copyright Joyent, Inc. and other Node contributors.
4812//
4813// Permission is hereby granted, free of charge, to any person obtaining a
4814// copy of this software and associated documentation files (the
4815// "Software"), to deal in the Software without restriction, including
4816// without limitation the rights to use, copy, modify, merge, publish,
4817// distribute, sublicense, and/or sell copies of the Software, and to permit
4818// persons to whom the Software is furnished to do so, subject to the
4819// following conditions:
4820//
4821// The above copyright notice and this permission notice shall be included
4822// in all copies or substantial portions of the Software.
4823//
4824// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4825// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4826// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4827// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4828// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4829// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4830// USE OR OTHER DEALINGS IN THE SOFTWARE.
4831
ab78acc6 4832module.exports = Readable;
ebd8d4e8 4833
ab78acc6
IC
4834/*<replacement>*/
4835var isArray = require('isarray');
4836/*</replacement>*/
4837
4838
4839/*<replacement>*/
4840var Buffer = require('buffer').Buffer;
4841/*</replacement>*/
4842
4843Readable.ReadableState = ReadableState;
4844
4845var EE = require('events').EventEmitter;
4846
4847/*<replacement>*/
4848if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4849 return emitter.listeners(type).length;
ebd8d4e8 4850};
ab78acc6
IC
4851/*</replacement>*/
4852
4853var Stream = require('stream');
4854
4855/*<replacement>*/
4856var util = require('core-util-is');
4857util.inherits = require('inherits');
4858/*</replacement>*/
4859
4860var StringDecoder;
4861
4862
4863/*<replacement>*/
4864var debug = require('util');
4865if (debug && debug.debuglog) {
4866 debug = debug.debuglog('stream');
4867} else {
4868 debug = function () {};
4869}
4870/*</replacement>*/
4871
4872
4873util.inherits(Readable, Stream);
4874
4875function ReadableState(options, stream) {
4876 var Duplex = require('./_stream_duplex');
4877
4878 options = options || {};
4879
4880 // the point at which it stops calling _read() to fill the buffer
4881 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4882 var hwm = options.highWaterMark;
4883 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4884 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4885
4886 // cast to ints.
4887 this.highWaterMark = ~~this.highWaterMark;
4888
4889 this.buffer = [];
4890 this.length = 0;
4891 this.pipes = null;
4892 this.pipesCount = 0;
4893 this.flowing = null;
4894 this.ended = false;
4895 this.endEmitted = false;
4896 this.reading = false;
ebd8d4e8 4897
ab78acc6
IC
4898 // a flag to be able to tell if the onwrite cb is called immediately,
4899 // or on a later tick. We set this to true at first, because any
4900 // actions that shouldn't happen until "later" should generally also
4901 // not happen before the first write call.
4902 this.sync = true;
ebd8d4e8 4903
ab78acc6
IC
4904 // whenever we return null, then we set a flag to say
4905 // that we're awaiting a 'readable' event emission.
4906 this.needReadable = false;
4907 this.emittedReadable = false;
4908 this.readableListening = false;
ebd8d4e8 4909
ab78acc6
IC
4910
4911 // object stream flag. Used to make read(n) ignore n and to
4912 // make all the buffer merging and length checks go away
4913 this.objectMode = !!options.objectMode;
4914
4915 if (stream instanceof Duplex)
4916 this.objectMode = this.objectMode || !!options.readableObjectMode;
4917
4918 // Crypto is kind of old and crusty. Historically, its default string
4919 // encoding is 'binary' so we have to make this configurable.
4920 // Everything else in the universe uses 'utf8', though.
4921 this.defaultEncoding = options.defaultEncoding || 'utf8';
4922
4923 // when piping, we only care about 'readable' events that happen
4924 // after read()ing all the bytes and not getting any pushback.
4925 this.ranOut = false;
4926
4927 // the number of writers that are awaiting a drain event in .pipe()s
4928 this.awaitDrain = 0;
4929
4930 // if true, a maybeReadMore has been scheduled
4931 this.readingMore = false;
4932
4933 this.decoder = null;
4934 this.encoding = null;
4935 if (options.encoding) {
4936 if (!StringDecoder)
4937 StringDecoder = require('string_decoder/').StringDecoder;
4938 this.decoder = new StringDecoder(options.encoding);
4939 this.encoding = options.encoding;
ebd8d4e8 4940 }
ab78acc6 4941}
ebd8d4e8 4942
ab78acc6
IC
4943function Readable(options) {
4944 var Duplex = require('./_stream_duplex');
4945
4946 if (!(this instanceof Readable))
4947 return new Readable(options);
4948
4949 this._readableState = new ReadableState(options, this);
4950
4951 // legacy
4952 this.readable = true;
4953
4954 Stream.call(this);
4955}
4956
4957// Manually shove something into the read() buffer.
4958// This returns true if the highWaterMark has not been hit yet,
4959// similar to how Writable.write() returns true if you should
4960// write() some more.
4961Readable.prototype.push = function(chunk, encoding) {
4962 var state = this._readableState;
4963
4964 if (util.isString(chunk) && !state.objectMode) {
4965 encoding = encoding || state.defaultEncoding;
4966 if (encoding !== state.encoding) {
4967 chunk = new Buffer(chunk, encoding);
4968 encoding = '';
ebd8d4e8 4969 }
ebd8d4e8
IC
4970 }
4971
ab78acc6 4972 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
4973};
4974
ab78acc6
IC
4975// Unshift should *always* be something directly out of read()
4976Readable.prototype.unshift = function(chunk) {
4977 var state = this._readableState;
4978 return readableAddChunk(this, state, chunk, '', true);
4979};
ebd8d4e8 4980
ab78acc6
IC
4981function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4982 var er = chunkInvalid(state, chunk);
4983 if (er) {
4984 stream.emit('error', er);
4985 } else if (util.isNullOrUndefined(chunk)) {
4986 state.reading = false;
4987 if (!state.ended)
4988 onEofChunk(stream, state);
4989 } else if (state.objectMode || chunk && chunk.length > 0) {
4990 if (state.ended && !addToFront) {
4991 var e = new Error('stream.push() after EOF');
4992 stream.emit('error', e);
4993 } else if (state.endEmitted && addToFront) {
4994 var e = new Error('stream.unshift() after end event');
4995 stream.emit('error', e);
ebd8d4e8 4996 } else {
ab78acc6
IC
4997 if (state.decoder && !addToFront && !encoding)
4998 chunk = state.decoder.write(chunk);
4999
5000 if (!addToFront)
5001 state.reading = false;
5002
5003 // if we want the data now, just emit it.
5004 if (state.flowing && state.length === 0 && !state.sync) {
5005 stream.emit('data', chunk);
5006 stream.read(0);
5007 } else {
5008 // update the buffer info.
5009 state.length += state.objectMode ? 1 : chunk.length;
5010 if (addToFront)
5011 state.buffer.unshift(chunk);
5012 else
5013 state.buffer.push(chunk);
5014
5015 if (state.needReadable)
5016 emitReadable(stream);
5017 }
5018
5019 maybeReadMore(stream, state);
ebd8d4e8 5020 }
ab78acc6
IC
5021 } else if (!addToFront) {
5022 state.reading = false;
ebd8d4e8 5023 }
ebd8d4e8 5024
ab78acc6
IC
5025 return needMoreData(state);
5026}
ebd8d4e8 5027
ab78acc6
IC
5028
5029
5030// if it's past the high water mark, we can push in some more.
5031// Also, if we have no data yet, we can stand some
5032// more bytes. This is to work around cases where hwm=0,
5033// such as the repl. Also, if the push() triggered a
5034// readable event, and the user called read(largeNumber) such that
5035// needReadable was set, then we ought to push more, so that another
5036// 'readable' event will be triggered.
5037function needMoreData(state) {
5038 return !state.ended &&
5039 (state.needReadable ||
5040 state.length < state.highWaterMark ||
5041 state.length === 0);
5042}
5043
5044// backwards compatibility.
5045Readable.prototype.setEncoding = function(enc) {
5046 if (!StringDecoder)
5047 StringDecoder = require('string_decoder/').StringDecoder;
5048 this._readableState.decoder = new StringDecoder(enc);
5049 this._readableState.encoding = enc;
5050 return this;
5051};
5052
5053// Don't raise the hwm > 128MB
5054var MAX_HWM = 0x800000;
5055function roundUpToNextPowerOf2(n) {
5056 if (n >= MAX_HWM) {
5057 n = MAX_HWM;
5058 } else {
5059 // Get the next highest power of 2
5060 n--;
5061 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5062 n++;
ebd8d4e8 5063 }
ab78acc6 5064 return n;
ebd8d4e8 5065}
ebd8d4e8 5066
ab78acc6
IC
5067function howMuchToRead(n, state) {
5068 if (state.length === 0 && state.ended)
5069 return 0;
ebd8d4e8 5070
ab78acc6
IC
5071 if (state.objectMode)
5072 return n === 0 ? 0 : 1;
ebd8d4e8 5073
ab78acc6
IC
5074 if (isNaN(n) || util.isNull(n)) {
5075 // only flow one buffer at a time
5076 if (state.flowing && state.buffer.length)
5077 return state.buffer[0].length;
5078 else
5079 return state.length;
5080 }
ebd8d4e8 5081
ab78acc6
IC
5082 if (n <= 0)
5083 return 0;
ebd8d4e8 5084
ab78acc6
IC
5085 // If we're asking for more than the target buffer level,
5086 // then raise the water mark. Bump up to the next highest
5087 // power of 2, to prevent increasing it excessively in tiny
5088 // amounts.
5089 if (n > state.highWaterMark)
5090 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5091
ab78acc6
IC
5092 // don't have that much. return null, unless we've ended.
5093 if (n > state.length) {
5094 if (!state.ended) {
5095 state.needReadable = true;
5096 return 0;
5097 } else
5098 return state.length;
ebd8d4e8 5099 }
ab78acc6
IC
5100
5101 return n;
ebd8d4e8
IC
5102}
5103
ab78acc6
IC
5104// you can override either this method, or the async _read(n) below.
5105Readable.prototype.read = function(n) {
5106 debug('read', n);
5107 var state = this._readableState;
5108 var nOrig = n;
ebd8d4e8 5109
ab78acc6
IC
5110 if (!util.isNumber(n) || n > 0)
5111 state.emittedReadable = false;
5112
5113 // if we're doing read(0) to trigger a readable event, but we
5114 // already have a bunch of data in the buffer, then just trigger
5115 // the 'readable' event and move on.
5116 if (n === 0 &&
5117 state.needReadable &&
5118 (state.length >= state.highWaterMark || state.ended)) {
5119 debug('read: emitReadable', state.length, state.ended);
5120 if (state.length === 0 && state.ended)
5121 endReadable(this);
5122 else
5123 emitReadable(this);
5124 return null;
5125 }
5126
5127 n = howMuchToRead(n, state);
5128
5129 // if we've ended, and we're now clear, then finish it up.
5130 if (n === 0 && state.ended) {
5131 if (state.length === 0)
5132 endReadable(this);
5133 return null;
5134 }
5135
5136 // All the actual chunk generation logic needs to be
5137 // *below* the call to _read. The reason is that in certain
5138 // synthetic stream cases, such as passthrough streams, _read
5139 // may be a completely synchronous operation which may change
5140 // the state of the read buffer, providing enough data when
5141 // before there was *not* enough.
5142 //
5143 // So, the steps are:
5144 // 1. Figure out what the state of things will be after we do
5145 // a read from the buffer.
5146 //
5147 // 2. If that resulting state will trigger a _read, then call _read.
5148 // Note that this may be asynchronous, or synchronous. Yes, it is
5149 // deeply ugly to write APIs this way, but that still doesn't mean
5150 // that the Readable class should behave improperly, as streams are
5151 // designed to be sync/async agnostic.
5152 // Take note if the _read call is sync or async (ie, if the read call
5153 // has returned yet), so that we know whether or not it's safe to emit
5154 // 'readable' etc.
5155 //
5156 // 3. Actually pull the requested chunks out of the buffer and return.
5157
5158 // if we need a readable event, then we need to do some reading.
5159 var doRead = state.needReadable;
5160 debug('need readable', doRead);
5161
5162 // if we currently have less than the highWaterMark, then also read some
5163 if (state.length === 0 || state.length - n < state.highWaterMark) {
5164 doRead = true;
5165 debug('length less than watermark', doRead);
5166 }
5167
5168 // however, if we've ended, then there's no point, and if we're already
5169 // reading, then it's unnecessary.
5170 if (state.ended || state.reading) {
5171 doRead = false;
5172 debug('reading or ended', doRead);
5173 }
5174
5175 if (doRead) {
5176 debug('do read');
5177 state.reading = true;
5178 state.sync = true;
5179 // if the length is currently zero, then we *need* a readable event.
5180 if (state.length === 0)
5181 state.needReadable = true;
5182 // call internal read method
5183 this._read(state.highWaterMark);
5184 state.sync = false;
5185 }
5186
5187 // If _read pushed data synchronously, then `reading` will be false,
5188 // and we need to re-evaluate how much data we can return to the user.
5189 if (doRead && !state.reading)
5190 n = howMuchToRead(nOrig, state);
5191
5192 var ret;
5193 if (n > 0)
5194 ret = fromList(n, state);
5195 else
5196 ret = null;
ebd8d4e8 5197
ab78acc6
IC
5198 if (util.isNull(ret)) {
5199 state.needReadable = true;
5200 n = 0;
5201 }
ebd8d4e8 5202
ab78acc6 5203 state.length -= n;
ebd8d4e8 5204
ab78acc6
IC
5205 // If we have nothing in the buffer, then we want to know
5206 // as soon as we *do* get something into the buffer.
5207 if (state.length === 0 && !state.ended)
5208 state.needReadable = true;
ebd8d4e8 5209
ab78acc6
IC
5210 // If we tried to read() past the EOF, then emit end on the next tick.
5211 if (nOrig !== n && state.ended && state.length === 0)
5212 endReadable(this);
5213
5214 if (!util.isNull(ret))
5215 this.emit('data', ret);
5216
5217 return ret;
5218};
5219
5220function chunkInvalid(state, chunk) {
5221 var er = null;
5222 if (!util.isBuffer(chunk) &&
5223 !util.isString(chunk) &&
5224 !util.isNullOrUndefined(chunk) &&
5225 !state.objectMode) {
5226 er = new TypeError('Invalid non-string/buffer chunk');
5227 }
5228 return er;
ebd8d4e8
IC
5229}
5230
5231
ab78acc6
IC
5232function onEofChunk(stream, state) {
5233 if (state.decoder && !state.ended) {
5234 var chunk = state.decoder.end();
5235 if (chunk && chunk.length) {
5236 state.buffer.push(chunk);
5237 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5238 }
ebd8d4e8 5239 }
ab78acc6 5240 state.ended = true;
ebd8d4e8 5241
ab78acc6
IC
5242 // emit 'readable' now to make sure it gets picked up.
5243 emitReadable(stream);
5244}
5245
5246// Don't emit readable right away in sync mode, because this can trigger
5247// another read() call => stack overflow. This way, it might trigger
5248// a nextTick recursion warning, but that's not so bad.
5249function emitReadable(stream) {
5250 var state = stream._readableState;
5251 state.needReadable = false;
5252 if (!state.emittedReadable) {
5253 debug('emitReadable', state.flowing);
5254 state.emittedReadable = true;
5255 if (state.sync)
5256 process.nextTick(function() {
5257 emitReadable_(stream);
5258 });
5259 else
5260 emitReadable_(stream);
ebd8d4e8 5261 }
ab78acc6 5262}
ebd8d4e8 5263
ab78acc6
IC
5264function emitReadable_(stream) {
5265 debug('emit readable');
5266 stream.emit('readable');
5267 flow(stream);
5268}
ebd8d4e8 5269
ab78acc6
IC
5270
5271// at this point, the user has presumably seen the 'readable' event,
5272// and called read() to consume some data. that may have triggered
5273// in turn another _read(n) call, in which case reading = true if
5274// it's in progress.
5275// However, if we're not ended, or reading, and the length < hwm,
5276// then go ahead and try to read some more preemptively.
5277function maybeReadMore(stream, state) {
5278 if (!state.readingMore) {
5279 state.readingMore = true;
5280 process.nextTick(function() {
5281 maybeReadMore_(stream, state);
5282 });
ebd8d4e8 5283 }
ab78acc6 5284}
ebd8d4e8 5285
ab78acc6
IC
5286function maybeReadMore_(stream, state) {
5287 var len = state.length;
5288 while (!state.reading && !state.flowing && !state.ended &&
5289 state.length < state.highWaterMark) {
5290 debug('maybeReadMore read 0');
5291 stream.read(0);
5292 if (len === state.length)
5293 // didn't get any data, stop spinning.
5294 break;
5295 else
5296 len = state.length;
ebd8d4e8 5297 }
ab78acc6
IC
5298 state.readingMore = false;
5299}
ebd8d4e8 5300
ab78acc6
IC
5301// abstract method. to be overridden in specific implementation classes.
5302// call cb(er, data) where data is <= n in length.
5303// for virtual (non-string, non-buffer) streams, "length" is somewhat
5304// arbitrary, and perhaps not very meaningful.
5305Readable.prototype._read = function(n) {
5306 this.emit('error', new Error('not implemented'));
5307};
5308
5309Readable.prototype.pipe = function(dest, pipeOpts) {
5310 var src = this;
5311 var state = this._readableState;
5312
5313 switch (state.pipesCount) {
5314 case 0:
5315 state.pipes = dest;
5316 break;
5317 case 1:
5318 state.pipes = [state.pipes, dest];
5319 break;
5320 default:
5321 state.pipes.push(dest);
5322 break;
ebd8d4e8 5323 }
ab78acc6
IC
5324 state.pipesCount += 1;
5325 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5326
ab78acc6
IC
5327 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5328 dest !== process.stdout &&
5329 dest !== process.stderr;
ebd8d4e8 5330
ab78acc6
IC
5331 var endFn = doEnd ? onend : cleanup;
5332 if (state.endEmitted)
5333 process.nextTick(endFn);
5334 else
5335 src.once('end', endFn);
5336
5337 dest.on('unpipe', onunpipe);
5338 function onunpipe(readable) {
5339 debug('onunpipe');
5340 if (readable === src) {
5341 cleanup();
5342 }
5343 }
5344
5345 function onend() {
5346 debug('onend');
5347 dest.end();
5348 }
5349
5350 // when the dest drains, it reduces the awaitDrain counter
5351 // on the source. This would be more elegant with a .once()
5352 // handler in flow(), but adding and removing repeatedly is
5353 // too slow.
5354 var ondrain = pipeOnDrain(src);
5355 dest.on('drain', ondrain);
5356
5357 function cleanup() {
5358 debug('cleanup');
5359 // cleanup event handlers once the pipe is broken
5360 dest.removeListener('close', onclose);
5361 dest.removeListener('finish', onfinish);
5362 dest.removeListener('drain', ondrain);
5363 dest.removeListener('error', onerror);
5364 dest.removeListener('unpipe', onunpipe);
5365 src.removeListener('end', onend);
5366 src.removeListener('end', cleanup);
5367 src.removeListener('data', ondata);
5368
5369 // if the reader is waiting for a drain event from this
5370 // specific writer, then it would cause it to never start
5371 // flowing again.
5372 // So, if this is awaiting a drain, then we just call it now.
5373 // If we don't know, then assume that we are waiting for one.
5374 if (state.awaitDrain &&
5375 (!dest._writableState || dest._writableState.needDrain))
5376 ondrain();
5377 }
5378
5379 src.on('data', ondata);
5380 function ondata(chunk) {
5381 debug('ondata');
5382 var ret = dest.write(chunk);
5383 if (false === ret) {
5384 debug('false write response, pause',
5385 src._readableState.awaitDrain);
5386 src._readableState.awaitDrain++;
5387 src.pause();
5388 }
5389 }
5390
5391 // if the dest has an error, then stop piping into it.
5392 // however, don't suppress the throwing behavior for this.
5393 function onerror(er) {
5394 debug('onerror', er);
5395 unpipe();
5396 dest.removeListener('error', onerror);
5397 if (EE.listenerCount(dest, 'error') === 0)
5398 dest.emit('error', er);
5399 }
5400 // This is a brutally ugly hack to make sure that our error handler
5401 // is attached before any userland ones. NEVER DO THIS.
5402 if (!dest._events || !dest._events.error)
5403 dest.on('error', onerror);
5404 else if (isArray(dest._events.error))
5405 dest._events.error.unshift(onerror);
5406 else
5407 dest._events.error = [onerror, dest._events.error];
5408
5409
5410
5411 // Both close and finish should trigger unpipe, but only once.
5412 function onclose() {
5413 dest.removeListener('finish', onfinish);
5414 unpipe();
ebd8d4e8 5415 }
ab78acc6
IC
5416 dest.once('close', onclose);
5417 function onfinish() {
5418 debug('onfinish');
5419 dest.removeListener('close', onclose);
5420 unpipe();
5421 }
5422 dest.once('finish', onfinish);
ebd8d4e8 5423
ab78acc6
IC
5424 function unpipe() {
5425 debug('unpipe');
5426 src.unpipe(dest);
ebd8d4e8
IC
5427 }
5428
ab78acc6
IC
5429 // tell the dest that it's being piped to
5430 dest.emit('pipe', src);
5431
5432 // start the flow if it hasn't been started already.
5433 if (!state.flowing) {
5434 debug('pipe resume');
5435 src.resume();
ebd8d4e8
IC
5436 }
5437
ab78acc6
IC
5438 return dest;
5439};
5440
5441function pipeOnDrain(src) {
5442 return function() {
5443 var state = src._readableState;
5444 debug('pipeOnDrain', state.awaitDrain);
5445 if (state.awaitDrain)
5446 state.awaitDrain--;
5447 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5448 state.flowing = true;
5449 flow(src);
5450 }
5451 };
5452}
5453
5454
5455Readable.prototype.unpipe = function(dest) {
5456 var state = this._readableState;
5457
5458 // if we're not piping anywhere, then do nothing.
5459 if (state.pipesCount === 0)
5460 return this;
5461
5462 // just one destination. most common case.
5463 if (state.pipesCount === 1) {
5464 // passed in one, but it's not the right one.
5465 if (dest && dest !== state.pipes)
5466 return this;
5467
5468 if (!dest)
5469 dest = state.pipes;
5470
5471 // got a match.
5472 state.pipes = null;
5473 state.pipesCount = 0;
5474 state.flowing = false;
5475 if (dest)
5476 dest.emit('unpipe', this);
5477 return this;
ebd8d4e8
IC
5478 }
5479
ab78acc6
IC
5480 // slow case. multiple pipe destinations.
5481
5482 if (!dest) {
5483 // remove all.
5484 var dests = state.pipes;
5485 var len = state.pipesCount;
5486 state.pipes = null;
5487 state.pipesCount = 0;
5488 state.flowing = false;
5489
5490 for (var i = 0; i < len; i++)
5491 dests[i].emit('unpipe', this);
5492 return this;
ebd8d4e8
IC
5493 }
5494
ab78acc6
IC
5495 // try to find the right one.
5496 var i = indexOf(state.pipes, dest);
5497 if (i === -1)
5498 return this;
5499
5500 state.pipes.splice(i, 1);
5501 state.pipesCount -= 1;
5502 if (state.pipesCount === 1)
5503 state.pipes = state.pipes[0];
5504
5505 dest.emit('unpipe', this);
ebd8d4e8 5506
ab78acc6
IC
5507 return this;
5508};
5509
5510// set up data events if they are asked for
5511// Ensure readable listeners eventually get something
5512Readable.prototype.on = function(ev, fn) {
5513 var res = Stream.prototype.on.call(this, ev, fn);
5514
5515 // If listening to data, and it has not explicitly been paused,
5516 // then call resume to start the flow of data on the next tick.
5517 if (ev === 'data' && false !== this._readableState.flowing) {
5518 this.resume();
5519 }
5520
5521 if (ev === 'readable' && this.readable) {
5522 var state = this._readableState;
5523 if (!state.readableListening) {
5524 state.readableListening = true;
5525 state.emittedReadable = false;
5526 state.needReadable = true;
5527 if (!state.reading) {
5528 var self = this;
5529 process.nextTick(function() {
5530 debug('readable nexttick read 0');
5531 self.read(0);
5532 });
5533 } else if (state.length) {
5534 emitReadable(this, state);
5535 }
ebd8d4e8
IC
5536 }
5537 }
5538
ab78acc6
IC
5539 return res;
5540};
5541Readable.prototype.addListener = Readable.prototype.on;
5542
5543// pause() and resume() are remnants of the legacy readable stream API
5544// If the user uses them, then switch into old mode.
5545Readable.prototype.resume = function() {
5546 var state = this._readableState;
5547 if (!state.flowing) {
5548 debug('resume');
5549 state.flowing = true;
5550 if (!state.reading) {
5551 debug('resume read 0');
5552 this.read(0);
5553 }
5554 resume(this, state);
5555 }
5556 return this;
5557};
ebd8d4e8 5558
ab78acc6
IC
5559function resume(stream, state) {
5560 if (!state.resumeScheduled) {
5561 state.resumeScheduled = true;
5562 process.nextTick(function() {
5563 resume_(stream, state);
ebd8d4e8
IC
5564 });
5565 }
ebd8d4e8
IC
5566}
5567
ab78acc6
IC
5568function resume_(stream, state) {
5569 state.resumeScheduled = false;
5570 stream.emit('resume');
5571 flow(stream);
5572 if (state.flowing && !state.reading)
5573 stream.read(0);
ebd8d4e8
IC
5574}
5575
ab78acc6
IC
5576Readable.prototype.pause = function() {
5577 debug('call pause flowing=%j', this._readableState.flowing);
5578 if (false !== this._readableState.flowing) {
5579 debug('pause');
5580 this._readableState.flowing = false;
5581 this.emit('pause');
5582 }
5583 return this;
5584};
ebd8d4e8 5585
ab78acc6
IC
5586function flow(stream) {
5587 var state = stream._readableState;
5588 debug('flow', state.flowing);
5589 if (state.flowing) {
5590 do {
5591 var chunk = stream.read();
5592 } while (null !== chunk && state.flowing);
5593 }
ebd8d4e8
IC
5594}
5595
ab78acc6
IC
5596// wrap an old-style stream as the async data source.
5597// This is *not* part of the readable stream interface.
5598// It is an ugly unfortunate mess of history.
5599Readable.prototype.wrap = function(stream) {
5600 var state = this._readableState;
5601 var paused = false;
ebd8d4e8 5602
ab78acc6
IC
5603 var self = this;
5604 stream.on('end', function() {
5605 debug('wrapped end');
5606 if (state.decoder && !state.ended) {
5607 var chunk = state.decoder.end();
5608 if (chunk && chunk.length)
5609 self.push(chunk);
ebd8d4e8 5610 }
ab78acc6
IC
5611
5612 self.push(null);
ebd8d4e8 5613 });
ebd8d4e8 5614
ab78acc6
IC
5615 stream.on('data', function(chunk) {
5616 debug('wrapped data');
5617 if (state.decoder)
5618 chunk = state.decoder.write(chunk);
5619 if (!chunk || !state.objectMode && !chunk.length)
5620 return;
ebd8d4e8 5621
ab78acc6
IC
5622 var ret = self.push(chunk);
5623 if (!ret) {
5624 paused = true;
5625 stream.pause();
ebd8d4e8 5626 }
ab78acc6
IC
5627 });
5628
5629 // proxy all the other methods.
5630 // important when wrapping filters and duplexes.
5631 for (var i in stream) {
5632 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5633 this[i] = function(method) { return function() {
5634 return stream[method].apply(stream, arguments);
5635 }}(i);
ebd8d4e8
IC
5636 }
5637 }
ab78acc6
IC
5638
5639 // proxy certain important events.
5640 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5641 forEach(events, function(ev) {
5642 stream.on(ev, self.emit.bind(self, ev));
5643 });
5644
5645 // when we try to consume some more bytes, simply unpause the
5646 // underlying stream.
5647 self._read = function(n) {
5648 debug('wrapped _read', n);
5649 if (paused) {
5650 paused = false;
5651 stream.resume();
ebd8d4e8 5652 }
ab78acc6
IC
5653 };
5654
5655 return self;
5656};
5657
5658
5659
5660// exposed for testing purposes only.
5661Readable._fromList = fromList;
5662
5663// Pluck off n bytes from an array of buffers.
5664// Length is the combined lengths of all the buffers in the list.
5665function fromList(n, state) {
5666 var list = state.buffer;
5667 var length = state.length;
5668 var stringMode = !!state.decoder;
5669 var objectMode = !!state.objectMode;
5670 var ret;
5671
5672 // nothing in the list, definitely empty.
5673 if (list.length === 0)
5674 return null;
5675
5676 if (length === 0)
5677 ret = null;
5678 else if (objectMode)
5679 ret = list.shift();
5680 else if (!n || n >= length) {
5681 // read it all, truncate the array.
5682 if (stringMode)
5683 ret = list.join('');
5684 else
5685 ret = Buffer.concat(list, length);
5686 list.length = 0;
5687 } else {
5688 // read just some of it.
5689 if (n < list[0].length) {
5690 // just take a part of the first list item.
5691 // slice is the same for buffers and strings.
5692 var buf = list[0];
5693 ret = buf.slice(0, n);
5694 list[0] = buf.slice(n);
5695 } else if (n === list[0].length) {
5696 // first list is a perfect match
5697 ret = list.shift();
ebd8d4e8 5698 } else {
ab78acc6
IC
5699 // complex case.
5700 // we have enough to cover it, but it spans past the first buffer.
5701 if (stringMode)
5702 ret = '';
5703 else
5704 ret = new Buffer(n);
ebd8d4e8 5705
ab78acc6
IC
5706 var c = 0;
5707 for (var i = 0, l = list.length; i < l && c < n; i++) {
5708 var buf = list[0];
5709 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5710
ab78acc6
IC
5711 if (stringMode)
5712 ret += buf.slice(0, cpy);
5713 else
5714 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5715
ab78acc6
IC
5716 if (cpy < buf.length)
5717 list[0] = buf.slice(cpy);
5718 else
5719 list.shift();
ebd8d4e8 5720
ab78acc6
IC
5721 c += cpy;
5722 }
5723 }
ebd8d4e8
IC
5724 }
5725
ab78acc6 5726 return ret;
ebd8d4e8
IC
5727}
5728
ab78acc6
IC
5729function endReadable(stream) {
5730 var state = stream._readableState;
ebd8d4e8 5731
ab78acc6
IC
5732 // If we get here before consuming all the bytes, then that is a
5733 // bug in node. Should never happen.
5734 if (state.length > 0)
5735 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5736
ab78acc6
IC
5737 if (!state.endEmitted) {
5738 state.ended = true;
5739 process.nextTick(function() {
5740 // Check that we didn't get one last unshift.
5741 if (!state.endEmitted && state.length === 0) {
5742 state.endEmitted = true;
5743 stream.readable = false;
5744 stream.emit('end');
5745 }
5746 });
5747 }
ebd8d4e8 5748}
ebd8d4e8 5749
ab78acc6
IC
5750function forEach (xs, f) {
5751 for (var i = 0, l = xs.length; i < l; i++) {
5752 f(xs[i], i);
5753 }
ebd8d4e8 5754}
ebd8d4e8 5755
ab78acc6
IC
5756function indexOf (xs, x) {
5757 for (var i = 0, l = xs.length; i < l; i++) {
5758 if (xs[i] === x) return i;
5759 }
5760 return -1;
ebd8d4e8 5761}
ebd8d4e8 5762
ab78acc6
IC
5763}).call(this,require('_process'))
5764},{"./_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){
5765// Copyright Joyent, Inc. and other Node contributors.
5766//
5767// Permission is hereby granted, free of charge, to any person obtaining a
5768// copy of this software and associated documentation files (the
5769// "Software"), to deal in the Software without restriction, including
5770// without limitation the rights to use, copy, modify, merge, publish,
5771// distribute, sublicense, and/or sell copies of the Software, and to permit
5772// persons to whom the Software is furnished to do so, subject to the
5773// following conditions:
5774//
5775// The above copyright notice and this permission notice shall be included
5776// in all copies or substantial portions of the Software.
5777//
5778// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5779// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5780// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5781// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5782// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5783// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5784// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5785
ebd8d4e8 5786
ab78acc6
IC
5787// a transform stream is a readable/writable stream where you do
5788// something with the data. Sometimes it's called a "filter",
5789// but that's not a great name for it, since that implies a thing where
5790// some bits pass through, and others are simply ignored. (That would
5791// be a valid example of a transform, of course.)
5792//
5793// While the output is causally related to the input, it's not a
5794// necessarily symmetric or synchronous transformation. For example,
5795// a zlib stream might take multiple plain-text writes(), and then
5796// emit a single compressed chunk some time in the future.
5797//
5798// Here's how this works:
5799//
5800// The Transform stream has all the aspects of the readable and writable
5801// stream classes. When you write(chunk), that calls _write(chunk,cb)
5802// internally, and returns false if there's a lot of pending writes
5803// buffered up. When you call read(), that calls _read(n) until
5804// there's enough pending readable data buffered up.
5805//
5806// In a transform stream, the written data is placed in a buffer. When
5807// _read(n) is called, it transforms the queued up data, calling the
5808// buffered _write cb's as it consumes chunks. If consuming a single
5809// written chunk would result in multiple output chunks, then the first
5810// outputted bit calls the readcb, and subsequent chunks just go into
5811// the read buffer, and will cause it to emit 'readable' if necessary.
5812//
5813// This way, back-pressure is actually determined by the reading side,
5814// since _read has to be called to start processing a new chunk. However,
5815// a pathological inflate type of transform can cause excessive buffering
5816// here. For example, imagine a stream where every byte of input is
5817// interpreted as an integer from 0-255, and then results in that many
5818// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5819// 1kb of data being output. In this case, you could write a very small
5820// amount of input, and end up with a very large amount of output. In
5821// such a pathological inflating mechanism, there'd be no way to tell
5822// the system to stop doing the transform. A single 4MB write could
5823// cause the system to run out of memory.
5824//
5825// However, even in such a pathological case, only a single written chunk
5826// would be consumed, and then the rest would wait (un-transformed) until
5827// the results of the previous transformed chunk were consumed.
ebd8d4e8 5828
ab78acc6 5829module.exports = Transform;
ebd8d4e8 5830
ab78acc6 5831var Duplex = require('./_stream_duplex');
ebd8d4e8 5832
ab78acc6
IC
5833/*<replacement>*/
5834var util = require('core-util-is');
5835util.inherits = require('inherits');
5836/*</replacement>*/
5837
5838util.inherits(Transform, Duplex);
5839
5840
5841function TransformState(options, stream) {
5842 this.afterTransform = function(er, data) {
5843 return afterTransform(stream, er, data);
5844 };
5845
5846 this.needTransform = false;
5847 this.transforming = false;
5848 this.writecb = null;
5849 this.writechunk = null;
ebd8d4e8 5850}
ebd8d4e8 5851
ab78acc6
IC
5852function afterTransform(stream, er, data) {
5853 var ts = stream._transformState;
5854 ts.transforming = false;
5855
5856 var cb = ts.writecb;
5857
5858 if (!cb)
5859 return stream.emit('error', new Error('no writecb in Transform class'));
5860
5861 ts.writechunk = null;
5862 ts.writecb = null;
5863
5864 if (!util.isNullOrUndefined(data))
5865 stream.push(data);
5866
5867 if (cb)
5868 cb(er);
5869
5870 var rs = stream._readableState;
5871 rs.reading = false;
5872 if (rs.needReadable || rs.length < rs.highWaterMark) {
5873 stream._read(rs.highWaterMark);
5874 }
ebd8d4e8 5875}
ebd8d4e8 5876
ab78acc6
IC
5877
5878function Transform(options) {
5879 if (!(this instanceof Transform))
5880 return new Transform(options);
5881
5882 Duplex.call(this, options);
5883
5884 this._transformState = new TransformState(options, this);
5885
5886 // when the writable side finishes, then flush out anything remaining.
5887 var stream = this;
5888
5889 // start out asking for a readable event once data is transformed.
5890 this._readableState.needReadable = true;
5891
5892 // we have implemented the _read method, and done the other things
5893 // that Readable wants before the first _read call, so unset the
5894 // sync guard flag.
5895 this._readableState.sync = false;
5896
5897 this.once('prefinish', function() {
5898 if (util.isFunction(this._flush))
5899 this._flush(function(er) {
5900 done(stream, er);
5901 });
5902 else
5903 done(stream);
5904 });
ebd8d4e8 5905}
ebd8d4e8 5906
ab78acc6
IC
5907Transform.prototype.push = function(chunk, encoding) {
5908 this._transformState.needTransform = false;
5909 return Duplex.prototype.push.call(this, chunk, encoding);
5910};
5911
5912// This is the part where you do stuff!
5913// override this function in implementation classes.
5914// 'chunk' is an input chunk.
5915//
5916// Call `push(newChunk)` to pass along transformed output
5917// to the readable side. You may call 'push' zero or more times.
5918//
5919// Call `cb(err)` when you are done with this chunk. If you pass
5920// an error, then that'll put the hurt on the whole operation. If you
5921// never call cb(), then you'll never get another chunk.
5922Transform.prototype._transform = function(chunk, encoding, cb) {
5923 throw new Error('not implemented');
5924};
5925
5926Transform.prototype._write = function(chunk, encoding, cb) {
5927 var ts = this._transformState;
5928 ts.writecb = cb;
5929 ts.writechunk = chunk;
5930 ts.writeencoding = encoding;
5931 if (!ts.transforming) {
5932 var rs = this._readableState;
5933 if (ts.needTransform ||
5934 rs.needReadable ||
5935 rs.length < rs.highWaterMark)
5936 this._read(rs.highWaterMark);
5937 }
5938};
5939
5940// Doesn't matter what the args are here.
5941// _transform does all the work.
5942// That we got here means that the readable side wants more data.
5943Transform.prototype._read = function(n) {
5944 var ts = this._transformState;
ebd8d4e8 5945
ab78acc6
IC
5946 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5947 ts.transforming = true;
5948 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5949 } else {
5950 // mark that we need a transform, so that any data that comes in
5951 // will get processed, now that we've asked for it.
5952 ts.needTransform = true;
5953 }
5954};
ebd8d4e8 5955
ebd8d4e8 5956
ab78acc6
IC
5957function done(stream, er) {
5958 if (er)
5959 return stream.emit('error', er);
ebd8d4e8 5960
ab78acc6
IC
5961 // if there's nothing in the write buffer, then that means
5962 // that nothing more will ever be provided
5963 var ws = stream._writableState;
5964 var ts = stream._transformState;
ebd8d4e8 5965
ab78acc6
IC
5966 if (ws.length)
5967 throw new Error('calling transform done when ws.length != 0');
5968
5969 if (ts.transforming)
5970 throw new Error('calling transform done when still transforming');
5971
5972 return stream.push(null);
ebd8d4e8
IC
5973}
5974
ab78acc6
IC
5975},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5976(function (process){
5977// Copyright Joyent, Inc. and other Node contributors.
5978//
5979// Permission is hereby granted, free of charge, to any person obtaining a
5980// copy of this software and associated documentation files (the
5981// "Software"), to deal in the Software without restriction, including
5982// without limitation the rights to use, copy, modify, merge, publish,
5983// distribute, sublicense, and/or sell copies of the Software, and to permit
5984// persons to whom the Software is furnished to do so, subject to the
5985// following conditions:
5986//
5987// The above copyright notice and this permission notice shall be included
5988// in all copies or substantial portions of the Software.
5989//
5990// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5991// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5992// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5993// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5994// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5995// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5996// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5997
ab78acc6
IC
5998// A bit simpler than readable streams.
5999// Implement an async ._write(chunk, cb), and it'll handle all
6000// the drain event emission and buffering.
ebd8d4e8 6001
ab78acc6 6002module.exports = Writable;
ebd8d4e8 6003
ab78acc6
IC
6004/*<replacement>*/
6005var Buffer = require('buffer').Buffer;
6006/*</replacement>*/
ebd8d4e8 6007
ab78acc6 6008Writable.WritableState = WritableState;
ebd8d4e8
IC
6009
6010
ab78acc6
IC
6011/*<replacement>*/
6012var util = require('core-util-is');
6013util.inherits = require('inherits');
6014/*</replacement>*/
ebd8d4e8 6015
ab78acc6 6016var Stream = require('stream');
ebd8d4e8 6017
ab78acc6 6018util.inherits(Writable, Stream);
ebd8d4e8 6019
ab78acc6
IC
6020function WriteReq(chunk, encoding, cb) {
6021 this.chunk = chunk;
6022 this.encoding = encoding;
6023 this.callback = cb;
ebd8d4e8
IC
6024}
6025
ab78acc6
IC
6026function WritableState(options, stream) {
6027 var Duplex = require('./_stream_duplex');
ebd8d4e8 6028
ab78acc6 6029 options = options || {};
ebd8d4e8 6030
ab78acc6
IC
6031 // the point at which write() starts returning false
6032 // Note: 0 is a valid value, means that we always return false if
6033 // the entire buffer is not flushed immediately on write()
6034 var hwm = options.highWaterMark;
6035 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6036 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6037
ab78acc6
IC
6038 // object stream flag to indicate whether or not this stream
6039 // contains buffers or objects.
6040 this.objectMode = !!options.objectMode;
ebd8d4e8 6041
ab78acc6
IC
6042 if (stream instanceof Duplex)
6043 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6044
ab78acc6
IC
6045 // cast to ints.
6046 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6047
ab78acc6
IC
6048 this.needDrain = false;
6049 // at the start of calling end()
6050 this.ending = false;
6051 // when end() has been called, and returned
6052 this.ended = false;
6053 // when 'finish' is emitted
6054 this.finished = false;
ebd8d4e8 6055
ab78acc6
IC
6056 // should we decode strings into buffers before passing to _write?
6057 // this is here so that some node-core streams can optimize string
6058 // handling at a lower level.
6059 var noDecode = options.decodeStrings === false;
6060 this.decodeStrings = !noDecode;
ebd8d4e8 6061
ab78acc6
IC
6062 // Crypto is kind of old and crusty. Historically, its default string
6063 // encoding is 'binary' so we have to make this configurable.
6064 // Everything else in the universe uses 'utf8', though.
6065 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6066
ab78acc6
IC
6067 // not an actual buffer we keep track of, but a measurement
6068 // of how much we're waiting to get pushed to some underlying
6069 // socket or file.
6070 this.length = 0;
ebd8d4e8 6071
ab78acc6
IC
6072 // a flag to see when we're in the middle of a write.
6073 this.writing = false;
ebd8d4e8 6074
ab78acc6
IC
6075 // when true all writes will be buffered until .uncork() call
6076 this.corked = 0;
ebd8d4e8 6077
ab78acc6
IC
6078 // a flag to be able to tell if the onwrite cb is called immediately,
6079 // or on a later tick. We set this to true at first, because any
6080 // actions that shouldn't happen until "later" should generally also
6081 // not happen before the first write call.
6082 this.sync = true;
ebd8d4e8 6083
ab78acc6
IC
6084 // a flag to know if we're processing previously buffered items, which
6085 // may call the _write() callback in the same tick, so that we don't
6086 // end up in an overlapped onwrite situation.
6087 this.bufferProcessing = false;
ebd8d4e8 6088
ab78acc6
IC
6089 // the callback that's passed to _write(chunk,cb)
6090 this.onwrite = function(er) {
6091 onwrite(stream, er);
6092 };
ebd8d4e8 6093
ab78acc6
IC
6094 // the callback that the user supplies to write(chunk,encoding,cb)
6095 this.writecb = null;
ebd8d4e8 6096
ab78acc6
IC
6097 // the amount that is being written when _write is called.
6098 this.writelen = 0;
ebd8d4e8 6099
ab78acc6 6100 this.buffer = [];
ebd8d4e8 6101
ab78acc6
IC
6102 // number of pending user-supplied write callbacks
6103 // this must be 0 before 'finish' can be emitted
6104 this.pendingcb = 0;
ebd8d4e8 6105
ab78acc6
IC
6106 // emit prefinish if the only thing we're waiting for is _write cbs
6107 // This is relevant for synchronous Transform streams
6108 this.prefinished = false;
ebd8d4e8 6109
ab78acc6
IC
6110 // True if the error was already emitted and should not be thrown again
6111 this.errorEmitted = false;
ebd8d4e8
IC
6112}
6113
ab78acc6
IC
6114function Writable(options) {
6115 var Duplex = require('./_stream_duplex');
ebd8d4e8 6116
ab78acc6
IC
6117 // Writable ctor is applied to Duplexes, though they're not
6118 // instanceof Writable, they're instanceof Readable.
6119 if (!(this instanceof Writable) && !(this instanceof Duplex))
6120 return new Writable(options);
ebd8d4e8 6121
ab78acc6 6122 this._writableState = new WritableState(options, this);
ebd8d4e8 6123
ab78acc6
IC
6124 // legacy.
6125 this.writable = true;
ebd8d4e8 6126
ab78acc6 6127 Stream.call(this);
ebd8d4e8
IC
6128}
6129
ab78acc6
IC
6130// Otherwise people can pipe Writable streams, which is just wrong.
6131Writable.prototype.pipe = function() {
6132 this.emit('error', new Error('Cannot pipe. Not readable.'));
6133};
ebd8d4e8 6134
ebd8d4e8 6135
ab78acc6
IC
6136function writeAfterEnd(stream, state, cb) {
6137 var er = new Error('write after end');
6138 // TODO: defer error events consistently everywhere, not just the cb
6139 stream.emit('error', er);
6140 process.nextTick(function() {
6141 cb(er);
6142 });
ebd8d4e8
IC
6143}
6144
ab78acc6
IC
6145// If we get something that is not a buffer, string, null, or undefined,
6146// and we're not in objectMode, then that's an error.
6147// Otherwise stream chunks are all considered to be of length=1, and the
6148// watermarks determine how many objects to keep in the buffer, rather than
6149// how many bytes or characters.
6150function validChunk(stream, state, chunk, cb) {
6151 var valid = true;
6152 if (!util.isBuffer(chunk) &&
6153 !util.isString(chunk) &&
6154 !util.isNullOrUndefined(chunk) &&
6155 !state.objectMode) {
6156 var er = new TypeError('Invalid non-string/buffer chunk');
6157 stream.emit('error', er);
6158 process.nextTick(function() {
6159 cb(er);
6160 });
6161 valid = false;
6162 }
6163 return valid;
ebd8d4e8
IC
6164}
6165
ab78acc6
IC
6166Writable.prototype.write = function(chunk, encoding, cb) {
6167 var state = this._writableState;
6168 var ret = false;
ebd8d4e8 6169
ab78acc6
IC
6170 if (util.isFunction(encoding)) {
6171 cb = encoding;
6172 encoding = null;
ebd8d4e8 6173 }
ebd8d4e8 6174
ab78acc6
IC
6175 if (util.isBuffer(chunk))
6176 encoding = 'buffer';
6177 else if (!encoding)
6178 encoding = state.defaultEncoding;
6179
6180 if (!util.isFunction(cb))
6181 cb = function() {};
6182
6183 if (state.ended)
6184 writeAfterEnd(this, state, cb);
6185 else if (validChunk(this, state, chunk, cb)) {
6186 state.pendingcb++;
6187 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6188 }
ebd8d4e8 6189
ab78acc6
IC
6190 return ret;
6191};
6192
6193Writable.prototype.cork = function() {
6194 var state = this._writableState;
6195
6196 state.corked++;
6197};
ebd8d4e8 6198
ab78acc6
IC
6199Writable.prototype.uncork = function() {
6200 var state = this._writableState;
ebd8d4e8 6201
ab78acc6
IC
6202 if (state.corked) {
6203 state.corked--;
ebd8d4e8 6204
ab78acc6
IC
6205 if (!state.writing &&
6206 !state.corked &&
6207 !state.finished &&
6208 !state.bufferProcessing &&
6209 state.buffer.length)
6210 clearBuffer(this, state);
ebd8d4e8 6211 }
ab78acc6 6212};
ebd8d4e8 6213
ab78acc6
IC
6214function decodeChunk(state, chunk, encoding) {
6215 if (!state.objectMode &&
6216 state.decodeStrings !== false &&
6217 util.isString(chunk)) {
6218 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6219 }
ab78acc6 6220 return chunk;
ebd8d4e8
IC
6221}
6222
ab78acc6
IC
6223// if we're already writing something, then just put this
6224// in the queue, and wait our turn. Otherwise, call _write
6225// If we return false, then we need a drain event, so set that flag.
6226function writeOrBuffer(stream, state, chunk, encoding, cb) {
6227 chunk = decodeChunk(state, chunk, encoding);
6228 if (util.isBuffer(chunk))
6229 encoding = 'buffer';
6230 var len = state.objectMode ? 1 : chunk.length;
6231
6232 state.length += len;
6233
6234 var ret = state.length < state.highWaterMark;
6235 // we must ensure that previous needDrain will not be reset to false.
6236 if (!ret)
6237 state.needDrain = true;
6238
6239 if (state.writing || state.corked)
6240 state.buffer.push(new WriteReq(chunk, encoding, cb));
6241 else
6242 doWrite(stream, state, false, len, chunk, encoding, cb);
6243
6244 return ret;
ebd8d4e8
IC
6245}
6246
ab78acc6
IC
6247function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6248 state.writelen = len;
6249 state.writecb = cb;
6250 state.writing = true;
6251 state.sync = true;
6252 if (writev)
6253 stream._writev(chunk, state.onwrite);
6254 else
6255 stream._write(chunk, encoding, state.onwrite);
6256 state.sync = false;
ebd8d4e8
IC
6257}
6258
ab78acc6
IC
6259function onwriteError(stream, state, sync, er, cb) {
6260 if (sync)
6261 process.nextTick(function() {
6262 state.pendingcb--;
6263 cb(er);
6264 });
6265 else {
6266 state.pendingcb--;
6267 cb(er);
6268 }
ebd8d4e8 6269
ab78acc6
IC
6270 stream._writableState.errorEmitted = true;
6271 stream.emit('error', er);
6272}
ebd8d4e8 6273
ab78acc6
IC
6274function onwriteStateUpdate(state) {
6275 state.writing = false;
6276 state.writecb = null;
6277 state.length -= state.writelen;
6278 state.writelen = 0;
6279}
ebd8d4e8 6280
ab78acc6
IC
6281function onwrite(stream, er) {
6282 var state = stream._writableState;
6283 var sync = state.sync;
6284 var cb = state.writecb;
ebd8d4e8 6285
ab78acc6 6286 onwriteStateUpdate(state);
ebd8d4e8 6287
ab78acc6
IC
6288 if (er)
6289 onwriteError(stream, state, sync, er, cb);
6290 else {
6291 // Check if we're actually ready to finish, but don't emit yet
6292 var finished = needFinish(stream, state);
ebd8d4e8 6293
ab78acc6
IC
6294 if (!finished &&
6295 !state.corked &&
6296 !state.bufferProcessing &&
6297 state.buffer.length) {
6298 clearBuffer(stream, state);
6299 }
6300
6301 if (sync) {
6302 process.nextTick(function() {
6303 afterWrite(stream, state, finished, cb);
6304 });
6305 } else {
6306 afterWrite(stream, state, finished, cb);
ebd8d4e8 6307 }
ebd8d4e8
IC
6308 }
6309}
6310
ab78acc6
IC
6311function afterWrite(stream, state, finished, cb) {
6312 if (!finished)
6313 onwriteDrain(stream, state);
6314 state.pendingcb--;
6315 cb();
6316 finishMaybe(stream, state);
6317}
6318
6319// Must force callback to be called on nextTick, so that we don't
6320// emit 'drain' before the write() consumer gets the 'false' return
6321// value, and has a chance to attach a 'drain' listener.
6322function onwriteDrain(stream, state) {
6323 if (state.length === 0 && state.needDrain) {
6324 state.needDrain = false;
6325 stream.emit('drain');
ebd8d4e8
IC
6326 }
6327}
6328
ebd8d4e8 6329
ab78acc6
IC
6330// if there's something in the buffer waiting, then process it
6331function clearBuffer(stream, state) {
6332 state.bufferProcessing = true;
6333
6334 if (stream._writev && state.buffer.length > 1) {
6335 // Fast case, write everything using _writev()
6336 var cbs = [];
6337 for (var c = 0; c < state.buffer.length; c++)
6338 cbs.push(state.buffer[c].callback);
6339
6340 // count the one we are adding, as well.
6341 // TODO(isaacs) clean this up
6342 state.pendingcb++;
6343 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6344 for (var i = 0; i < cbs.length; i++) {
6345 state.pendingcb--;
6346 cbs[i](err);
6347 }
6348 });
6349
6350 // Clear buffer
6351 state.buffer = [];
6352 } else {
6353 // Slow case, write chunks one-by-one
6354 for (var c = 0; c < state.buffer.length; c++) {
6355 var entry = state.buffer[c];
6356 var chunk = entry.chunk;
6357 var encoding = entry.encoding;
6358 var cb = entry.callback;
6359 var len = state.objectMode ? 1 : chunk.length;
6360
6361 doWrite(stream, state, false, len, chunk, encoding, cb);
6362
6363 // if we didn't call the onwrite immediately, then
6364 // it means that we need to wait until it does.
6365 // also, that means that the chunk and cb are currently
6366 // being processed, so move the buffer counter past them.
6367 if (state.writing) {
6368 c++;
6369 break;
6370 }
ebd8d4e8 6371 }
ab78acc6
IC
6372
6373 if (c < state.buffer.length)
6374 state.buffer = state.buffer.slice(c);
6375 else
6376 state.buffer.length = 0;
ebd8d4e8
IC
6377 }
6378
ab78acc6 6379 state.bufferProcessing = false;
ebd8d4e8
IC
6380}
6381
ab78acc6
IC
6382Writable.prototype._write = function(chunk, encoding, cb) {
6383 cb(new Error('not implemented'));
ebd8d4e8 6384
ab78acc6 6385};
ebd8d4e8 6386
ab78acc6 6387Writable.prototype._writev = null;
ebd8d4e8 6388
ab78acc6
IC
6389Writable.prototype.end = function(chunk, encoding, cb) {
6390 var state = this._writableState;
ebd8d4e8 6391
ab78acc6
IC
6392 if (util.isFunction(chunk)) {
6393 cb = chunk;
6394 chunk = null;
6395 encoding = null;
6396 } else if (util.isFunction(encoding)) {
6397 cb = encoding;
6398 encoding = null;
6399 }
ebd8d4e8 6400
ab78acc6
IC
6401 if (!util.isNullOrUndefined(chunk))
6402 this.write(chunk, encoding);
6403
6404 // .end() fully uncorks
6405 if (state.corked) {
6406 state.corked = 1;
6407 this.uncork();
ebd8d4e8 6408 }
ab78acc6
IC
6409
6410 // ignore unnecessary end() calls.
6411 if (!state.ending && !state.finished)
6412 endWritable(this, state, cb);
6413};
6414
6415
6416function needFinish(stream, state) {
6417 return (state.ending &&
6418 state.length === 0 &&
6419 !state.finished &&
6420 !state.writing);
ebd8d4e8
IC
6421}
6422
ab78acc6
IC
6423function prefinish(stream, state) {
6424 if (!state.prefinished) {
6425 state.prefinished = true;
6426 stream.emit('prefinish');
ebd8d4e8 6427 }
ebd8d4e8
IC
6428}
6429
ab78acc6
IC
6430function finishMaybe(stream, state) {
6431 var need = needFinish(stream, state);
6432 if (need) {
6433 if (state.pendingcb === 0) {
6434 prefinish(stream, state);
6435 state.finished = true;
6436 stream.emit('finish');
6437 } else
6438 prefinish(stream, state);
6439 }
6440 return need;
6441}
ebd8d4e8 6442
ab78acc6
IC
6443function endWritable(stream, state, cb) {
6444 state.ending = true;
6445 finishMaybe(stream, state);
6446 if (cb) {
6447 if (state.finished)
6448 process.nextTick(cb);
6449 else
6450 stream.once('finish', cb);
ebd8d4e8 6451 }
ab78acc6 6452 state.ended = true;
ebd8d4e8
IC
6453}
6454
ab78acc6
IC
6455}).call(this,require('_process'))
6456},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6457(function (Buffer){
6458// Copyright Joyent, Inc. and other Node contributors.
6459//
6460// Permission is hereby granted, free of charge, to any person obtaining a
6461// copy of this software and associated documentation files (the
6462// "Software"), to deal in the Software without restriction, including
6463// without limitation the rights to use, copy, modify, merge, publish,
6464// distribute, sublicense, and/or sell copies of the Software, and to permit
6465// persons to whom the Software is furnished to do so, subject to the
6466// following conditions:
6467//
6468// The above copyright notice and this permission notice shall be included
6469// in all copies or substantial portions of the Software.
6470//
6471// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6472// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6473// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6474// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6475// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6476// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6477// USE OR OTHER DEALINGS IN THE SOFTWARE.
6478
6479// NOTE: These type checking functions intentionally don't use `instanceof`
6480// because it is fragile and can be easily faked with `Object.create()`.
6481function isArray(ar) {
6482 return Array.isArray(ar);
ebd8d4e8 6483}
ab78acc6 6484exports.isArray = isArray;
ebd8d4e8 6485
ab78acc6
IC
6486function isBoolean(arg) {
6487 return typeof arg === 'boolean';
ebd8d4e8 6488}
ab78acc6 6489exports.isBoolean = isBoolean;
ebd8d4e8 6490
ab78acc6
IC
6491function isNull(arg) {
6492 return arg === null;
6493}
6494exports.isNull = isNull;
ebd8d4e8 6495
ab78acc6
IC
6496function isNullOrUndefined(arg) {
6497 return arg == null;
6498}
6499exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6500
ab78acc6
IC
6501function isNumber(arg) {
6502 return typeof arg === 'number';
ebd8d4e8 6503}
ab78acc6 6504exports.isNumber = isNumber;
ebd8d4e8 6505
ab78acc6
IC
6506function isString(arg) {
6507 return typeof arg === 'string';
6508}
6509exports.isString = isString;
ebd8d4e8 6510
ab78acc6
IC
6511function isSymbol(arg) {
6512 return typeof arg === 'symbol';
6513}
6514exports.isSymbol = isSymbol;
ebd8d4e8 6515
ab78acc6
IC
6516function isUndefined(arg) {
6517 return arg === void 0;
ebd8d4e8 6518}
ab78acc6 6519exports.isUndefined = isUndefined;
ebd8d4e8 6520
ab78acc6
IC
6521function isRegExp(re) {
6522 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6523}
ab78acc6 6524exports.isRegExp = isRegExp;
ebd8d4e8 6525
ab78acc6
IC
6526function isObject(arg) {
6527 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6528}
ab78acc6 6529exports.isObject = isObject;
ebd8d4e8 6530
ab78acc6
IC
6531function isDate(d) {
6532 return isObject(d) && objectToString(d) === '[object Date]';
6533}
6534exports.isDate = isDate;
ebd8d4e8 6535
ab78acc6
IC
6536function isError(e) {
6537 return isObject(e) &&
6538 (objectToString(e) === '[object Error]' || e instanceof Error);
6539}
6540exports.isError = isError;
ebd8d4e8 6541
ab78acc6
IC
6542function isFunction(arg) {
6543 return typeof arg === 'function';
6544}
6545exports.isFunction = isFunction;
6546
6547function isPrimitive(arg) {
6548 return arg === null ||
6549 typeof arg === 'boolean' ||
6550 typeof arg === 'number' ||
6551 typeof arg === 'string' ||
6552 typeof arg === 'symbol' || // ES6 symbol
6553 typeof arg === 'undefined';
ebd8d4e8 6554}
ab78acc6 6555exports.isPrimitive = isPrimitive;
ebd8d4e8 6556
ab78acc6
IC
6557function isBuffer(arg) {
6558 return Buffer.isBuffer(arg);
ebd8d4e8 6559}
ab78acc6 6560exports.isBuffer = isBuffer;
ebd8d4e8 6561
ab78acc6
IC
6562function objectToString(o) {
6563 return Object.prototype.toString.call(o);
ebd8d4e8 6564}
ab78acc6
IC
6565}).call(this,require("buffer").Buffer)
6566},{"buffer":7}],22:[function(require,module,exports){
6567module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6568
ab78acc6
IC
6569},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6570exports = module.exports = require('./lib/_stream_readable.js');
6571exports.Stream = require('stream');
6572exports.Readable = exports;
6573exports.Writable = require('./lib/_stream_writable.js');
6574exports.Duplex = require('./lib/_stream_duplex.js');
6575exports.Transform = require('./lib/_stream_transform.js');
6576exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6577
ab78acc6
IC
6578},{"./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){
6579module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6580
ab78acc6
IC
6581},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6582module.exports = require("./lib/_stream_writable.js")
6583
6584},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6585// Copyright Joyent, Inc. and other Node contributors.
6586//
6587// Permission is hereby granted, free of charge, to any person obtaining a
6588// copy of this software and associated documentation files (the
6589// "Software"), to deal in the Software without restriction, including
6590// without limitation the rights to use, copy, modify, merge, publish,
6591// distribute, sublicense, and/or sell copies of the Software, and to permit
6592// persons to whom the Software is furnished to do so, subject to the
6593// following conditions:
6594//
6595// The above copyright notice and this permission notice shall be included
6596// in all copies or substantial portions of the Software.
6597//
6598// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6599// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6600// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6601// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6602// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6603// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6604// USE OR OTHER DEALINGS IN THE SOFTWARE.
6605
6606module.exports = Stream;
6607
6608var EE = require('events').EventEmitter;
6609var inherits = require('inherits');
6610
6611inherits(Stream, EE);
6612Stream.Readable = require('readable-stream/readable.js');
6613Stream.Writable = require('readable-stream/writable.js');
6614Stream.Duplex = require('readable-stream/duplex.js');
6615Stream.Transform = require('readable-stream/transform.js');
6616Stream.PassThrough = require('readable-stream/passthrough.js');
6617
6618// Backwards-compat with node 0.4.x
6619Stream.Stream = Stream;
6620
6621
6622
6623// old-style streams. Note that the pipe method (the only relevant
6624// part of this class) is overridden in the Readable class.
6625
6626function Stream() {
6627 EE.call(this);
ebd8d4e8
IC
6628}
6629
ab78acc6
IC
6630Stream.prototype.pipe = function(dest, options) {
6631 var source = this;
ebd8d4e8 6632
ab78acc6
IC
6633 function ondata(chunk) {
6634 if (dest.writable) {
6635 if (false === dest.write(chunk) && source.pause) {
6636 source.pause();
6637 }
6638 }
6639 }
ebd8d4e8 6640
ab78acc6 6641 source.on('data', ondata);
ebd8d4e8 6642
ab78acc6
IC
6643 function ondrain() {
6644 if (source.readable && source.resume) {
6645 source.resume();
6646 }
6647 }
ebd8d4e8 6648
ab78acc6 6649 dest.on('drain', ondrain);
ebd8d4e8 6650
ab78acc6
IC
6651 // If the 'end' option is not supplied, dest.end() will be called when
6652 // source gets the 'end' or 'close' events. Only dest.end() once.
6653 if (!dest._isStdio && (!options || options.end !== false)) {
6654 source.on('end', onend);
6655 source.on('close', onclose);
ebd8d4e8
IC
6656 }
6657
ab78acc6
IC
6658 var didOnEnd = false;
6659 function onend() {
6660 if (didOnEnd) return;
6661 didOnEnd = true;
ebd8d4e8 6662
ab78acc6
IC
6663 dest.end();
6664 }
ebd8d4e8 6665
ebd8d4e8 6666
ab78acc6
IC
6667 function onclose() {
6668 if (didOnEnd) return;
6669 didOnEnd = true;
ebd8d4e8 6670
ab78acc6 6671 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6672 }
6673
ab78acc6
IC
6674 // don't leave dangling pipes when there are errors.
6675 function onerror(er) {
6676 cleanup();
6677 if (EE.listenerCount(this, 'error') === 0) {
6678 throw er; // Unhandled stream error in pipe.
6679 }
6680 }
ebd8d4e8 6681
ab78acc6
IC
6682 source.on('error', onerror);
6683 dest.on('error', onerror);
ebd8d4e8 6684
ab78acc6
IC
6685 // remove all the event listeners that were added.
6686 function cleanup() {
6687 source.removeListener('data', ondata);
6688 dest.removeListener('drain', ondrain);
ebd8d4e8 6689
ab78acc6
IC
6690 source.removeListener('end', onend);
6691 source.removeListener('close', onclose);
6692
6693 source.removeListener('error', onerror);
6694 dest.removeListener('error', onerror);
6695
6696 source.removeListener('end', cleanup);
6697 source.removeListener('close', cleanup);
6698
6699 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6700 }
6701
ab78acc6
IC
6702 source.on('end', cleanup);
6703 source.on('close', cleanup);
ebd8d4e8 6704
ab78acc6 6705 dest.on('close', cleanup);
ebd8d4e8 6706
ab78acc6 6707 dest.emit('pipe', source);
ebd8d4e8 6708
ab78acc6
IC
6709 // Allow for unix-like usage: A.pipe(B).pipe(C)
6710 return dest;
6711};
ebd8d4e8 6712
ab78acc6
IC
6713},{"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){
6714// Copyright Joyent, Inc. and other Node contributors.
6715//
6716// Permission is hereby granted, free of charge, to any person obtaining a
6717// copy of this software and associated documentation files (the
6718// "Software"), to deal in the Software without restriction, including
6719// without limitation the rights to use, copy, modify, merge, publish,
6720// distribute, sublicense, and/or sell copies of the Software, and to permit
6721// persons to whom the Software is furnished to do so, subject to the
6722// following conditions:
6723//
6724// The above copyright notice and this permission notice shall be included
6725// in all copies or substantial portions of the Software.
6726//
6727// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6728// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6729// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6730// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6731// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6732// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6733// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6734
ab78acc6 6735var Buffer = require('buffer').Buffer;
ebd8d4e8 6736
ab78acc6
IC
6737var isBufferEncoding = Buffer.isEncoding
6738 || function(encoding) {
6739 switch (encoding && encoding.toLowerCase()) {
6740 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;
6741 default: return false;
6742 }
6743 }
ebd8d4e8 6744
ebd8d4e8 6745
ab78acc6
IC
6746function assertEncoding(encoding) {
6747 if (encoding && !isBufferEncoding(encoding)) {
6748 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6749 }
ebd8d4e8
IC
6750}
6751
ab78acc6
IC
6752// StringDecoder provides an interface for efficiently splitting a series of
6753// buffers into a series of JS strings without breaking apart multi-byte
6754// characters. CESU-8 is handled as part of the UTF-8 encoding.
6755//
6756// @TODO Handling all encodings inside a single object makes it very difficult
6757// to reason about this code, so it should be split up in the future.
6758// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6759// points as used by CESU-8.
6760var StringDecoder = exports.StringDecoder = function(encoding) {
6761 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6762 assertEncoding(encoding);
6763 switch (this.encoding) {
6764 case 'utf8':
6765 // CESU-8 represents each of Surrogate Pair by 3-bytes
6766 this.surrogateSize = 3;
6767 break;
6768 case 'ucs2':
6769 case 'utf16le':
6770 // UTF-16 represents each of Surrogate Pair by 2-bytes
6771 this.surrogateSize = 2;
6772 this.detectIncompleteChar = utf16DetectIncompleteChar;
6773 break;
6774 case 'base64':
6775 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6776 this.surrogateSize = 3;
6777 this.detectIncompleteChar = base64DetectIncompleteChar;
6778 break;
6779 default:
6780 this.write = passThroughWrite;
6781 return;
6782 }
ebd8d4e8 6783
ab78acc6
IC
6784 // Enough space to store all bytes of a single character. UTF-8 needs 4
6785 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6786 this.charBuffer = new Buffer(6);
6787 // Number of bytes received for the current incomplete multi-byte character.
6788 this.charReceived = 0;
6789 // Number of bytes expected for the current incomplete multi-byte character.
6790 this.charLength = 0;
6791};
ebd8d4e8 6792
ebd8d4e8 6793
ab78acc6
IC
6794// write decodes the given buffer and returns it as JS string that is
6795// guaranteed to not contain any partial multi-byte characters. Any partial
6796// character found at the end of the buffer is buffered up, and will be
6797// returned when calling write again with the remaining bytes.
6798//
6799// Note: Converting a Buffer containing an orphan surrogate to a String
6800// currently works, but converting a String to a Buffer (via `new Buffer`, or
6801// Buffer#write) will replace incomplete surrogates with the unicode
6802// replacement character. See https://codereview.chromium.org/121173009/ .
6803StringDecoder.prototype.write = function(buffer) {
6804 var charStr = '';
6805 // if our last write ended with an incomplete multibyte character
6806 while (this.charLength) {
6807 // determine how many remaining bytes this buffer has to offer for this char
6808 var available = (buffer.length >= this.charLength - this.charReceived) ?
6809 this.charLength - this.charReceived :
6810 buffer.length;
6811
6812 // add the new bytes to the char buffer
6813 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6814 this.charReceived += available;
6815
6816 if (this.charReceived < this.charLength) {
6817 // still not enough chars in this buffer? wait for more ...
6818 return '';
6819 }
6820
6821 // remove bytes belonging to the current character from the buffer
6822 buffer = buffer.slice(available, buffer.length);
6823
6824 // get the character that was split
6825 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6826
6827 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6828 var charCode = charStr.charCodeAt(charStr.length - 1);
6829 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6830 this.charLength += this.surrogateSize;
6831 charStr = '';
6832 continue;
6833 }
6834 this.charReceived = this.charLength = 0;
ebd8d4e8 6835
ab78acc6
IC
6836 // if there are no more bytes in this buffer, just emit our char
6837 if (buffer.length === 0) {
6838 return charStr;
6839 }
6840 break;
ebd8d4e8 6841 }
ebd8d4e8 6842
ab78acc6
IC
6843 // determine and set charLength / charReceived
6844 this.detectIncompleteChar(buffer);
ebd8d4e8 6845
ab78acc6
IC
6846 var end = buffer.length;
6847 if (this.charLength) {
6848 // buffer the incomplete character bytes we got
6849 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6850 end -= this.charReceived;
ebd8d4e8
IC
6851 }
6852
ab78acc6 6853 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 6854
ab78acc6
IC
6855 var end = charStr.length - 1;
6856 var charCode = charStr.charCodeAt(end);
6857 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6858 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6859 var size = this.surrogateSize;
6860 this.charLength += size;
6861 this.charReceived += size;
6862 this.charBuffer.copy(this.charBuffer, size, 0, size);
6863 buffer.copy(this.charBuffer, 0, 0, size);
6864 return charStr.substring(0, end);
ebd8d4e8
IC
6865 }
6866
ab78acc6
IC
6867 // or just emit the charStr
6868 return charStr;
6869};
ebd8d4e8 6870
ab78acc6
IC
6871// detectIncompleteChar determines if there is an incomplete UTF-8 character at
6872// the end of the given buffer. If so, it sets this.charLength to the byte
6873// length that character, and sets this.charReceived to the number of bytes
6874// that are available for this character.
6875StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6876 // determine how many bytes we have to check at the end of this buffer
6877 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 6878
ab78acc6
IC
6879 // Figure out if one of the last i bytes of our buffer announces an
6880 // incomplete char.
6881 for (; i > 0; i--) {
6882 var c = buffer[buffer.length - i];
ebd8d4e8 6883
ab78acc6 6884 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 6885
ab78acc6
IC
6886 // 110XXXXX
6887 if (i == 1 && c >> 5 == 0x06) {
6888 this.charLength = 2;
6889 break;
6890 }
ebd8d4e8 6891
ab78acc6
IC
6892 // 1110XXXX
6893 if (i <= 2 && c >> 4 == 0x0E) {
6894 this.charLength = 3;
6895 break;
6896 }
ebd8d4e8 6897
ab78acc6
IC
6898 // 11110XXX
6899 if (i <= 3 && c >> 3 == 0x1E) {
6900 this.charLength = 4;
6901 break;
6902 }
6903 }
6904 this.charReceived = i;
6905};
ebd8d4e8 6906
ab78acc6
IC
6907StringDecoder.prototype.end = function(buffer) {
6908 var res = '';
6909 if (buffer && buffer.length)
6910 res = this.write(buffer);
ebd8d4e8 6911
ab78acc6
IC
6912 if (this.charReceived) {
6913 var cr = this.charReceived;
6914 var buf = this.charBuffer;
6915 var enc = this.encoding;
6916 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
6917 }
6918
ab78acc6
IC
6919 return res;
6920};
ebd8d4e8 6921
ab78acc6
IC
6922function passThroughWrite(buffer) {
6923 return buffer.toString(this.encoding);
ebd8d4e8
IC
6924}
6925
ab78acc6
IC
6926function utf16DetectIncompleteChar(buffer) {
6927 this.charReceived = buffer.length % 2;
6928 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
6929}
6930
ab78acc6
IC
6931function base64DetectIncompleteChar(buffer) {
6932 this.charReceived = buffer.length % 3;
6933 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
6934}
6935
ab78acc6
IC
6936},{"buffer":7}],28:[function(require,module,exports){
6937module.exports = function isBuffer(arg) {
6938 return arg && typeof arg === 'object'
6939 && typeof arg.copy === 'function'
6940 && typeof arg.fill === 'function'
6941 && typeof arg.readUInt8 === 'function';
6942}
6943},{}],29:[function(require,module,exports){
6944(function (process,global){
6945// Copyright Joyent, Inc. and other Node contributors.
6946//
6947// Permission is hereby granted, free of charge, to any person obtaining a
6948// copy of this software and associated documentation files (the
6949// "Software"), to deal in the Software without restriction, including
6950// without limitation the rights to use, copy, modify, merge, publish,
6951// distribute, sublicense, and/or sell copies of the Software, and to permit
6952// persons to whom the Software is furnished to do so, subject to the
6953// following conditions:
6954//
6955// The above copyright notice and this permission notice shall be included
6956// in all copies or substantial portions of the Software.
6957//
6958// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6959// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6960// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6961// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6962// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6963// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6964// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6965
ab78acc6
IC
6966var formatRegExp = /%[sdj%]/g;
6967exports.format = function(f) {
6968 if (!isString(f)) {
6969 var objects = [];
6970 for (var i = 0; i < arguments.length; i++) {
6971 objects.push(inspect(arguments[i]));
6972 }
6973 return objects.join(' ');
6974 }
ebd8d4e8 6975
ab78acc6
IC
6976 var i = 1;
6977 var args = arguments;
6978 var len = args.length;
6979 var str = String(f).replace(formatRegExp, function(x) {
6980 if (x === '%%') return '%';
6981 if (i >= len) return x;
6982 switch (x) {
6983 case '%s': return String(args[i++]);
6984 case '%d': return Number(args[i++]);
6985 case '%j':
6986 try {
6987 return JSON.stringify(args[i++]);
6988 } catch (_) {
6989 return '[Circular]';
6990 }
6991 default:
6992 return x;
6993 }
6994 });
6995 for (var x = args[i]; i < len; x = args[++i]) {
6996 if (isNull(x) || !isObject(x)) {
6997 str += ' ' + x;
6998 } else {
6999 str += ' ' + inspect(x);
7000 }
7001 }
7002 return str;
7003};
ebd8d4e8 7004
ebd8d4e8 7005
ab78acc6
IC
7006// Mark that a method should not be used.
7007// Returns a modified function which warns once by default.
7008// If --no-deprecation is set, then it is a no-op.
7009exports.deprecate = function(fn, msg) {
7010 // Allow for deprecating things in the process of starting up.
7011 if (isUndefined(global.process)) {
7012 return function() {
7013 return exports.deprecate(fn, msg).apply(this, arguments);
7014 };
7015 }
ebd8d4e8 7016
ab78acc6
IC
7017 if (process.noDeprecation === true) {
7018 return fn;
7019 }
ebd8d4e8 7020
ab78acc6
IC
7021 var warned = false;
7022 function deprecated() {
7023 if (!warned) {
7024 if (process.throwDeprecation) {
7025 throw new Error(msg);
7026 } else if (process.traceDeprecation) {
7027 console.trace(msg);
7028 } else {
7029 console.error(msg);
7030 }
7031 warned = true;
7032 }
7033 return fn.apply(this, arguments);
7034 }
ebd8d4e8 7035
ab78acc6
IC
7036 return deprecated;
7037};
ebd8d4e8 7038
ebd8d4e8 7039
ab78acc6
IC
7040var debugs = {};
7041var debugEnviron;
7042exports.debuglog = function(set) {
7043 if (isUndefined(debugEnviron))
7044 debugEnviron = process.env.NODE_DEBUG || '';
7045 set = set.toUpperCase();
7046 if (!debugs[set]) {
7047 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7048 var pid = process.pid;
7049 debugs[set] = function() {
7050 var msg = exports.format.apply(exports, arguments);
7051 console.error('%s %d: %s', set, pid, msg);
7052 };
7053 } else {
7054 debugs[set] = function() {};
ebd8d4e8
IC
7055 }
7056 }
ab78acc6
IC
7057 return debugs[set];
7058};
ebd8d4e8 7059
ebd8d4e8
IC
7060
7061/**
ab78acc6
IC
7062 * Echos the value of a value. Trys to print the value out
7063 * in the best way possible given the different types.
7064 *
7065 * @param {Object} obj The object to print out.
7066 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7067 */
ab78acc6
IC
7068/* legacy: obj, showHidden, depth, colors*/
7069function inspect(obj, opts) {
7070 // default options
7071 var ctx = {
7072 seen: [],
7073 stylize: stylizeNoColor
7074 };
7075 // legacy...
7076 if (arguments.length >= 3) ctx.depth = arguments[2];
7077 if (arguments.length >= 4) ctx.colors = arguments[3];
7078 if (isBoolean(opts)) {
7079 // legacy...
7080 ctx.showHidden = opts;
7081 } else if (opts) {
7082 // got an "options" object
7083 exports._extend(ctx, opts);
ebd8d4e8 7084 }
ab78acc6
IC
7085 // set default options
7086 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7087 if (isUndefined(ctx.depth)) ctx.depth = 2;
7088 if (isUndefined(ctx.colors)) ctx.colors = false;
7089 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7090 if (ctx.colors) ctx.stylize = stylizeWithColor;
7091 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7092}
ab78acc6 7093exports.inspect = inspect;
ebd8d4e8 7094
ebd8d4e8 7095
ab78acc6
IC
7096// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7097inspect.colors = {
7098 'bold' : [1, 22],
7099 'italic' : [3, 23],
7100 'underline' : [4, 24],
7101 'inverse' : [7, 27],
7102 'white' : [37, 39],
7103 'grey' : [90, 39],
7104 'black' : [30, 39],
7105 'blue' : [34, 39],
7106 'cyan' : [36, 39],
7107 'green' : [32, 39],
7108 'magenta' : [35, 39],
7109 'red' : [31, 39],
7110 'yellow' : [33, 39]
7111};
ebd8d4e8 7112
ab78acc6
IC
7113// Don't use 'blue' not visible on cmd.exe
7114inspect.styles = {
7115 'special': 'cyan',
7116 'number': 'yellow',
7117 'boolean': 'yellow',
7118 'undefined': 'grey',
7119 'null': 'bold',
7120 'string': 'green',
7121 'date': 'magenta',
7122 // "name": intentionally not styling
7123 'regexp': 'red'
7124};
ebd8d4e8 7125
ebd8d4e8 7126
ab78acc6
IC
7127function stylizeWithColor(str, styleType) {
7128 var style = inspect.styles[styleType];
ebd8d4e8 7129
ab78acc6
IC
7130 if (style) {
7131 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7132 '\u001b[' + inspect.colors[style][1] + 'm';
7133 } else {
7134 return str;
ebd8d4e8 7135 }
ebd8d4e8
IC
7136}
7137
ebd8d4e8 7138
ab78acc6
IC
7139function stylizeNoColor(str, styleType) {
7140 return str;
ebd8d4e8
IC
7141}
7142
ebd8d4e8 7143
ab78acc6
IC
7144function arrayToHash(array) {
7145 var hash = {};
ebd8d4e8 7146
ab78acc6
IC
7147 array.forEach(function(val, idx) {
7148 hash[val] = true;
7149 });
ebd8d4e8 7150
ab78acc6 7151 return hash;
ebd8d4e8
IC
7152}
7153
ebd8d4e8 7154
ab78acc6
IC
7155function formatValue(ctx, value, recurseTimes) {
7156 // Provide a hook for user-specified inspect functions.
7157 // Check that value is an object with an inspect function on it
7158 if (ctx.customInspect &&
7159 value &&
7160 isFunction(value.inspect) &&
7161 // Filter out the util module, it's inspect function is special
7162 value.inspect !== exports.inspect &&
7163 // Also filter out any prototype objects using the circular check.
7164 !(value.constructor && value.constructor.prototype === value)) {
7165 var ret = value.inspect(recurseTimes, ctx);
7166 if (!isString(ret)) {
7167 ret = formatValue(ctx, ret, recurseTimes);
7168 }
7169 return ret;
ebd8d4e8 7170 }
ebd8d4e8 7171
ab78acc6
IC
7172 // Primitive types cannot have properties
7173 var primitive = formatPrimitive(ctx, value);
7174 if (primitive) {
7175 return primitive;
ebd8d4e8
IC
7176 }
7177
ab78acc6
IC
7178 // Look up the keys of the object.
7179 var keys = Object.keys(value);
7180 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7181
ab78acc6
IC
7182 if (ctx.showHidden) {
7183 keys = Object.getOwnPropertyNames(value);
7184 }
ebd8d4e8 7185
ab78acc6
IC
7186 // IE doesn't make error fields non-enumerable
7187 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7188 if (isError(value)
7189 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7190 return formatError(value);
ebd8d4e8 7191 }
ebd8d4e8 7192
ab78acc6
IC
7193 // Some type of object without properties can be shortcutted.
7194 if (keys.length === 0) {
7195 if (isFunction(value)) {
7196 var name = value.name ? ': ' + value.name : '';
7197 return ctx.stylize('[Function' + name + ']', 'special');
7198 }
7199 if (isRegExp(value)) {
7200 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7201 }
7202 if (isDate(value)) {
7203 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7204 }
7205 if (isError(value)) {
7206 return formatError(value);
7207 }
ebd8d4e8 7208 }
ebd8d4e8 7209
ab78acc6 7210 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7211
ab78acc6
IC
7212 // Make Array say that they are Array
7213 if (isArray(value)) {
7214 array = true;
7215 braces = ['[', ']'];
7216 }
ebd8d4e8 7217
ab78acc6
IC
7218 // Make functions say that they are functions
7219 if (isFunction(value)) {
7220 var n = value.name ? ': ' + value.name : '';
7221 base = ' [Function' + n + ']';
7222 }
ebd8d4e8 7223
ab78acc6
IC
7224 // Make RegExps say that they are RegExps
7225 if (isRegExp(value)) {
7226 base = ' ' + RegExp.prototype.toString.call(value);
7227 }
ebd8d4e8 7228
ab78acc6
IC
7229 // Make dates with properties first say the date
7230 if (isDate(value)) {
7231 base = ' ' + Date.prototype.toUTCString.call(value);
7232 }
ebd8d4e8 7233
ab78acc6
IC
7234 // Make error with message first say the error
7235 if (isError(value)) {
7236 base = ' ' + formatError(value);
7237 }
ebd8d4e8 7238
ab78acc6
IC
7239 if (keys.length === 0 && (!array || value.length == 0)) {
7240 return braces[0] + base + braces[1];
7241 }
ebd8d4e8 7242
ab78acc6
IC
7243 if (recurseTimes < 0) {
7244 if (isRegExp(value)) {
7245 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7246 } else {
7247 return ctx.stylize('[Object]', 'special');
7248 }
7249 }
ebd8d4e8 7250
ab78acc6 7251 ctx.seen.push(value);
ebd8d4e8 7252
ab78acc6
IC
7253 var output;
7254 if (array) {
7255 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7256 } else {
7257 output = keys.map(function(key) {
7258 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7259 });
7260 }
ebd8d4e8 7261
ab78acc6 7262 ctx.seen.pop();
ebd8d4e8 7263
ab78acc6
IC
7264 return reduceToSingleString(output, base, braces);
7265}
ebd8d4e8 7266
ebd8d4e8 7267
ab78acc6
IC
7268function formatPrimitive(ctx, value) {
7269 if (isUndefined(value))
7270 return ctx.stylize('undefined', 'undefined');
7271 if (isString(value)) {
7272 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7273 .replace(/'/g, "\\'")
7274 .replace(/\\"/g, '"') + '\'';
7275 return ctx.stylize(simple, 'string');
7276 }
7277 if (isNumber(value))
7278 return ctx.stylize('' + value, 'number');
7279 if (isBoolean(value))
7280 return ctx.stylize('' + value, 'boolean');
7281 // For some reason typeof null is "object", so special case here.
7282 if (isNull(value))
7283 return ctx.stylize('null', 'null');
7284}
ebd8d4e8 7285
ebd8d4e8 7286
ab78acc6
IC
7287function formatError(value) {
7288 return '[' + Error.prototype.toString.call(value) + ']';
7289}
ebd8d4e8 7290
ebd8d4e8 7291
ab78acc6
IC
7292function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7293 var output = [];
7294 for (var i = 0, l = value.length; i < l; ++i) {
7295 if (hasOwnProperty(value, String(i))) {
7296 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7297 String(i), true));
7298 } else {
7299 output.push('');
7300 }
7301 }
7302 keys.forEach(function(key) {
7303 if (!key.match(/^\d+$/)) {
7304 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7305 key, true));
7306 }
7307 });
7308 return output;
7309}
ebd8d4e8 7310
ebd8d4e8 7311
ab78acc6
IC
7312function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7313 var name, str, desc;
7314 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7315 if (desc.get) {
7316 if (desc.set) {
7317 str = ctx.stylize('[Getter/Setter]', 'special');
7318 } else {
7319 str = ctx.stylize('[Getter]', 'special');
7320 }
7321 } else {
7322 if (desc.set) {
7323 str = ctx.stylize('[Setter]', 'special');
7324 }
7325 }
7326 if (!hasOwnProperty(visibleKeys, key)) {
7327 name = '[' + key + ']';
7328 }
7329 if (!str) {
7330 if (ctx.seen.indexOf(desc.value) < 0) {
7331 if (isNull(recurseTimes)) {
7332 str = formatValue(ctx, desc.value, null);
7333 } else {
7334 str = formatValue(ctx, desc.value, recurseTimes - 1);
7335 }
7336 if (str.indexOf('\n') > -1) {
7337 if (array) {
7338 str = str.split('\n').map(function(line) {
7339 return ' ' + line;
7340 }).join('\n').substr(2);
7341 } else {
7342 str = '\n' + str.split('\n').map(function(line) {
7343 return ' ' + line;
7344 }).join('\n');
7345 }
7346 }
7347 } else {
7348 str = ctx.stylize('[Circular]', 'special');
7349 }
7350 }
7351 if (isUndefined(name)) {
7352 if (array && key.match(/^\d+$/)) {
7353 return str;
7354 }
7355 name = JSON.stringify('' + key);
7356 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7357 name = name.substr(1, name.length - 2);
7358 name = ctx.stylize(name, 'name');
7359 } else {
7360 name = name.replace(/'/g, "\\'")
7361 .replace(/\\"/g, '"')
7362 .replace(/(^"|"$)/g, "'");
7363 name = ctx.stylize(name, 'string');
7364 }
7365 }
ebd8d4e8 7366
ab78acc6
IC
7367 return name + ': ' + str;
7368}
ebd8d4e8 7369
ebd8d4e8 7370
ab78acc6
IC
7371function reduceToSingleString(output, base, braces) {
7372 var numLinesEst = 0;
7373 var length = output.reduce(function(prev, cur) {
7374 numLinesEst++;
7375 if (cur.indexOf('\n') >= 0) numLinesEst++;
7376 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7377 }, 0);
ebd8d4e8 7378
ab78acc6
IC
7379 if (length > 60) {
7380 return braces[0] +
7381 (base === '' ? '' : base + '\n ') +
7382 ' ' +
7383 output.join(',\n ') +
7384 ' ' +
7385 braces[1];
7386 }
ebd8d4e8 7387
ab78acc6
IC
7388 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7389}
ebd8d4e8 7390
ebd8d4e8 7391
ab78acc6
IC
7392// NOTE: These type checking functions intentionally don't use `instanceof`
7393// because it is fragile and can be easily faked with `Object.create()`.
7394function isArray(ar) {
7395 return Array.isArray(ar);
7396}
7397exports.isArray = isArray;
ebd8d4e8 7398
ab78acc6
IC
7399function isBoolean(arg) {
7400 return typeof arg === 'boolean';
7401}
7402exports.isBoolean = isBoolean;
ebd8d4e8 7403
ab78acc6
IC
7404function isNull(arg) {
7405 return arg === null;
7406}
7407exports.isNull = isNull;
ebd8d4e8 7408
ab78acc6
IC
7409function isNullOrUndefined(arg) {
7410 return arg == null;
7411}
7412exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7413
ab78acc6
IC
7414function isNumber(arg) {
7415 return typeof arg === 'number';
7416}
7417exports.isNumber = isNumber;
ebd8d4e8 7418
ab78acc6
IC
7419function isString(arg) {
7420 return typeof arg === 'string';
7421}
7422exports.isString = isString;
ebd8d4e8 7423
ab78acc6
IC
7424function isSymbol(arg) {
7425 return typeof arg === 'symbol';
7426}
7427exports.isSymbol = isSymbol;
ebd8d4e8 7428
ab78acc6
IC
7429function isUndefined(arg) {
7430 return arg === void 0;
7431}
7432exports.isUndefined = isUndefined;
ebd8d4e8 7433
ab78acc6
IC
7434function isRegExp(re) {
7435 return isObject(re) && objectToString(re) === '[object RegExp]';
7436}
7437exports.isRegExp = isRegExp;
ebd8d4e8 7438
ab78acc6
IC
7439function isObject(arg) {
7440 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7441}
ab78acc6 7442exports.isObject = isObject;
ebd8d4e8 7443
ab78acc6
IC
7444function isDate(d) {
7445 return isObject(d) && objectToString(d) === '[object Date]';
7446}
7447exports.isDate = isDate;
ebd8d4e8 7448
ab78acc6
IC
7449function isError(e) {
7450 return isObject(e) &&
7451 (objectToString(e) === '[object Error]' || e instanceof Error);
7452}
7453exports.isError = isError;
ebd8d4e8 7454
ab78acc6
IC
7455function isFunction(arg) {
7456 return typeof arg === 'function';
7457}
7458exports.isFunction = isFunction;
ebd8d4e8 7459
ab78acc6
IC
7460function isPrimitive(arg) {
7461 return arg === null ||
7462 typeof arg === 'boolean' ||
7463 typeof arg === 'number' ||
7464 typeof arg === 'string' ||
7465 typeof arg === 'symbol' || // ES6 symbol
7466 typeof arg === 'undefined';
7467}
7468exports.isPrimitive = isPrimitive;
ebd8d4e8 7469
ab78acc6 7470exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7471
ab78acc6
IC
7472function objectToString(o) {
7473 return Object.prototype.toString.call(o);
7474}
ebd8d4e8 7475
ebd8d4e8 7476
ab78acc6
IC
7477function pad(n) {
7478 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7479}
ebd8d4e8 7480
ebd8d4e8 7481
ab78acc6
IC
7482var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7483 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7484
ab78acc6
IC
7485// 26 Feb 16:19:34
7486function timestamp() {
7487 var d = new Date();
7488 var time = [pad(d.getHours()),
7489 pad(d.getMinutes()),
7490 pad(d.getSeconds())].join(':');
7491 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7492}
7493
ab78acc6
IC
7494
7495// log is just a thin wrapper to console.log that prepends a timestamp
7496exports.log = function() {
7497 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7498};
7499
ab78acc6
IC
7500
7501/**
7502 * Inherit the prototype methods from one constructor into another.
7503 *
7504 * The Function.prototype.inherits from lang.js rewritten as a standalone
7505 * function (not on Function.prototype). NOTE: If this file is to be loaded
7506 * during bootstrapping this function needs to be rewritten using some native
7507 * functions as prototype setup using normal JavaScript does not work as
7508 * expected during bootstrapping (see mirror.js in r114903).
7509 *
7510 * @param {function} ctor Constructor function which needs to inherit the
7511 * prototype.
7512 * @param {function} superCtor Constructor function to inherit prototype from.
7513 */
7514exports.inherits = require('inherits');
7515
7516exports._extend = function(origin, add) {
7517 // Don't do anything if add isn't an object
7518 if (!add || !isObject(add)) return origin;
7519
7520 var keys = Object.keys(add);
7521 var i = keys.length;
7522 while (i--) {
7523 origin[keys[i]] = add[keys[i]];
7524 }
7525 return origin;
7526};
7527
7528function hasOwnProperty(obj, prop) {
7529 return Object.prototype.hasOwnProperty.call(obj, prop);
7530}
7531
7532}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7533},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7534// Base58 encoding/decoding
7535// Originally written by Mike Hearn for BitcoinJ
7536// Copyright (c) 2011 Google Inc
7537// Ported to JavaScript by Stefan Thomas
7538// Merged Buffer refactorings from base58-native by Stephen Pair
7539// Copyright (c) 2013 BitPay Inc
7540
ebd8d4e8 7541var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7542var ALPHABET_MAP = {}
7543for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7544 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7545}
ab78acc6 7546var BASE = 58
ebd8d4e8
IC
7547
7548function encode(buffer) {
ab78acc6
IC
7549 if (buffer.length === 0) return ''
7550
7551 var i, j, digits = [0]
7552 for (i = 0; i < buffer.length; i++) {
7553 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7554
7555 digits[0] += buffer[i]
ebd8d4e8 7556
ab78acc6
IC
7557 var carry = 0
7558 for (j = 0; j < digits.length; ++j) {
7559 digits[j] += carry
ebd8d4e8 7560
ab78acc6
IC
7561 carry = (digits[j] / BASE) | 0
7562 digits[j] %= BASE
7563 }
7564
7565 while (carry) {
7566 digits.push(carry % BASE)
7567
7568 carry = (carry / BASE) | 0
7569 }
ebd8d4e8
IC
7570 }
7571
7572 // deal with leading zeros
ab78acc6 7573 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7574
ab78acc6
IC
7575 // convert digits to a string
7576 var stringOutput = ""
7577 for (var i = digits.length - 1; i >= 0; i--) {
7578 stringOutput = stringOutput + ALPHABET[digits[i]]
7579 }
7580 return stringOutput
ebd8d4e8
IC
7581}
7582
7583function decode(string) {
ab78acc6 7584 if (string.length === 0) return []
ebd8d4e8 7585
ab78acc6
IC
7586 var i, j, bytes = [0]
7587 for (i = 0; i < string.length; i++) {
7588 var c = string[i]
7589 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7590
ab78acc6
IC
7591 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7592 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7593
ab78acc6
IC
7594 var carry = 0
7595 for (j = 0; j < bytes.length; ++j) {
7596 bytes[j] += carry
ebd8d4e8 7597
ab78acc6
IC
7598 carry = bytes[j] >> 8
7599 bytes[j] &= 0xff
7600 }
ebd8d4e8 7601
ab78acc6
IC
7602 while (carry) {
7603 bytes.push(carry & 0xff)
7604
7605 carry >>= 8
7606 }
ebd8d4e8
IC
7607 }
7608
ab78acc6
IC
7609 // deal with leading zeros
7610 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7611
ab78acc6 7612 return bytes.reverse()
ebd8d4e8
IC
7613}
7614
7615module.exports = {
7616 encode: encode,
7617 decode: decode
7618}
7619
ab78acc6 7620},{}],31:[function(require,module,exports){
ebd8d4e8 7621(function (Buffer){
ab78acc6
IC
7622'use strict'
7623
7624var base58 = require('bs58')
7625var createHash = require('create-hash')
7626
7627// SHA256(SHA256(buffer))
7628function sha256x2 (buffer) {
7629 buffer = createHash('sha256').update(buffer).digest()
7630 return createHash('sha256').update(buffer).digest()
7631}
7632
7633// Encode a buffer as a base58-check encoded string
7634function encode (payload) {
7635 var checksum = sha256x2(payload).slice(0, 4)
7636
7637 return base58.encode(Buffer.concat([
7638 payload,
7639 checksum
7640 ]))
7641}
7642
7643// Decode a base58-check encoded string to a buffer
7644function decode (string) {
7645 var buffer = new Buffer(base58.decode(string))
7646
7647 var payload = buffer.slice(0, -4)
7648 var checksum = buffer.slice(-4)
7649 var newChecksum = sha256x2(payload).slice(0, 4)
7650
7651 for (var i = 0; i < newChecksum.length; ++i) {
7652 if (newChecksum[i] === checksum[i]) continue
7653
7654 throw new Error('Invalid checksum')
ebd8d4e8 7655 }
ab78acc6
IC
7656
7657 return payload
ebd8d4e8
IC
7658}
7659
ab78acc6
IC
7660module.exports = {
7661 encode: encode,
7662 decode: decode
ebd8d4e8
IC
7663}
7664
ab78acc6
IC
7665}).call(this,require("buffer").Buffer)
7666},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7667(function (Buffer){
ab78acc6
IC
7668'use strict';
7669var inherits = require('inherits')
7670var md5 = require('./md5')
7671var rmd160 = require('ripemd160')
7672var sha = require('sha.js')
ebd8d4e8 7673
ab78acc6 7674var Transform = require('stream').Transform
ebd8d4e8 7675
ab78acc6
IC
7676function HashNoConstructor(hash) {
7677 Transform.call(this)
ebd8d4e8 7678
ab78acc6
IC
7679 this._hash = hash
7680 this.buffers = []
7681}
ebd8d4e8 7682
ab78acc6 7683inherits(HashNoConstructor, Transform)
ebd8d4e8 7684
ab78acc6
IC
7685HashNoConstructor.prototype._transform = function (data, _, next) {
7686 this.buffers.push(data)
ebd8d4e8 7687
ab78acc6
IC
7688 next()
7689}
ebd8d4e8 7690
ab78acc6
IC
7691HashNoConstructor.prototype._flush = function (next) {
7692 this.push(this.digest())
7693 next()
7694}
7695
7696HashNoConstructor.prototype.update = function (data, enc) {
7697 if (typeof data === 'string') {
7698 data = new Buffer(data, enc)
ebd8d4e8
IC
7699 }
7700
ab78acc6
IC
7701 this.buffers.push(data)
7702 return this
7703}
7704
7705HashNoConstructor.prototype.digest = function (enc) {
7706 var buf = Buffer.concat(this.buffers)
7707 var r = this._hash(buf)
7708 this.buffers = null
7709
7710 return enc ? r.toString(enc) : r
7711}
7712
7713function Hash(hash) {
7714 Transform.call(this)
7715
7716 this._hash = hash
7717}
7718
7719inherits(Hash, Transform)
7720
7721Hash.prototype._transform = function (data, enc, next) {
7722 if (enc) data = new Buffer(data, enc)
7723
7724 this._hash.update(data)
7725
7726 next()
ebd8d4e8
IC
7727}
7728
ab78acc6
IC
7729Hash.prototype._flush = function (next) {
7730 this.push(this._hash.digest())
7731 this._hash = null
7732
7733 next()
7734}
7735
7736Hash.prototype.update = function (data, enc) {
7737 if (typeof data === 'string') {
7738 data = new Buffer(data, enc)
7739 }
7740
7741 this._hash.update(data)
ebd8d4e8
IC
7742 return this
7743}
7744
ab78acc6
IC
7745Hash.prototype.digest = function (enc) {
7746 var outData = this._hash.digest()
7747
7748 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7749}
7750
ab78acc6
IC
7751module.exports = function createHash (alg) {
7752 if ('md5' === alg) return new HashNoConstructor(md5)
7753 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7754
7755 return new Hash(sha(alg))
7756}
ebd8d4e8 7757
ab78acc6
IC
7758}).call(this,require("buffer").Buffer)
7759},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 7760(function (Buffer){
ab78acc6 7761'use strict';
ebd8d4e8
IC
7762var intSize = 4;
7763var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7764var chrsz = 8;
7765
7766function toArray(buf, bigEndian) {
7767 if ((buf.length % intSize) !== 0) {
7768 var len = buf.length + (intSize - (buf.length % intSize));
7769 buf = Buffer.concat([buf, zeroBuffer], len);
7770 }
7771
7772 var arr = [];
7773 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7774 for (var i = 0; i < buf.length; i += intSize) {
7775 arr.push(fn.call(buf, i));
7776 }
7777 return arr;
7778}
7779
7780function toBuffer(arr, size, bigEndian) {
7781 var buf = new Buffer(size);
7782 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7783 for (var i = 0; i < arr.length; i++) {
7784 fn.call(buf, arr[i], i * 4, true);
7785 }
7786 return buf;
7787}
7788
7789function hash(buf, fn, hashSize, bigEndian) {
7790 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7791 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7792 return toBuffer(arr, hashSize, bigEndian);
7793}
ab78acc6
IC
7794exports.hash = hash;
7795}).call(this,require("buffer").Buffer)
7796},{"buffer":7}],34:[function(require,module,exports){
7797'use strict';
ebd8d4e8
IC
7798/*
7799 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7800 * Digest Algorithm, as defined in RFC 1321.
7801 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7802 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7803 * Distributed under the BSD License
7804 * See http://pajhome.org.uk/crypt/md5 for more info.
7805 */
7806
ab78acc6 7807var helpers = require('./helpers');
ebd8d4e8
IC
7808
7809/*
7810 * Calculate the MD5 of an array of little-endian words, and a bit length
7811 */
7812function core_md5(x, len)
7813{
7814 /* append padding */
7815 x[len >> 5] |= 0x80 << ((len) % 32);
7816 x[(((len + 64) >>> 9) << 4) + 14] = len;
7817
7818 var a = 1732584193;
7819 var b = -271733879;
7820 var c = -1732584194;
7821 var d = 271733878;
7822
7823 for(var i = 0; i < x.length; i += 16)
7824 {
7825 var olda = a;
7826 var oldb = b;
7827 var oldc = c;
7828 var oldd = d;
7829
7830 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7831 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7832 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7833 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7834 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7835 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7836 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7837 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7838 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7839 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7840 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7841 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7842 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7843 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7844 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7845 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7846
7847 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7848 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7849 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7850 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7851 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7852 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7853 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7854 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7855 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7856 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7857 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7858 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7859 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7860 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7861 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7862 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7863
7864 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7865 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7866 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7867 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7868 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7869 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7870 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7871 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7872 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7873 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7874 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7875 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7876 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7877 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7878 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7879 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7880
7881 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7882 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7883 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7884 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7885 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7886 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7887 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7888 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7889 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7890 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7891 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7892 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7893 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7894 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7895 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7896 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7897
7898 a = safe_add(a, olda);
7899 b = safe_add(b, oldb);
7900 c = safe_add(c, oldc);
7901 d = safe_add(d, oldd);
7902 }
7903 return Array(a, b, c, d);
7904
7905}
7906
7907/*
7908 * These functions implement the four basic operations the algorithm uses.
7909 */
7910function md5_cmn(q, a, b, x, s, t)
7911{
7912 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7913}
7914function md5_ff(a, b, c, d, x, s, t)
7915{
7916 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7917}
7918function md5_gg(a, b, c, d, x, s, t)
7919{
7920 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7921}
7922function md5_hh(a, b, c, d, x, s, t)
7923{
7924 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7925}
7926function md5_ii(a, b, c, d, x, s, t)
7927{
7928 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7929}
7930
7931/*
7932 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7933 * to work around bugs in some JS interpreters.
7934 */
7935function safe_add(x, y)
7936{
7937 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7938 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7939 return (msw << 16) | (lsw & 0xFFFF);
7940}
7941
7942/*
7943 * Bitwise rotate a 32-bit number to the left.
7944 */
7945function bit_rol(num, cnt)
7946{
7947 return (num << cnt) | (num >>> (32 - cnt));
7948}
7949
7950module.exports = function md5(buf) {
7951 return helpers.hash(buf, core_md5, 16);
7952};
ab78acc6
IC
7953},{"./helpers":33}],35:[function(require,module,exports){
7954arguments[4][12][0].apply(exports,arguments)
7955},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 7956(function (Buffer){
ebd8d4e8
IC
7957/*
7958CryptoJS v3.1.2
7959code.google.com/p/crypto-js
7960(c) 2009-2013 by Jeff Mott. All rights reserved.
7961code.google.com/p/crypto-js/wiki/License
7962*/
7963/** @preserve
7964(c) 2012 by Cédric Mesnil. All rights reserved.
7965
7966Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7967
7968 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7969 - 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.
7970
7971THIS 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.
7972*/
7973
ab78acc6 7974// constants table
ebd8d4e8 7975var zl = [
ab78acc6
IC
7976 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7977 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7978 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7979 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7980 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7981]
7982
ebd8d4e8 7983var zr = [
ab78acc6
IC
7984 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7985 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7986 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7987 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7988 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7989]
7990
ebd8d4e8 7991var sl = [
ab78acc6
IC
7992 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7993 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
7994 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
7995 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
7996 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
7997]
7998
ebd8d4e8 7999var sr = [
ab78acc6
IC
8000 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8001 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8002 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8003 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8004 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8005]
ebd8d4e8 8006
ab78acc6
IC
8007var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8008var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8009
ab78acc6
IC
8010function bytesToWords (bytes) {
8011 var words = []
ebd8d4e8 8012 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8013 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8014 }
ab78acc6
IC
8015 return words
8016}
ebd8d4e8 8017
ab78acc6
IC
8018function wordsToBytes (words) {
8019 var bytes = []
ebd8d4e8 8020 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8021 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8022 }
ab78acc6
IC
8023 return bytes
8024}
ebd8d4e8 8025
ab78acc6
IC
8026function processBlock (H, M, offset) {
8027 // swap endian
ebd8d4e8 8028 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8029 var offset_i = offset + i
8030 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8031
8032 // Swap
8033 M[offset_i] = (
ab78acc6
IC
8034 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8035 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8036 )
ebd8d4e8
IC
8037 }
8038
8039 // Working variables
ab78acc6
IC
8040 var al, bl, cl, dl, el
8041 var ar, br, cr, dr, er
8042
8043 ar = al = H[0]
8044 br = bl = H[1]
8045 cr = cl = H[2]
8046 dr = dl = H[3]
8047 er = el = H[4]
8048
8049 // computation
8050 var t
8051 for (i = 0; i < 80; i += 1) {
8052 t = (al + M[offset + zl[i]]) | 0
8053 if (i < 16) {
8054 t += f1(bl, cl, dl) + hl[0]
8055 } else if (i < 32) {
8056 t += f2(bl, cl, dl) + hl[1]
8057 } else if (i < 48) {
8058 t += f3(bl, cl, dl) + hl[2]
8059 } else if (i < 64) {
8060 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8061 } else {// if (i<80) {
ab78acc6
IC
8062 t += f5(bl, cl, dl) + hl[4]
8063 }
8064 t = t | 0
8065 t = rotl(t, sl[i])
8066 t = (t + el) | 0
8067 al = el
8068 el = dl
8069 dl = rotl(cl, 10)
8070 cl = bl
8071 bl = t
8072
8073 t = (ar + M[offset + zr[i]]) | 0
8074 if (i < 16) {
8075 t += f5(br, cr, dr) + hr[0]
8076 } else if (i < 32) {
8077 t += f4(br, cr, dr) + hr[1]
8078 } else if (i < 48) {
8079 t += f3(br, cr, dr) + hr[2]
8080 } else if (i < 64) {
8081 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8082 } else {// if (i<80) {
ab78acc6 8083 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8084 }
ebd8d4e8 8085
ab78acc6
IC
8086 t = t | 0
8087 t = rotl(t, sr[i])
8088 t = (t + er) | 0
8089 ar = er
8090 er = dr
8091 dr = rotl(cr, 10)
8092 cr = br
8093 br = t
8094 }
8095
8096 // intermediate hash value
8097 t = (H[1] + cl + dr) | 0
8098 H[1] = (H[2] + dl + er) | 0
8099 H[2] = (H[3] + el + ar) | 0
8100 H[3] = (H[4] + al + br) | 0
8101 H[4] = (H[0] + bl + cr) | 0
8102 H[0] = t
ebd8d4e8
IC
8103}
8104
ab78acc6
IC
8105function f1 (x, y, z) {
8106 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8107}
8108
ab78acc6
IC
8109function f2 (x, y, z) {
8110 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8111}
8112
ab78acc6
IC
8113function f3 (x, y, z) {
8114 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8115}
8116
ab78acc6
IC
8117function f4 (x, y, z) {
8118 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8119}
8120
ab78acc6
IC
8121function f5 (x, y, z) {
8122 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8123}
8124
ab78acc6
IC
8125function rotl (x, n) {
8126 return (x << n) | (x >>> (32 - n))
8127}
8128
8129function ripemd160 (message) {
8130 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8131
ab78acc6
IC
8132 if (typeof message === 'string') {
8133 message = new Buffer(message, 'utf8')
8134 }
ebd8d4e8 8135
ab78acc6 8136 var m = bytesToWords(message)
ebd8d4e8 8137
ab78acc6
IC
8138 var nBitsLeft = message.length * 8
8139 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8140
8141 // Add padding
ab78acc6 8142 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8143 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8144 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8145 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8146 )
ebd8d4e8 8147
ab78acc6
IC
8148 for (var i = 0; i < m.length; i += 16) {
8149 processBlock(H, m, i)
ebd8d4e8
IC
8150 }
8151
ab78acc6
IC
8152 // swap endian
8153 for (i = 0; i < 5; i++) {
8154 // shortcut
8155 var H_i = H[i]
ebd8d4e8
IC
8156
8157 // Swap
ab78acc6
IC
8158 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8159 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8160 }
8161
ab78acc6
IC
8162 var digestbytes = wordsToBytes(H)
8163 return new Buffer(digestbytes)
ebd8d4e8
IC
8164}
8165
ab78acc6
IC
8166module.exports = ripemd160
8167
8168}).call(this,require("buffer").Buffer)
8169},{"buffer":7}],37:[function(require,module,exports){
8170(function (Buffer){
8171// prototype class for hash functions
8172function Hash (blockSize, finalSize) {
8173 this._block = new Buffer(blockSize)
8174 this._finalSize = finalSize
8175 this._blockSize = blockSize
8176 this._len = 0
8177 this._s = 0
8178}
ebd8d4e8 8179
ab78acc6
IC
8180Hash.prototype.update = function (data, enc) {
8181 if (typeof data === 'string') {
8182 enc = enc || 'utf8'
8183 data = new Buffer(data, enc)
8184 }
ebd8d4e8 8185
ab78acc6
IC
8186 var l = this._len += data.length
8187 var s = this._s || 0
8188 var f = 0
8189 var buffer = this._block
ebd8d4e8 8190
ab78acc6
IC
8191 while (s < l) {
8192 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8193 var ch = (t - f)
ebd8d4e8 8194
ab78acc6
IC
8195 for (var i = 0; i < ch; i++) {
8196 buffer[(s % this._blockSize) + i] = data[i + f]
8197 }
8198
8199 s += ch
8200 f += ch
ebd8d4e8 8201
ab78acc6
IC
8202 if ((s % this._blockSize) === 0) {
8203 this._update(buffer)
8204 }
ebd8d4e8 8205 }
ab78acc6
IC
8206 this._s = s
8207
8208 return this
8209}
ebd8d4e8 8210
ab78acc6
IC
8211Hash.prototype.digest = function (enc) {
8212 // Suppose the length of the message M, in bits, is l
8213 var l = this._len * 8
8214
8215 // Append the bit 1 to the end of the message
8216 this._block[this._len % this._blockSize] = 0x80
8217
8218 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8219 this._block.fill(0, this._len % this._blockSize + 1)
8220
8221 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8222 this._update(this._block)
8223 this._block.fill(0)
ebd8d4e8
IC
8224 }
8225
ab78acc6
IC
8226 // to this append the block which is equal to the number l written in binary
8227 // TODO: handle case where l is > Math.pow(2, 29)
8228 this._block.writeInt32BE(l, this._blockSize - 4)
8229
8230 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8231
ab78acc6
IC
8232 return enc ? hash.toString(enc) : hash
8233}
ebd8d4e8 8234
ab78acc6
IC
8235Hash.prototype._update = function () {
8236 throw new Error('_update must be implemented by subclass')
8237}
ebd8d4e8 8238
ab78acc6 8239module.exports = Hash
ebd8d4e8 8240
ab78acc6
IC
8241}).call(this,require("buffer").Buffer)
8242},{"buffer":7}],38:[function(require,module,exports){
8243var exports = module.exports = function SHA (algorithm) {
8244 algorithm = algorithm.toLowerCase()
ebd8d4e8 8245
ab78acc6
IC
8246 var Algorithm = exports[algorithm]
8247 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8248
ab78acc6
IC
8249 return new Algorithm()
8250}
8251
8252exports.sha = require('./sha')
8253exports.sha1 = require('./sha1')
8254exports.sha224 = require('./sha224')
8255exports.sha256 = require('./sha256')
8256exports.sha384 = require('./sha384')
8257exports.sha512 = require('./sha512')
8258
8259},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8260(function (Buffer){
8261/*
8262 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8263 * in FIPS PUB 180-1
8264 * This source code is derived from sha1.js of the same repository.
8265 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8266 * operation was added.
8267 */
ebd8d4e8 8268
ab78acc6
IC
8269var inherits = require('inherits')
8270var Hash = require('./hash')
ebd8d4e8 8271
ab78acc6 8272var W = new Array(80)
ebd8d4e8 8273
ab78acc6
IC
8274function Sha () {
8275 this.init()
8276 this._w = W
ebd8d4e8 8277
ab78acc6
IC
8278 Hash.call(this, 64, 56)
8279}
ebd8d4e8 8280
ab78acc6 8281inherits(Sha, Hash)
ebd8d4e8 8282
ab78acc6
IC
8283Sha.prototype.init = function () {
8284 this._a = 0x67452301 | 0
8285 this._b = 0xefcdab89 | 0
8286 this._c = 0x98badcfe | 0
8287 this._d = 0x10325476 | 0
8288 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8289
ab78acc6
IC
8290 return this
8291}
8292
8293/*
8294 * Bitwise rotate a 32-bit number to the left.
8295 */
8296function rol (num, cnt) {
8297 return (num << cnt) | (num >>> (32 - cnt))
8298}
8299
8300Sha.prototype._update = function (M) {
8301 var W = this._w
8302
8303 var a = this._a
8304 var b = this._b
8305 var c = this._c
8306 var d = this._d
8307 var e = this._e
ebd8d4e8 8308
ab78acc6
IC
8309 var j = 0, k
8310
8311 /*
8312 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8313 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8314 */
8315 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8316 function loop (w, f) {
8317 W[j] = w
8318
8319 var t = rol(a, 5) + f + e + w + k
8320
8321 e = d
8322 d = c
8323 c = rol(b, 30)
8324 b = a
8325 a = t
8326 j++
ebd8d4e8
IC
8327 }
8328
ab78acc6
IC
8329 k = 1518500249
8330 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8331 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8332 k = 1859775393
8333 while (j < 40) loop(calcW(), b ^ c ^ d)
8334 k = -1894007588
8335 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8336 k = -899497514
8337 while (j < 80) loop(calcW(), b ^ c ^ d)
8338
8339 this._a = (a + this._a) | 0
8340 this._b = (b + this._b) | 0
8341 this._c = (c + this._c) | 0
8342 this._d = (d + this._d) | 0
8343 this._e = (e + this._e) | 0
ebd8d4e8
IC
8344}
8345
ab78acc6
IC
8346Sha.prototype._hash = function () {
8347 var H = new Buffer(20)
8348
8349 H.writeInt32BE(this._a | 0, 0)
8350 H.writeInt32BE(this._b | 0, 4)
8351 H.writeInt32BE(this._c | 0, 8)
8352 H.writeInt32BE(this._d | 0, 12)
8353 H.writeInt32BE(this._e | 0, 16)
8354
8355 return H
ebd8d4e8
IC
8356}
8357
ab78acc6 8358module.exports = Sha
ebd8d4e8 8359
ebd8d4e8 8360
ab78acc6
IC
8361}).call(this,require("buffer").Buffer)
8362},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8363(function (Buffer){
ebd8d4e8
IC
8364/*
8365 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8366 * in FIPS PUB 180-1
8367 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8368 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8369 * Distributed under the BSD License
8370 * See http://pajhome.org.uk/crypt/md5 for details.
8371 */
ebd8d4e8 8372
ab78acc6
IC
8373var inherits = require('inherits')
8374var Hash = require('./hash')
ebd8d4e8 8375
ab78acc6 8376var W = new Array(80)
ebd8d4e8 8377
ab78acc6
IC
8378function Sha1 () {
8379 this.init()
8380 this._w = W
ebd8d4e8 8381
ab78acc6
IC
8382 Hash.call(this, 64, 56)
8383}
ebd8d4e8 8384
ab78acc6 8385inherits(Sha1, Hash)
ebd8d4e8 8386
ab78acc6
IC
8387Sha1.prototype.init = function () {
8388 this._a = 0x67452301 | 0
8389 this._b = 0xefcdab89 | 0
8390 this._c = 0x98badcfe | 0
8391 this._d = 0x10325476 | 0
8392 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8393
ab78acc6
IC
8394 return this
8395}
ebd8d4e8 8396
ab78acc6
IC
8397/*
8398 * Bitwise rotate a 32-bit number to the left.
8399 */
8400function rol (num, cnt) {
8401 return (num << cnt) | (num >>> (32 - cnt))
8402}
ebd8d4e8 8403
ab78acc6
IC
8404Sha1.prototype._update = function (M) {
8405 var W = this._w
ebd8d4e8 8406
ab78acc6
IC
8407 var a = this._a
8408 var b = this._b
8409 var c = this._c
8410 var d = this._d
8411 var e = this._e
ebd8d4e8 8412
ab78acc6 8413 var j = 0, k
ebd8d4e8 8414
ab78acc6
IC
8415 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8416 function loop (w, f) {
8417 W[j] = w
ebd8d4e8 8418
ab78acc6 8419 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8420
ab78acc6
IC
8421 e = d
8422 d = c
8423 c = rol(b, 30)
8424 b = a
8425 a = t
8426 j++
ebd8d4e8
IC
8427 }
8428
ab78acc6
IC
8429 k = 1518500249
8430 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8431 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8432 k = 1859775393
8433 while (j < 40) loop(calcW(), b ^ c ^ d)
8434 k = -1894007588
8435 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8436 k = -899497514
8437 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8438
ab78acc6
IC
8439 this._a = (a + this._a) | 0
8440 this._b = (b + this._b) | 0
8441 this._c = (c + this._c) | 0
8442 this._d = (d + this._d) | 0
8443 this._e = (e + this._e) | 0
8444}
ebd8d4e8 8445
ab78acc6
IC
8446Sha1.prototype._hash = function () {
8447 var H = new Buffer(20)
ebd8d4e8 8448
ab78acc6
IC
8449 H.writeInt32BE(this._a | 0, 0)
8450 H.writeInt32BE(this._b | 0, 4)
8451 H.writeInt32BE(this._c | 0, 8)
8452 H.writeInt32BE(this._d | 0, 12)
8453 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8454
ab78acc6
IC
8455 return H
8456}
ebd8d4e8 8457
ab78acc6 8458module.exports = Sha1
ebd8d4e8 8459
ab78acc6
IC
8460}).call(this,require("buffer").Buffer)
8461},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8462(function (Buffer){
8463/**
8464 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8465 * in FIPS 180-2
8466 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8467 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8468 *
8469 */
ebd8d4e8 8470
ab78acc6
IC
8471var inherits = require('inherits')
8472var Sha256 = require('./sha256')
8473var Hash = require('./hash')
ebd8d4e8 8474
ab78acc6 8475var W = new Array(64)
ebd8d4e8 8476
ab78acc6
IC
8477function Sha224 () {
8478 this.init()
ebd8d4e8 8479
ab78acc6 8480 this._w = W // new Array(64)
ebd8d4e8 8481
ab78acc6
IC
8482 Hash.call(this, 64, 56)
8483}
ebd8d4e8 8484
ab78acc6 8485inherits(Sha224, Sha256)
ebd8d4e8 8486
ab78acc6
IC
8487Sha224.prototype.init = function () {
8488 this._a = 0xc1059ed8 | 0
8489 this._b = 0x367cd507 | 0
8490 this._c = 0x3070dd17 | 0
8491 this._d = 0xf70e5939 | 0
8492 this._e = 0xffc00b31 | 0
8493 this._f = 0x68581511 | 0
8494 this._g = 0x64f98fa7 | 0
8495 this._h = 0xbefa4fa4 | 0
8496
8497 return this
8498}
8499
8500Sha224.prototype._hash = function () {
8501 var H = new Buffer(28)
8502
8503 H.writeInt32BE(this._a, 0)
8504 H.writeInt32BE(this._b, 4)
8505 H.writeInt32BE(this._c, 8)
8506 H.writeInt32BE(this._d, 12)
8507 H.writeInt32BE(this._e, 16)
8508 H.writeInt32BE(this._f, 20)
8509 H.writeInt32BE(this._g, 24)
8510
8511 return H
ebd8d4e8
IC
8512}
8513
ab78acc6 8514module.exports = Sha224
ebd8d4e8 8515
ab78acc6
IC
8516}).call(this,require("buffer").Buffer)
8517},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8518(function (Buffer){
ebd8d4e8
IC
8519/**
8520 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8521 * in FIPS 180-2
8522 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8523 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8524 *
8525 */
8526
ab78acc6
IC
8527var inherits = require('inherits')
8528var Hash = require('./hash')
8529
8530var K = [
8531 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8532 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8533 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8534 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8535 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8536 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8537 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8538 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8539 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8540 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8541 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8542 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8543 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8544 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8545 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8546 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8547]
8548
8549var W = new Array(64)
8550
8551function Sha256 () {
8552 this.init()
8553
8554 this._w = W // new Array(64)
8555
8556 Hash.call(this, 64, 56)
8557}
8558
8559inherits(Sha256, Hash)
8560
8561Sha256.prototype.init = function () {
8562 this._a = 0x6a09e667 | 0
8563 this._b = 0xbb67ae85 | 0
8564 this._c = 0x3c6ef372 | 0
8565 this._d = 0xa54ff53a | 0
8566 this._e = 0x510e527f | 0
8567 this._f = 0x9b05688c | 0
8568 this._g = 0x1f83d9ab | 0
8569 this._h = 0x5be0cd19 | 0
ebd8d4e8 8570
ab78acc6
IC
8571 return this
8572}
ebd8d4e8 8573
ab78acc6
IC
8574function S (X, n) {
8575 return (X >>> n) | (X << (32 - n))
8576}
ebd8d4e8 8577
ab78acc6
IC
8578function R (X, n) {
8579 return (X >>> n)
8580}
ebd8d4e8 8581
ab78acc6
IC
8582function Ch (x, y, z) {
8583 return ((x & y) ^ ((~x) & z))
8584}
ebd8d4e8 8585
ab78acc6
IC
8586function Maj (x, y, z) {
8587 return ((x & y) ^ (x & z) ^ (y & z))
8588}
ebd8d4e8 8589
ab78acc6
IC
8590function Sigma0256 (x) {
8591 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8592}
ebd8d4e8 8593
ab78acc6
IC
8594function Sigma1256 (x) {
8595 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8596}
ebd8d4e8 8597
ab78acc6
IC
8598function Gamma0256 (x) {
8599 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8600}
ebd8d4e8 8601
ab78acc6
IC
8602function Gamma1256 (x) {
8603 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8604}
ebd8d4e8 8605
ab78acc6
IC
8606Sha256.prototype._update = function (M) {
8607 var W = this._w
ebd8d4e8 8608
ab78acc6
IC
8609 var a = this._a | 0
8610 var b = this._b | 0
8611 var c = this._c | 0
8612 var d = this._d | 0
8613 var e = this._e | 0
8614 var f = this._f | 0
8615 var g = this._g | 0
8616 var h = this._h | 0
ebd8d4e8 8617
ab78acc6 8618 var j = 0
ebd8d4e8 8619
ab78acc6
IC
8620 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8621 function loop (w) {
8622 W[j] = w
ebd8d4e8 8623
ab78acc6
IC
8624 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8625 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8626
ab78acc6
IC
8627 h = g
8628 g = f
8629 f = e
8630 e = d + T1
8631 d = c
8632 c = b
8633 b = a
8634 a = T1 + T2
ebd8d4e8 8635
ab78acc6 8636 j++
ebd8d4e8
IC
8637 }
8638
ab78acc6
IC
8639 while (j < 16) loop(M.readInt32BE(j * 4))
8640 while (j < 64) loop(calcW())
ebd8d4e8 8641
ab78acc6
IC
8642 this._a = (a + this._a) | 0
8643 this._b = (b + this._b) | 0
8644 this._c = (c + this._c) | 0
8645 this._d = (d + this._d) | 0
8646 this._e = (e + this._e) | 0
8647 this._f = (f + this._f) | 0
8648 this._g = (g + this._g) | 0
8649 this._h = (h + this._h) | 0
8650}
ebd8d4e8 8651
ab78acc6
IC
8652Sha256.prototype._hash = function () {
8653 var H = new Buffer(32)
ebd8d4e8 8654
ab78acc6
IC
8655 H.writeInt32BE(this._a, 0)
8656 H.writeInt32BE(this._b, 4)
8657 H.writeInt32BE(this._c, 8)
8658 H.writeInt32BE(this._d, 12)
8659 H.writeInt32BE(this._e, 16)
8660 H.writeInt32BE(this._f, 20)
8661 H.writeInt32BE(this._g, 24)
8662 H.writeInt32BE(this._h, 28)
ebd8d4e8 8663
ab78acc6
IC
8664 return H
8665}
ebd8d4e8 8666
ab78acc6 8667module.exports = Sha256
ebd8d4e8 8668
ab78acc6
IC
8669}).call(this,require("buffer").Buffer)
8670},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8671(function (Buffer){
8672var inherits = require('inherits')
8673var SHA512 = require('./sha512')
8674var Hash = require('./hash')
ebd8d4e8 8675
ab78acc6 8676var W = new Array(160)
ebd8d4e8 8677
ab78acc6
IC
8678function Sha384 () {
8679 this.init()
8680 this._w = W
ebd8d4e8 8681
ab78acc6
IC
8682 Hash.call(this, 128, 112)
8683}
ebd8d4e8 8684
ab78acc6 8685inherits(Sha384, SHA512)
ebd8d4e8 8686
ab78acc6
IC
8687Sha384.prototype.init = function () {
8688 this._a = 0xcbbb9d5d | 0
8689 this._b = 0x629a292a | 0
8690 this._c = 0x9159015a | 0
8691 this._d = 0x152fecd8 | 0
8692 this._e = 0x67332667 | 0
8693 this._f = 0x8eb44a87 | 0
8694 this._g = 0xdb0c2e0d | 0
8695 this._h = 0x47b5481d | 0
ebd8d4e8 8696
ab78acc6
IC
8697 this._al = 0xc1059ed8 | 0
8698 this._bl = 0x367cd507 | 0
8699 this._cl = 0x3070dd17 | 0
8700 this._dl = 0xf70e5939 | 0
8701 this._el = 0xffc00b31 | 0
8702 this._fl = 0x68581511 | 0
8703 this._gl = 0x64f98fa7 | 0
8704 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8705
ab78acc6 8706 return this
ebd8d4e8
IC
8707}
8708
ab78acc6
IC
8709Sha384.prototype._hash = function () {
8710 var H = new Buffer(48)
ebd8d4e8 8711
ab78acc6
IC
8712 function writeInt64BE (h, l, offset) {
8713 H.writeInt32BE(h, offset)
8714 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8715 }
ebd8d4e8 8716
ab78acc6
IC
8717 writeInt64BE(this._a, this._al, 0)
8718 writeInt64BE(this._b, this._bl, 8)
8719 writeInt64BE(this._c, this._cl, 16)
8720 writeInt64BE(this._d, this._dl, 24)
8721 writeInt64BE(this._e, this._el, 32)
8722 writeInt64BE(this._f, this._fl, 40)
8723
8724 return H
ebd8d4e8
IC
8725}
8726
ab78acc6 8727module.exports = Sha384
ebd8d4e8 8728
ab78acc6
IC
8729}).call(this,require("buffer").Buffer)
8730},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8731(function (Buffer){
ab78acc6
IC
8732var inherits = require('inherits')
8733var Hash = require('./hash')
8734
8735var K = [
8736 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8737 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8738 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8739 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8740 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8741 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8742 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8743 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8744 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8745 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8746 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8747 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8748 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8749 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8750 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8751 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8752 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8753 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8754 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8755 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8756 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8757 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8758 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8759 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8760 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8761 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8762 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8763 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8764 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8765 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8766 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8767 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8768 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8769 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8770 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8771 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8772 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8773 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8774 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8775 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8776]
8777
8778var W = new Array(160)
8779
8780function Sha512 () {
8781 this.init()
8782 this._w = W
8783
8784 Hash.call(this, 128, 112)
8785}
8786
8787inherits(Sha512, Hash)
8788
8789Sha512.prototype.init = function () {
8790 this._a = 0x6a09e667 | 0
8791 this._b = 0xbb67ae85 | 0
8792 this._c = 0x3c6ef372 | 0
8793 this._d = 0xa54ff53a | 0
8794 this._e = 0x510e527f | 0
8795 this._f = 0x9b05688c | 0
8796 this._g = 0x1f83d9ab | 0
8797 this._h = 0x5be0cd19 | 0
8798
8799 this._al = 0xf3bcc908 | 0
8800 this._bl = 0x84caa73b | 0
8801 this._cl = 0xfe94f82b | 0
8802 this._dl = 0x5f1d36f1 | 0
8803 this._el = 0xade682d1 | 0
8804 this._fl = 0x2b3e6c1f | 0
8805 this._gl = 0xfb41bd6b | 0
8806 this._hl = 0x137e2179 | 0
ebd8d4e8 8807
ab78acc6 8808 return this
ebd8d4e8
IC
8809}
8810
ab78acc6
IC
8811function S (X, Xl, n) {
8812 return (X >>> n) | (Xl << (32 - n))
8813}
8814
8815function Ch (x, y, z) {
8816 return ((x & y) ^ ((~x) & z))
8817}
8818
8819function Maj (x, y, z) {
8820 return ((x & y) ^ (x & z) ^ (y & z))
8821}
8822
8823Sha512.prototype._update = function (M) {
8824 var W = this._w
8825
8826 var a = this._a | 0
8827 var b = this._b | 0
8828 var c = this._c | 0
8829 var d = this._d | 0
8830 var e = this._e | 0
8831 var f = this._f | 0
8832 var g = this._g | 0
8833 var h = this._h | 0
8834
8835 var al = this._al | 0
8836 var bl = this._bl | 0
8837 var cl = this._cl | 0
8838 var dl = this._dl | 0
8839 var el = this._el | 0
8840 var fl = this._fl | 0
8841 var gl = this._gl | 0
8842 var hl = this._hl | 0
8843
8844 var i = 0, j = 0
8845 var Wi, Wil
8846 function calcW () {
8847 var x = W[j - 15 * 2]
8848 var xl = W[j - 15 * 2 + 1]
8849 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8850 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8851
8852 x = W[j - 2 * 2]
8853 xl = W[j - 2 * 2 + 1]
8854 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8855 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8856
8857 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8858 var Wi7 = W[j - 7 * 2]
8859 var Wi7l = W[j - 7 * 2 + 1]
8860
8861 var Wi16 = W[j - 16 * 2]
8862 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 8863
ab78acc6
IC
8864 Wil = gamma0l + Wi7l
8865 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8866 Wil = Wil + gamma1l
8867 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8868 Wil = Wil + Wi16l
8869 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8870 }
8871
8872 function loop () {
8873 W[j] = Wi
8874 W[j + 1] = Wil
ebd8d4e8 8875
ab78acc6
IC
8876 var maj = Maj(a, b, c)
8877 var majl = Maj(al, bl, cl)
ebd8d4e8 8878
ab78acc6
IC
8879 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8880 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8881 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8882 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 8883
ab78acc6
IC
8884 // t1 = h + sigma1 + ch + K[i] + W[i]
8885 var Ki = K[j]
8886 var Kil = K[j + 1]
ebd8d4e8 8887
ab78acc6
IC
8888 var ch = Ch(e, f, g)
8889 var chl = Ch(el, fl, gl)
ebd8d4e8 8890
ab78acc6
IC
8891 var t1l = hl + sigma1l
8892 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8893 t1l = t1l + chl
8894 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8895 t1l = t1l + Kil
8896 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8897 t1l = t1l + Wil
8898 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 8899
ab78acc6
IC
8900 // t2 = sigma0 + maj
8901 var t2l = sigma0l + majl
8902 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 8903
ab78acc6
IC
8904 h = g
8905 hl = gl
8906 g = f
8907 gl = fl
8908 f = e
8909 fl = el
8910 el = (dl + t1l) | 0
8911 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8912 d = c
8913 dl = cl
8914 c = b
8915 cl = bl
8916 b = a
8917 bl = al
8918 al = (t1l + t2l) | 0
8919 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8920
8921 i++
8922 j += 2
8923 }
8924
8925 while (i < 16) {
8926 Wi = M.readInt32BE(j * 4)
8927 Wil = M.readInt32BE(j * 4 + 4)
8928
8929 loop()
8930 }
8931
8932 while (i < 80) {
8933 calcW()
8934 loop()
8935 }
8936
8937 this._al = (this._al + al) | 0
8938 this._bl = (this._bl + bl) | 0
8939 this._cl = (this._cl + cl) | 0
8940 this._dl = (this._dl + dl) | 0
8941 this._el = (this._el + el) | 0
8942 this._fl = (this._fl + fl) | 0
8943 this._gl = (this._gl + gl) | 0
8944 this._hl = (this._hl + hl) | 0
8945
8946 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8947 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8948 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8949 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8950 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8951 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8952 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8953 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8954}
8955
8956Sha512.prototype._hash = function () {
8957 var H = new Buffer(64)
8958
8959 function writeInt64BE (h, l, offset) {
8960 H.writeInt32BE(h, offset)
8961 H.writeInt32BE(l, offset + 4)
8962 }
8963
8964 writeInt64BE(this._a, this._al, 0)
8965 writeInt64BE(this._b, this._bl, 8)
8966 writeInt64BE(this._c, this._cl, 16)
8967 writeInt64BE(this._d, this._dl, 24)
8968 writeInt64BE(this._e, this._el, 32)
8969 writeInt64BE(this._f, this._fl, 40)
8970 writeInt64BE(this._g, this._gl, 48)
8971 writeInt64BE(this._h, this._hl, 56)
8972
8973 return H
8974}
8975
8976module.exports = Sha512
8977
8978}).call(this,require("buffer").Buffer)
8979},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8980(function (Buffer){
8981'use strict';
8982var createHash = require('create-hash/browser');
8983var inherits = require('inherits')
ebd8d4e8 8984
ab78acc6 8985var Transform = require('stream').Transform
ebd8d4e8 8986
ab78acc6
IC
8987var ZEROS = new Buffer(128)
8988ZEROS.fill(0)
ebd8d4e8 8989
ab78acc6
IC
8990function Hmac(alg, key) {
8991 Transform.call(this)
ebd8d4e8 8992
ab78acc6
IC
8993 if (typeof key === 'string') {
8994 key = new Buffer(key)
8995 }
ebd8d4e8 8996
ab78acc6 8997 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 8998
ab78acc6
IC
8999 this._alg = alg
9000 this._key = key
ebd8d4e8 9001
ab78acc6
IC
9002 if (key.length > blocksize) {
9003 key = createHash(alg).update(key).digest()
ebd8d4e8 9004
ab78acc6
IC
9005 } else if (key.length < blocksize) {
9006 key = Buffer.concat([key, ZEROS], blocksize)
9007 }
ebd8d4e8 9008
ab78acc6
IC
9009 var ipad = this._ipad = new Buffer(blocksize)
9010 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9011
ab78acc6
IC
9012 for (var i = 0; i < blocksize; i++) {
9013 ipad[i] = key[i] ^ 0x36
9014 opad[i] = key[i] ^ 0x5C
9015 }
ebd8d4e8 9016
ab78acc6
IC
9017 this._hash = createHash(alg).update(ipad)
9018}
ebd8d4e8 9019
ab78acc6 9020inherits(Hmac, Transform)
ebd8d4e8 9021
ab78acc6
IC
9022Hmac.prototype.update = function (data, enc) {
9023 this._hash.update(data, enc)
ebd8d4e8 9024
ab78acc6
IC
9025 return this
9026}
ebd8d4e8 9027
ab78acc6
IC
9028Hmac.prototype._transform = function (data, _, next) {
9029 this._hash.update(data)
ebd8d4e8 9030
ab78acc6
IC
9031 next()
9032}
ebd8d4e8 9033
ab78acc6
IC
9034Hmac.prototype._flush = function (next) {
9035 this.push(this.digest())
ebd8d4e8 9036
ab78acc6
IC
9037 next()
9038}
ebd8d4e8 9039
ab78acc6
IC
9040Hmac.prototype.digest = function (enc) {
9041 var h = this._hash.digest()
ebd8d4e8 9042
ab78acc6
IC
9043 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9044}
ebd8d4e8 9045
ab78acc6
IC
9046module.exports = function createHmac(alg, key) {
9047 return new Hmac(alg, key)
9048}
ebd8d4e8 9049
ab78acc6
IC
9050}).call(this,require("buffer").Buffer)
9051},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9052arguments[4][12][0].apply(exports,arguments)
9053},{"dup":12}],47:[function(require,module,exports){
9054var assert = require('assert')
9055var BigInteger = require('bigi')
ebd8d4e8 9056
ab78acc6 9057var Point = require('./point')
ebd8d4e8
IC
9058
9059function Curve(p, a, b, Gx, Gy, n, h) {
9060 this.p = p
9061 this.a = a
9062 this.b = b
9063 this.G = Point.fromAffine(this, Gx, Gy)
9064 this.n = n
9065 this.h = h
9066
9067 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9068
9069 // result caching
9070 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9071}
9072
9073Curve.prototype.pointFromX = function(isOdd, x) {
9074 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9075 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9076
9077 var y = beta
9078 if (beta.isEven() ^ !isOdd) {
9079 y = this.p.subtract(y) // -y % p
9080 }
9081
9082 return Point.fromAffine(this, x, y)
9083}
9084
9085Curve.prototype.isInfinity = function(Q) {
9086 if (Q === this.infinity) return true
9087
9088 return Q.z.signum() === 0 && Q.y.signum() !== 0
9089}
9090
9091Curve.prototype.isOnCurve = function(Q) {
9092 if (this.isInfinity(Q)) return true
9093
9094 var x = Q.affineX
9095 var y = Q.affineY
9096 var a = this.a
9097 var b = this.b
9098 var p = this.p
9099
9100 // Check that xQ and yQ are integers in the interval [0, p - 1]
9101 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9102 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9103
9104 // and check that y^2 = x^3 + ax + b (mod p)
9105 var lhs = y.square().mod(p)
9106 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9107 return lhs.equals(rhs)
9108}
9109
9110/**
9111 * Validate an elliptic curve point.
9112 *
9113 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9114 */
9115Curve.prototype.validate = function(Q) {
9116 // Check Q != O
9117 assert(!this.isInfinity(Q), 'Point is at infinity')
9118 assert(this.isOnCurve(Q), 'Point is not on the curve')
9119
9120 // Check nQ = O (where Q is a scalar multiple of G)
9121 var nQ = Q.multiply(this.n)
9122 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9123
9124 return true
9125}
9126
9127module.exports = Curve
9128
ab78acc6 9129},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9130module.exports={
9131 "secp128r1": {
9132 "p": "fffffffdffffffffffffffffffffffff",
9133 "a": "fffffffdfffffffffffffffffffffffc",
9134 "b": "e87579c11079f43dd824993c2cee5ed3",
9135 "n": "fffffffe0000000075a30d1b9038a115",
9136 "h": "01",
9137 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9138 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9139 },
9140 "secp160k1": {
9141 "p": "fffffffffffffffffffffffffffffffeffffac73",
9142 "a": "00",
9143 "b": "07",
9144 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9145 "h": "01",
9146 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9147 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9148 },
9149 "secp160r1": {
9150 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9151 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9152 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9153 "n": "0100000000000000000001f4c8f927aed3ca752257",
9154 "h": "01",
9155 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9156 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9157 },
9158 "secp192k1": {
9159 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9160 "a": "00",
9161 "b": "03",
9162 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9163 "h": "01",
9164 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9165 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9166 },
9167 "secp192r1": {
9168 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9169 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9170 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9171 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9172 "h": "01",
9173 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9174 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9175 },
ebd8d4e8
IC
9176 "secp256k1": {
9177 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9178 "a": "00",
9179 "b": "07",
9180 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9181 "h": "01",
9182 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9183 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9184 },
9185 "secp256r1": {
9186 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9187 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9188 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9189 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9190 "h": "01",
9191 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9192 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9193 }
9194}
9195
ab78acc6
IC
9196},{}],49:[function(require,module,exports){
9197var Point = require('./point')
9198var Curve = require('./curve')
ebd8d4e8 9199
ab78acc6 9200var getCurveByName = require('./names')
ebd8d4e8
IC
9201
9202module.exports = {
9203 Curve: Curve,
9204 Point: Point,
9205 getCurveByName: getCurveByName
9206}
9207
ab78acc6
IC
9208},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9209var BigInteger = require('bigi')
ebd8d4e8 9210
ab78acc6
IC
9211var curves = require('./curves')
9212var Curve = require('./curve')
ebd8d4e8
IC
9213
9214function getCurveByName(name) {
9215 var curve = curves[name]
9216 if (!curve) return null
9217
9218 var p = new BigInteger(curve.p, 16)
9219 var a = new BigInteger(curve.a, 16)
9220 var b = new BigInteger(curve.b, 16)
9221 var n = new BigInteger(curve.n, 16)
9222 var h = new BigInteger(curve.h, 16)
9223 var Gx = new BigInteger(curve.Gx, 16)
9224 var Gy = new BigInteger(curve.Gy, 16)
9225
9226 return new Curve(p, a, b, Gx, Gy, n, h)
9227}
9228
9229module.exports = getCurveByName
9230
ab78acc6 9231},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9232(function (Buffer){
ab78acc6
IC
9233var assert = require('assert')
9234var BigInteger = require('bigi')
ebd8d4e8
IC
9235
9236var THREE = BigInteger.valueOf(3)
9237
9238function Point(curve, x, y, z) {
9239 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9240
9241 this.curve = curve
9242 this.x = x
9243 this.y = y
9244 this.z = z
9245 this._zInv = null
9246
9247 this.compressed = true
9248}
9249
9250Object.defineProperty(Point.prototype, 'zInv', {
9251 get: function() {
9252 if (this._zInv === null) {
9253 this._zInv = this.z.modInverse(this.curve.p)
9254 }
9255
9256 return this._zInv
9257 }
9258})
9259
9260Object.defineProperty(Point.prototype, 'affineX', {
9261 get: function() {
9262 return this.x.multiply(this.zInv).mod(this.curve.p)
9263 }
9264})
9265
9266Object.defineProperty(Point.prototype, 'affineY', {
9267 get: function() {
9268 return this.y.multiply(this.zInv).mod(this.curve.p)
9269 }
9270})
9271
9272Point.fromAffine = function(curve, x, y) {
9273 return new Point(curve, x, y, BigInteger.ONE)
9274}
9275
9276Point.prototype.equals = function(other) {
9277 if (other === this) return true
9278 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9279 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9280
9281 // u = Y2 * Z1 - Y1 * Z2
9282 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9283
9284 if (u.signum() !== 0) return false
9285
9286 // v = X2 * Z1 - X1 * Z2
9287 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9288
9289 return v.signum() === 0
9290}
9291
9292Point.prototype.negate = function() {
9293 var y = this.curve.p.subtract(this.y)
9294
9295 return new Point(this.curve, this.x, y, this.z)
9296}
9297
9298Point.prototype.add = function(b) {
9299 if (this.curve.isInfinity(this)) return b
9300 if (this.curve.isInfinity(b)) return this
9301
9302 var x1 = this.x
9303 var y1 = this.y
9304 var x2 = b.x
9305 var y2 = b.y
9306
9307 // u = Y2 * Z1 - Y1 * Z2
9308 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9309 // v = X2 * Z1 - X1 * Z2
9310 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9311
9312 if (v.signum() === 0) {
9313 if (u.signum() === 0) {
9314 return this.twice() // this == b, so double
9315 }
9316
9317 return this.curve.infinity // this = -b, so infinity
9318 }
9319
9320 var v2 = v.square()
9321 var v3 = v2.multiply(v)
9322 var x1v2 = x1.multiply(v2)
9323 var zu2 = u.square().multiply(this.z)
9324
9325 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9326 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9327 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9328 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)
9329 // z3 = v^3 * z1 * z2
9330 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9331
9332 return new Point(this.curve, x3, y3, z3)
9333}
9334
9335Point.prototype.twice = function() {
9336 if (this.curve.isInfinity(this)) return this
9337 if (this.y.signum() === 0) return this.curve.infinity
9338
9339 var x1 = this.x
9340 var y1 = this.y
9341
9342 var y1z1 = y1.multiply(this.z)
9343 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9344 var a = this.curve.a
9345
9346 // w = 3 * x1^2 + a * z1^2
9347 var w = x1.square().multiply(THREE)
9348
9349 if (a.signum() !== 0) {
9350 w = w.add(this.z.square().multiply(a))
9351 }
9352
9353 w = w.mod(this.curve.p)
9354 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9355 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9356 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9357 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9358 // z3 = 8 * (y1 * z1)^3
9359 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9360
9361 return new Point(this.curve, x3, y3, z3)
9362}
9363
9364// Simple NAF (Non-Adjacent Form) multiplication algorithm
9365// TODO: modularize the multiplication algorithm
9366Point.prototype.multiply = function(k) {
9367 if (this.curve.isInfinity(this)) return this
9368 if (k.signum() === 0) return this.curve.infinity
9369
9370 var e = k
9371 var h = e.multiply(THREE)
9372
9373 var neg = this.negate()
9374 var R = this
9375
9376 for (var i = h.bitLength() - 2; i > 0; --i) {
9377 R = R.twice()
9378
9379 var hBit = h.testBit(i)
9380 var eBit = e.testBit(i)
9381
9382 if (hBit != eBit) {
9383 R = R.add(hBit ? this : neg)
9384 }
9385 }
9386
9387 return R
9388}
9389
9390// Compute this*j + x*k (simultaneous multiplication)
9391Point.prototype.multiplyTwo = function(j, x, k) {
9392 var i
9393
9394 if (j.bitLength() > k.bitLength())
9395 i = j.bitLength() - 1
9396 else
9397 i = k.bitLength() - 1
9398
9399 var R = this.curve.infinity
9400 var both = this.add(x)
9401
9402 while (i >= 0) {
9403 R = R.twice()
9404
9405 var jBit = j.testBit(i)
9406 var kBit = k.testBit(i)
9407
9408 if (jBit) {
9409 if (kBit) {
9410 R = R.add(both)
9411
9412 } else {
9413 R = R.add(this)
9414 }
9415
9416 } else {
9417 if (kBit) {
9418 R = R.add(x)
9419 }
9420 }
9421 --i
9422 }
9423
9424 return R
9425}
9426
9427Point.prototype.getEncoded = function(compressed) {
9428 if (compressed == undefined) compressed = this.compressed
9429 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9430
9431 var x = this.affineX
9432 var y = this.affineY
9433
9434 var buffer
9435
9436 // Determine size of q in bytes
9437 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9438
9439 // 0x02/0x03 | X
9440 if (compressed) {
9441 buffer = new Buffer(1 + byteLength)
9442 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9443
9444 // 0x04 | X | Y
9445 } else {
9446 buffer = new Buffer(1 + byteLength + byteLength)
9447 buffer.writeUInt8(0x04, 0)
9448
9449 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9450 }
9451
9452 x.toBuffer(byteLength).copy(buffer, 1)
9453
9454 return buffer
9455}
9456
9457Point.decodeFrom = function(curve, buffer) {
9458 var type = buffer.readUInt8(0)
9459 var compressed = (type !== 4)
9460
ebd8d4e8 9461 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9462 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9463
9464 var Q
9465 if (compressed) {
9466 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9467 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9468
9469 var isOdd = (type === 0x03)
9470 Q = curve.pointFromX(isOdd, x)
9471
9472 } else {
9473 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9474
9475 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9476 Q = Point.fromAffine(curve, x, y)
9477 }
9478
9479 Q.compressed = compressed
9480 return Q
9481}
9482
9483Point.prototype.toString = function () {
9484 if (this.curve.isInfinity(this)) return '(INFINITY)'
9485
9486 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9487}
9488
9489module.exports = Point
9490
ab78acc6
IC
9491}).call(this,require("buffer").Buffer)
9492},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9493(function (process,global,Buffer){
9494'use strict';
ebd8d4e8 9495
ab78acc6
IC
9496var crypto = global.crypto || global.msCrypto
9497if(crypto && crypto.getRandomValues) {
9498 module.exports = randomBytes;
9499} else {
9500 module.exports = oldBrowser;
9501}
9502function randomBytes(size, cb) {
9503 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9504 /* This will not work in older browsers.
9505 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9506 */
9507
9508 crypto.getRandomValues(bytes);
9509 if (typeof cb === 'function') {
9510 return process.nextTick(function () {
9511 cb(null, bytes);
9512 });
ebd8d4e8 9513 }
ab78acc6
IC
9514 return bytes;
9515}
9516function oldBrowser() {
9517 throw new Error(
9518 'secure random number generation not supported by this browser\n'+
9519 'use chrome, FireFox or Internet Explorer 11'
9520 )
ebd8d4e8
IC
9521}
9522
ab78acc6
IC
9523}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9524},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9525(function (Buffer){
9526'use strict';
ebd8d4e8 9527
ab78acc6
IC
9528function getFunctionName(fn) {
9529 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9530}
9531
9532function getTypeTypeName(type) {
9533 if (nativeTypes.Function(type)) {
9534 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9535 }
ab78acc6
IC
9536 if (nativeTypes.Object(type)) return JSON.stringify(type);
9537
9538 return type;
ebd8d4e8
IC
9539}
9540
ab78acc6
IC
9541function getValueTypeName(value) {
9542 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9543
ab78acc6
IC
9544 return getFunctionName(value.constructor);
9545}
9546
9547function tfErrorString(type, value) {
9548 var typeTypeName = getTypeTypeName(type);
9549 var valueTypeName = getValueTypeName(value);
9550
9551 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9552}
9553
9554function tfPropertyErrorString(type, name, value) {
9555 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9556}
9557
9558var nativeTypes = {
9559 Array: (function (_Array) {
9560 function Array(_x) {
9561 return _Array.apply(this, arguments);
9562 }
9563
9564 Array.toString = function () {
9565 return _Array.toString();
9566 };
9567
9568 return Array;
9569 })(function (value) {
9570 return value !== null && value !== undefined && value.constructor === Array;
9571 }),
9572 Boolean: function Boolean(value) {
9573 return typeof value === 'boolean';
9574 },
9575 Buffer: (function (_Buffer) {
9576 function Buffer(_x2) {
9577 return _Buffer.apply(this, arguments);
9578 }
9579
9580 Buffer.toString = function () {
9581 return _Buffer.toString();
9582 };
9583
9584 return Buffer;
9585 })(function (value) {
9586 return Buffer.isBuffer(value);
9587 }),
9588 Function: function Function(value) {
9589 return typeof value === 'function';
9590 },
9591 Null: function Null(value) {
9592 return value === undefined || value === null;
9593 },
9594 Number: function Number(value) {
9595 return typeof value === 'number';
9596 },
9597 Object: function Object(value) {
9598 return typeof value === 'object';
9599 },
9600 String: function String(value) {
9601 return typeof value === 'string';
9602 },
9603 '': function _() {
9604 return true;
ebd8d4e8 9605 }
ab78acc6
IC
9606};
9607
9608function tJSON(type) {
9609 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9610}
9611
ab78acc6
IC
9612function sJSON(type) {
9613 var json = tJSON(type);
9614 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9615}
9616
ab78acc6
IC
9617var otherTypes = {
9618 arrayOf: function arrayOf(type) {
9619 function arrayOf(value, strict) {
9620 try {
9621 return nativeTypes.Array(value) && value.every(function (x) {
9622 return typeforce(type, x, strict);
9623 });
9624 } catch (e) {
9625 return false;
9626 }
9627 }
9628 arrayOf.toJSON = function () {
9629 return [tJSON(type)];
9630 };
9631
9632 return arrayOf;
9633 },
9634
9635 maybe: function maybe(type) {
9636 function maybe(value, strict) {
9637 return nativeTypes.Null(value) || typeforce(type, value, strict);
9638 }
9639 maybe.toJSON = function () {
9640 return '?' + sJSON(type);
9641 };
9642
9643 return maybe;
9644 },
9645
9646 object: function object(type) {
9647 function object(value, strict) {
9648 typeforce(nativeTypes.Object, value, strict);
9649
9650 var propertyName, propertyType, propertyValue;
9651
9652 try {
9653 for (propertyName in type) {
9654 propertyType = type[propertyName];
9655 propertyValue = value[propertyName];
9656
9657 typeforce(propertyType, propertyValue, strict);
9658 }
9659 } catch (e) {
9660 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9661 }
9662
9663 if (strict) {
9664 for (propertyName in value) {
9665 if (type[propertyName]) continue;
9666
9667 throw new TypeError('Unexpected property "' + propertyName + '"');
9668 }
9669 }
9670
9671 return true;
9672 }
9673 object.toJSON = function () {
9674 return type;
9675 };
9676
9677 return object;
9678 },
9679
9680 oneOf: function oneOf() {
9681 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9682 types[_key] = arguments[_key];
9683 }
9684
9685 function oneOf(value, strict) {
9686 return types.some(function (type) {
9687 try {
9688 return typeforce(type, value, strict);
9689 } catch (e) {
9690 return false;
9691 }
9692 });
9693 }
9694 oneOf.toJSON = function () {
9695 return types.map(sJSON).join('|');
9696 };
9697
9698 return oneOf;
9699 },
9700
9701 quacksLike: function quacksLike(type) {
9702 function quacksLike(value, strict) {
9703 return type === getValueTypeName(value);
9704 }
9705 quacksLike.toJSON = function () {
9706 return type;
9707 };
9708
9709 return quacksLike;
9710 },
9711
9712 tuple: function tuple() {
9713 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9714 types[_key2] = arguments[_key2];
9715 }
9716
9717 function tuple(value, strict) {
9718 return types.every(function (type, i) {
9719 return typeforce(type, value[i], strict);
9720 });
9721 }
9722 tuple.toJSON = function () {
9723 return '(' + types.map(sJSON).join(', ') + ')';
9724 };
9725
9726 return tuple;
9727 },
9728
9729 value: function value(expected) {
9730 function value(actual) {
9731 return actual === expected;
9732 }
9733 value.toJSON = function () {
9734 return expected;
9735 };
9736
9737 return value;
9738 }
9739};
9740
9741function compile(type) {
9742 if (nativeTypes.String(type)) {
9743 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9744
9745 return nativeTypes[type] || otherTypes.quacksLike(type);
9746 } else if (type && nativeTypes.Object(type)) {
9747 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9748
9749 var compiled = {};
9750
9751 for (var propertyName in type) {
9752 compiled[propertyName] = compile(type[propertyName]);
9753 }
9754
9755 return otherTypes.object(compiled);
9756 } else if (nativeTypes.Function(type)) {
9757 return type;
9758 }
9759
9760 return otherTypes.value(type);
ebd8d4e8
IC
9761}
9762
ab78acc6
IC
9763function typeforce(_x3, _x4, _x5) {
9764 var _again = true;
9765
9766 _function: while (_again) {
9767 var type = _x3,
9768 value = _x4,
9769 strict = _x5;
9770 _again = false;
9771
9772 if (nativeTypes.Function(type)) {
9773 if (type(value, strict)) return true;
9774
9775 throw new TypeError(tfErrorString(type, value));
9776 }
9777
9778 // JIT
9779 _x3 = compile(type);
9780 _x4 = value;
9781 _x5 = strict;
9782 _again = true;
9783 continue _function;
9784 }
ebd8d4e8
IC
9785}
9786
ab78acc6
IC
9787// assign all types to typeforce function
9788var typeName;
9789Object.keys(nativeTypes).forEach(function (typeName) {
9790 var nativeType = nativeTypes[typeName];
9791 nativeType.toJSON = function () {
9792 return typeName;
9793 };
9794
9795 typeforce[typeName] = nativeType;
9796});
ebd8d4e8 9797
ab78acc6
IC
9798for (typeName in otherTypes) {
9799 typeforce[typeName] = otherTypes[typeName];
9800}
ebd8d4e8 9801
ab78acc6
IC
9802module.exports = typeforce;
9803module.exports.compile = compile;
9804}).call(this,require("buffer").Buffer)
9805},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 9806(function (Buffer){
ab78acc6
IC
9807var assert = require('assert')
9808var base58check = require('bs58check')
9809var typeForce = require('typeforce')
9810var networks = require('./networks')
9811var scripts = require('./scripts')
ebd8d4e8 9812
ab78acc6 9813function findScriptTypeByVersion (version) {
ebd8d4e8
IC
9814 for (var networkName in networks) {
9815 var network = networks[networkName]
9816
9817 if (version === network.pubKeyHash) return 'pubkeyhash'
9818 if (version === network.scriptHash) return 'scripthash'
9819 }
9820}
9821
ab78acc6
IC
9822function Address (hash, version) {
9823 typeForce('Buffer', hash)
9824
ebd8d4e8
IC
9825 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9826 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9827
9828 this.hash = hash
9829 this.version = version
9830}
9831
ab78acc6 9832Address.fromBase58Check = function (string) {
ebd8d4e8
IC
9833 var payload = base58check.decode(string)
9834 var version = payload.readUInt8(0)
9835 var hash = payload.slice(1)
9836
9837 return new Address(hash, version)
9838}
9839
ab78acc6 9840Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
9841 network = network || networks.bitcoin
9842
ab78acc6
IC
9843 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9844 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 9845
ab78acc6 9846 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
9847}
9848
ebd8d4e8
IC
9849Address.prototype.toBase58Check = function () {
9850 var payload = new Buffer(21)
9851 payload.writeUInt8(this.version, 0)
9852 this.hash.copy(payload, 1)
9853
9854 return base58check.encode(payload)
9855}
9856
ab78acc6 9857Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
9858 var scriptType = findScriptTypeByVersion(this.version)
9859
9860 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9861 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9862
ab78acc6
IC
9863 assert(false, this.toString() + ' has no matching Script')
9864}
9865
9866Address.prototype.toString = Address.prototype.toBase58Check
9867
9868module.exports = Address
9869
9870}).call(this,require("buffer").Buffer)
9871},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9872var bs58check = require('bs58check')
9873
9874function decode () {
9875 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9876
9877 return bs58check.decode.apply(undefined, arguments)
9878}
9879
9880function encode () {
9881 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9882
9883 return bs58check.encode.apply(undefined, arguments)
9884}
9885
9886module.exports = {
9887 decode: decode,
9888 encode: encode
9889}
9890
9891},{"bs58check":31}],56:[function(require,module,exports){
9892(function (Buffer){
9893var assert = require('assert')
9894var bufferutils = require('./bufferutils')
9895var crypto = require('./crypto')
9896
9897var Transaction = require('./transaction')
9898
9899function Block () {
9900 this.version = 1
9901 this.prevHash = null
9902 this.merkleRoot = null
9903 this.timestamp = 0
9904 this.bits = 0
9905 this.nonce = 0
9906}
9907
9908Block.fromBuffer = function (buffer) {
9909 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9910
9911 var offset = 0
9912 function readSlice (n) {
9913 offset += n
9914 return buffer.slice(offset - n, offset)
9915 }
9916
9917 function readUInt32 () {
9918 var i = buffer.readUInt32LE(offset)
9919 offset += 4
9920 return i
9921 }
9922
9923 var block = new Block()
9924 block.version = readUInt32()
9925 block.prevHash = readSlice(32)
9926 block.merkleRoot = readSlice(32)
9927 block.timestamp = readUInt32()
9928 block.bits = readUInt32()
9929 block.nonce = readUInt32()
9930
9931 if (buffer.length === 80) return block
9932
9933 function readVarInt () {
9934 var vi = bufferutils.readVarInt(buffer, offset)
9935 offset += vi.size
9936 return vi.number
9937 }
9938
9939 // FIXME: poor performance
9940 function readTransaction () {
9941 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9942
9943 offset += tx.toBuffer().length
9944 return tx
9945 }
9946
9947 var nTransactions = readVarInt()
9948 block.transactions = []
9949
9950 for (var i = 0; i < nTransactions; ++i) {
9951 var tx = readTransaction()
9952 block.transactions.push(tx)
9953 }
9954
9955 return block
9956}
9957
9958Block.fromHex = function (hex) {
9959 return Block.fromBuffer(new Buffer(hex, 'hex'))
9960}
9961
9962Block.prototype.getHash = function () {
9963 return crypto.hash256(this.toBuffer(true))
9964}
9965
9966Block.prototype.getId = function () {
9967 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
9968}
9969
ab78acc6
IC
9970Block.prototype.getUTCDate = function () {
9971 var date = new Date(0) // epoch
9972 date.setUTCSeconds(this.timestamp)
ebd8d4e8 9973
ab78acc6
IC
9974 return date
9975}
ebd8d4e8 9976
ab78acc6
IC
9977Block.prototype.toBuffer = function (headersOnly) {
9978 var buffer = new Buffer(80)
ebd8d4e8 9979
ab78acc6
IC
9980 var offset = 0
9981 function writeSlice (slice) {
9982 slice.copy(buffer, offset)
9983 offset += slice.length
9984 }
ebd8d4e8 9985
ab78acc6
IC
9986 function writeUInt32 (i) {
9987 buffer.writeUInt32LE(i, offset)
9988 offset += 4
9989 }
ebd8d4e8 9990
ab78acc6
IC
9991 writeUInt32(this.version)
9992 writeSlice(this.prevHash)
9993 writeSlice(this.merkleRoot)
9994 writeUInt32(this.timestamp)
9995 writeUInt32(this.bits)
9996 writeUInt32(this.nonce)
ebd8d4e8 9997
ab78acc6 9998 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 9999
ab78acc6
IC
10000 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10001 var txBuffers = this.transactions.map(function (tx) {
10002 return tx.toBuffer()
10003 })
ebd8d4e8 10004
ab78acc6 10005 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10006}
10007
ab78acc6
IC
10008Block.prototype.toHex = function (headersOnly) {
10009 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10010}
10011
ab78acc6
IC
10012module.exports = Block
10013
10014}).call(this,require("buffer").Buffer)
10015},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10016(function (Buffer){
10017var assert = require('assert')
10018var opcodes = require('./opcodes')
ebd8d4e8
IC
10019
10020// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10021function verifuint (value, max) {
ebd8d4e8
IC
10022 assert(typeof value === 'number', 'cannot write a non-number as a number')
10023 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10024 assert(value <= max, 'value is larger than maximum value for type')
10025 assert(Math.floor(value) === value, 'value has a fractional component')
10026}
10027
ab78acc6 10028function pushDataSize (i) {
ebd8d4e8 10029 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10030 : i < 0xff ? 2
10031 : i < 0xffff ? 3
10032 : 5
ebd8d4e8
IC
10033}
10034
ab78acc6 10035function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10036 var opcode = buffer.readUInt8(offset)
10037 var number, size
10038
10039 // ~6 bit
10040 if (opcode < opcodes.OP_PUSHDATA1) {
10041 number = opcode
10042 size = 1
10043
10044 // 8 bit
10045 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10046 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10047 number = buffer.readUInt8(offset + 1)
10048 size = 2
10049
10050 // 16 bit
10051 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10052 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10053 number = buffer.readUInt16LE(offset + 1)
10054 size = 3
10055
10056 // 32 bit
10057 } else {
ab78acc6 10058 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10059 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10060
10061 number = buffer.readUInt32LE(offset + 1)
10062 size = 5
ebd8d4e8
IC
10063 }
10064
10065 return {
10066 opcode: opcode,
10067 number: number,
10068 size: size
10069 }
10070}
10071
ab78acc6 10072function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10073 var a = buffer.readUInt32LE(offset)
10074 var b = buffer.readUInt32LE(offset + 4)
10075 b *= 0x100000000
10076
10077 verifuint(b + a, 0x001fffffffffffff)
10078
10079 return b + a
10080}
10081
ab78acc6 10082function readVarInt (buffer, offset) {
ebd8d4e8
IC
10083 var t = buffer.readUInt8(offset)
10084 var number, size
10085
10086 // 8 bit
10087 if (t < 253) {
10088 number = t
10089 size = 1
10090
10091 // 16 bit
10092 } else if (t < 254) {
10093 number = buffer.readUInt16LE(offset + 1)
10094 size = 3
10095
10096 // 32 bit
10097 } else if (t < 255) {
10098 number = buffer.readUInt32LE(offset + 1)
10099 size = 5
10100
10101 // 64 bit
10102 } else {
10103 number = readUInt64LE(buffer, offset + 1)
10104 size = 9
10105 }
10106
10107 return {
10108 number: number,
10109 size: size
10110 }
10111}
10112
ab78acc6 10113function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10114 var size = pushDataSize(number)
10115
10116 // ~6 bit
10117 if (size === 1) {
10118 buffer.writeUInt8(number, offset)
10119
10120 // 8 bit
10121 } else if (size === 2) {
10122 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10123 buffer.writeUInt8(number, offset + 1)
10124
10125 // 16 bit
10126 } else if (size === 3) {
10127 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10128 buffer.writeUInt16LE(number, offset + 1)
10129
10130 // 32 bit
10131 } else {
10132 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10133 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10134 }
10135
10136 return size
10137}
10138
ab78acc6 10139function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10140 verifuint(value, 0x001fffffffffffff)
10141
10142 buffer.writeInt32LE(value & -1, offset)
10143 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10144}
10145
ab78acc6
IC
10146function varIntSize (i) {
10147 return i < 253 ? 1
10148 : i < 0x10000 ? 3
10149 : i < 0x100000000 ? 5
10150 : 9
ebd8d4e8
IC
10151}
10152
ab78acc6 10153function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10154 var size = varIntSize(number)
10155
10156 // 8 bit
10157 if (size === 1) {
10158 buffer.writeUInt8(number, offset)
10159
10160 // 16 bit
10161 } else if (size === 3) {
10162 buffer.writeUInt8(253, offset)
10163 buffer.writeUInt16LE(number, offset + 1)
10164
10165 // 32 bit
10166 } else if (size === 5) {
10167 buffer.writeUInt8(254, offset)
10168 buffer.writeUInt32LE(number, offset + 1)
10169
10170 // 64 bit
10171 } else {
10172 buffer.writeUInt8(255, offset)
10173 writeUInt64LE(buffer, number, offset + 1)
10174 }
10175
10176 return size
10177}
10178
ab78acc6
IC
10179function varIntBuffer (i) {
10180 var size = varIntSize(i)
10181 var buffer = new Buffer(size)
10182 writeVarInt(buffer, i, 0)
10183
10184 return buffer
10185}
10186
10187function reverse (buffer) {
10188 var buffer2 = new Buffer(buffer)
10189 Array.prototype.reverse.call(buffer2)
10190 return buffer2
10191}
10192
ebd8d4e8
IC
10193module.exports = {
10194 pushDataSize: pushDataSize,
10195 readPushDataInt: readPushDataInt,
10196 readUInt64LE: readUInt64LE,
10197 readVarInt: readVarInt,
ab78acc6
IC
10198 reverse: reverse,
10199 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10200 varIntSize: varIntSize,
10201 writePushDataInt: writePushDataInt,
10202 writeUInt64LE: writeUInt64LE,
10203 writeVarInt: writeVarInt
10204}
10205
ab78acc6
IC
10206}).call(this,require("buffer").Buffer)
10207},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10208var createHash = require('create-hash')
ebd8d4e8 10209
ab78acc6 10210function hash160 (buffer) {
ebd8d4e8
IC
10211 return ripemd160(sha256(buffer))
10212}
10213
ab78acc6 10214function hash256 (buffer) {
ebd8d4e8
IC
10215 return sha256(sha256(buffer))
10216}
10217
ab78acc6
IC
10218function ripemd160 (buffer) {
10219 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10220}
10221
ab78acc6
IC
10222function sha1 (buffer) {
10223 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10224}
10225
ab78acc6
IC
10226function sha256 (buffer) {
10227 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10228}
10229
10230// FIXME: Name not consistent with others
ab78acc6 10231var createHmac = require('create-hmac')
ebd8d4e8 10232
ab78acc6
IC
10233function HmacSHA256 (buffer, secret) {
10234 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10235 return createHmac('sha256', secret).update(buffer).digest()
10236}
ebd8d4e8 10237
ab78acc6
IC
10238function HmacSHA512 (buffer, secret) {
10239 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10240 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10241}
10242
10243module.exports = {
10244 ripemd160: ripemd160,
10245 sha1: sha1,
10246 sha256: sha256,
10247 hash160: hash160,
10248 hash256: hash256,
10249 HmacSHA256: HmacSHA256,
10250 HmacSHA512: HmacSHA512
10251}
10252
ab78acc6 10253},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10254(function (Buffer){
ab78acc6
IC
10255var assert = require('assert')
10256var createHmac = require('create-hmac')
10257var typeForce = require('typeforce')
ebd8d4e8 10258
ab78acc6
IC
10259var BigInteger = require('bigi')
10260var ECSignature = require('./ecsignature')
10261
10262var ZERO = new Buffer([0])
10263var ONE = new Buffer([1])
ebd8d4e8
IC
10264
10265// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10266function deterministicGenerateK (curve, hash, d, checkSig) {
10267 typeForce('Buffer', hash)
10268 typeForce('BigInteger', d)
10269
10270 // FIXME: remove/uncomment for 2.0.0
10271 // typeForce('Function', checkSig)
10272
10273 if (typeof checkSig !== 'function') {
10274 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10275
10276 checkSig = function (k) {
10277 var G = curve.G
10278 var n = curve.n
10279 var e = BigInteger.fromBuffer(hash)
10280
10281 var Q = G.multiply(k)
10282
10283 if (curve.isInfinity(Q))
10284 return false
10285
10286 var r = Q.affineX.mod(n)
10287 if (r.signum() === 0)
10288 return false
10289
10290 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10291 if (s.signum() === 0)
10292 return false
10293
10294 return true
10295 }
10296 }
10297
10298 // sanity check
ebd8d4e8 10299 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10300
10301 var x = d.toBuffer(32)
10302 var k = new Buffer(32)
10303 var v = new Buffer(32)
10304
ab78acc6 10305 // Step A, ignored as hash already provided
ebd8d4e8
IC
10306 // Step B
10307 v.fill(1)
10308
10309 // Step C
10310 k.fill(0)
10311
10312 // Step D
ab78acc6
IC
10313 k = createHmac('sha256', k)
10314 .update(v)
10315 .update(ZERO)
10316 .update(x)
10317 .update(hash)
10318 .digest()
ebd8d4e8
IC
10319
10320 // Step E
ab78acc6 10321 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10322
10323 // Step F
ab78acc6
IC
10324 k = createHmac('sha256', k)
10325 .update(v)
10326 .update(ONE)
10327 .update(x)
10328 .update(hash)
10329 .digest()
ebd8d4e8
IC
10330
10331 // Step G
ab78acc6 10332 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10333
10334 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10335 // Step H2b
ab78acc6 10336 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10337
10338 var T = BigInteger.fromBuffer(v)
10339
ab78acc6
IC
10340 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10341 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10342 k = createHmac('sha256', k)
10343 .update(v)
10344 .update(ZERO)
10345 .digest()
10346
10347 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10348
ab78acc6
IC
10349 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10350 // Step H2b again
10351 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10352 T = BigInteger.fromBuffer(v)
10353 }
10354
10355 return T
10356}
10357
ab78acc6
IC
10358function sign (curve, hash, d) {
10359 var r, s
ebd8d4e8 10360
ab78acc6 10361 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10362 var n = curve.n
10363 var G = curve.G
ebd8d4e8 10364
ab78acc6
IC
10365 deterministicGenerateK(curve, hash, d, function (k) {
10366 var Q = G.multiply(k)
10367
10368 if (curve.isInfinity(Q))
10369 return false
10370
10371 r = Q.affineX.mod(n)
10372 if (r.signum() === 0)
10373 return false
10374
10375 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10376 if (s.signum() === 0)
10377 return false
ebd8d4e8 10378
ab78acc6
IC
10379 return true
10380 })
ebd8d4e8
IC
10381
10382 var N_OVER_TWO = n.shiftRight(1)
10383
10384 // enforce low S values, see bip62: 'low s values in signatures'
10385 if (s.compareTo(N_OVER_TWO) > 0) {
10386 s = n.subtract(s)
10387 }
10388
10389 return new ECSignature(r, s)
10390}
10391
ab78acc6 10392function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10393 var n = curve.n
10394 var G = curve.G
10395
10396 var r = signature.r
10397 var s = signature.s
10398
ab78acc6
IC
10399 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10400 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10401 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10402
ab78acc6 10403 // c = s^-1 mod n
ebd8d4e8
IC
10404 var c = s.modInverse(n)
10405
ab78acc6
IC
10406 // 1.4.4 Compute u1 = es^−1 mod n
10407 // u2 = rs^−1 mod n
ebd8d4e8
IC
10408 var u1 = e.multiply(c).mod(n)
10409 var u2 = r.multiply(c).mod(n)
10410
ab78acc6
IC
10411 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10412 var R = G.multiplyTwo(u1, Q, u2)
10413 var v = R.affineX.mod(n)
ebd8d4e8 10414
ab78acc6
IC
10415 // 1.4.5 (cont.) Enforce R is not at infinity
10416 if (curve.isInfinity(R)) return false
10417
10418 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10419 return v.equals(r)
10420}
10421
ab78acc6
IC
10422function verify (curve, hash, signature, Q) {
10423 // 1.4.2 H = Hash(M), already done by the user
10424 // 1.4.3 e = H
10425 var e = BigInteger.fromBuffer(hash)
10426
10427 return verifyRaw(curve, e, signature, Q)
10428}
10429
ebd8d4e8
IC
10430/**
10431 * Recover a public key from a signature.
10432 *
10433 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10434 * Key Recovery Operation".
10435 *
10436 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10437 */
ab78acc6 10438function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10439 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10440
ab78acc6
IC
10441 var n = curve.n
10442 var G = curve.G
10443
ebd8d4e8
IC
10444 var r = signature.r
10445 var s = signature.s
10446
ab78acc6
IC
10447 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10448 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10449
ebd8d4e8
IC
10450 // A set LSB signifies that the y-coordinate is odd
10451 var isYOdd = i & 1
10452
10453 // The more significant bit specifies whether we should use the
10454 // first or second candidate key.
10455 var isSecondKey = i >> 1
10456
ebd8d4e8
IC
10457 // 1.1 Let x = r + jn
10458 var x = isSecondKey ? r.add(n) : r
10459 var R = curve.pointFromX(isYOdd, x)
10460
10461 // 1.4 Check that nR is at infinity
10462 var nR = R.multiply(n)
10463 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10464
10465 // Compute -e from e
10466 var eNeg = e.negate().mod(n)
10467
10468 // 1.6.1 Compute Q = r^-1 (sR - eG)
10469 // Q = r^-1 (sR + -eG)
10470 var rInv = r.modInverse(n)
10471
10472 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10473 curve.validate(Q)
10474
10475 return Q
10476}
10477
10478/**
10479 * Calculate pubkey extraction parameter.
10480 *
10481 * When extracting a pubkey from a signature, we have to
10482 * distinguish four different cases. Rather than putting this
10483 * burden on the verifier, Bitcoin includes a 2-bit value with the
10484 * signature.
10485 *
10486 * This function simply tries all four cases and returns the value
10487 * that resulted in a successful pubkey recovery.
10488 */
ab78acc6 10489function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10490 for (var i = 0; i < 4; i++) {
10491 var Qprime = recoverPubKey(curve, e, signature, i)
10492
10493 // 1.6.2 Verify Q
10494 if (Qprime.equals(Q)) {
10495 return i
10496 }
10497 }
10498
10499 throw new Error('Unable to find valid recovery factor')
10500}
10501
10502module.exports = {
10503 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10504 deterministicGenerateK: deterministicGenerateK,
10505 recoverPubKey: recoverPubKey,
10506 sign: sign,
10507 verify: verify,
10508 verifyRaw: verifyRaw
10509}
10510
ab78acc6
IC
10511}).call(this,require("buffer").Buffer)
10512},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10513(function (Buffer){
ab78acc6
IC
10514var assert = require('assert')
10515var base58check = require('bs58check')
10516var ecdsa = require('./ecdsa')
10517var networks = require('./networks')
10518var randomBytes = require('randombytes')
10519var typeForce = require('typeforce')
ebd8d4e8 10520
ab78acc6
IC
10521var BigInteger = require('bigi')
10522var ECPubKey = require('./ecpubkey')
ebd8d4e8 10523
ab78acc6
IC
10524var ecurve = require('ecurve')
10525var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10526
ab78acc6 10527function ECKey (d, compressed) {
ebd8d4e8 10528 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10529 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10530
ab78acc6 10531 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10532
10533 this.d = d
10534 this.pub = new ECPubKey(Q, compressed)
10535}
10536
ab78acc6
IC
10537// Constants
10538ECKey.curve = secp256k1
10539
ebd8d4e8 10540// Static constructors
ab78acc6 10541ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10542 var payload = base58check.decode(string)
10543 var compressed = false
10544
10545 // Ignore the version byte
10546 payload = payload.slice(1)
10547
10548 if (payload.length === 33) {
10549 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10550
10551 // Truncate the compression flag
10552 payload = payload.slice(0, -1)
10553 compressed = true
10554 }
10555
10556 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10557
10558 var d = BigInteger.fromBuffer(payload)
10559 return new ECKey(d, compressed)
10560}
10561
ab78acc6
IC
10562ECKey.makeRandom = function (compressed, rng) {
10563 rng = rng || randomBytes
ebd8d4e8
IC
10564
10565 var buffer = rng(32)
ab78acc6
IC
10566 typeForce('Buffer', buffer)
10567 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10568
10569 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10570 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10571
10572 return new ECKey(d, compressed)
10573}
10574
10575// Export functions
ab78acc6 10576ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10577 network = network || networks.bitcoin
10578
10579 var bufferLen = this.pub.compressed ? 34 : 33
10580 var buffer = new Buffer(bufferLen)
10581
10582 buffer.writeUInt8(network.wif, 0)
10583 this.d.toBuffer(32).copy(buffer, 1)
10584
10585 if (this.pub.compressed) {
10586 buffer.writeUInt8(0x01, 33)
10587 }
10588
10589 return base58check.encode(buffer)
10590}
10591
10592// Operations
ab78acc6
IC
10593ECKey.prototype.sign = function (hash) {
10594 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10595}
10596
10597module.exports = ECKey
10598
ab78acc6
IC
10599}).call(this,require("buffer").Buffer)
10600},{"./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 10601(function (Buffer){
ab78acc6
IC
10602var crypto = require('./crypto')
10603var ecdsa = require('./ecdsa')
10604var typeForce = require('typeforce')
10605var networks = require('./networks')
ebd8d4e8 10606
ab78acc6 10607var Address = require('./address')
ebd8d4e8 10608
ab78acc6
IC
10609var ecurve = require('ecurve')
10610var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10611
ab78acc6
IC
10612function ECPubKey (Q, compressed) {
10613 if (compressed === undefined) {
10614 compressed = true
10615 }
ebd8d4e8 10616
ab78acc6
IC
10617 typeForce('Point', Q)
10618 typeForce('Boolean', compressed)
ebd8d4e8
IC
10619
10620 this.compressed = compressed
10621 this.Q = Q
10622}
10623
ab78acc6
IC
10624// Constants
10625ECPubKey.curve = secp256k1
10626
ebd8d4e8 10627// Static constructors
ab78acc6
IC
10628ECPubKey.fromBuffer = function (buffer) {
10629 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10630 return new ECPubKey(Q, Q.compressed)
10631}
10632
ab78acc6 10633ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10634 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10635}
10636
10637// Operations
ab78acc6 10638ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10639 network = network || networks.bitcoin
10640
10641 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10642}
10643
ab78acc6
IC
10644ECPubKey.prototype.verify = function (hash, signature) {
10645 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10646}
10647
10648// Export functions
ab78acc6 10649ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10650 return this.Q.getEncoded(this.compressed)
10651}
10652
ab78acc6 10653ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10654 return this.toBuffer().toString('hex')
10655}
10656
10657module.exports = ECPubKey
10658
ab78acc6
IC
10659}).call(this,require("buffer").Buffer)
10660},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10661(function (Buffer){
ab78acc6
IC
10662var assert = require('assert')
10663var typeForce = require('typeforce')
10664
10665var BigInteger = require('bigi')
10666
10667function ECSignature (r, s) {
10668 typeForce('BigInteger', r)
10669 typeForce('BigInteger', s)
ebd8d4e8 10670
ebd8d4e8
IC
10671 this.r = r
10672 this.s = s
10673}
10674
ab78acc6 10675ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10676 assert.equal(buffer.length, 65, 'Invalid signature length')
10677 var i = buffer.readUInt8(0) - 27
10678
10679 // At most 3 bits
10680 assert.equal(i, i & 7, 'Invalid signature parameter')
10681 var compressed = !!(i & 4)
10682
10683 // Recovery param only
10684 i = i & 3
10685
10686 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10687 var s = BigInteger.fromBuffer(buffer.slice(33))
10688
10689 return {
10690 compressed: compressed,
10691 i: i,
10692 signature: new ECSignature(r, s)
10693 }
10694}
10695
ab78acc6 10696ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10697 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10698 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10699 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10700
10701 var rLen = buffer.readUInt8(3)
10702 assert(rLen > 0, 'R length is zero')
10703
10704 var offset = 4 + rLen
10705 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10706
10707 var sLen = buffer.readUInt8(offset + 1)
10708 assert(sLen > 0, 'S length is zero')
10709
10710 var rB = buffer.slice(4, offset)
10711 var sB = buffer.slice(offset + 2)
10712 offset += 2 + sLen
10713
10714 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10715 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10716 }
10717
10718 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10719 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10720 }
10721
10722 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10723 var r = BigInteger.fromDERInteger(rB)
10724 var s = BigInteger.fromDERInteger(sB)
10725
10726 assert(r.signum() >= 0, 'R value is negative')
10727 assert(s.signum() >= 0, 'S value is negative')
10728
10729 return new ECSignature(r, s)
10730}
10731
ab78acc6
IC
10732// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10733ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10734 var hashType = buffer.readUInt8(buffer.length - 1)
10735 var hashTypeMod = hashType & ~0x80
10736
ab78acc6 10737 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10738
10739 return {
10740 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10741 hashType: hashType
10742 }
10743}
10744
ab78acc6
IC
10745ECSignature.prototype.toCompact = function (i, compressed) {
10746 if (compressed) {
10747 i += 4
10748 }
10749
ebd8d4e8
IC
10750 i += 27
10751
10752 var buffer = new Buffer(65)
10753 buffer.writeUInt8(i, 0)
10754
10755 this.r.toBuffer(32).copy(buffer, 1)
10756 this.s.toBuffer(32).copy(buffer, 33)
10757
10758 return buffer
10759}
10760
ab78acc6 10761ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
10762 var rBa = this.r.toDERInteger()
10763 var sBa = this.s.toDERInteger()
10764
10765 var sequence = []
ab78acc6
IC
10766
10767 // INTEGER
10768 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
10769 sequence = sequence.concat(rBa)
10770
ab78acc6
IC
10771 // INTEGER
10772 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
10773 sequence = sequence.concat(sBa)
10774
ab78acc6
IC
10775 // SEQUENCE
10776 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
10777
10778 return new Buffer(sequence)
10779}
10780
ab78acc6
IC
10781ECSignature.prototype.toScriptSignature = function (hashType) {
10782 var hashTypeMod = hashType & ~0x80
10783 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10784
ebd8d4e8
IC
10785 var hashTypeBuffer = new Buffer(1)
10786 hashTypeBuffer.writeUInt8(hashType, 0)
10787
10788 return Buffer.concat([this.toDER(), hashTypeBuffer])
10789}
10790
10791module.exports = ECSignature
10792
ab78acc6
IC
10793}).call(this,require("buffer").Buffer)
10794},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 10795(function (Buffer){
ab78acc6
IC
10796var assert = require('assert')
10797var base58check = require('bs58check')
10798var bcrypto = require('./crypto')
10799var createHmac = require('create-hmac')
10800var typeForce = require('typeforce')
10801var networks = require('./networks')
10802
10803var BigInteger = require('bigi')
10804var ECKey = require('./eckey')
10805var ECPubKey = require('./ecpubkey')
10806
10807var ecurve = require('ecurve')
ebd8d4e8
IC
10808var curve = ecurve.getCurveByName('secp256k1')
10809
ab78acc6 10810function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
10811 for (var name in networks) {
10812 var network = networks[name]
10813
ab78acc6
IC
10814 if (version === network.bip32.private || version === network.bip32.public) {
10815 return network
ebd8d4e8
IC
10816 }
10817 }
10818
ab78acc6 10819 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
10820}
10821
ab78acc6 10822function HDNode (K, chainCode, network) {
ebd8d4e8
IC
10823 network = network || networks.bitcoin
10824
ab78acc6
IC
10825 typeForce('Buffer', chainCode)
10826
10827 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
10828 assert(network.bip32, 'Unknown BIP32 constants for network')
10829
10830 this.chainCode = chainCode
10831 this.depth = 0
10832 this.index = 0
ab78acc6 10833 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
10834 this.network = network
10835
10836 if (K instanceof BigInteger) {
10837 this.privKey = new ECKey(K, true)
10838 this.pubKey = this.privKey.pub
ab78acc6
IC
10839 } else if (K instanceof ECKey) {
10840 assert(K.pub.compressed, 'ECKey must be compressed')
10841 this.privKey = K
10842 this.pubKey = K.pub
10843 } else if (K instanceof ECPubKey) {
10844 assert(K.compressed, 'ECPubKey must be compressed')
10845 this.pubKey = K
ebd8d4e8
IC
10846 } else {
10847 this.pubKey = new ECPubKey(K, true)
10848 }
10849}
10850
10851HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10852HDNode.HIGHEST_BIT = 0x80000000
10853HDNode.LENGTH = 78
10854
ab78acc6
IC
10855HDNode.fromSeedBuffer = function (seed, network) {
10856 typeForce('Buffer', seed)
10857
10858 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10859 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10860
10861 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
10862 var IL = I.slice(0, 32)
10863 var IR = I.slice(32)
10864
10865 // In case IL is 0 or >= n, the master key is invalid
10866 // This is handled by `new ECKey` in the HDNode constructor
10867 var pIL = BigInteger.fromBuffer(IL)
10868
10869 return new HDNode(pIL, IR, network)
10870}
10871
ab78acc6 10872HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
10873 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10874}
10875
ab78acc6
IC
10876HDNode.fromBase58 = function (string, network) {
10877 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
10878}
10879
ab78acc6
IC
10880// FIXME: remove in 2.x.y
10881HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10882 if (!__ignoreDeprecation) {
10883 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10884 }
10885
ebd8d4e8
IC
10886 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10887
10888 // 4 byte: version bytes
10889 var version = buffer.readUInt32BE(0)
ab78acc6
IC
10890
10891 if (network) {
10892 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10893
10894 // auto-detect
10895 } else {
10896 network = findBIP32NetworkByVersion(version)
10897 }
ebd8d4e8
IC
10898
10899 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10900 var depth = buffer.readUInt8(4)
10901
10902 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10903 var parentFingerprint = buffer.readUInt32BE(5)
10904 if (depth === 0) {
10905 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10906 }
10907
10908 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10909 // This is encoded in MSB order. (0x00000000 if master key)
10910 var index = buffer.readUInt32BE(9)
10911 assert(depth > 0 || index === 0, 'Invalid index')
10912
10913 // 32 bytes: the chain code
10914 var chainCode = buffer.slice(13, 45)
ab78acc6 10915 var data, hd
ebd8d4e8
IC
10916
10917 // 33 bytes: private key data (0x00 + k)
ab78acc6 10918 if (version === network.bip32.private) {
ebd8d4e8 10919 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 10920 data = buffer.slice(46, 78)
ebd8d4e8 10921 var d = BigInteger.fromBuffer(data)
ab78acc6 10922 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
10923
10924 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10925 } else {
ab78acc6 10926 data = buffer.slice(45, 78)
ebd8d4e8
IC
10927 var Q = ecurve.Point.decodeFrom(curve, data)
10928 assert.equal(Q.compressed, true, 'Invalid public key')
10929
10930 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10931 // If not, the extended public key is invalid.
10932 curve.validate(Q)
10933
ab78acc6 10934 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
10935 }
10936
10937 hd.depth = depth
10938 hd.index = index
10939 hd.parentFingerprint = parentFingerprint
10940
10941 return hd
10942}
10943
ab78acc6
IC
10944// FIXME: remove in 2.x.y
10945HDNode.fromHex = function (hex, network) {
10946 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
10947}
10948
ab78acc6
IC
10949HDNode.prototype.getIdentifier = function () {
10950 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
10951}
10952
ab78acc6 10953HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
10954 return this.getIdentifier().slice(0, 4)
10955}
10956
ab78acc6 10957HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
10958 return this.pubKey.getAddress(this.network)
10959}
10960
ab78acc6
IC
10961HDNode.prototype.neutered = function () {
10962 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10963 neutered.depth = this.depth
10964 neutered.index = this.index
10965 neutered.parentFingerprint = this.parentFingerprint
10966
10967 return neutered
10968}
10969
10970HDNode.prototype.toBase58 = function (isPrivate) {
10971 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
10972}
10973
ab78acc6
IC
10974// FIXME: remove in 2.x.y
10975HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10976 if (isPrivate === undefined) {
10977 isPrivate = !!this.privKey
10978
10979 // FIXME: remove in 2.x.y
10980 } else {
10981 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10982 }
10983
10984 if (!__ignoreDeprecation) {
10985 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10986 }
ebd8d4e8
IC
10987
10988 // Version
10989 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10990 var buffer = new Buffer(HDNode.LENGTH)
10991
10992 // 4 bytes: version bytes
10993 buffer.writeUInt32BE(version, 0)
10994
10995 // Depth
10996 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
10997 buffer.writeUInt8(this.depth, 4)
10998
10999 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11000 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11001
11002 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11003 // This is encoded in Big endian. (0x00000000 if master key)
11004 buffer.writeUInt32BE(this.index, 9)
11005
11006 // 32 bytes: the chain code
11007 this.chainCode.copy(buffer, 13)
11008
11009 // 33 bytes: the public key or private key data
11010 if (isPrivate) {
ab78acc6 11011 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11012 assert(this.privKey, 'Missing private key')
11013
11014 // 0x00 + k for private keys
11015 buffer.writeUInt8(0, 45)
11016 this.privKey.d.toBuffer(32).copy(buffer, 46)
11017 } else {
ebd8d4e8
IC
11018 // X9.62 encoding for public keys
11019 this.pubKey.toBuffer().copy(buffer, 45)
11020 }
11021
11022 return buffer
11023}
11024
ab78acc6
IC
11025// FIXME: remove in 2.x.y
11026HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11027 return this.toBuffer(isPrivate).toString('hex')
11028}
11029
11030// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11031HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11032 var isHardened = index >= HDNode.HIGHEST_BIT
11033 var indexBuffer = new Buffer(4)
11034 indexBuffer.writeUInt32BE(index, 0)
11035
11036 var data
11037
11038 // Hardened child
11039 if (isHardened) {
11040 assert(this.privKey, 'Could not derive hardened child key')
11041
11042 // data = 0x00 || ser256(kpar) || ser32(index)
11043 data = Buffer.concat([
11044 this.privKey.d.toBuffer(33),
11045 indexBuffer
11046 ])
11047
11048 // Normal child
11049 } else {
11050 // data = serP(point(kpar)) || ser32(index)
11051 // = serP(Kpar) || ser32(index)
11052 data = Buffer.concat([
11053 this.pubKey.toBuffer(),
11054 indexBuffer
11055 ])
11056 }
11057
ab78acc6 11058 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11059 var IL = I.slice(0, 32)
11060 var IR = I.slice(32)
11061
11062 var pIL = BigInteger.fromBuffer(IL)
11063
11064 // In case parse256(IL) >= n, proceed with the next value for i
11065 if (pIL.compareTo(curve.n) >= 0) {
11066 return this.derive(index + 1)
11067 }
11068
11069 // Private parent key -> private child key
11070 var hd
11071 if (this.privKey) {
11072 // ki = parse256(IL) + kpar (mod n)
11073 var ki = pIL.add(this.privKey.d).mod(curve.n)
11074
11075 // In case ki == 0, proceed with the next value for i
11076 if (ki.signum() === 0) {
11077 return this.derive(index + 1)
11078 }
11079
11080 hd = new HDNode(ki, IR, this.network)
11081
11082 // Public parent key -> public child key
11083 } else {
11084 // Ki = point(parse256(IL)) + Kpar
11085 // = G*IL + Kpar
11086 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11087
11088 // In case Ki is the point at infinity, proceed with the next value for i
11089 if (curve.isInfinity(Ki)) {
11090 return this.derive(index + 1)
11091 }
11092
11093 hd = new HDNode(Ki, IR, this.network)
11094 }
11095
11096 hd.depth = this.depth + 1
11097 hd.index = index
11098 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11099
11100 return hd
11101}
11102
ab78acc6 11103HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11104 // Only derives hardened private keys by default
11105 return this.derive(index + HDNode.HIGHEST_BIT)
11106}
11107
11108HDNode.prototype.toString = HDNode.prototype.toBase58
11109
11110module.exports = HDNode
11111
ab78acc6
IC
11112}).call(this,require("buffer").Buffer)
11113},{"./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 11114module.exports = {
ab78acc6
IC
11115 Address: require('./address'),
11116 base58check: require('./base58check'),
11117 Block: require('./block'),
11118 bufferutils: require('./bufferutils'),
11119 crypto: require('./crypto'),
11120 ecdsa: require('./ecdsa'),
11121 ECKey: require('./eckey'),
11122 ECPubKey: require('./ecpubkey'),
11123 ECSignature: require('./ecsignature'),
11124 Message: require('./message'),
11125 opcodes: require('./opcodes'),
11126 HDNode: require('./hdnode'),
11127 Script: require('./script'),
11128 scripts: require('./scripts'),
11129 Transaction: require('./transaction'),
11130 TransactionBuilder: require('./transaction_builder'),
11131 networks: require('./networks'),
11132 Wallet: require('./wallet')
11133}
11134
11135},{"./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 11136(function (Buffer){
ab78acc6
IC
11137var bufferutils = require('./bufferutils')
11138var crypto = require('./crypto')
11139var ecdsa = require('./ecdsa')
11140var networks = require('./networks')
11141
11142var BigInteger = require('bigi')
11143var ECPubKey = require('./ecpubkey')
11144var ECSignature = require('./ecsignature')
11145
11146var ecurve = require('ecurve')
ebd8d4e8
IC
11147var ecparams = ecurve.getCurveByName('secp256k1')
11148
ab78acc6 11149function magicHash (message, network) {
ebd8d4e8
IC
11150 var magicPrefix = new Buffer(network.magicPrefix)
11151 var messageBuffer = new Buffer(message)
ab78acc6 11152 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11153
11154 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11155 return crypto.hash256(buffer)
11156}
11157
ab78acc6 11158function sign (privKey, message, network) {
ebd8d4e8
IC
11159 network = network || networks.bitcoin
11160
11161 var hash = magicHash(message, network)
11162 var signature = privKey.sign(hash)
11163 var e = BigInteger.fromBuffer(hash)
11164 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11165
11166 return signature.toCompact(i, privKey.pub.compressed)
11167}
11168
11169// TODO: network could be implied from address
ab78acc6
IC
11170function verify (address, signature, message, network) {
11171 if (!Buffer.isBuffer(signature)) {
11172 signature = new Buffer(signature, 'base64')
ebd8d4e8 11173 }
ab78acc6 11174
ebd8d4e8
IC
11175 network = network || networks.bitcoin
11176
11177 var hash = magicHash(message, network)
ab78acc6 11178 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11179 var e = BigInteger.fromBuffer(hash)
11180 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11181
11182 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11183 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11184}
11185
11186module.exports = {
11187 magicHash: magicHash,
11188 sign: sign,
11189 verify: verify
11190}
11191
ab78acc6
IC
11192}).call(this,require("buffer").Buffer)
11193},{"./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
11194// https://en.bitcoin.it/wiki/List_of_address_prefixes
11195// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11196
11197var networks = {
11198 bitcoin: {
11199 magicPrefix: '\x18Bitcoin Signed Message:\n',
11200 bip32: {
11201 public: 0x0488b21e,
11202 private: 0x0488ade4
11203 },
11204 pubKeyHash: 0x00,
11205 scriptHash: 0x05,
11206 wif: 0x80,
11207 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11208 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11209 estimateFee: estimateFee('bitcoin')
a9385c1b 11210 },
ab78acc6
IC
11211 testnet: {
11212 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11213 bip32: {
ab78acc6
IC
11214 public: 0x043587cf,
11215 private: 0x04358394
a9385c1b 11216 },
ab78acc6
IC
11217 pubKeyHash: 0x6f,
11218 scriptHash: 0xc4,
11219 wif: 0xef,
11220 dustThreshold: 546,
cb325c58 11221 feePerKb: 10000,
ab78acc6 11222 estimateFee: estimateFee('testnet')
a9385c1b 11223 },
ab78acc6
IC
11224 litecoin: {
11225 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11226 bip32: {
ab78acc6
IC
11227 public: 0x019da462,
11228 private: 0x019d9cfe
a9385c1b 11229 },
ab78acc6
IC
11230 pubKeyHash: 0x30,
11231 scriptHash: 0x05,
11232 wif: 0xb0,
11233 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11234 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11235 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11236 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11237 },
11238 dogecoin: {
11239 magicPrefix: '\x19Dogecoin Signed Message:\n',
11240 bip32: {
11241 public: 0x02facafd,
11242 private: 0x02fac398
11243 },
11244 pubKeyHash: 0x1e,
11245 scriptHash: 0x16,
11246 wif: 0x9e,
11247 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11248 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11249 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11250 estimateFee: estimateFee('dogecoin')
11251 },
ab78acc6
IC
11252 viacoin: {
11253 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11254 bip32: {
ab78acc6
IC
11255 public: 0x0488b21e,
11256 private: 0x0488ade4
ebd8d4e8 11257 },
ab78acc6
IC
11258 pubKeyHash: 0x47,
11259 scriptHash: 0x21,
11260 wif: 0xc7,
11261 dustThreshold: 560,
11262 dustSoftThreshold: 100000,
11263 feePerKb: 100000, //
11264 estimateFee: estimateFee('viacoin')
ebd8d4e8 11265 },
ab78acc6
IC
11266 viacointestnet: {
11267 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11268 bip32: {
11269 public: 0x043587cf,
11270 private: 0x04358394
11271 },
ab78acc6 11272 pubKeyHash: 0x7f,
ebd8d4e8 11273 scriptHash: 0xc4,
ab78acc6
IC
11274 wif: 0xff,
11275 dustThreshold: 560,
11276 dustSoftThreshold: 100000,
11277 feePerKb: 100000,
11278 estimateFee: estimateFee('viacointestnet')
11279 },
11280 gamerscoin: {
11281 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11282 bip32: {
11283 public: 0x019da462,
11284 private: 0x019d9cfe
11285 },
11286 pubKeyHash: 0x26,
11287 scriptHash: 0x05,
11288 wif: 0xA6,
11289 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11290 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11291 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11292 estimateFee: estimateFee('gamerscoin')
11293 },
11294 jumbucks: {
11295 magicPrefix: '\x19Jumbucks Signed Message:\n',
11296 bip32: {
11297 public: 0x037a689a,
11298 private: 0x037a6460
11299 },
11300 pubKeyHash: 0x2b,
11301 scriptHash: 0x05,
11302 wif: 0xab,
11303 dustThreshold: 0,
11304 dustSoftThreshold: 10000,
ebd8d4e8 11305 feePerKb: 10000,
ab78acc6
IC
11306 estimateFee: estimateFee('jumbucks')
11307 },
11308 zetacoin: {
11309 magicPrefix: '\x18Zetacoin Signed Message:\n',
11310 bip32: {
11311 public: 0x0488b21e,
11312 private: 0x0488ade4
11313 },
11314 pubKeyHash: 0x50,
11315 scriptHash: 0x09,
11316 wif: 0xe0,
11317 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11318 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11319 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11320 }
11321}
11322
ab78acc6
IC
11323function estimateFee (type) {
11324 return function (tx) {
ebd8d4e8
IC
11325 var network = networks[type]
11326 var baseFee = network.feePerKb
11327 var byteSize = tx.toBuffer().length
11328
11329 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11330 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11331
ab78acc6 11332 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11333 if (e.value < network.dustSoftThreshold) {
11334 fee += baseFee
11335 }
11336 })
11337
11338 return fee
11339 }
11340}
11341
11342module.exports = networks
11343
ab78acc6 11344},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11345module.exports = {
11346 // push value
ab78acc6
IC
11347 OP_FALSE: 0,
11348 OP_0: 0,
11349 OP_PUSHDATA1: 76,
11350 OP_PUSHDATA2: 77,
11351 OP_PUSHDATA4: 78,
11352 OP_1NEGATE: 79,
11353 OP_RESERVED: 80,
11354 OP_1: 81,
11355 OP_TRUE: 81,
11356 OP_2: 82,
11357 OP_3: 83,
11358 OP_4: 84,
11359 OP_5: 85,
11360 OP_6: 86,
11361 OP_7: 87,
11362 OP_8: 88,
11363 OP_9: 89,
11364 OP_10: 90,
11365 OP_11: 91,
11366 OP_12: 92,
11367 OP_13: 93,
11368 OP_14: 94,
11369 OP_15: 95,
11370 OP_16: 96,
ebd8d4e8
IC
11371
11372 // control
ab78acc6
IC
11373 OP_NOP: 97,
11374 OP_VER: 98,
11375 OP_IF: 99,
11376 OP_NOTIF: 100,
11377 OP_VERIF: 101,
11378 OP_VERNOTIF: 102,
11379 OP_ELSE: 103,
11380 OP_ENDIF: 104,
11381 OP_VERIFY: 105,
11382 OP_RETURN: 106,
ebd8d4e8
IC
11383
11384 // stack ops
ab78acc6
IC
11385 OP_TOALTSTACK: 107,
11386 OP_FROMALTSTACK: 108,
11387 OP_2DROP: 109,
11388 OP_2DUP: 110,
11389 OP_3DUP: 111,
11390 OP_2OVER: 112,
11391 OP_2ROT: 113,
11392 OP_2SWAP: 114,
11393 OP_IFDUP: 115,
11394 OP_DEPTH: 116,
11395 OP_DROP: 117,
11396 OP_DUP: 118,
11397 OP_NIP: 119,
11398 OP_OVER: 120,
11399 OP_PICK: 121,
11400 OP_ROLL: 122,
11401 OP_ROT: 123,
11402 OP_SWAP: 124,
11403 OP_TUCK: 125,
ebd8d4e8
IC
11404
11405 // splice ops
ab78acc6
IC
11406 OP_CAT: 126,
11407 OP_SUBSTR: 127,
11408 OP_LEFT: 128,
11409 OP_RIGHT: 129,
11410 OP_SIZE: 130,
ebd8d4e8
IC
11411
11412 // bit logic
ab78acc6
IC
11413 OP_INVERT: 131,
11414 OP_AND: 132,
11415 OP_OR: 133,
11416 OP_XOR: 134,
11417 OP_EQUAL: 135,
11418 OP_EQUALVERIFY: 136,
11419 OP_RESERVED1: 137,
11420 OP_RESERVED2: 138,
ebd8d4e8
IC
11421
11422 // numeric
ab78acc6
IC
11423 OP_1ADD: 139,
11424 OP_1SUB: 140,
11425 OP_2MUL: 141,
11426 OP_2DIV: 142,
11427 OP_NEGATE: 143,
11428 OP_ABS: 144,
11429 OP_NOT: 145,
11430 OP_0NOTEQUAL: 146,
11431
11432 OP_ADD: 147,
11433 OP_SUB: 148,
11434 OP_MUL: 149,
11435 OP_DIV: 150,
11436 OP_MOD: 151,
11437 OP_LSHIFT: 152,
11438 OP_RSHIFT: 153,
11439
11440 OP_BOOLAND: 154,
11441 OP_BOOLOR: 155,
11442 OP_NUMEQUAL: 156,
11443 OP_NUMEQUALVERIFY: 157,
11444 OP_NUMNOTEQUAL: 158,
11445 OP_LESSTHAN: 159,
11446 OP_GREATERTHAN: 160,
11447 OP_LESSTHANOREQUAL: 161,
11448 OP_GREATERTHANOREQUAL: 162,
11449 OP_MIN: 163,
11450 OP_MAX: 164,
11451
11452 OP_WITHIN: 165,
ebd8d4e8
IC
11453
11454 // crypto
ab78acc6
IC
11455 OP_RIPEMD160: 166,
11456 OP_SHA1: 167,
11457 OP_SHA256: 168,
11458 OP_HASH160: 169,
11459 OP_HASH256: 170,
11460 OP_CODESEPARATOR: 171,
11461 OP_CHECKSIG: 172,
11462 OP_CHECKSIGVERIFY: 173,
11463 OP_CHECKMULTISIG: 174,
11464 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11465
11466 // expansion
ab78acc6
IC
11467 OP_NOP1: 176,
11468 OP_NOP2: 177,
11469 OP_NOP3: 178,
11470 OP_NOP4: 179,
11471 OP_NOP5: 180,
11472 OP_NOP6: 181,
11473 OP_NOP7: 182,
11474 OP_NOP8: 183,
11475 OP_NOP9: 184,
11476 OP_NOP10: 185,
ebd8d4e8
IC
11477
11478 // template matching params
ab78acc6
IC
11479 OP_PUBKEYHASH: 253,
11480 OP_PUBKEY: 254,
11481 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11482}
11483
ab78acc6 11484},{}],68:[function(require,module,exports){
ebd8d4e8 11485(function (Buffer){
ab78acc6
IC
11486var assert = require('assert')
11487var bufferutils = require('./bufferutils')
11488var crypto = require('./crypto')
11489var typeForce = require('typeforce')
11490var opcodes = require('./opcodes')
ebd8d4e8 11491
ab78acc6
IC
11492function Script (buffer, chunks) {
11493 typeForce('Buffer', buffer)
11494 typeForce('Array', chunks)
ebd8d4e8
IC
11495
11496 this.buffer = buffer
11497 this.chunks = chunks
11498}
11499
ab78acc6 11500Script.fromASM = function (asm) {
ebd8d4e8 11501 var strChunks = asm.split(' ')
ab78acc6
IC
11502 var chunks = strChunks.map(function (strChunk) {
11503 // opcode
ebd8d4e8
IC
11504 if (strChunk in opcodes) {
11505 return opcodes[strChunk]
11506
ab78acc6 11507 // data chunk
ebd8d4e8
IC
11508 } else {
11509 return new Buffer(strChunk, 'hex')
11510 }
11511 })
11512
11513 return Script.fromChunks(chunks)
11514}
11515
ab78acc6 11516Script.fromBuffer = function (buffer) {
ebd8d4e8 11517 var chunks = []
ebd8d4e8
IC
11518 var i = 0
11519
11520 while (i < buffer.length) {
11521 var opcode = buffer.readUInt8(i)
11522
ab78acc6 11523 // data chunk
ebd8d4e8
IC
11524 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11525 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11526
11527 // did reading a pushDataInt fail? return non-chunked script
11528 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11529 i += d.size
11530
ab78acc6
IC
11531 // attempt to read too much data?
11532 if (i + d.number > buffer.length) return new Script(buffer, [])
11533
ebd8d4e8
IC
11534 var data = buffer.slice(i, i + d.number)
11535 i += d.number
11536
11537 chunks.push(data)
11538
ab78acc6 11539 // opcode
ebd8d4e8
IC
11540 } else {
11541 chunks.push(opcode)
11542
11543 i += 1
11544 }
11545 }
11546
11547 return new Script(buffer, chunks)
11548}
11549
ab78acc6
IC
11550Script.fromChunks = function (chunks) {
11551 typeForce('Array', chunks)
ebd8d4e8 11552
ab78acc6
IC
11553 var bufferSize = chunks.reduce(function (accum, chunk) {
11554 // data chunk
ebd8d4e8
IC
11555 if (Buffer.isBuffer(chunk)) {
11556 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11557 }
11558
ab78acc6 11559 // opcode
ebd8d4e8
IC
11560 return accum + 1
11561 }, 0.0)
11562
11563 var buffer = new Buffer(bufferSize)
11564 var offset = 0
11565
ab78acc6
IC
11566 chunks.forEach(function (chunk) {
11567 // data chunk
ebd8d4e8
IC
11568 if (Buffer.isBuffer(chunk)) {
11569 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11570
11571 chunk.copy(buffer, offset)
11572 offset += chunk.length
11573
ab78acc6 11574 // opcode
ebd8d4e8
IC
11575 } else {
11576 buffer.writeUInt8(chunk, offset)
11577 offset += 1
11578 }
11579 })
11580
11581 assert.equal(offset, buffer.length, 'Could not decode chunks')
11582 return new Script(buffer, chunks)
11583}
11584
ab78acc6 11585Script.fromHex = function (hex) {
ebd8d4e8
IC
11586 return Script.fromBuffer(new Buffer(hex, 'hex'))
11587}
11588
ebd8d4e8
IC
11589Script.EMPTY = Script.fromChunks([])
11590
ab78acc6 11591Script.prototype.getHash = function () {
ebd8d4e8
IC
11592 return crypto.hash160(this.buffer)
11593}
11594
11595// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11596Script.prototype.without = function (needle) {
11597 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11598 return op !== needle
11599 }))
11600}
11601
ebd8d4e8
IC
11602var reverseOps = []
11603for (var op in opcodes) {
11604 var code = opcodes[op]
11605 reverseOps[code] = op
11606}
11607
ab78acc6
IC
11608Script.prototype.toASM = function () {
11609 return this.chunks.map(function (chunk) {
11610 // data chunk
ebd8d4e8
IC
11611 if (Buffer.isBuffer(chunk)) {
11612 return chunk.toString('hex')
11613
ab78acc6 11614 // opcode
ebd8d4e8
IC
11615 } else {
11616 return reverseOps[chunk]
11617 }
11618 }).join(' ')
11619}
11620
ab78acc6 11621Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11622 return this.buffer
11623}
11624
ab78acc6 11625Script.prototype.toHex = function () {
ebd8d4e8
IC
11626 return this.toBuffer().toString('hex')
11627}
11628
11629module.exports = Script
11630
ab78acc6
IC
11631}).call(this,require("buffer").Buffer)
11632},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11633(function (Buffer){
ab78acc6
IC
11634var assert = require('assert')
11635var ops = require('./opcodes')
11636var typeForce = require('typeforce')
ebd8d4e8 11637
ab78acc6 11638var ecurve = require('ecurve')
ebd8d4e8
IC
11639var curve = ecurve.getCurveByName('secp256k1')
11640
ab78acc6
IC
11641var ECSignature = require('./ecsignature')
11642var Script = require('./script')
ebd8d4e8 11643
ab78acc6 11644function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11645 if (!Buffer.isBuffer(buffer)) return false
11646
11647 try {
ebd8d4e8
IC
11648 ecurve.Point.decodeFrom(curve, buffer)
11649 } catch (e) {
ab78acc6
IC
11650 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11651 throw e
ebd8d4e8
IC
11652
11653 return false
11654 }
11655
11656 return true
11657}
11658
ab78acc6 11659function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11660 if (!Buffer.isBuffer(buffer)) return false
11661
11662 try {
11663 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11664 } catch (e) {
11665 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/))) {
11666 throw e
11667 }
ebd8d4e8
IC
11668
11669 return false
11670 }
11671
11672 return true
11673}
11674
ab78acc6
IC
11675function isPubKeyHashInput (script) {
11676 return script.chunks.length === 2 &&
11677 isCanonicalSignature(script.chunks[0]) &&
11678 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11679}
11680
ab78acc6
IC
11681function isPubKeyHashOutput (script) {
11682 return script.chunks.length === 5 &&
11683 script.chunks[0] === ops.OP_DUP &&
11684 script.chunks[1] === ops.OP_HASH160 &&
11685 Buffer.isBuffer(script.chunks[2]) &&
11686 script.chunks[2].length === 20 &&
11687 script.chunks[3] === ops.OP_EQUALVERIFY &&
11688 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11689}
11690
ab78acc6
IC
11691function isPubKeyInput (script) {
11692 return script.chunks.length === 1 &&
11693 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11694}
11695
ab78acc6
IC
11696function isPubKeyOutput (script) {
11697 return script.chunks.length === 2 &&
11698 isCanonicalPubKey(script.chunks[0]) &&
11699 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11700}
11701
ab78acc6
IC
11702function isScriptHashInput (script, allowIncomplete) {
11703 if (script.chunks.length < 2) return false
ebd8d4e8 11704
ab78acc6 11705 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11706 if (!Buffer.isBuffer(lastChunk)) return false
11707
ab78acc6
IC
11708 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11709 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11710
ab78acc6
IC
11711 // is redeemScript a valid script?
11712 if (redeemScript.chunks.length === 0) return false
11713
11714 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11715}
11716
ab78acc6
IC
11717function isScriptHashOutput (script) {
11718 return script.chunks.length === 3 &&
11719 script.chunks[0] === ops.OP_HASH160 &&
11720 Buffer.isBuffer(script.chunks[1]) &&
11721 script.chunks[1].length === 20 &&
11722 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11723}
11724
ab78acc6
IC
11725// allowIncomplete is to account for combining signatures
11726// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11727function isMultisigInput (script, allowIncomplete) {
11728 if (script.chunks.length < 2) return false
11729 if (script.chunks[0] !== ops.OP_0) return false
11730
11731 if (allowIncomplete) {
11732 return script.chunks.slice(1).every(function (chunk) {
11733 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11734 })
11735 }
11736
11737 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11738}
11739
ab78acc6
IC
11740function isMultisigOutput (script) {
11741 if (script.chunks.length < 4) return false
11742 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11743
ab78acc6
IC
11744 var mOp = script.chunks[0]
11745 if (mOp === ops.OP_0) return false
11746 if (mOp < ops.OP_1) return false
11747 if (mOp > ops.OP_16) return false
ebd8d4e8 11748
ab78acc6
IC
11749 var nOp = script.chunks[script.chunks.length - 2]
11750 if (nOp === ops.OP_0) return false
11751 if (nOp < ops.OP_1) return false
11752 if (nOp > ops.OP_16) return false
ebd8d4e8 11753
ab78acc6
IC
11754 var m = mOp - (ops.OP_1 - 1)
11755 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
11756 if (n < m) return false
11757
ab78acc6 11758 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
11759 if (n < pubKeys.length) return false
11760
11761 return pubKeys.every(isCanonicalPubKey)
11762}
11763
ab78acc6
IC
11764function isNullDataOutput (script) {
11765 return script.chunks[0] === ops.OP_RETURN
11766}
11767
11768function classifyOutput (script) {
11769 typeForce('Script', script)
11770
11771 if (isPubKeyHashOutput(script)) {
11772 return 'pubkeyhash'
11773 } else if (isScriptHashOutput(script)) {
11774 return 'scripthash'
11775 } else if (isMultisigOutput(script)) {
11776 return 'multisig'
11777 } else if (isPubKeyOutput(script)) {
11778 return 'pubkey'
11779 } else if (isNullDataOutput(script)) {
11780 return 'nulldata'
11781 }
11782
11783 return 'nonstandard'
11784}
11785
11786function classifyInput (script, allowIncomplete) {
11787 typeForce('Script', script)
11788
11789 if (isPubKeyHashInput(script)) {
11790 return 'pubkeyhash'
11791 } else if (isMultisigInput(script, allowIncomplete)) {
11792 return 'multisig'
11793 } else if (isScriptHashInput(script, allowIncomplete)) {
11794 return 'scripthash'
11795 } else if (isPubKeyInput(script)) {
11796 return 'pubkey'
11797 }
11798
11799 return 'nonstandard'
ebd8d4e8
IC
11800}
11801
11802// Standard Script Templates
11803// {pubKey} OP_CHECKSIG
ab78acc6 11804function pubKeyOutput (pubKey) {
ebd8d4e8
IC
11805 return Script.fromChunks([
11806 pubKey.toBuffer(),
ab78acc6 11807 ops.OP_CHECKSIG
ebd8d4e8
IC
11808 ])
11809}
11810
11811// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
11812function pubKeyHashOutput (hash) {
11813 typeForce('Buffer', hash)
ebd8d4e8
IC
11814
11815 return Script.fromChunks([
ab78acc6
IC
11816 ops.OP_DUP,
11817 ops.OP_HASH160,
ebd8d4e8 11818 hash,
ab78acc6
IC
11819 ops.OP_EQUALVERIFY,
11820 ops.OP_CHECKSIG
ebd8d4e8
IC
11821 ])
11822}
11823
11824// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
11825function scriptHashOutput (hash) {
11826 typeForce('Buffer', hash)
ebd8d4e8
IC
11827
11828 return Script.fromChunks([
ab78acc6 11829 ops.OP_HASH160,
ebd8d4e8 11830 hash,
ab78acc6 11831 ops.OP_EQUAL
ebd8d4e8
IC
11832 ])
11833}
11834
11835// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
11836function multisigOutput (m, pubKeys) {
11837 typeForce(['ECPubKey'], pubKeys)
11838
ebd8d4e8
IC
11839 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11840
ab78acc6 11841 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
11842 return pubKey.toBuffer()
11843 })
11844 var n = pubKeys.length
11845
11846 return Script.fromChunks([].concat(
ab78acc6 11847 (ops.OP_1 - 1) + m,
ebd8d4e8 11848 pubKeyBuffers,
ab78acc6
IC
11849 (ops.OP_1 - 1) + n,
11850 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
11851 ))
11852}
11853
11854// {signature}
ab78acc6
IC
11855function pubKeyInput (signature) {
11856 typeForce('Buffer', signature)
ebd8d4e8
IC
11857
11858 return Script.fromChunks([signature])
11859}
11860
11861// {signature} {pubKey}
ab78acc6
IC
11862function pubKeyHashInput (signature, pubKey) {
11863 typeForce('Buffer', signature)
ebd8d4e8
IC
11864
11865 return Script.fromChunks([signature, pubKey.toBuffer()])
11866}
11867
11868// <scriptSig> {serialized scriptPubKey script}
ab78acc6 11869function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
11870 return Script.fromChunks([].concat(
11871 scriptSig.chunks,
11872 scriptPubKey.toBuffer()
11873 ))
11874}
11875
11876// OP_0 [signatures ...]
ab78acc6 11877function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 11878 if (scriptPubKey) {
ab78acc6
IC
11879 assert(isMultisigOutput(scriptPubKey))
11880
11881 var mOp = scriptPubKey.chunks[0]
11882 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11883 var m = mOp - (ops.OP_1 - 1)
11884 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 11885
ab78acc6
IC
11886 assert(signatures.length >= m, 'Not enough signatures provided')
11887 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
11888 }
11889
ab78acc6
IC
11890 return Script.fromChunks([].concat(ops.OP_0, signatures))
11891}
11892
11893function nullDataOutput (data) {
11894 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
11895}
11896
11897module.exports = {
ab78acc6
IC
11898 isCanonicalPubKey: isCanonicalPubKey,
11899 isCanonicalSignature: isCanonicalSignature,
11900 isPubKeyHashInput: isPubKeyHashInput,
11901 isPubKeyHashOutput: isPubKeyHashOutput,
11902 isPubKeyInput: isPubKeyInput,
11903 isPubKeyOutput: isPubKeyOutput,
11904 isScriptHashInput: isScriptHashInput,
11905 isScriptHashOutput: isScriptHashOutput,
11906 isMultisigInput: isMultisigInput,
11907 isMultisigOutput: isMultisigOutput,
11908 isNullDataOutput: isNullDataOutput,
ebd8d4e8 11909 classifyOutput: classifyOutput,
ab78acc6
IC
11910 classifyInput: classifyInput,
11911 pubKeyOutput: pubKeyOutput,
ebd8d4e8 11912 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
11913 scriptHashOutput: scriptHashOutput,
11914 multisigOutput: multisigOutput,
ebd8d4e8 11915 pubKeyInput: pubKeyInput,
ab78acc6 11916 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 11917 scriptHashInput: scriptHashInput,
ab78acc6
IC
11918 multisigInput: multisigInput,
11919 dataOutput: function (data) {
11920 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11921 return nullDataOutput(data)
11922 },
11923 nullDataOutput: nullDataOutput
ebd8d4e8
IC
11924}
11925
ab78acc6
IC
11926}).call(this,require("buffer").Buffer)
11927},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 11928(function (Buffer){
ab78acc6
IC
11929var assert = require('assert')
11930var bufferutils = require('./bufferutils')
11931var crypto = require('./crypto')
11932var typeForce = require('typeforce')
11933var opcodes = require('./opcodes')
11934var scripts = require('./scripts')
11935
11936var Address = require('./address')
11937var ECSignature = require('./ecsignature')
11938var Script = require('./script')
11939
11940function Transaction () {
11941 this.version = 1
11942 this.locktime = 0
11943 this.ins = []
11944 this.outs = []
11945}
ebd8d4e8
IC
11946
11947Transaction.DEFAULT_SEQUENCE = 0xffffffff
11948Transaction.SIGHASH_ALL = 0x01
11949Transaction.SIGHASH_NONE = 0x02
11950Transaction.SIGHASH_SINGLE = 0x03
11951Transaction.SIGHASH_ANYONECANPAY = 0x80
11952
ab78acc6
IC
11953Transaction.fromBuffer = function (buffer, __disableAssert) {
11954 var offset = 0
11955 function readSlice (n) {
11956 offset += n
11957 return buffer.slice(offset - n, offset)
11958 }
11959
11960 function readUInt32 () {
11961 var i = buffer.readUInt32LE(offset)
11962 offset += 4
11963 return i
11964 }
11965
11966 function readUInt64 () {
11967 var i = bufferutils.readUInt64LE(buffer, offset)
11968 offset += 8
11969 return i
11970 }
11971
11972 function readVarInt () {
11973 var vi = bufferutils.readVarInt(buffer, offset)
11974 offset += vi.size
11975 return vi.number
11976 }
11977
11978 function readScript () {
11979 return Script.fromBuffer(readSlice(readVarInt()))
11980 }
11981
11982 function readGenerationScript () {
11983 return new Script(readSlice(readVarInt()), [])
11984 }
11985
11986 var tx = new Transaction()
11987 tx.version = readUInt32()
11988
11989 var vinLen = readVarInt()
11990 for (var i = 0; i < vinLen; ++i) {
11991 var hash = readSlice(32)
11992
11993 if (Transaction.isCoinbaseHash(hash)) {
11994 tx.ins.push({
11995 hash: hash,
11996 index: readUInt32(),
11997 script: readGenerationScript(),
11998 sequence: readUInt32()
11999 })
12000 } else {
12001 tx.ins.push({
12002 hash: hash,
12003 index: readUInt32(),
12004 script: readScript(),
12005 sequence: readUInt32()
12006 })
12007 }
12008 }
12009
12010 var voutLen = readVarInt()
12011 for (i = 0; i < voutLen; ++i) {
12012 tx.outs.push({
12013 value: readUInt64(),
12014 script: readScript()
12015 })
12016 }
12017
12018 tx.locktime = readUInt32()
12019
12020 if (!__disableAssert) {
12021 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12022 }
12023
12024 return tx
12025}
12026
12027Transaction.fromHex = function (hex) {
12028 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12029}
12030
12031Transaction.isCoinbaseHash = function (buffer) {
12032 return Array.prototype.every.call(buffer, function (x) {
12033 return x === 0
12034 })
ebd8d4e8
IC
12035}
12036
12037/**
ab78acc6 12038 * Create a new txIn.
ebd8d4e8
IC
12039 *
12040 * Can be called with any of:
12041 *
12042 * - A transaction and an index
12043 * - A transaction hash and an index
12044 *
12045 * Note that this method does not sign the created input.
12046 */
ab78acc6
IC
12047Transaction.prototype.addInput = function (hash, index, sequence, script) {
12048 if (sequence === undefined || sequence === null) {
12049 sequence = Transaction.DEFAULT_SEQUENCE
12050 }
ebd8d4e8 12051
ab78acc6 12052 script = script || Script.EMPTY
ebd8d4e8 12053
ab78acc6 12054 if (typeof hash === 'string') {
ebd8d4e8 12055 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12056 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12057 } else if (hash instanceof Transaction) {
12058 hash = hash.getHash()
ebd8d4e8
IC
12059 }
12060
ab78acc6
IC
12061 typeForce('Buffer', hash)
12062 typeForce('Number', index)
12063 typeForce('Number', sequence)
12064 typeForce('Script', script)
12065
ebd8d4e8 12066 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12067
ab78acc6 12068 // Add the input and return the input's index
ebd8d4e8
IC
12069 return (this.ins.push({
12070 hash: hash,
12071 index: index,
ab78acc6 12072 script: script,
ebd8d4e8
IC
12073 sequence: sequence
12074 }) - 1)
12075}
12076
12077/**
ab78acc6 12078 * Create a new txOut.
ebd8d4e8
IC
12079 *
12080 * Can be called with:
12081 *
12082 * - A base58 address string and a value
12083 * - An Address object and a value
12084 * - A scriptPubKey Script and a value
12085 */
ab78acc6 12086Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12087 // Attempt to get a valid address if it's a base58 address string
12088 if (typeof scriptPubKey === 'string') {
12089 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12090 }
12091
12092 // Attempt to get a valid script if it's an Address object
12093 if (scriptPubKey instanceof Address) {
ab78acc6 12094 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12095 }
12096
ab78acc6
IC
12097 typeForce('Script', scriptPubKey)
12098 typeForce('Number', value)
12099
12100 // Add the output and return the output's index
ebd8d4e8
IC
12101 return (this.outs.push({
12102 script: scriptPubKey,
ab78acc6 12103 value: value
ebd8d4e8
IC
12104 }) - 1)
12105}
12106
ab78acc6
IC
12107Transaction.prototype.clone = function () {
12108 var newTx = new Transaction()
12109 newTx.version = this.version
12110 newTx.locktime = this.locktime
12111
12112 newTx.ins = this.ins.map(function (txIn) {
12113 return {
12114 hash: txIn.hash,
12115 index: txIn.index,
12116 script: txIn.script,
12117 sequence: txIn.sequence
12118 }
12119 })
12120
12121 newTx.outs = this.outs.map(function (txOut) {
12122 return {
12123 script: txOut.script,
12124 value: txOut.value
12125 }
12126 })
12127
12128 return newTx
12129}
12130
12131/**
12132 * Hash transaction for signing a specific input.
12133 *
12134 * Bitcoin uses a different hash for each signed transaction input. This
12135 * method copies the transaction, makes the necessary changes based on the
12136 * hashType, serializes and finally hashes the result. This hash can then be
12137 * used to sign the transaction input in question.
12138 */
12139Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12140 // FIXME: remove in 2.x.y
12141 if (arguments[0] instanceof Script) {
12142 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12143
12144 // swap the arguments (must be stored in tmp, arguments is special)
12145 var tmp = arguments[0]
12146 inIndex = arguments[1]
12147 prevOutScript = tmp
12148 }
12149
12150 typeForce('Number', inIndex)
12151 typeForce('Script', prevOutScript)
12152 typeForce('Number', hashType)
12153
12154 assert(inIndex >= 0, 'Invalid vin index')
12155 assert(inIndex < this.ins.length, 'Invalid vin index')
12156
12157 var txTmp = this.clone()
12158 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12159
12160 // Blank out other inputs' signatures
12161 txTmp.ins.forEach(function (txIn) {
12162 txIn.script = Script.EMPTY
12163 })
12164 txTmp.ins[inIndex].script = hashScript
12165
12166 var hashTypeModifier = hashType & 0x1f
12167
12168 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12169 assert(false, 'SIGHASH_NONE not yet supported')
12170 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12171 assert(false, 'SIGHASH_SINGLE not yet supported')
12172 }
12173
12174 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12175 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12176 }
12177
12178 var hashTypeBuffer = new Buffer(4)
12179 hashTypeBuffer.writeInt32LE(hashType, 0)
12180
12181 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12182 return crypto.hash256(buffer)
12183}
12184
12185Transaction.prototype.getHash = function () {
12186 return crypto.hash256(this.toBuffer())
12187}
12188
12189Transaction.prototype.getId = function () {
12190 // TxHash is little-endian, we need big-endian
12191 return bufferutils.reverse(this.getHash()).toString('hex')
12192}
12193
ebd8d4e8 12194Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12195 function scriptSize (script) {
12196 var length = script.buffer.length
ebd8d4e8 12197
ab78acc6
IC
12198 return bufferutils.varIntSize(length) + length
12199 }
ebd8d4e8
IC
12200
12201 var buffer = new Buffer(
12202 8 +
12203 bufferutils.varIntSize(this.ins.length) +
12204 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12205 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12206 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12207 )
12208
12209 var offset = 0
ab78acc6 12210 function writeSlice (slice) {
ebd8d4e8
IC
12211 slice.copy(buffer, offset)
12212 offset += slice.length
12213 }
ab78acc6
IC
12214
12215 function writeUInt32 (i) {
ebd8d4e8
IC
12216 buffer.writeUInt32LE(i, offset)
12217 offset += 4
12218 }
ab78acc6
IC
12219
12220 function writeUInt64 (i) {
ebd8d4e8
IC
12221 bufferutils.writeUInt64LE(buffer, i, offset)
12222 offset += 8
12223 }
ab78acc6
IC
12224
12225 function writeVarInt (i) {
ebd8d4e8
IC
12226 var n = bufferutils.writeVarInt(buffer, i, offset)
12227 offset += n
12228 }
12229
12230 writeUInt32(this.version)
12231 writeVarInt(this.ins.length)
12232
ab78acc6
IC
12233 this.ins.forEach(function (txIn) {
12234 writeSlice(txIn.hash)
12235 writeUInt32(txIn.index)
12236 writeVarInt(txIn.script.buffer.length)
12237 writeSlice(txIn.script.buffer)
12238 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12239 })
12240
12241 writeVarInt(this.outs.length)
ab78acc6
IC
12242 this.outs.forEach(function (txOut) {
12243 writeUInt64(txOut.value)
12244 writeVarInt(txOut.script.buffer.length)
12245 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12246 })
12247
12248 writeUInt32(this.locktime)
12249
12250 return buffer
12251}
12252
ab78acc6 12253Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12254 return this.toBuffer().toString('hex')
12255}
12256
ab78acc6
IC
12257Transaction.prototype.setInputScript = function (index, script) {
12258 typeForce('Number', index)
12259 typeForce('Script', script)
12260
12261 this.ins[index].script = script
12262}
12263
12264// FIXME: remove in 2.x.y
12265Transaction.prototype.sign = function (index, privKey, hashType) {
12266 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12267
12268 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12269 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12270
12271 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12272 this.setInputScript(index, scriptSig)
12273}
12274
12275// FIXME: remove in 2.x.y
12276Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12277 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12278
12279 hashType = hashType || Transaction.SIGHASH_ALL
12280
12281 var hash = this.hashForSignature(index, prevOutScript, hashType)
12282 var signature = privKey.sign(hash)
12283
12284 return signature.toScriptSignature(hashType)
12285}
12286
12287// FIXME: remove in 2.x.y
12288Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12289 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12290
12291 var parsed = ECSignature.parseScriptSignature(buffer)
12292 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12293
12294 return pubKey.verify(hash, parsed.signature)
12295}
12296
12297module.exports = Transaction
12298
12299}).call(this,require("buffer").Buffer)
12300},{"./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){
12301(function (Buffer){
12302var assert = require('assert')
12303var ops = require('./opcodes')
12304var scripts = require('./scripts')
12305
12306var ECPubKey = require('./ecpubkey')
12307var ECSignature = require('./ecsignature')
12308var Script = require('./script')
12309var Transaction = require('./transaction')
12310
12311function extractInput (txIn) {
12312 var redeemScript
12313 var scriptSig = txIn.script
12314 var prevOutScript
12315 var prevOutType = scripts.classifyInput(scriptSig, true)
12316 var scriptType
12317
12318 // Re-classify if scriptHash
12319 if (prevOutType === 'scripthash') {
12320 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12321 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12322
12323 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12324 scriptType = scripts.classifyInput(scriptSig, true)
12325 } else {
12326 scriptType = prevOutType
12327 }
12328
12329 // Extract hashType, pubKeys and signatures
12330 var hashType, parsed, pubKeys, signatures
12331
12332 switch (scriptType) {
12333 case 'pubkeyhash': {
12334 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12335 hashType = parsed.hashType
12336 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12337 signatures = [parsed.signature]
12338 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12339
12340 break
12341 }
12342
12343 case 'pubkey': {
12344 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12345 hashType = parsed.hashType
12346 signatures = [parsed.signature]
12347
12348 if (redeemScript) {
12349 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12350 }
12351
12352 break
12353 }
12354
12355 case 'multisig': {
12356 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12357 if (chunk === ops.OP_0) return chunk
12358
12359 var parsed = ECSignature.parseScriptSignature(chunk)
12360 hashType = parsed.hashType
12361
12362 return parsed.signature
12363 })
12364
12365 if (redeemScript) {
12366 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12367 }
12368
12369 break
12370 }
12371 }
12372
12373 return {
12374 hashType: hashType,
12375 prevOutScript: prevOutScript,
12376 prevOutType: prevOutType,
12377 pubKeys: pubKeys,
12378 redeemScript: redeemScript,
12379 scriptType: scriptType,
12380 signatures: signatures
12381 }
12382}
12383
12384function TransactionBuilder () {
12385 this.prevTxMap = {}
12386 this.prevOutScripts = {}
12387 this.prevOutTypes = {}
12388
12389 this.inputs = []
12390 this.tx = new Transaction()
12391}
12392
12393TransactionBuilder.fromTransaction = function (transaction) {
12394 var txb = new TransactionBuilder()
12395
12396 // Copy other transaction fields
12397 txb.tx.version = transaction.version
12398 txb.tx.locktime = transaction.locktime
12399
12400 // Extract/add inputs
12401 transaction.ins.forEach(function (txIn) {
12402 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12403 })
12404
12405 // Extract/add outputs
12406 transaction.outs.forEach(function (txOut) {
12407 txb.addOutput(txOut.script, txOut.value)
12408 })
12409
12410 // Extract/add signatures
12411 txb.inputs = transaction.ins.map(function (txIn) {
12412 // TODO: remove me after testcase added
12413 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12414
12415 // Ignore empty scripts
12416 if (txIn.script.buffer.length === 0) return {}
12417
12418 return extractInput(txIn)
12419 })
12420
12421 return txb
12422}
12423
12424TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12425 var prevOutHash
12426
12427 // txId
12428 if (typeof prevTx === 'string') {
12429 prevOutHash = new Buffer(prevTx, 'hex')
12430
12431 // TxId hex is big-endian, we want little-endian hash
12432 Array.prototype.reverse.call(prevOutHash)
12433
12434 // Transaction
12435 } else if (prevTx instanceof Transaction) {
12436 prevOutHash = prevTx.getHash()
12437 prevOutScript = prevTx.outs[index].script
12438
12439 // txHash
12440 } else {
12441 prevOutHash = prevTx
12442 }
12443
12444 var input = {}
12445 if (prevOutScript) {
12446 var prevOutType = scripts.classifyOutput(prevOutScript)
12447
12448 // if we can, extract pubKey information
12449 switch (prevOutType) {
12450 case 'multisig': {
12451 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12452 break
12453 }
12454
12455 case 'pubkey': {
12456 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12457 break
12458 }
12459 }
12460
12461 if (prevOutType !== 'scripthash') {
12462 input.scriptType = prevOutType
12463 }
12464
12465 input.prevOutScript = prevOutScript
12466 input.prevOutType = prevOutType
12467 }
12468
12469 assert(this.inputs.every(function (input2) {
12470 if (input2.hashType === undefined) return true
12471
12472 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12473 }), 'No, this would invalidate signatures')
12474
12475 var prevOut = prevOutHash.toString('hex') + ':' + index
12476 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12477
12478 var vin = this.tx.addInput(prevOutHash, index, sequence)
12479 this.inputs[vin] = input
12480 this.prevTxMap[prevOut] = vin
12481
12482 return vin
12483}
12484
12485TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12486 assert(this.inputs.every(function (input) {
12487 if (input.hashType === undefined) return true
ebd8d4e8 12488
ab78acc6
IC
12489 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12490 }), 'No, this would invalidate signatures')
ebd8d4e8 12491
ab78acc6
IC
12492 return this.tx.addOutput(scriptPubKey, value)
12493}
ebd8d4e8 12494
ab78acc6
IC
12495TransactionBuilder.prototype.build = function () {
12496 return this.__build(false)
12497}
12498TransactionBuilder.prototype.buildIncomplete = function () {
12499 return this.__build(true)
12500}
ebd8d4e8 12501
ab78acc6
IC
12502var canSignTypes = {
12503 'pubkeyhash': true,
12504 'multisig': true,
12505 'pubkey': true
12506}
ebd8d4e8 12507
ab78acc6
IC
12508TransactionBuilder.prototype.__build = function (allowIncomplete) {
12509 if (!allowIncomplete) {
12510 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12511 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12512 }
12513
ab78acc6 12514 var tx = this.tx.clone()
ebd8d4e8 12515
ab78acc6
IC
12516 // Create script signatures from signature meta-data
12517 this.inputs.forEach(function (input, index) {
12518 var scriptType = input.scriptType
12519 var scriptSig
ebd8d4e8 12520
ab78acc6
IC
12521 if (!allowIncomplete) {
12522 assert(!!scriptType, 'Transaction is not complete')
12523 assert(scriptType in canSignTypes, scriptType + ' not supported')
12524 assert(input.signatures, 'Transaction is missing signatures')
12525 }
ebd8d4e8 12526
ab78acc6
IC
12527 if (input.signatures) {
12528 switch (scriptType) {
12529 case 'pubkeyhash': {
12530 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12531 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12532 break
12533 }
ebd8d4e8 12534
ab78acc6
IC
12535 case 'multisig': {
12536 // Array.prototype.map is sparse-compatible
12537 var msSignatures = input.signatures.map(function (signature) {
12538 return signature && signature.toScriptSignature(input.hashType)
12539 })
ebd8d4e8 12540
ab78acc6
IC
12541 // fill in blanks with OP_0
12542 if (allowIncomplete) {
12543 for (var i = 0; i < msSignatures.length; ++i) {
12544 if (msSignatures[i]) continue
ebd8d4e8 12545
ab78acc6
IC
12546 msSignatures[i] = ops.OP_0
12547 }
12548 } else {
12549 // Array.prototype.filter returns non-sparse array
12550 msSignatures = msSignatures.filter(function (x) { return x })
12551 }
ebd8d4e8 12552
ab78acc6
IC
12553 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12554 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12555 break
12556 }
ebd8d4e8 12557
ab78acc6
IC
12558 case 'pubkey': {
12559 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12560 scriptSig = scripts.pubKeyInput(pkSignature)
12561 break
12562 }
12563 }
ebd8d4e8 12564 }
ebd8d4e8 12565
ab78acc6
IC
12566 // did we build a scriptSig?
12567 if (scriptSig) {
12568 // wrap as scriptHash if necessary
12569 if (input.prevOutType === 'scripthash') {
12570 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12571 }
12572
12573 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12574 }
12575 })
12576
ab78acc6 12577 return tx
ebd8d4e8
IC
12578}
12579
ab78acc6
IC
12580TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12581 assert(index in this.inputs, 'No input at index: ' + index)
12582 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12583
ab78acc6
IC
12584 var input = this.inputs[index]
12585 var canSign = input.hashType &&
12586 input.prevOutScript &&
12587 input.prevOutType &&
12588 input.pubKeys &&
12589 input.scriptType &&
12590 input.signatures
ebd8d4e8 12591
ab78acc6
IC
12592 // are we almost ready to sign?
12593 if (canSign) {
12594 // if redeemScript was provided, enforce consistency
12595 if (redeemScript) {
12596 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12597 }
ebd8d4e8 12598
ab78acc6 12599 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12600
ab78acc6
IC
12601 // no? prepare
12602 } else {
12603 // must be pay-to-scriptHash?
12604 if (redeemScript) {
12605 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12606 if (input.prevOutScript) {
12607 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12608
12609 var scriptHash = input.prevOutScript.chunks[1]
12610 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12611 }
ebd8d4e8 12612
ab78acc6
IC
12613 var scriptType = scripts.classifyOutput(redeemScript)
12614 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12615
ab78acc6
IC
12616 var pubKeys = []
12617 switch (scriptType) {
12618 case 'multisig': {
12619 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12620 break
12621 }
ebd8d4e8 12622
ab78acc6
IC
12623 case 'pubkeyhash': {
12624 var pkh1 = redeemScript.chunks[2]
12625 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12626
ab78acc6
IC
12627 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12628 pubKeys = [privKey.pub]
12629 break
12630 }
ebd8d4e8 12631
ab78acc6
IC
12632 case 'pubkey': {
12633 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12634 break
12635 }
12636 }
ebd8d4e8 12637
ab78acc6
IC
12638 if (!input.prevOutScript) {
12639 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12640 input.prevOutType = 'scripthash'
12641 }
ebd8d4e8 12642
ab78acc6
IC
12643 input.pubKeys = pubKeys
12644 input.redeemScript = redeemScript
12645 input.scriptType = scriptType
ebd8d4e8 12646
ab78acc6
IC
12647 // cannot be pay-to-scriptHash
12648 } else {
12649 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12650
ab78acc6
IC
12651 // can we otherwise sign this?
12652 if (input.scriptType) {
12653 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12654
ab78acc6
IC
12655 // we know nothin' Jon Snow, assume pubKeyHash
12656 } else {
12657 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12658 input.prevOutType = 'pubkeyhash'
12659 input.pubKeys = [privKey.pub]
12660 input.scriptType = input.prevOutType
12661 }
12662 }
ebd8d4e8 12663
ab78acc6
IC
12664 input.hashType = hashType
12665 input.signatures = input.signatures || []
12666 }
12667
12668 var signatureScript = input.redeemScript || input.prevOutScript
12669 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12670
12671 // enforce signature order matches public keys
12672 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12673 // maintain a local copy of unmatched signatures
12674 var unmatched = input.signatures.slice()
12675
12676 input.signatures = input.pubKeys.map(function (pubKey) {
12677 var match
12678
12679 // check for any matching signatures
12680 unmatched.some(function (signature, i) {
12681 if (!pubKey.verify(signatureHash, signature)) return false
12682 match = signature
12683
12684 // remove matched signature from unmatched
12685 unmatched.splice(i, 1)
12686
12687 return true
12688 })
12689
12690 return match || undefined
12691 })
12692 }
12693
12694 // enforce in order signing of public keys
12695 assert(input.pubKeys.some(function (pubKey, i) {
12696 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12697
12698 assert(!input.signatures[i], 'Signature already exists')
12699 var signature = privKey.sign(signatureHash)
12700 input.signatures[i] = signature
12701
12702 return true
12703 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12704}
12705
ab78acc6 12706module.exports = TransactionBuilder
ebd8d4e8 12707
ab78acc6
IC
12708}).call(this,require("buffer").Buffer)
12709},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12710(function (Buffer){
ab78acc6
IC
12711var assert = require('assert')
12712var bufferutils = require('./bufferutils')
12713var typeForce = require('typeforce')
12714var networks = require('./networks')
12715var randomBytes = require('randombytes')
ebd8d4e8 12716
ab78acc6
IC
12717var Address = require('./address')
12718var HDNode = require('./hdnode')
12719var TransactionBuilder = require('./transaction_builder')
12720var Script = require('./script')
ebd8d4e8 12721
ab78acc6
IC
12722function Wallet (seed, network) {
12723 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12724
12725 seed = seed || randomBytes(32)
ebd8d4e8
IC
12726 network = network || networks.bitcoin
12727
12728 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12729 var masterKey = HDNode.fromSeedBuffer(seed, network)
12730
12731 // HD first-level child derivation method should be hardened
12732 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12733 var accountZero = masterKey.deriveHardened(0)
12734 var externalAccount = accountZero.derive(0)
12735 var internalAccount = accountZero.derive(1)
ebd8d4e8 12736
ebd8d4e8
IC
12737 this.addresses = []
12738 this.changeAddresses = []
ab78acc6
IC
12739 this.network = network
12740 this.unspents = []
ebd8d4e8 12741
ab78acc6
IC
12742 // FIXME: remove in 2.0.0
12743 this.unspentMap = {}
ebd8d4e8 12744
ab78acc6
IC
12745 // FIXME: remove in 2.0.0
12746 var me = this
12747 this.newMasterKey = function (seed) {
12748 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12749
12750 seed = seed || randomBytes(32)
12751 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 12752
ab78acc6 12753 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
12754 externalAccount = accountZero.derive(0)
12755 internalAccount = accountZero.derive(1)
12756
12757 me.addresses = []
12758 me.changeAddresses = []
12759
ab78acc6
IC
12760 me.unspents = []
12761 me.unspentMap = {}
ebd8d4e8
IC
12762 }
12763
ab78acc6
IC
12764 this.getMasterKey = function () {
12765 return masterKey
ebd8d4e8 12766 }
ab78acc6
IC
12767 this.getAccountZero = function () {
12768 return accountZero
ebd8d4e8 12769 }
ab78acc6
IC
12770 this.getExternalAccount = function () {
12771 return externalAccount
12772 }
12773 this.getInternalAccount = function () {
12774 return internalAccount
ebd8d4e8 12775 }
ab78acc6 12776}
ebd8d4e8 12777
ab78acc6
IC
12778Wallet.prototype.createTransaction = function (to, value, options) {
12779 // FIXME: remove in 2.0.0
12780 if (typeof options !== 'object') {
12781 if (options !== undefined) {
12782 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 12783
ab78acc6
IC
12784 options = {
12785 fixedFee: arguments[2],
12786 changeAddress: arguments[3]
12787 }
ebd8d4e8 12788 }
ebd8d4e8
IC
12789 }
12790
ab78acc6 12791 options = options || {}
ebd8d4e8 12792
ab78acc6 12793 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 12794
ab78acc6
IC
12795 var changeAddress = options.changeAddress
12796 var fixedFee = options.fixedFee
12797 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 12798
ab78acc6
IC
12799 // filter by minConf, then pending and sort by descending value
12800 var unspents = this.unspents.filter(function (unspent) {
12801 return unspent.confirmations >= minConf
12802 }).filter(function (unspent) {
12803 return !unspent.pending
12804 }).sort(function (o1, o2) {
12805 return o2.value - o1.value
12806 })
ebd8d4e8 12807
ab78acc6
IC
12808 var accum = 0
12809 var addresses = []
12810 var subTotal = value
ebd8d4e8 12811
ab78acc6
IC
12812 var txb = new TransactionBuilder()
12813 txb.addOutput(to, value)
ebd8d4e8 12814
ab78acc6
IC
12815 for (var i = 0; i < unspents.length; ++i) {
12816 var unspent = unspents[i]
12817 addresses.push(unspent.address)
ebd8d4e8 12818
ab78acc6
IC
12819 txb.addInput(unspent.txHash, unspent.index)
12820
12821 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 12822
ab78acc6
IC
12823 accum += unspent.value
12824 subTotal = value + fee
12825
12826 if (accum >= subTotal) {
12827 var change = accum - subTotal
12828
12829 if (change > this.network.dustThreshold) {
12830 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 12831 }
ebd8d4e8 12832
ab78acc6 12833 break
ebd8d4e8
IC
12834 }
12835 }
12836
ab78acc6 12837 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 12838
ab78acc6
IC
12839 return this.signWith(txb, addresses).build()
12840}
ebd8d4e8 12841
ab78acc6
IC
12842// FIXME: remove in 2.0.0
12843Wallet.prototype.processPendingTx = function (tx) {
12844 this.__processTx(tx, true)
12845}
ebd8d4e8 12846
ab78acc6
IC
12847// FIXME: remove in 2.0.0
12848Wallet.prototype.processConfirmedTx = function (tx) {
12849 this.__processTx(tx, false)
12850}
ebd8d4e8 12851
ab78acc6
IC
12852// FIXME: remove in 2.0.0
12853Wallet.prototype.__processTx = function (tx, isPending) {
12854 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 12855
ab78acc6
IC
12856 var txId = tx.getId()
12857 var txHash = tx.getHash()
ebd8d4e8 12858
ab78acc6
IC
12859 tx.outs.forEach(function (txOut, i) {
12860 var address
ebd8d4e8 12861
ab78acc6
IC
12862 try {
12863 address = Address.fromOutputScript(txOut.script, this.network).toString()
12864 } catch (e) {
12865 if (!(e.message.match(/has no matching Address/)))
12866 throw e
12867 }
12868
12869 var myAddresses = this.addresses.concat(this.changeAddresses)
12870 if (myAddresses.indexOf(address) > -1) {
12871 var lookup = txId + ':' + i
12872 if (lookup in this.unspentMap) return
12873
12874 // its unique, add it
12875 var unspent = {
12876 address: address,
12877 confirmations: 0, // no way to determine this without more information
12878 index: i,
12879 txHash: txHash,
12880 txId: txId,
12881 value: txOut.value,
12882 pending: isPending
ebd8d4e8 12883 }
ebd8d4e8 12884
ab78acc6
IC
12885 this.unspentMap[lookup] = unspent
12886 this.unspents.push(unspent)
12887 }
12888 }, this)
ebd8d4e8 12889
ab78acc6
IC
12890 tx.ins.forEach(function (txIn) {
12891 // copy and convert to big-endian hex
12892 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 12893
ab78acc6
IC
12894 var lookup = txInId + ':' + txIn.index
12895 if (!(lookup in this.unspentMap)) return
ebd8d4e8 12896
ab78acc6 12897 var unspent = this.unspentMap[lookup]
ebd8d4e8 12898
ab78acc6
IC
12899 if (isPending) {
12900 unspent.pending = true
12901 unspent.spent = true
12902 } else {
12903 delete this.unspentMap[lookup]
ebd8d4e8 12904
ab78acc6
IC
12905 this.unspents = this.unspents.filter(function (unspent2) {
12906 return unspent !== unspent2
12907 })
12908 }
12909 }, this)
12910}
ebd8d4e8 12911
ab78acc6
IC
12912Wallet.prototype.generateAddress = function () {
12913 var k = this.addresses.length
12914 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 12915
ab78acc6 12916 this.addresses.push(address.toString())
ebd8d4e8 12917
ab78acc6
IC
12918 return this.getReceiveAddress()
12919}
ebd8d4e8 12920
ab78acc6
IC
12921Wallet.prototype.generateChangeAddress = function () {
12922 var k = this.changeAddresses.length
12923 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 12924
ab78acc6 12925 this.changeAddresses.push(address.toString())
ebd8d4e8 12926
ab78acc6
IC
12927 return this.getChangeAddress()
12928}
ebd8d4e8 12929
ab78acc6
IC
12930Wallet.prototype.getAddress = function () {
12931 if (this.addresses.length === 0) {
12932 this.generateAddress()
ebd8d4e8
IC
12933 }
12934
ab78acc6
IC
12935 return this.addresses[this.addresses.length - 1]
12936}
ebd8d4e8 12937
ab78acc6
IC
12938Wallet.prototype.getBalance = function (minConf) {
12939 minConf = minConf || 0
ebd8d4e8 12940
ab78acc6
IC
12941 return this.unspents.filter(function (unspent) {
12942 return unspent.confirmations >= minConf
12943
12944 // FIXME: remove spent filter in 2.0.0
12945 }).filter(function (unspent) {
12946 return !unspent.spent
12947 }).reduce(function (accum, unspent) {
12948 return accum + unspent.value
12949 }, 0)
12950}
ebd8d4e8 12951
ab78acc6
IC
12952Wallet.prototype.getChangeAddress = function () {
12953 if (this.changeAddresses.length === 0) {
12954 this.generateChangeAddress()
ebd8d4e8
IC
12955 }
12956
ab78acc6
IC
12957 return this.changeAddresses[this.changeAddresses.length - 1]
12958}
12959
12960Wallet.prototype.getInternalPrivateKey = function (index) {
12961 return this.getInternalAccount().derive(index).privKey
12962}
12963
12964Wallet.prototype.getPrivateKey = function (index) {
12965 return this.getExternalAccount().derive(index).privKey
12966}
12967
12968Wallet.prototype.getPrivateKeyForAddress = function (address) {
12969 var index
ebd8d4e8 12970
ab78acc6
IC
12971 if ((index = this.addresses.indexOf(address)) > -1) {
12972 return this.getPrivateKey(index)
ebd8d4e8
IC
12973 }
12974
ab78acc6
IC
12975 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12976 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
12977 }
12978
ab78acc6
IC
12979 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12980}
ebd8d4e8 12981
ab78acc6
IC
12982Wallet.prototype.getUnspentOutputs = function (minConf) {
12983 minConf = minConf || 0
ebd8d4e8 12984
ab78acc6
IC
12985 return this.unspents.filter(function (unspent) {
12986 return unspent.confirmations >= minConf
ebd8d4e8 12987
ab78acc6
IC
12988 // FIXME: remove spent filter in 2.0.0
12989 }).filter(function (unspent) {
12990 return !unspent.spent
12991 }).map(function (unspent) {
12992 return {
12993 address: unspent.address,
12994 confirmations: unspent.confirmations,
12995 index: unspent.index,
12996 txId: unspent.txId,
12997 value: unspent.value,
12998
12999 // FIXME: remove in 2.0.0
13000 hash: unspent.txId,
13001 pending: unspent.pending
13002 }
13003 })
13004}
ebd8d4e8 13005
ab78acc6
IC
13006Wallet.prototype.setUnspentOutputs = function (unspents) {
13007 this.unspentMap = {}
13008 this.unspents = unspents.map(function (unspent) {
13009 // FIXME: remove unspent.hash in 2.0.0
13010 var txId = unspent.txId || unspent.hash
13011 var index = unspent.index
ebd8d4e8 13012
ab78acc6
IC
13013 // FIXME: remove in 2.0.0
13014 if (unspent.hash !== undefined) {
13015 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13016 }
ebd8d4e8 13017
ab78acc6
IC
13018 // FIXME: remove in 2.0.0
13019 if (index === undefined) {
13020 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13021 index = unspent.outputIndex
13022 }
ebd8d4e8 13023
ab78acc6
IC
13024 typeForce('String', txId)
13025 typeForce('Number', index)
13026 typeForce('Number', unspent.value)
13027
13028 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13029 assert.doesNotThrow(function () {
13030 Address.fromBase58Check(unspent.address)
13031 }, 'Expected Base58 Address, got ' + unspent.address)
13032 assert(isFinite(index), 'Expected finite index, got ' + index)
13033
13034 // FIXME: remove branch in 2.0.0
13035 if (unspent.confirmations !== undefined) {
13036 typeForce('Number', unspent.confirmations)
ebd8d4e8 13037 }
ebd8d4e8 13038
ab78acc6 13039 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13040
ab78acc6
IC
13041 unspent = {
13042 address: unspent.address,
13043 confirmations: unspent.confirmations || 0,
13044 index: index,
13045 txHash: txHash,
13046 txId: txId,
13047 value: unspent.value,
ebd8d4e8 13048
ab78acc6
IC
13049 // FIXME: remove in 2.0.0
13050 pending: unspent.pending || false
13051 }
13052
13053 // FIXME: remove in 2.0.0
13054 this.unspentMap[txId + ':' + index] = unspent
13055
13056 return unspent
13057 }, this)
13058}
13059
13060Wallet.prototype.signWith = function (tx, addresses) {
13061 addresses.forEach(function (address, i) {
13062 var privKey = this.getPrivateKeyForAddress(address)
13063
13064 tx.sign(i, privKey)
13065 }, this)
13066
13067 return tx
13068}
13069
13070function estimatePaddedFee (tx, network) {
13071 var tmpTx = tx.clone()
13072 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13073
13074 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13075}
13076
ab78acc6
IC
13077// FIXME: 1.0.0 shims, remove in 2.0.0
13078Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13079Wallet.prototype.createTx = Wallet.prototype.createTransaction
13080
ebd8d4e8
IC
13081module.exports = Wallet
13082
ab78acc6
IC
13083}).call(this,require("buffer").Buffer)
13084},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13085});</script>
d5dc92fd
IC
13086 <script>bitcoin.networks.shadow = {
13087 magicPrefix: '\x19ShadowCash Signed Message:\n',
13088 bip32: {
13089 public: 0xEE80286A,
13090 private: 0xEE8031E8
13091 },
13092 pubKeyHash: 0x3f,
13093 scriptHash: 0x7d,
13094 wif: 0xbf,
13095 dustThreshold: 0,
13096 feePerKb: 1000,
13097 estimateFee: function() { return "unused in this app" },
13098};
13099
13100bitcoin.networks.shadowtn = {
13101 magicPrefix: '\x19ShadowCash Signed Message:\n',
13102 bip32: {
13103 public: 0x76C0FDFB,
13104 private: 0x76C1077A
13105 },
13106 pubKeyHash: 0x7f,
13107 scriptHash: 0xc4,
13108 wif: 0xff,
13109 dustThreshold: 0,
13110 feePerKb: 1000,
13111 estimateFee: function() { return "unused in this app" },
13112};
5c434a8a
CM
13113
13114bitcoin.networks.clam = {
13115 bip32: {
13116 public: 0xa8c26d64,
13117 private: 0xa8c17826
13118 },
13119 pubKeyHash: 0x89,
13120 wif: 0x85,
13121};
d5dc92fd 13122</script>
ab78acc6 13123 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13124
13125//// base.js
13126
13127/** @fileOverview Javascript cryptography implementation.
13128 *
13129 * Crush to remove comments, shorten variable names and
13130 * generally reduce transmission size.
13131 *
13132 * @author Emily Stark
13133 * @author Mike Hamburg
13134 * @author Dan Boneh
13135 */
13136
13137"use strict";
13138/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13139/*global document, window, escape, unescape, module, require, Uint32Array */
13140
13141/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13142var sjcl = {
13143 /** @namespace Symmetric ciphers. */
13144 cipher: {},
13145
13146 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13147 hash: {},
13148
13149 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13150 keyexchange: {},
13151
13152 /** @namespace Block cipher modes of operation. */
13153 mode: {},
13154
13155 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13156 misc: {},
13157
13158 /**
13159 * @namespace Bit array encoders and decoders.
13160 *
13161 * @description
13162 * The members of this namespace are functions which translate between
13163 * SJCL's bitArrays and other objects (usually strings). Because it
13164 * isn't always clear which direction is encoding and which is decoding,
13165 * the method names are "fromBits" and "toBits".
13166 */
13167 codec: {},
13168
13169 /** @namespace Exceptions. */
13170 exception: {
13171 /** @constructor Ciphertext is corrupt. */
13172 corrupt: function(message) {
13173 this.toString = function() { return "CORRUPT: "+this.message; };
13174 this.message = message;
13175 },
13176
13177 /** @constructor Invalid parameter. */
13178 invalid: function(message) {
13179 this.toString = function() { return "INVALID: "+this.message; };
13180 this.message = message;
13181 },
13182
13183 /** @constructor Bug or missing feature in SJCL. @constructor */
13184 bug: function(message) {
13185 this.toString = function() { return "BUG: "+this.message; };
13186 this.message = message;
13187 },
13188
13189 /** @constructor Something isn't ready. */
13190 notReady: function(message) {
13191 this.toString = function() { return "NOT READY: "+this.message; };
13192 this.message = message;
ebd8d4e8 13193 }
80c4dd2a
IC
13194 }
13195};
13196
13197if(typeof module !== 'undefined' && module.exports){
13198 module.exports = sjcl;
13199}
13200if (typeof define === "function") {
13201 define([], function () {
13202 return sjcl;
13203 });
13204}
13205
13206
13207//// bitArray.js
13208
13209/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13210 *
13211 * @author Emily Stark
13212 * @author Mike Hamburg
13213 * @author Dan Boneh
13214 */
13215
13216/** @namespace Arrays of bits, encoded as arrays of Numbers.
13217 *
13218 * @description
13219 * <p>
13220 * These objects are the currency accepted by SJCL's crypto functions.
13221 * </p>
13222 *
13223 * <p>
13224 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13225 * but many of them can take arguments that are not a multiple of 4 bytes.
13226 * This library encodes arrays of bits (whose size need not be a multiple of 8
13227 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13228 * array of words, 32 bits at a time. Since the words are double-precision
13229 * floating point numbers, they fit some extra data. We use this (in a private,
13230 * possibly-changing manner) to encode the number of bits actually present
13231 * in the last word of the array.
13232 * </p>
13233 *
13234 * <p>
13235 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13236 * to ciphers like AES which want arrays of words.
13237 * </p>
13238 */
13239sjcl.bitArray = {
13240 /**
13241 * Array slices in units of bits.
13242 * @param {bitArray} a The array to slice.
13243 * @param {Number} bstart The offset to the start of the slice, in bits.
13244 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13245 * slice until the end of the array.
13246 * @return {bitArray} The requested slice.
13247 */
13248 bitSlice: function (a, bstart, bend) {
13249 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13250 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13251 },
13252
13253 /**
13254 * Extract a number packed into a bit array.
13255 * @param {bitArray} a The array to slice.
13256 * @param {Number} bstart The offset to the start of the slice, in bits.
13257 * @param {Number} length The length of the number to extract.
13258 * @return {Number} The requested slice.
13259 */
13260 extract: function(a, bstart, blength) {
13261 // FIXME: this Math.floor is not necessary at all, but for some reason
13262 // seems to suppress a bug in the Chromium JIT.
13263 var x, sh = Math.floor((-bstart-blength) & 31);
13264 if ((bstart + blength - 1 ^ bstart) & -32) {
13265 // it crosses a boundary
13266 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13267 } else {
13268 // within a single word
13269 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13270 }
80c4dd2a
IC
13271 return x & ((1<<blength) - 1);
13272 },
13273
13274 /**
13275 * Concatenate two bit arrays.
13276 * @param {bitArray} a1 The first array.
13277 * @param {bitArray} a2 The second array.
13278 * @return {bitArray} The concatenation of a1 and a2.
13279 */
13280 concat: function (a1, a2) {
13281 if (a1.length === 0 || a2.length === 0) {
13282 return a1.concat(a2);
13283 }
13284
13285 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13286 if (shift === 32) {
13287 return a1.concat(a2);
13288 } else {
13289 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13290 }
80c4dd2a
IC
13291 },
13292
13293 /**
13294 * Find the length of an array of bits.
13295 * @param {bitArray} a The array.
13296 * @return {Number} The length of a, in bits.
13297 */
13298 bitLength: function (a) {
13299 var l = a.length, x;
13300 if (l === 0) { return 0; }
13301 x = a[l - 1];
13302 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13303 },
13304
13305 /**
13306 * Truncate an array.
13307 * @param {bitArray} a The array.
13308 * @param {Number} len The length to truncate to, in bits.
13309 * @return {bitArray} A new array, truncated to len bits.
13310 */
13311 clamp: function (a, len) {
13312 if (a.length * 32 < len) { return a; }
13313 a = a.slice(0, Math.ceil(len / 32));
13314 var l = a.length;
13315 len = len & 31;
13316 if (l > 0 && len) {
13317 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13318 }
13319 return a;
13320 },
13321
13322 /**
13323 * Make a partial word for a bit array.
13324 * @param {Number} len The number of bits in the word.
13325 * @param {Number} x The bits.
13326 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13327 * @return {Number} The partial word.
13328 */
13329 partial: function (len, x, _end) {
13330 if (len === 32) { return x; }
13331 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13332 },
13333
13334 /**
13335 * Get the number of bits used by a partial word.
13336 * @param {Number} x The partial word.
13337 * @return {Number} The number of bits used by the partial word.
13338 */
13339 getPartial: function (x) {
13340 return Math.round(x/0x10000000000) || 32;
13341 },
13342
13343 /**
13344 * Compare two arrays for equality in a predictable amount of time.
13345 * @param {bitArray} a The first array.
13346 * @param {bitArray} b The second array.
13347 * @return {boolean} true if a == b; false otherwise.
13348 */
13349 equal: function (a, b) {
13350 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13351 return false;
ebd8d4e8 13352 }
80c4dd2a
IC
13353 var x = 0, i;
13354 for (i=0; i<a.length; i++) {
13355 x |= a[i]^b[i];
ebd8d4e8 13356 }
80c4dd2a
IC
13357 return (x === 0);
13358 },
13359
13360 /** Shift an array right.
13361 * @param {bitArray} a The array to shift.
13362 * @param {Number} shift The number of bits to shift.
13363 * @param {Number} [carry=0] A byte to carry in
13364 * @param {bitArray} [out=[]] An array to prepend to the output.
13365 * @private
13366 */
13367 _shiftRight: function (a, shift, carry, out) {
13368 var i, last2=0, shift2;
13369 if (out === undefined) { out = []; }
13370
13371 for (; shift >= 32; shift -= 32) {
13372 out.push(carry);
13373 carry = 0;
13374 }
13375 if (shift === 0) {
13376 return out.concat(a);
13377 }
13378
13379 for (i=0; i<a.length; i++) {
13380 out.push(carry | a[i]>>>shift);
13381 carry = a[i] << (32-shift);
13382 }
13383 last2 = a.length ? a[a.length-1] : 0;
13384 shift2 = sjcl.bitArray.getPartial(last2);
13385 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13386 return out;
13387 },
13388
13389 /** xor a block of 4 words together.
13390 * @private
13391 */
13392 _xor4: function(x,y) {
13393 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13394 },
13395
13396 /** byteswap a word array inplace.
13397 * (does not handle partial words)
13398 * @param {sjcl.bitArray} a word array
13399 * @return {sjcl.bitArray} byteswapped array
13400 */
13401 byteswapM: function(a) {
13402 var i, v, m = 0xff00;
13403 for (i = 0; i < a.length; ++i) {
13404 v = a[i];
13405 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13406 }
80c4dd2a
IC
13407 return a;
13408 }
13409};
13410
13411
13412//// codecString.js
13413
13414/** @fileOverview Bit array codec implementations.
13415 *
13416 * @author Emily Stark
13417 * @author Mike Hamburg
13418 * @author Dan Boneh
13419 */
13420
13421/** @namespace UTF-8 strings */
13422sjcl.codec.utf8String = {
13423 /** Convert from a bitArray to a UTF-8 string. */
13424 fromBits: function (arr) {
13425 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13426 for (i=0; i<bl/8; i++) {
13427 if ((i&3) === 0) {
13428 tmp = arr[i/4];
13429 }
13430 out += String.fromCharCode(tmp >>> 24);
13431 tmp <<= 8;
ebd8d4e8 13432 }
80c4dd2a
IC
13433 return decodeURIComponent(escape(out));
13434 },
13435
13436 /** Convert from a UTF-8 string to a bitArray. */
13437 toBits: function (str) {
13438 str = unescape(encodeURIComponent(str));
13439 var out = [], i, tmp=0;
13440 for (i=0; i<str.length; i++) {
13441 tmp = tmp << 8 | str.charCodeAt(i);
13442 if ((i&3) === 3) {
13443 out.push(tmp);
13444 tmp = 0;
13445 }
ebd8d4e8 13446 }
80c4dd2a
IC
13447 if (i&3) {
13448 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13449 }
80c4dd2a
IC
13450 return out;
13451 }
13452};
13453
13454
13455//// codecHex.js
13456
13457/** @fileOverview Bit array codec implementations.
13458 *
13459 * @author Emily Stark
13460 * @author Mike Hamburg
13461 * @author Dan Boneh
13462 */
13463
13464/** @namespace Hexadecimal */
13465sjcl.codec.hex = {
13466 /** Convert from a bitArray to a hex string. */
13467 fromBits: function (arr) {
13468 var out = "", i;
13469 for (i=0; i<arr.length; i++) {
13470 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13471 }
80c4dd2a
IC
13472 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13473 },
13474 /** Convert from a hex string to a bitArray. */
13475 toBits: function (str) {
13476 var i, out=[], len;
13477 str = str.replace(/\s|0x/g, "");
13478 len = str.length;
13479 str = str + "00000000";
13480 for (i=0; i<str.length; i+=8) {
13481 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13482 }
80c4dd2a
IC
13483 return sjcl.bitArray.clamp(out, len*4);
13484 }
13485};
13486
13487
13488//// sha512.js
13489
13490/** @fileOverview Javascript SHA-512 implementation.
13491 *
13492 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13493 * SJCL by Stefan Thomas.
13494 *
13495 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13496 * Released with New BSD License
13497 *
13498 * @author Emily Stark
13499 * @author Mike Hamburg
13500 * @author Dan Boneh
13501 * @author Jeff Mott
13502 * @author Stefan Thomas
13503 */
13504
13505/**
13506 * Context for a SHA-512 operation in progress.
13507 * @constructor
13508 * @class Secure Hash Algorithm, 512 bits.
13509 */
13510sjcl.hash.sha512 = function (hash) {
13511 if (!this._key[0]) { this._precompute(); }
13512 if (hash) {
13513 this._h = hash._h.slice(0);
13514 this._buffer = hash._buffer.slice(0);
13515 this._length = hash._length;
13516 } else {
13517 this.reset();
13518 }
13519};
13520
13521/**
13522 * Hash a string or an array of words.
13523 * @static
13524 * @param {bitArray|String} data the data to hash.
13525 * @return {bitArray} The hash value, an array of 16 big-endian words.
13526 */
13527sjcl.hash.sha512.hash = function (data) {
13528 return (new sjcl.hash.sha512()).update(data).finalize();
13529};
13530
13531sjcl.hash.sha512.prototype = {
13532 /**
13533 * The hash's block size, in bits.
13534 * @constant
13535 */
13536 blockSize: 1024,
13537
13538 /**
13539 * Reset the hash state.
13540 * @return this
13541 */
13542 reset:function () {
13543 this._h = this._init.slice(0);
13544 this._buffer = [];
13545 this._length = 0;
13546 return this;
13547 },
13548
13549 /**
13550 * Input several words to the hash.
13551 * @param {bitArray|String} data the data to hash.
13552 * @return this
13553 */
13554 update: function (data) {
13555 if (typeof data === "string") {
13556 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13557 }
80c4dd2a
IC
13558 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13559 ol = this._length,
13560 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13561 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13562 this._block(b.splice(0,32));
ebd8d4e8 13563 }
80c4dd2a
IC
13564 return this;
13565 },
13566
13567 /**
13568 * Complete hashing and output the hash value.
13569 * @return {bitArray} The hash value, an array of 16 big-endian words.
13570 */
13571 finalize:function () {
13572 var i, b = this._buffer, h = this._h;
13573
13574 // Round out and push the buffer
13575 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13576
13577 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13578 for (i = b.length + 4; i & 31; i++) {
13579 b.push(0);
ebd8d4e8 13580 }
80c4dd2a
IC
13581
13582 // append the length
13583 b.push(0);
13584 b.push(0);
13585 b.push(Math.floor(this._length / 0x100000000));
13586 b.push(this._length | 0);
13587
13588 while (b.length) {
13589 this._block(b.splice(0,32));
ebd8d4e8 13590 }
80c4dd2a
IC
13591
13592 this.reset();
13593 return h;
13594 },
13595
13596 /**
13597 * The SHA-512 initialization vector, to be precomputed.
13598 * @private
13599 */
13600 _init:[],
13601
13602 /**
13603 * Least significant 24 bits of SHA512 initialization values.
13604 *
13605 * Javascript only has 53 bits of precision, so we compute the 40 most
13606 * significant bits and add the remaining 24 bits as constants.
13607 *
13608 * @private
13609 */
13610 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13611
13612 /*
13613 _init:
13614 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13615 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13616 */
13617
13618 /**
13619 * The SHA-512 hash key, to be precomputed.
13620 * @private
13621 */
13622 _key:[],
13623
13624 /**
13625 * Least significant 24 bits of SHA512 key values.
13626 * @private
13627 */
13628 _keyr:
13629 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13630 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13631 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13632 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13633 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13634 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13635 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13636 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13637 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13638 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13639
13640 /*
13641 _key:
13642 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13643 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13644 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13645 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13646 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13647 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13648 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13649 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13650 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13651 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13652 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13653 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13654 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13655 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13656 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13657 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13658 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13659 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13660 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13661 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13662 */
13663
13664 /**
13665 * Function to precompute _init and _key.
13666 * @private
13667 */
13668 _precompute: function () {
13669 // XXX: This code is for precomputing the SHA256 constants, change for
13670 // SHA512 and re-enable.
13671 var i = 0, prime = 2, factor;
13672
13673 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13674 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13675
13676 outer: for (; i<80; prime++) {
13677 for (factor=2; factor*factor <= prime; factor++) {
13678 if (prime % factor === 0) {
13679 // not a prime
13680 continue outer;
ebd8d4e8 13681 }
80c4dd2a
IC
13682 }
13683
13684 if (i<8) {
13685 this._init[i*2] = frac(Math.pow(prime, 1/2));
13686 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13687 }
13688 this._key[i*2] = frac(Math.pow(prime, 1/3));
13689 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13690 i++;
ebd8d4e8 13691 }
80c4dd2a
IC
13692 },
13693
13694 /**
13695 * Perform one cycle of SHA-512.
13696 * @param {bitArray} words one block of words.
13697 * @private
13698 */
13699 _block:function (words) {
13700 var i, wrh, wrl,
13701 w = words.slice(0),
13702 h = this._h,
13703 k = this._key,
13704 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13705 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13706 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13707 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13708
13709 // Working variables
13710 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13711 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13712 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13713 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13714
13715 for (i=0; i<80; i++) {
13716 // load up the input word for this round
13717 if (i<16) {
13718 wrh = w[i * 2];
13719 wrl = w[i * 2 + 1];
13720 } else {
13721 // Gamma0
13722 var gamma0xh = w[(i-15) * 2];
13723 var gamma0xl = w[(i-15) * 2 + 1];
13724 var gamma0h =
13725 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13726 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13727 (gamma0xh >>> 7);
13728 var gamma0l =
13729 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13730 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13731 ((gamma0xh << 25) | (gamma0xl >>> 7));
13732
13733 // Gamma1
13734 var gamma1xh = w[(i-2) * 2];
13735 var gamma1xl = w[(i-2) * 2 + 1];
13736 var gamma1h =
13737 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13738 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13739 (gamma1xh >>> 6);
13740 var gamma1l =
13741 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13742 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13743 ((gamma1xh << 26) | (gamma1xl >>> 6));
13744
13745 // Shortcuts
13746 var wr7h = w[(i-7) * 2];
13747 var wr7l = w[(i-7) * 2 + 1];
13748
13749 var wr16h = w[(i-16) * 2];
13750 var wr16l = w[(i-16) * 2 + 1];
13751
13752 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13753 wrl = gamma0l + wr7l;
13754 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13755 wrl += gamma1l;
13756 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13757 wrl += wr16l;
13758 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13759 }
13760
13761 w[i*2] = wrh |= 0;
13762 w[i*2 + 1] = wrl |= 0;
13763
13764 // Ch
13765 var chh = (eh & fh) ^ (~eh & gh);
13766 var chl = (el & fl) ^ (~el & gl);
13767
13768 // Maj
13769 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13770 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13771
13772 // Sigma0
13773 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13774 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13775
13776 // Sigma1
13777 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13778 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13779
13780 // K(round)
13781 var krh = k[i*2];
13782 var krl = k[i*2+1];
13783
13784 // t1 = h + sigma1 + ch + K(round) + W(round)
13785 var t1l = hl + sigma1l;
13786 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13787 t1l += chl;
13788 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13789 t1l += krl;
13790 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13791 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13792 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13793
13794 // t2 = sigma0 + maj
13795 var t2l = sigma0l + majl;
13796 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13797
13798 // Update working variables
13799 hh = gh;
13800 hl = gl;
13801 gh = fh;
13802 gl = fl;
13803 fh = eh;
13804 fl = el;
13805 el = (dl + t1l) | 0;
13806 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13807 dh = ch;
13808 dl = cl;
13809 ch = bh;
13810 cl = bl;
13811 bh = ah;
13812 bl = al;
13813 al = (t1l + t2l) | 0;
13814 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13815 }
13816
13817 // Intermediate hash
13818 h0l = h[1] = (h0l + al) | 0;
13819 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13820 h1l = h[3] = (h1l + bl) | 0;
13821 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13822 h2l = h[5] = (h2l + cl) | 0;
13823 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13824 h3l = h[7] = (h3l + dl) | 0;
13825 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13826 h4l = h[9] = (h4l + el) | 0;
13827 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13828 h5l = h[11] = (h5l + fl) | 0;
13829 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13830 h6l = h[13] = (h6l + gl) | 0;
13831 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13832 h7l = h[15] = (h7l + hl) | 0;
13833 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13834 }
13835};
13836
13837
13838//// hmac.js
13839
13840/** @fileOverview HMAC implementation.
13841 *
13842 * @author Emily Stark
13843 * @author Mike Hamburg
13844 * @author Dan Boneh
13845 */
13846
13847/** HMAC with the specified hash function.
13848 * @constructor
13849 * @param {bitArray} key the key for HMAC.
13850 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13851 */
13852sjcl.misc.hmac = function (key, Hash) {
13853 this._hash = Hash = Hash || sjcl.hash.sha256;
13854 var exKey = [[],[]], i,
13855 bs = Hash.prototype.blockSize / 32;
13856 this._baseHash = [new Hash(), new Hash()];
13857
13858 if (key.length > bs) {
13859 key = Hash.hash(key);
13860 }
13861
13862 for (i=0; i<bs; i++) {
13863 exKey[0][i] = key[i]^0x36363636;
13864 exKey[1][i] = key[i]^0x5C5C5C5C;
13865 }
13866
13867 this._baseHash[0].update(exKey[0]);
13868 this._baseHash[1].update(exKey[1]);
13869 this._resultHash = new Hash(this._baseHash[0]);
13870};
13871
13872/** HMAC with the specified hash function. Also called encrypt since it's a prf.
13873 * @param {bitArray|String} data The data to mac.
13874 */
13875sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13876 if (!this._updated) {
13877 this.update(data);
13878 return this.digest(data);
13879 } else {
13880 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13881 }
13882};
13883
13884sjcl.misc.hmac.prototype.reset = function () {
13885 this._resultHash = new this._hash(this._baseHash[0]);
13886 this._updated = false;
13887};
13888
13889sjcl.misc.hmac.prototype.update = function (data) {
13890 this._updated = true;
13891 this._resultHash.update(data);
13892};
13893
13894sjcl.misc.hmac.prototype.digest = function () {
13895 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13896
13897 this.reset();
13898
13899 return result;
13900};
13901
13902
13903//// pbkdf2.js
13904
13905
13906/** @fileOverview Password-based key-derivation function, version 2.0.
13907 *
13908 * @author Emily Stark
13909 * @author Mike Hamburg
13910 * @author Dan Boneh
13911 */
13912
13913/** Password-Based Key-Derivation Function, version 2.0.
13914 *
13915 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13916 *
13917 * This is the method specified by RSA's PKCS #5 standard.
13918 *
13919 * @param {bitArray|String} password The password.
13920 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13921 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13922 * @param {Number} [length] The length of the derived key. Defaults to the
13923 output size of the hash function.
13924 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13925 * @return {bitArray} the derived key.
13926 */
13927sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13928 count = count || 1000;
13929
13930 if (length < 0 || count < 0) {
13931 throw sjcl.exception.invalid("invalid params to pbkdf2");
13932 }
13933
13934 if (typeof password === "string") {
13935 password = sjcl.codec.utf8String.toBits(password);
13936 }
13937
13938 if (typeof salt === "string") {
13939 salt = sjcl.codec.utf8String.toBits(salt);
13940 }
13941
13942 Prff = Prff || sjcl.misc.hmac;
13943
13944 var prf = new Prff(password),
13945 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13946
13947 for (k = 1; 32 * out.length < (length || 1); k++) {
13948 u = ui = prf.encrypt(b.concat(salt,[k]));
13949
13950 for (i=1; i<count; i++) {
13951 ui = prf.encrypt(ui);
13952 for (j=0; j<ui.length; j++) {
13953 u[j] ^= ui[j];
13954 }
ebd8d4e8 13955 }
80c4dd2a
IC
13956
13957 out = out.concat(u);
13958 }
13959
13960 if (length) { out = b.clamp(out, length); }
13961
13962 return out;
13963};
13964
13965
13966//// sha256.js
13967
13968/** @fileOverview Javascript SHA-256 implementation.
13969 *
13970 * An older version of this implementation is available in the public
13971 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13972 * Stanford University 2008-2010 and BSD-licensed for liability
13973 * reasons.
13974 *
13975 * Special thanks to Aldo Cortesi for pointing out several bugs in
13976 * this code.
13977 *
13978 * @author Emily Stark
13979 * @author Mike Hamburg
13980 * @author Dan Boneh
13981 */
13982
13983/**
13984 * Context for a SHA-256 operation in progress.
13985 * @constructor
13986 * @class Secure Hash Algorithm, 256 bits.
13987 */
13988sjcl.hash.sha256 = function (hash) {
13989 if (!this._key[0]) { this._precompute(); }
13990 if (hash) {
13991 this._h = hash._h.slice(0);
13992 this._buffer = hash._buffer.slice(0);
13993 this._length = hash._length;
13994 } else {
13995 this.reset();
13996 }
13997};
13998
13999/**
14000 * Hash a string or an array of words.
14001 * @static
14002 * @param {bitArray|String} data the data to hash.
14003 * @return {bitArray} The hash value, an array of 16 big-endian words.
14004 */
14005sjcl.hash.sha256.hash = function (data) {
14006 return (new sjcl.hash.sha256()).update(data).finalize();
14007};
14008
14009sjcl.hash.sha256.prototype = {
14010 /**
14011 * The hash's block size, in bits.
14012 * @constant
14013 */
14014 blockSize: 512,
14015
14016 /**
14017 * Reset the hash state.
14018 * @return this
14019 */
14020 reset:function () {
14021 this._h = this._init.slice(0);
14022 this._buffer = [];
14023 this._length = 0;
14024 return this;
14025 },
14026
14027 /**
14028 * Input several words to the hash.
14029 * @param {bitArray|String} data the data to hash.
14030 * @return this
14031 */
14032 update: function (data) {
14033 if (typeof data === "string") {
14034 data = sjcl.codec.utf8String.toBits(data);
14035 }
14036 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14037 ol = this._length,
14038 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14039 for (i = 512+ol & -512; i <= nl; i+= 512) {
14040 this._block(b.splice(0,16));
ebd8d4e8 14041 }
3af2954a 14042 return this;
80c4dd2a
IC
14043 },
14044
14045 /**
14046 * Complete hashing and output the hash value.
14047 * @return {bitArray} The hash value, an array of 8 big-endian words.
14048 */
14049 finalize:function () {
14050 var i, b = this._buffer, h = this._h;
14051
14052 // Round out and push the buffer
14053 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14054
14055 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14056 for (i = b.length + 2; i & 15; i++) {
14057 b.push(0);
14058 }
14059
14060 // append the length
14061 b.push(Math.floor(this._length / 0x100000000));
14062 b.push(this._length | 0);
14063
14064 while (b.length) {
14065 this._block(b.splice(0,16));
14066 }
14067
14068 this.reset();
14069 return h;
14070 },
14071
14072 /**
14073 * The SHA-256 initialization vector, to be precomputed.
14074 * @private
14075 */
14076 _init:[],
14077 /*
14078 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14079 */
14080
14081 /**
14082 * The SHA-256 hash key, to be precomputed.
14083 * @private
14084 */
14085 _key:[],
14086 /*
14087 _key:
14088 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14089 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14090 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14091 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14092 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14093 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14094 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14095 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14096 */
14097
14098
14099 /**
14100 * Function to precompute _init and _key.
14101 * @private
14102 */
14103 _precompute: function () {
14104 var i = 0, prime = 2, factor;
14105
14106 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14107
14108 outer: for (; i<64; prime++) {
14109 for (factor=2; factor*factor <= prime; factor++) {
14110 if (prime % factor === 0) {
14111 // not a prime
14112 continue outer;
ebd8d4e8 14113 }
80c4dd2a
IC
14114 }
14115
14116 if (i<8) {
14117 this._init[i] = frac(Math.pow(prime, 1/2));
14118 }
14119 this._key[i] = frac(Math.pow(prime, 1/3));
14120 i++;
ebd8d4e8 14121 }
80c4dd2a
IC
14122 },
14123
14124 /**
14125 * Perform one cycle of SHA-256.
14126 * @param {bitArray} words one block of words.
14127 * @private
14128 */
14129 _block:function (words) {
14130 var i, tmp, a, b,
14131 w = words.slice(0),
14132 h = this._h,
14133 k = this._key,
14134 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14135 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14136
14137 /* Rationale for placement of |0 :
14138 * If a value can overflow is original 32 bits by a factor of more than a few
14139 * million (2^23 ish), there is a possibility that it might overflow the
14140 * 53-bit mantissa and lose precision.
14141 *
14142 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14143 * propagates around the loop, and on the hash state h[]. I don't believe
14144 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14145 * (for h4 anyway), and better safe than sorry.
14146 *
14147 * The clamps on h[] are necessary for the output to be correct even in the
14148 * common case and for short inputs.
14149 */
14150 for (i=0; i<64; i++) {
14151 // load up the input word for this round
14152 if (i<16) {
14153 tmp = w[i];
14154 } else {
14155 a = w[(i+1 ) & 15];
14156 b = w[(i+14) & 15];
14157 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14158 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14159 w[i&15] + w[(i+9) & 15]) | 0;
14160 }
14161
14162 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14163
14164 // shift register
14165 h7 = h6; h6 = h5; h5 = h4;
14166 h4 = h3 + tmp | 0;
14167 h3 = h2; h2 = h1; h1 = h0;
14168
14169 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14170 }
14171
14172 h[0] = h[0]+h0 | 0;
14173 h[1] = h[1]+h1 | 0;
14174 h[2] = h[2]+h2 | 0;
14175 h[3] = h[3]+h3 | 0;
14176 h[4] = h[4]+h4 | 0;
14177 h[5] = h[5]+h5 | 0;
14178 h[6] = h[6]+h6 | 0;
14179 h[7] = h[7]+h7 | 0;
14180 }
14181};
dc55c6b0 14182</script>
ab78acc6 14183 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14184WORDLISTS["english"] = [
ebd8d4e8
IC
14185"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14186"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14187"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14188"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14189"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14190"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14191"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14192"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14193"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14194"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14195"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14196"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14197"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14198"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14199"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14200"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14201"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14202"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14203"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14204"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14205"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14206"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14207"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14208"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14209"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14210"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14211"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14212"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14213"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14214"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14215"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14216"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14217"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14218"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14219"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14220"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14221"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14222"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14223"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14224"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14225"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14226"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14227"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14228"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14229"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14230"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14231"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14232"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14233"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14234"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14235"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14236"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14237"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14238"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14239"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14240"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14241"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14242"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14243"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14244"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14245"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14246"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14247"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14248"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14249"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14250"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14251"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14252"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14253"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14254"film","filter","final","find","fine","finger","finish","fire","firm","first",
14255"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14256"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14257"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14258"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14259"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14260"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14261"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14262"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14263"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14264"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14265"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14266"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14267"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14268"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14269"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14270"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14271"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14272"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14273"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14274"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14275"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14276"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14277"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14278"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14279"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14280"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14281"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14282"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14283"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14284"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14285"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14286"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14287"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14288"liar","liberty","library","license","life","lift","light","like","limb","limit",
14289"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14290"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14291"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14292"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14293"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14294"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14295"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14296"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14297"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14298"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14299"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14300"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14301"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14302"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14303"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14304"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14305"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14306"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14307"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14308"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14309"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14310"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14311"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14312"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14313"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14314"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14315"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14316"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14317"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14318"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14319"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14320"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14321"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14322"prize","problem","process","produce","profit","program","project","promote","proof","property",
14323"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14324"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14325"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14326"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14327"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14328"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14329"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14330"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14331"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14332"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14333"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14334"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14335"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14336"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14337"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14338"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14339"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14340"scrub","sea","search","season","seat","second","secret","section","security","seed",
14341"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14342"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14343"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14344"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14345"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14346"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14347"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14348"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14349"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14350"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14351"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14352"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14353"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14354"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14355"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14356"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14357"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14358"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14359"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14360"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14361"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14362"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14363"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14364"thank","that","theme","then","theory","there","they","thing","this","thought",
14365"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14366"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14367"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14368"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14369"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14370"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14371"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14372"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14373"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14374"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14375"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14376"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14377"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14378"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14379"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14380"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14381"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14382"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14383"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14384"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14385"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14386"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14387"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14388"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14389"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14390</script>
ab78acc6 14391 <script>/*
3af2954a
IC
14392 * Copyright (c) 2013 Pavol Rusnak
14393 *
14394 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14395 * this software and associated documentation files (the "Software"), to deal in
14396 * the Software without restriction, including without limitation the rights to
14397 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14398 * of the Software, and to permit persons to whom the Software is furnished to do
14399 * so, subject to the following conditions:
14400 *
14401 * The above copyright notice and this permission notice shall be included in all
14402 * copies or substantial portions of the Software.
14403 *
14404 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14405 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14406 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14407 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14408 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14409 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14410 */
14411
14412/*
14413 * Javascript port from python by Ian Coleman
14414 *
80c4dd2a
IC
14415 * Requires code from sjcl
14416 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14417 */
14418
14419var Mnemonic = function(language) {
14420
14421 var PBKDF2_ROUNDS = 2048;
14422 var RADIX = 2048;
14423
14424 var self = this;
14425 var wordlist = [];
14426
80c4dd2a
IC
14427 var hmacSHA512 = function(key) {
14428 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14429 this.encrypt = function() {
14430 return hasher.encrypt.apply(hasher, arguments);
14431 };
14432 };
14433
3af2954a
IC
14434 function init() {
14435 wordlist = WORDLISTS[language];
14436 if (wordlist.length != RADIX) {
14437 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14438 throw err;
14439 }
14440 }
14441
14442 self.generate = function(strength) {
14443 strength = strength || 128;
14444 var r = strength % 32;
14445 if (r > 0) {
14446 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14447 }
14448 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14449 if (!hasStrongCrypto) {
14450 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14451 }
14452 var buffer = new Uint8Array(strength / 8);
14453 var data = crypto.getRandomValues(buffer);
14454 return self.toMnemonic(data);
14455 }
14456
80c4dd2a
IC
14457 self.toMnemonic = function(byteArray) {
14458 if (byteArray.length % 4 > 0) {
14459 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14460 }
14461
14462 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14463 var data = byteArrayToWordArray(byteArray);
14464 var hash = sjcl.hash.sha256.hash(data);
14465 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14466
14467 // b is a binary string, eg '00111010101100...'
14468 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14469 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14470 //
14471 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14472 // c = bin(int(h, 16))[2:].zfill(256)
14473 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14474 var a = byteArrayToBinaryString(byteArray);
14475 var c = zfill(hexStringToBinaryString(h), 256);
14476 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14477 // b = line1 + line2
14478 var b = a + d;
14479
14480 var result = [];
14481 var blen = b.length / 11;
14482 for (var i=0; i<blen; i++) {
14483 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14484 result.push(wordlist[idx]);
14485 }
14486 return result.join(' ');
14487 }
14488
14489 self.check = function(mnemonic) {
14490 var mnemonic = mnemonic.split(' ')
14491 if (mnemonic.length % 3 > 0) {
14492 return false
14493 }
14494 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14495 var idx = [];
14496 for (var i=0; i<mnemonic.length; i++) {
14497 var word = mnemonic[i];
14498 var wordIndex = wordlist.indexOf(word);
14499 if (wordIndex == -1) {
14500 return false;
14501 }
14502 var binaryIndex = zfill(wordIndex.toString(2), 11);
14503 idx.push(binaryIndex);
14504 }
14505 var b = idx.join('');
14506 var l = b.length;
14507 //d = b[:l / 33 * 32]
14508 //h = b[-l / 33:]
14509 var d = b.substring(0, l / 33 * 32);
14510 var h = b.substring(l - l / 33, l);
14511 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14512 var nd = binaryStringToWordArray(d);
3af2954a 14513 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14514 var ndHash = sjcl.hash.sha256.hash(nd);
14515 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14516 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14517 var nh = ndBstr.substring(0,l/33);
14518 return h == nh;
14519 }
14520
14521 self.toSeed = function(mnemonic, passphrase) {
14522 passphrase = passphrase || '';
7772c641 14523 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
3af2954a
IC
14524 passphrase = self.normalizeString(passphrase)
14525 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14526 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14527 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14528 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14529 var hashHex = sjcl.codec.hex.fromBits(result);
14530 return hashHex;
3af2954a
IC
14531 }
14532
14533 self.normalizeString = function(str) {
14534 if (typeof str.normalize == "function") {
14535 return str.normalize("NFKD");
14536 }
14537 else {
14538 // TODO decide how to handle this in the future.
14539 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14540 return str;
14541 }
14542 }
14543
80c4dd2a
IC
14544 function byteArrayToWordArray(data) {
14545 var a = [];
14546 for (var i=0; i<data.length/4; i++) {
14547 v = 0;
14548 v += data[i*4 + 0] << 8 * 3;
14549 v += data[i*4 + 1] << 8 * 2;
14550 v += data[i*4 + 2] << 8 * 1;
14551 v += data[i*4 + 3] << 8 * 0;
14552 a.push(v);
14553 }
14554 return a;
14555 }
14556
3af2954a
IC
14557 function byteArrayToBinaryString(data) {
14558 var bin = "";
14559 for (var i=0; i<data.length; i++) {
14560 bin += zfill(data[i].toString(2), 8);
14561 }
14562 return bin;
14563 }
14564
80c4dd2a
IC
14565 function hexStringToBinaryString(hexString) {
14566 binaryString = "";
14567 for (var i=0; i<hexString.length; i++) {
14568 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14569 }
14570 return binaryString;
14571 }
14572
14573 function binaryStringToWordArray(binary) {
14574 var aLen = binary.length / 32;
14575 var a = [];
14576 for (var i=0; i<aLen; i++) {
14577 var valueStr = binary.substring(0,32);
3af2954a 14578 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14579 a.push(value);
14580 binary = binary.slice(32);
3af2954a 14581 }
80c4dd2a 14582 return a;
3af2954a
IC
14583 }
14584
14585 // Pad a numeric string on the left with zero digits until the given width
14586 // is reached.
14587 // Note this differs to the python implementation because it does not
14588 // handle numbers starting with a sign.
14589 function zfill(source, length) {
14590 source = source.toString();
14591 while (source.length < length) {
14592 source = '0' + source;
14593 }
14594 return source;
14595 }
14596
14597 init();
ebd8d4e8 14598
3af2954a 14599}
dc55c6b0 14600</script>
ab78acc6 14601 <script>(function() {
ebd8d4e8
IC
14602
14603 var mnemonic = new Mnemonic("english");
14604 var bip32RootKey = null;
14605 var bip32ExtendedKey = null;
ab78acc6 14606 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14607 var addressRowTemplate = $("#address-row-template");
14608
80c4dd2a
IC
14609 var showIndex = true;
14610 var showAddress = true;
14611 var showPrivKey = true;
14612
ebd8d4e8
IC
14613 var phraseChangeTimeoutEvent = null;
14614
14615 var DOM = {};
d6cedc94
IC
14616 DOM.network = $(".network");
14617 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14618 DOM.phrase = $(".phrase");
721b7284 14619 DOM.passphrase = $(".passphrase");
ebd8d4e8
IC
14620 DOM.generate = $(".generate");
14621 DOM.rootKey = $(".root-key");
14622 DOM.extendedPrivKey = $(".extended-priv-key");
14623 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14624 DOM.bip32tab = $("#bip32-tab");
14625 DOM.bip44tab = $("#bip44-tab");
14626 DOM.bip32panel = $("#bip32");
14627 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14628 DOM.bip32path = $("#bip32-path");
14629 DOM.bip44path = $("#bip44-path");
14630 DOM.bip44purpose = $("#bip44 .purpose");
14631 DOM.bip44coin = $("#bip44 .coin");
14632 DOM.bip44account = $("#bip44 .account");
14633 DOM.bip44change = $("#bip44 .change");
14634 DOM.strength = $(".strength");
14635 DOM.addresses = $(".addresses");
14636 DOM.rowsToAdd = $(".rows-to-add");
14637 DOM.more = $(".more");
14638 DOM.feedback = $(".feedback");
14639 DOM.tab = $(".derivation-type a");
14640 DOM.indexToggle = $(".index-toggle");
14641 DOM.addressToggle = $(".address-toggle");
14642 DOM.privateKeyToggle = $(".private-key-toggle");
14643
dc55c6b0 14644 var derivationPath = $(".tab-pane.active .path").val();
ebd8d4e8
IC
14645
14646 function init() {
14647 // Events
d6cedc94 14648 DOM.network.on("change", networkChanged);
a19a5498
IC
14649 DOM.phrase.on("input", delayedPhraseChanged);
14650 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14651 DOM.generate.on("click", generateClicked);
14652 DOM.more.on("click", showMore);
a19a5498
IC
14653 DOM.bip32path.on("input", bip32Changed);
14654 DOM.bip44purpose.on("input", bip44Changed);
14655 DOM.bip44coin.on("input", bip44Changed);
14656 DOM.bip44account.on("input", bip44Changed);
14657 DOM.bip44change.on("input", bip44Changed);
ebd8d4e8
IC
14658 DOM.tab.on("click", tabClicked);
14659 DOM.indexToggle.on("click", toggleIndexes);
14660 DOM.addressToggle.on("click", toggleAddresses);
14661 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14662 disableForms();
14663 hidePending();
14664 hideValidationError();
ab78acc6 14665 populateNetworkSelect();
ebd8d4e8
IC
14666 }
14667
14668 // Event handlers
14669
d6cedc94 14670 function networkChanged(e) {
ab78acc6
IC
14671 var network = e.target.value;
14672 networks[network].onSelect();
dc55c6b0 14673 setBip44DerivationPath();
d6cedc94
IC
14674 delayedPhraseChanged();
14675 }
14676
ebd8d4e8
IC
14677 function delayedPhraseChanged() {
14678 hideValidationError();
14679 showPending();
14680 if (phraseChangeTimeoutEvent != null) {
14681 clearTimeout(phraseChangeTimeoutEvent);
14682 }
14683 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14684 }
14685
14686 function phraseChanged() {
14687 showPending();
14688 hideValidationError();
14689 // Get the mnemonic phrase
14690 var phrase = DOM.phrase.val();
721b7284 14691 var passphrase = DOM.passphrase.val();
ebd8d4e8
IC
14692 var errorText = findPhraseErrors(phrase);
14693 if (errorText) {
14694 showValidationError(errorText);
14695 return;
14696 }
14697 // Get the derivation path
14698 var errorText = findDerivationPathErrors();
14699 if (errorText) {
14700 showValidationError(errorText);
14701 return;
14702 }
14703 // Calculate and display
721b7284 14704 calcBip32Seed(phrase, passphrase, derivationPath);
ebd8d4e8
IC
14705 displayBip32Info();
14706 hidePending();
14707 }
14708
14709 function generateClicked() {
14710 clearDisplay();
14711 showPending();
14712 setTimeout(function() {
14713 var phrase = generateRandomPhrase();
14714 if (!phrase) {
14715 return;
14716 }
14717 phraseChanged();
14718 }, 50);
14719 }
14720
14721 function tabClicked(e) {
14722 var activePath = $(e.target.getAttribute("href") + " .path");
14723 derivationPath = activePath.val();
14724 derivationChanged();
14725 }
14726
14727 function derivationChanged() {
59780293 14728 delayedPhraseChanged();
ebd8d4e8
IC
14729 }
14730
14731 function bip32Changed() {
14732 derivationPath = DOM.bip32path.val();
14733 derivationChanged();
14734 }
14735
14736 function bip44Changed() {
14737 setBip44DerivationPath();
ebd8d4e8
IC
14738 derivationChanged();
14739 }
14740
14741 function toggleIndexes() {
80c4dd2a 14742 showIndex = !showIndex;
ebd8d4e8
IC
14743 $("td.index span").toggleClass("invisible");
14744 }
14745
14746 function toggleAddresses() {
80c4dd2a 14747 showAddress = !showAddress;
ebd8d4e8
IC
14748 $("td.address span").toggleClass("invisible");
14749 }
14750
14751 function togglePrivateKeys() {
80c4dd2a 14752 showPrivKey = !showPrivKey;
ebd8d4e8
IC
14753 $("td.privkey span").toggleClass("invisible");
14754 }
14755
14756 // Private methods
14757
14758 function generateRandomPhrase() {
14759 if (!hasStrongRandom()) {
14760 var errorText = "This browser does not support strong randomness";
14761 showValidationError(errorText);
14762 return;
14763 }
14764 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
14765 var strength = numWords / 3 * 32;
14766 var words = mnemonic.generate(strength);
14767 DOM.phrase.val(words);
14768 return words;
14769 }
14770
721b7284
IC
14771 function calcBip32Seed(phrase, passphrase, path) {
14772 var seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 14773 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
ebd8d4e8
IC
14774 bip32ExtendedKey = bip32RootKey;
14775 // Derive the key from the path
14776 var pathBits = path.split("/");
14777 for (var i=0; i<pathBits.length; i++) {
14778 var bit = pathBits[i];
14779 var index = parseInt(bit);
14780 if (isNaN(index)) {
14781 continue;
14782 }
14783 var hardened = bit[bit.length-1] == "'";
14784 if (hardened) {
14785 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14786 }
14787 else {
14788 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14789 }
14790 }
14791 }
14792
14793 function showValidationError(errorText) {
14794 DOM.feedback
14795 .text(errorText)
14796 .show();
14797 }
14798
14799 function hideValidationError() {
14800 DOM.feedback
14801 .text("")
14802 .hide();
14803 }
14804
14805 function findPhraseErrors(phrase) {
14806 // TODO make this right
14807 // Preprocess the words
783981de 14808 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
14809 var parts = phrase.split(" ");
14810 var proper = [];
14811 for (var i=0; i<parts.length; i++) {
14812 var part = parts[i];
14813 if (part.length > 0) {
14814 // TODO check that lowercasing is always valid to do
14815 proper.push(part.toLowerCase());
14816 }
14817 }
14818 // TODO some levenstein on the words
14819 var properPhrase = proper.join(' ');
14820 // Check the words are valid
14821 var isValid = mnemonic.check(properPhrase);
14822 if (!isValid) {
14823 return "Invalid mnemonic";
14824 }
14825 return false;
14826 }
14827
14828 function findDerivationPathErrors(path) {
14829 // TODO
14830 return false;
14831 }
14832
14833 function displayBip32Info() {
14834 // Display the key
14835 var rootKey = bip32RootKey.toBase58();
14836 DOM.rootKey.val(rootKey);
14837 var extendedPrivKey = bip32ExtendedKey.toBase58();
14838 DOM.extendedPrivKey.val(extendedPrivKey);
14839 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14840 DOM.extendedPubKey.val(extendedPubKey);
14841 // Display the addresses and privkeys
14842 clearAddressesList();
14843 displayAddresses(0, 20);
14844 }
14845
14846 function displayAddresses(start, total) {
14847 for (var i=0; i<total; i++) {
80c4dd2a
IC
14848 var index = i + start;
14849 new TableRow(index);
14850 }
14851 }
14852
14853 function TableRow(index) {
14854
14855 function init() {
14856 calculateValues();
14857 }
14858
14859 function calculateValues() {
14860 setTimeout(function() {
14861 var key = bip32ExtendedKey.derive(index);
14862 var address = key.getAddress().toString();
14863 var privkey = key.privKey.toWIF(network);
14864 addAddressToList(index, address, privkey);
14865 }, 50)
ebd8d4e8 14866 }
80c4dd2a
IC
14867
14868 init();
14869
ebd8d4e8
IC
14870 }
14871
14872 function showMore() {
14873 var start = DOM.addresses.children().length;
14874 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14875 if (isNaN(rowsToAdd)) {
14876 rowsToAdd = 20;
14877 DOM.rowsToAdd.val("20");
14878 }
14879 if (rowsToAdd > 200) {
14880 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14881 msg += "Do you want to continue?";
14882 if (!confirm(msg)) {
14883 return;
14884 }
14885 }
ebd8d4e8 14886 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
14887 }
14888
14889 function clearDisplay() {
14890 clearAddressesList();
14891 clearKey();
14892 hideValidationError();
14893 }
14894
14895 function clearAddressesList() {
14896 DOM.addresses.empty();
14897 }
14898
14899 function clearKey() {
14900 DOM.rootKey.val("");
14901 DOM.extendedPrivKey.val("");
14902 DOM.extendedPubKey.val("");
14903 }
14904
14905 function addAddressToList(index, address, privkey) {
14906 var row = $(addressRowTemplate.html());
80c4dd2a
IC
14907 // Elements
14908 var indexCell = row.find(".index span");
14909 var addressCell = row.find(".address span");
14910 var privkeyCell = row.find(".privkey span");
14911 // Content
ae30fed8
IC
14912 var indexText = derivationPath + "/" + index;
14913 indexCell.text(indexText);
80c4dd2a
IC
14914 addressCell.text(address);
14915 privkeyCell.text(privkey);
14916 // Visibility
14917 if (!showIndex) {
14918 indexCell.addClass("invisible");
14919 }
14920 if (!showAddress) {
14921 addressCell.addClass("invisible");
14922 }
14923 if (!showPrivKey) {
6d628db7 14924 privkeyCell.addClass("invisible");
80c4dd2a 14925 }
ebd8d4e8
IC
14926 DOM.addresses.append(row);
14927 }
14928
14929 function hasStrongRandom() {
14930 return 'crypto' in window && window['crypto'] !== null;
14931 }
14932
14933 function disableForms() {
14934 $("form").on("submit", function(e) {
14935 e.preventDefault();
14936 });
14937 }
14938
14939 function setBip44DerivationPath() {
14940 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14941 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14942 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14943 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14944 var path = "m/";
14945 path += purpose + "'/";
14946 path += coin + "'/";
14947 path += account + "'/";
14948 path += change;
14949 DOM.bip44path.val(path);
2b831bc6 14950 derivationPath = DOM.bip44path.val();
ebd8d4e8
IC
14951 }
14952
14953 function parseIntNoNaN(val, defaultVal) {
14954 var v = parseInt(val);
14955 if (isNaN(v)) {
14956 return defaultVal;
14957 }
14958 return v;
14959 }
14960
14961 function showPending() {
14962 DOM.feedback
14963 .text("Calculating...")
14964 .show();
14965 }
14966
14967 function hidePending() {
14968 DOM.feedback
14969 .text("")
14970 .hide();
14971 }
14972
ab78acc6
IC
14973 function populateNetworkSelect() {
14974 for (var i=0; i<networks.length; i++) {
14975 var network = networks[i];
14976 var option = $("<option>");
14977 option.attr("value", i);
14978 option.text(network.name);
14979 DOM.phraseNetwork.append(option);
14980 }
14981 }
14982
14983 var networks = [
14984 {
14985 name: "Bitcoin",
14986 onSelect: function() {
14987 network = bitcoin.networks.bitcoin;
14988 DOM.bip44coin.val(0);
ab78acc6
IC
14989 },
14990 },
14991 {
14992 name: "Bitcoin Testnet",
14993 onSelect: function() {
14994 network = bitcoin.networks.testnet;
14995 DOM.bip44coin.val(1);
ab78acc6
IC
14996 },
14997 },
14998 {
14999 name: "Litecoin",
15000 onSelect: function() {
15001 network = bitcoin.networks.litecoin;
15002 DOM.bip44coin.val(2);
15003 },
15004 },
15005 {
15006 name: "Dogecoin",
15007 onSelect: function() {
15008 network = bitcoin.networks.dogecoin;
15009 DOM.bip44coin.val(3);
15010 },
15011 },
d5dc92fd
IC
15012 {
15013 name: "ShadowCash",
15014 onSelect: function() {
15015 network = bitcoin.networks.shadow;
15016 DOM.bip44coin.val(35);
15017 },
15018 },
15019 {
15020 name: "ShadowCash Testnet",
15021 onSelect: function() {
15022 network = bitcoin.networks.shadowtn;
15023 DOM.bip44coin.val(1);
15024 },
15025 },
a3baa26e
IC
15026 {
15027 name: "Viacoin",
15028 onSelect: function() {
15029 network = bitcoin.networks.viacoin;
15030 DOM.bip44coin.val(14);
15031 },
15032 },
15033 {
15034 name: "Viacoin Testnet",
15035 onSelect: function() {
15036 network = bitcoin.networks.viacointestnet;
15037 DOM.bip44coin.val(1);
15038 },
15039 },
15040 {
15041 name: "Jumbucks",
15042 onSelect: function() {
15043 network = bitcoin.networks.jumbucks;
15044 DOM.bip44coin.val(26);
15045 },
15046 },
5c434a8a
CM
15047 {
15048 name: "CLAM",
15049 onSelect: function() {
15050 network = bitcoin.networks.clam;
15051 DOM.bip44coin.val(23);
15052 },
15053 },
ab78acc6
IC
15054 ]
15055
ebd8d4e8
IC
15056 init();
15057
15058})();
dc55c6b0 15059</script>
ebd8d4e8
IC
15060 </body>
15061</html>