]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
BIP32 Root Key can be specified by user
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
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)
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" />
15
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 }
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 }
47 </style>
48 </head>
49 <body>
50 <div class="container">
51
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">
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>
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="seed" class="col-sm-2 control-label">BIP39 Seed</label>
97 <div class="col-sm-10">
98 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
99 </div>
100 </div>
101 <div class="form-group">
102 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
103 <div class="col-sm-10">
104 <select id="network-phrase" class="network form-control">
105 <!-- populated by javascript -->
106 </select>
107 </div>
108 </div>
109 <div class="form-group">
110 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
111 <div class="col-sm-10">
112 <textarea id="root-key" class="root-key form-control"></textarea>
113 </div>
114 </div>
115 </form>
116 </div>
117 </div>
118
119 <hr>
120
121 <div class="row">
122 <div class="col-md-12">
123 <h2>Derivation Path</h2>
124 <ul class="derivation-type nav nav-tabs" role="tablist">
125 <li id="bip44-tab" class="active">
126 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
127 </li>
128 <li id="bip32-tab">
129 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
130 </li>
131 </ul>
132 <div class="derivation-type tab-content">
133 <div id="bip44" class="tab-pane active">
134 <form class="form-horizontal" role="form">
135 <br>
136 <div class="col-sm-2"></div>
137 <div class="col-sm-10">
138 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
139 </div>
140 <div class="form-group">
141 <label for="purpose" class="col-sm-2 control-label">
142 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
143 </label>
144 <div class="col-sm-10">
145 <input id="purpose" type="text" class="purpose form-control" value="44">
146 </div>
147 </div>
148 <div class="form-group">
149 <label for="coin" class="col-sm-2 control-label">
150 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
151 </label>
152 <div class="col-sm-10">
153 <input id="coin" type="text" class="coin form-control" value="0">
154 </div>
155 </div>
156 <div class="form-group">
157 <label for="account" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="account" type="text" class="account form-control" value="0">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="change" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="change" type="text" class="change form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
176 </div>
177 </div>
178 </form>
179 </div>
180 <div id="bip32" class="tab-pane">
181 <form class="form-horizontal" role="form">
182 <br>
183 <div class="col-sm-2"></div>
184 <div class="col-sm-10">
185 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
186 </div>
187 <div class="form-group">
188 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
189 <div class="col-sm-10">
190 <input id="bip32-path" type="text" class="path form-control" value="m/0">
191 </div>
192 </div>
193 <div class="form-group">
194 <label class="col-sm-2 control-label">Hive Wallet</label>
195 <div class="col-sm-10">
196 <p class="form-control no-border">
197 Use path <code>m/0'/0</code>.
198 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
199 </p>
200 </div>
201 </div>
202 <div class="form-group">
203 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
204 <div class="col-sm-10">
205 <p class="form-control no-border">
206 Use path <code>m/44'/0'/0'/0</code>.
207 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
208 </p>
209 </div>
210 </div>
211 </form>
212 </div>
213 </div>
214 <form class="form-horizontal" role="form">
215 <div class="form-group">
216 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
217 <div class="col-sm-10">
218 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
219 </div>
220 </div>
221 <div class="form-group">
222 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
223 <div class="col-sm-10">
224 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
225 </div>
226 </div>
227 </form>
228 </div>
229 </div>
230
231 <hr>
232
233 <div class="row">
234 <div class="col-md-12">
235 <h2>Derived Addresses</h2>
236 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
237 <table class="table table-striped">
238 <thead>
239 <th>
240 <div class="input-group">
241 Path&nbsp;&nbsp;
242 <button class="index-toggle">Toggle</button>
243 </div>
244 </th>
245 <th>
246 <div class="input-group">
247 Address&nbsp;&nbsp;
248 <button class="address-toggle">Toggle</button>
249 </div>
250 </th>
251 <th>
252 <div class="input-group">
253 Private Key&nbsp;&nbsp;
254 <button class="private-key-toggle">Toggle</button>
255 </div>
256 </th>
257 </thead>
258 <tbody class="addresses">
259 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
260 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
261 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
262 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
263 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
264 </tbody>
265 </table>
266 </div>
267 </div>
268 <span>Show next </button>
269 <input type="number" class="rows-to-add" value="20">
270 <button class="more">Show</button>
271
272 <hr>
273
274 <div class="row">
275 <div class="col-md-12">
276 <h2>More info</h2>
277 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
278 <p>
279 Read more at the
280 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
281 </p>
282 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
283 <p>
284 Read more at the
285 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
286 and see the demo at
287 <a href="http://bip32.org/" target="_blank">bip32.org</a>
288 </p>
289 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
290 <p>
291 Read more at the
292 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
293 </p>
294 <h3>Private Keys</h3>
295 <p>
296 Use private keys at
297 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
298 but be careful - it can be easy to make mistakes if you
299 don't know what you're doing
300 </p>
301 </div>
302 </div>
303
304 <hr>
305
306 <div class="row">
307 <div class="col-md-12">
308
309 <h2>Offline Usage</h2>
310
311 <p>
312 You can use this tool without having to be online.
313 </p>
314 <p>
315 In your browser, select file save-as, and save this page
316 as a file.
317 </p>
318 <p>
319 Double-click that file to open it in a browser
320 on any offline computer.
321 </p>
322 <p>
323 Alternatively, download it from
324 <a href="https://github.com/dcpos/bip39">
325 https://github.com/dcpos/bip39
326 </a>
327
328 </div>
329 </div>
330
331 <hr>
332
333 <div class="row">
334 <div class="col-md-12">
335
336 <h2>This project is 100% open-source code</h2>
337
338 <p>
339 <span>Get the source code at - </span>
340 <a href="https://github.com/dcpos/bip39" target="_blank">
341 https://github.com/dcpos/bip39
342 </a>
343 </p>
344
345 <h3>Libraries</h3>
346
347 <p>
348 <span>BitcoinJS - </span>
349 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
350 https://github.com/bitcoinjs/bitcoinjs-lib
351 </a>
352 </p>
353
354 <p>
355 <span>jsBIP39 - </span>
356 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
357 https://github.com/iancoleman/jsbip39
358 </a>
359 </p>
360
361 <p>
362 <span>sjcl - </span>
363 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
364 https://github.com/bitwiseshiftleft/sjcl
365 </a>
366 </p>
367
368 <p>
369 <span>jQuery - </span>
370 <a href="https://jquery.com/" target="_blank">
371 https://jquery.com/
372 </a>
373 </p>
374
375 <p>
376 <span>Twitter Bootstrap - </span>
377 <a href="http://getbootstrap.com/" target="_blank">
378 http://getbootstrap.com/
379 </a>
380 </p>
381
382 </div>
383 </div>
384
385 </div>
386
387 <div class="feedback-container">
388 <div class="feedback">Loading...</div>
389 </div>
390
391 <script type="text/template" id="address-row-template">
392 <tr>
393 <td class="index"><span></span></td>
394 <td class="address"><span></span></td>
395 <td class="privkey"><span></span></td>
396 </tr>
397 </script>
398 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
399 !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
400 },_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
401 },removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
402 </script>
403 <script>/*!
404 * Bootstrap v3.2.0 (http://getbootstrap.com)
405 * Copyright 2011-2014 Twitter, Inc.
406 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
407 */
408 if("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>
409 <script>(function() {
410 'use strict';
411
412 /**
413 * Extend an Object with another Object's properties.
414 *
415 * The source objects are specified as additional arguments.
416 *
417 * @param dst Object the object to extend.
418 *
419 * @return Object the final object.
420 */
421 var _extend = function(dst) {
422 var sources = Array.prototype.slice.call(arguments, 1);
423 for (var i=0; i<sources.length; ++i) {
424 var src = sources[i];
425 for (var p in src) {
426 if (src.hasOwnProperty(p)) dst[p] = src[p];
427 }
428 }
429 return dst;
430 };
431
432
433 /**
434 * Defer execution of given function.
435 * @param {Function} func
436 */
437 var _defer = function(func) {
438 if (typeof setImmediate === 'function') {
439 return setImmediate(func);
440 } else {
441 return setTimeout(func, 0);
442 }
443 };
444
445 /**
446 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
447 */
448 var Levenshtein = {
449 /**
450 * Calculate levenshtein distance of the two strings.
451 *
452 * @param str1 String the first string.
453 * @param str2 String the second string.
454 * @return Integer the levenshtein distance (0 and above).
455 */
456 get: function(str1, str2) {
457 // base cases
458 if (str1 === str2) return 0;
459 if (str1.length === 0) return str2.length;
460 if (str2.length === 0) return str1.length;
461
462 // two rows
463 var prevRow = new Array(str2.length + 1),
464 curCol, nextCol, i, j, tmp;
465
466 // initialise previous row
467 for (i=0; i<prevRow.length; ++i) {
468 prevRow[i] = i;
469 }
470
471 // calculate current row distance from previous row
472 for (i=0; i<str1.length; ++i) {
473 nextCol = i + 1;
474
475 for (j=0; j<str2.length; ++j) {
476 curCol = nextCol;
477
478 // substution
479 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
480 // insertion
481 tmp = curCol + 1;
482 if (nextCol > tmp) {
483 nextCol = tmp;
484 }
485 // deletion
486 tmp = prevRow[j + 1] + 1;
487 if (nextCol > tmp) {
488 nextCol = tmp;
489 }
490
491 // copy current col value into previous (in preparation for next iteration)
492 prevRow[j] = curCol;
493 }
494
495 // copy last col value into previous (in preparation for next iteration)
496 prevRow[j] = nextCol;
497 }
498
499 return nextCol;
500 },
501
502 /**
503 * Asynchronously calculate levenshtein distance of the two strings.
504 *
505 * @param str1 String the first string.
506 * @param str2 String the second string.
507 * @param cb Function callback function with signature: function(Error err, int distance)
508 * @param [options] Object additional options.
509 * @param [options.progress] Function progress callback with signature: function(percentComplete)
510 */
511 getAsync: function(str1, str2, cb, options) {
512 options = _extend({}, {
513 progress: null
514 }, options);
515
516 // base cases
517 if (str1 === str2) return cb(null, 0);
518 if (str1.length === 0) return cb(null, str2.length);
519 if (str2.length === 0) return cb(null, str1.length);
520
521 // two rows
522 var prevRow = new Array(str2.length + 1),
523 curCol, nextCol,
524 i, j, tmp,
525 startTime, currentTime;
526
527 // initialise previous row
528 for (i=0; i<prevRow.length; ++i) {
529 prevRow[i] = i;
530 }
531
532 nextCol = 1;
533 i = 0;
534 j = -1;
535
536 var __calculate = function() {
537 // reset timer
538 startTime = new Date().valueOf();
539 currentTime = startTime;
540
541 // keep going until one second has elapsed
542 while (currentTime - startTime < 1000) {
543 // reached end of current row?
544 if (str2.length <= (++j)) {
545 // copy current into previous (in preparation for next iteration)
546 prevRow[j] = nextCol;
547
548 // if already done all chars
549 if (str1.length <= (++i)) {
550 return cb(null, nextCol);
551 }
552 // else if we have more left to do
553 else {
554 nextCol = i + 1;
555 j = 0;
556 }
557 }
558
559 // calculation
560 curCol = nextCol;
561
562 // substution
563 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
564 // insertion
565 tmp = curCol + 1;
566 if (nextCol > tmp) {
567 nextCol = tmp;
568 }
569 // deletion
570 tmp = prevRow[j + 1] + 1;
571 if (nextCol > tmp) {
572 nextCol = tmp;
573 }
574
575 // copy current into previous (in preparation for next iteration)
576 prevRow[j] = curCol;
577
578 // get current time
579 currentTime = new Date().valueOf();
580 }
581
582 // send a progress update?
583 if (null !== options.progress) {
584 try {
585 options.progress.call(null, (i * 100.0/ str1.length));
586 } catch (err) {
587 return cb('Progress callback: ' + err.toString());
588 }
589 }
590
591 // next iteration
592 _defer(__calculate);
593 };
594
595 __calculate();
596 }
597
598 };
599
600 // amd
601 if (typeof define !== "undefined" && define !== null && define.amd) {
602 define(function() {
603 return Levenshtein;
604 });
605 }
606 // commonjs
607 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
608 module.exports = Levenshtein;
609 }
610 // web worker
611 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
612 self.Levenshtein = Levenshtein;
613 }
614 // browser main thread
615 else if (typeof window !== "undefined" && window !== null) {
616 window.Levenshtein = Levenshtein;
617 }
618 }());
619
620 </script>
621 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
622 // (public) Constructor
623 function BigInteger(a, b, c) {
624 if (!(this instanceof BigInteger))
625 return new BigInteger(a, b, c)
626
627 if (a != null) {
628 if ("number" == typeof a) this.fromNumber(a, b, c)
629 else if (b == null && "string" != typeof a) this.fromString(a, 256)
630 else this.fromString(a, b)
631 }
632 }
633
634 var proto = BigInteger.prototype
635
636 // duck-typed isBigInteger
637 proto.__bigi = require('../package.json').version
638 BigInteger.isBigInteger = function (obj, check_ver) {
639 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
640 }
641
642 // Bits per digit
643 var dbits
644
645 // am: Compute w_j += (x*this_i), propagate carries,
646 // c is initial carry, returns final carry.
647 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
648 // We need to select the fastest one that works in this environment.
649
650 // am1: use a single mult and divide to get the high bits,
651 // max digit bits should be 26 because
652 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
653 function am1(i, x, w, j, c, n) {
654 while (--n >= 0) {
655 var v = x * this[i++] + w[j] + c
656 c = Math.floor(v / 0x4000000)
657 w[j++] = v & 0x3ffffff
658 }
659 return c
660 }
661 // am2 avoids a big mult-and-extract completely.
662 // Max digit bits should be <= 30 because we do bitwise ops
663 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
664 function am2(i, x, w, j, c, n) {
665 var xl = x & 0x7fff,
666 xh = x >> 15
667 while (--n >= 0) {
668 var l = this[i] & 0x7fff
669 var h = this[i++] >> 15
670 var m = xh * l + h * xl
671 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
672 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
673 w[j++] = l & 0x3fffffff
674 }
675 return c
676 }
677 // Alternately, set max digit bits to 28 since some
678 // browsers slow down when dealing with 32-bit numbers.
679 function am3(i, x, w, j, c, n) {
680 var xl = x & 0x3fff,
681 xh = x >> 14
682 while (--n >= 0) {
683 var l = this[i] & 0x3fff
684 var h = this[i++] >> 14
685 var m = xh * l + h * xl
686 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
687 c = (l >> 28) + (m >> 14) + xh * h
688 w[j++] = l & 0xfffffff
689 }
690 return c
691 }
692
693 // wtf?
694 BigInteger.prototype.am = am1
695 dbits = 26
696
697 BigInteger.prototype.DB = dbits
698 BigInteger.prototype.DM = ((1 << dbits) - 1)
699 var DV = BigInteger.prototype.DV = (1 << dbits)
700
701 var BI_FP = 52
702 BigInteger.prototype.FV = Math.pow(2, BI_FP)
703 BigInteger.prototype.F1 = BI_FP - dbits
704 BigInteger.prototype.F2 = 2 * dbits - BI_FP
705
706 // Digit conversions
707 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
708 var BI_RC = new Array()
709 var rr, vv
710 rr = "0".charCodeAt(0)
711 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
712 rr = "a".charCodeAt(0)
713 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
714 rr = "A".charCodeAt(0)
715 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
716
717 function int2char(n) {
718 return BI_RM.charAt(n)
719 }
720
721 function intAt(s, i) {
722 var c = BI_RC[s.charCodeAt(i)]
723 return (c == null) ? -1 : c
724 }
725
726 // (protected) copy this to r
727 function bnpCopyTo(r) {
728 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
729 r.t = this.t
730 r.s = this.s
731 }
732
733 // (protected) set from integer value x, -DV <= x < DV
734 function bnpFromInt(x) {
735 this.t = 1
736 this.s = (x < 0) ? -1 : 0
737 if (x > 0) this[0] = x
738 else if (x < -1) this[0] = x + DV
739 else this.t = 0
740 }
741
742 // return bigint initialized to value
743 function nbv(i) {
744 var r = new BigInteger()
745 r.fromInt(i)
746 return r
747 }
748
749 // (protected) set from string and radix
750 function bnpFromString(s, b) {
751 var self = this
752
753 var k
754 if (b == 16) k = 4
755 else if (b == 8) k = 3
756 else if (b == 256) k = 8; // byte array
757 else if (b == 2) k = 1
758 else if (b == 32) k = 5
759 else if (b == 4) k = 2
760 else {
761 self.fromRadix(s, b)
762 return
763 }
764 self.t = 0
765 self.s = 0
766 var i = s.length,
767 mi = false,
768 sh = 0
769 while (--i >= 0) {
770 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
771 if (x < 0) {
772 if (s.charAt(i) == "-") mi = true
773 continue
774 }
775 mi = false
776 if (sh == 0)
777 self[self.t++] = x
778 else if (sh + k > self.DB) {
779 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
780 self[self.t++] = (x >> (self.DB - sh))
781 } else
782 self[self.t - 1] |= x << sh
783 sh += k
784 if (sh >= self.DB) sh -= self.DB
785 }
786 if (k == 8 && (s[0] & 0x80) != 0) {
787 self.s = -1
788 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
789 }
790 self.clamp()
791 if (mi) BigInteger.ZERO.subTo(self, self)
792 }
793
794 // (protected) clamp off excess high words
795 function bnpClamp() {
796 var c = this.s & this.DM
797 while (this.t > 0 && this[this.t - 1] == c)--this.t
798 }
799
800 // (public) return string representation in given radix
801 function bnToString(b) {
802 var self = this
803 if (self.s < 0) return "-" + self.negate()
804 .toString(b)
805 var k
806 if (b == 16) k = 4
807 else if (b == 8) k = 3
808 else if (b == 2) k = 1
809 else if (b == 32) k = 5
810 else if (b == 4) k = 2
811 else return self.toRadix(b)
812 var km = (1 << k) - 1,
813 d, m = false,
814 r = "",
815 i = self.t
816 var p = self.DB - (i * self.DB) % k
817 if (i-- > 0) {
818 if (p < self.DB && (d = self[i] >> p) > 0) {
819 m = true
820 r = int2char(d)
821 }
822 while (i >= 0) {
823 if (p < k) {
824 d = (self[i] & ((1 << p) - 1)) << (k - p)
825 d |= self[--i] >> (p += self.DB - k)
826 } else {
827 d = (self[i] >> (p -= k)) & km
828 if (p <= 0) {
829 p += self.DB
830 --i
831 }
832 }
833 if (d > 0) m = true
834 if (m) r += int2char(d)
835 }
836 }
837 return m ? r : "0"
838 }
839
840 // (public) -this
841 function bnNegate() {
842 var r = new BigInteger()
843 BigInteger.ZERO.subTo(this, r)
844 return r
845 }
846
847 // (public) |this|
848 function bnAbs() {
849 return (this.s < 0) ? this.negate() : this
850 }
851
852 // (public) return + if this > a, - if this < a, 0 if equal
853 function bnCompareTo(a) {
854 var r = this.s - a.s
855 if (r != 0) return r
856 var i = this.t
857 r = i - a.t
858 if (r != 0) return (this.s < 0) ? -r : r
859 while (--i >= 0)
860 if ((r = this[i] - a[i]) != 0) return r
861 return 0
862 }
863
864 // returns bit length of the integer x
865 function nbits(x) {
866 var r = 1,
867 t
868 if ((t = x >>> 16) != 0) {
869 x = t
870 r += 16
871 }
872 if ((t = x >> 8) != 0) {
873 x = t
874 r += 8
875 }
876 if ((t = x >> 4) != 0) {
877 x = t
878 r += 4
879 }
880 if ((t = x >> 2) != 0) {
881 x = t
882 r += 2
883 }
884 if ((t = x >> 1) != 0) {
885 x = t
886 r += 1
887 }
888 return r
889 }
890
891 // (public) return the number of bits in "this"
892 function bnBitLength() {
893 if (this.t <= 0) return 0
894 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
895 }
896
897 // (public) return the number of bytes in "this"
898 function bnByteLength() {
899 return this.bitLength() >> 3
900 }
901
902 // (protected) r = this << n*DB
903 function bnpDLShiftTo(n, r) {
904 var i
905 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
906 for (i = n - 1; i >= 0; --i) r[i] = 0
907 r.t = this.t + n
908 r.s = this.s
909 }
910
911 // (protected) r = this >> n*DB
912 function bnpDRShiftTo(n, r) {
913 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
914 r.t = Math.max(this.t - n, 0)
915 r.s = this.s
916 }
917
918 // (protected) r = this << n
919 function bnpLShiftTo(n, r) {
920 var self = this
921 var bs = n % self.DB
922 var cbs = self.DB - bs
923 var bm = (1 << cbs) - 1
924 var ds = Math.floor(n / self.DB),
925 c = (self.s << bs) & self.DM,
926 i
927 for (i = self.t - 1; i >= 0; --i) {
928 r[i + ds + 1] = (self[i] >> cbs) | c
929 c = (self[i] & bm) << bs
930 }
931 for (i = ds - 1; i >= 0; --i) r[i] = 0
932 r[ds] = c
933 r.t = self.t + ds + 1
934 r.s = self.s
935 r.clamp()
936 }
937
938 // (protected) r = this >> n
939 function bnpRShiftTo(n, r) {
940 var self = this
941 r.s = self.s
942 var ds = Math.floor(n / self.DB)
943 if (ds >= self.t) {
944 r.t = 0
945 return
946 }
947 var bs = n % self.DB
948 var cbs = self.DB - bs
949 var bm = (1 << bs) - 1
950 r[0] = self[ds] >> bs
951 for (var i = ds + 1; i < self.t; ++i) {
952 r[i - ds - 1] |= (self[i] & bm) << cbs
953 r[i - ds] = self[i] >> bs
954 }
955 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
956 r.t = self.t - ds
957 r.clamp()
958 }
959
960 // (protected) r = this - a
961 function bnpSubTo(a, r) {
962 var self = this
963 var i = 0,
964 c = 0,
965 m = Math.min(a.t, self.t)
966 while (i < m) {
967 c += self[i] - a[i]
968 r[i++] = c & self.DM
969 c >>= self.DB
970 }
971 if (a.t < self.t) {
972 c -= a.s
973 while (i < self.t) {
974 c += self[i]
975 r[i++] = c & self.DM
976 c >>= self.DB
977 }
978 c += self.s
979 } else {
980 c += self.s
981 while (i < a.t) {
982 c -= a[i]
983 r[i++] = c & self.DM
984 c >>= self.DB
985 }
986 c -= a.s
987 }
988 r.s = (c < 0) ? -1 : 0
989 if (c < -1) r[i++] = self.DV + c
990 else if (c > 0) r[i++] = c
991 r.t = i
992 r.clamp()
993 }
994
995 // (protected) r = this * a, r != this,a (HAC 14.12)
996 // "this" should be the larger one if appropriate.
997 function bnpMultiplyTo(a, r) {
998 var x = this.abs(),
999 y = a.abs()
1000 var i = x.t
1001 r.t = i + y.t
1002 while (--i >= 0) r[i] = 0
1003 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1004 r.s = 0
1005 r.clamp()
1006 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1007 }
1008
1009 // (protected) r = this^2, r != this (HAC 14.16)
1010 function bnpSquareTo(r) {
1011 var x = this.abs()
1012 var i = r.t = 2 * x.t
1013 while (--i >= 0) r[i] = 0
1014 for (i = 0; i < x.t - 1; ++i) {
1015 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1016 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1017 r[i + x.t] -= x.DV
1018 r[i + x.t + 1] = 1
1019 }
1020 }
1021 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1022 r.s = 0
1023 r.clamp()
1024 }
1025
1026 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1027 // r != q, this != m. q or r may be null.
1028 function bnpDivRemTo(m, q, r) {
1029 var self = this
1030 var pm = m.abs()
1031 if (pm.t <= 0) return
1032 var pt = self.abs()
1033 if (pt.t < pm.t) {
1034 if (q != null) q.fromInt(0)
1035 if (r != null) self.copyTo(r)
1036 return
1037 }
1038 if (r == null) r = new BigInteger()
1039 var y = new BigInteger(),
1040 ts = self.s,
1041 ms = m.s
1042 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1043 if (nsh > 0) {
1044 pm.lShiftTo(nsh, y)
1045 pt.lShiftTo(nsh, r)
1046 } else {
1047 pm.copyTo(y)
1048 pt.copyTo(r)
1049 }
1050 var ys = y.t
1051 var y0 = y[ys - 1]
1052 if (y0 == 0) return
1053 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1054 var d1 = self.FV / yt,
1055 d2 = (1 << self.F1) / yt,
1056 e = 1 << self.F2
1057 var i = r.t,
1058 j = i - ys,
1059 t = (q == null) ? new BigInteger() : q
1060 y.dlShiftTo(j, t)
1061 if (r.compareTo(t) >= 0) {
1062 r[r.t++] = 1
1063 r.subTo(t, r)
1064 }
1065 BigInteger.ONE.dlShiftTo(ys, t)
1066 t.subTo(y, y); // "negative" y so we can replace sub with am later
1067 while (y.t < ys) y[y.t++] = 0
1068 while (--j >= 0) {
1069 // Estimate quotient digit
1070 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1071 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1072 y.dlShiftTo(j, t)
1073 r.subTo(t, r)
1074 while (r[i] < --qd) r.subTo(t, r)
1075 }
1076 }
1077 if (q != null) {
1078 r.drShiftTo(ys, q)
1079 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1080 }
1081 r.t = ys
1082 r.clamp()
1083 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1084 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1085 }
1086
1087 // (public) this mod a
1088 function bnMod(a) {
1089 var r = new BigInteger()
1090 this.abs()
1091 .divRemTo(a, null, r)
1092 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1093 return r
1094 }
1095
1096 // Modular reduction using "classic" algorithm
1097 function Classic(m) {
1098 this.m = m
1099 }
1100
1101 function cConvert(x) {
1102 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1103 else return x
1104 }
1105
1106 function cRevert(x) {
1107 return x
1108 }
1109
1110 function cReduce(x) {
1111 x.divRemTo(this.m, null, x)
1112 }
1113
1114 function cMulTo(x, y, r) {
1115 x.multiplyTo(y, r)
1116 this.reduce(r)
1117 }
1118
1119 function cSqrTo(x, r) {
1120 x.squareTo(r)
1121 this.reduce(r)
1122 }
1123
1124 Classic.prototype.convert = cConvert
1125 Classic.prototype.revert = cRevert
1126 Classic.prototype.reduce = cReduce
1127 Classic.prototype.mulTo = cMulTo
1128 Classic.prototype.sqrTo = cSqrTo
1129
1130 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1131 // justification:
1132 // xy == 1 (mod m)
1133 // xy = 1+km
1134 // xy(2-xy) = (1+km)(1-km)
1135 // x[y(2-xy)] = 1-k^2m^2
1136 // x[y(2-xy)] == 1 (mod m^2)
1137 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1138 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1139 // JS multiply "overflows" differently from C/C++, so care is needed here.
1140 function bnpInvDigit() {
1141 if (this.t < 1) return 0
1142 var x = this[0]
1143 if ((x & 1) == 0) return 0
1144 var y = x & 3; // y == 1/x mod 2^2
1145 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1146 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1147 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1148 // last step - calculate inverse mod DV directly
1149 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1150 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1151 // we really want the negative inverse, and -DV < y < DV
1152 return (y > 0) ? this.DV - y : -y
1153 }
1154
1155 // Montgomery reduction
1156 function Montgomery(m) {
1157 this.m = m
1158 this.mp = m.invDigit()
1159 this.mpl = this.mp & 0x7fff
1160 this.mph = this.mp >> 15
1161 this.um = (1 << (m.DB - 15)) - 1
1162 this.mt2 = 2 * m.t
1163 }
1164
1165 // xR mod m
1166 function montConvert(x) {
1167 var r = new BigInteger()
1168 x.abs()
1169 .dlShiftTo(this.m.t, r)
1170 r.divRemTo(this.m, null, r)
1171 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1172 return r
1173 }
1174
1175 // x/R mod m
1176 function montRevert(x) {
1177 var r = new BigInteger()
1178 x.copyTo(r)
1179 this.reduce(r)
1180 return r
1181 }
1182
1183 // x = x/R mod m (HAC 14.32)
1184 function montReduce(x) {
1185 while (x.t <= this.mt2) // pad x so am has enough room later
1186 x[x.t++] = 0
1187 for (var i = 0; i < this.m.t; ++i) {
1188 // faster way of calculating u0 = x[i]*mp mod DV
1189 var j = x[i] & 0x7fff
1190 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1191 // use am to combine the multiply-shift-add into one call
1192 j = i + this.m.t
1193 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1194 // propagate carry
1195 while (x[j] >= x.DV) {
1196 x[j] -= x.DV
1197 x[++j]++
1198 }
1199 }
1200 x.clamp()
1201 x.drShiftTo(this.m.t, x)
1202 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1203 }
1204
1205 // r = "x^2/R mod m"; x != r
1206 function montSqrTo(x, r) {
1207 x.squareTo(r)
1208 this.reduce(r)
1209 }
1210
1211 // r = "xy/R mod m"; x,y != r
1212 function montMulTo(x, y, r) {
1213 x.multiplyTo(y, r)
1214 this.reduce(r)
1215 }
1216
1217 Montgomery.prototype.convert = montConvert
1218 Montgomery.prototype.revert = montRevert
1219 Montgomery.prototype.reduce = montReduce
1220 Montgomery.prototype.mulTo = montMulTo
1221 Montgomery.prototype.sqrTo = montSqrTo
1222
1223 // (protected) true iff this is even
1224 function bnpIsEven() {
1225 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1226 }
1227
1228 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1229 function bnpExp(e, z) {
1230 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1231 var r = new BigInteger(),
1232 r2 = new BigInteger(),
1233 g = z.convert(this),
1234 i = nbits(e) - 1
1235 g.copyTo(r)
1236 while (--i >= 0) {
1237 z.sqrTo(r, r2)
1238 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1239 else {
1240 var t = r
1241 r = r2
1242 r2 = t
1243 }
1244 }
1245 return z.revert(r)
1246 }
1247
1248 // (public) this^e % m, 0 <= e < 2^32
1249 function bnModPowInt(e, m) {
1250 var z
1251 if (e < 256 || m.isEven()) z = new Classic(m)
1252 else z = new Montgomery(m)
1253 return this.exp(e, z)
1254 }
1255
1256 // protected
1257 proto.copyTo = bnpCopyTo
1258 proto.fromInt = bnpFromInt
1259 proto.fromString = bnpFromString
1260 proto.clamp = bnpClamp
1261 proto.dlShiftTo = bnpDLShiftTo
1262 proto.drShiftTo = bnpDRShiftTo
1263 proto.lShiftTo = bnpLShiftTo
1264 proto.rShiftTo = bnpRShiftTo
1265 proto.subTo = bnpSubTo
1266 proto.multiplyTo = bnpMultiplyTo
1267 proto.squareTo = bnpSquareTo
1268 proto.divRemTo = bnpDivRemTo
1269 proto.invDigit = bnpInvDigit
1270 proto.isEven = bnpIsEven
1271 proto.exp = bnpExp
1272
1273 // public
1274 proto.toString = bnToString
1275 proto.negate = bnNegate
1276 proto.abs = bnAbs
1277 proto.compareTo = bnCompareTo
1278 proto.bitLength = bnBitLength
1279 proto.byteLength = bnByteLength
1280 proto.mod = bnMod
1281 proto.modPowInt = bnModPowInt
1282
1283 // (public)
1284 function bnClone() {
1285 var r = new BigInteger()
1286 this.copyTo(r)
1287 return r
1288 }
1289
1290 // (public) return value as integer
1291 function bnIntValue() {
1292 if (this.s < 0) {
1293 if (this.t == 1) return this[0] - this.DV
1294 else if (this.t == 0) return -1
1295 } else if (this.t == 1) return this[0]
1296 else if (this.t == 0) return 0
1297 // assumes 16 < DB < 32
1298 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1299 }
1300
1301 // (public) return value as byte
1302 function bnByteValue() {
1303 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1304 }
1305
1306 // (public) return value as short (assumes DB>=16)
1307 function bnShortValue() {
1308 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1309 }
1310
1311 // (protected) return x s.t. r^x < DV
1312 function bnpChunkSize(r) {
1313 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1314 }
1315
1316 // (public) 0 if this == 0, 1 if this > 0
1317 function bnSigNum() {
1318 if (this.s < 0) return -1
1319 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1320 else return 1
1321 }
1322
1323 // (protected) convert to radix string
1324 function bnpToRadix(b) {
1325 if (b == null) b = 10
1326 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1327 var cs = this.chunkSize(b)
1328 var a = Math.pow(b, cs)
1329 var d = nbv(a),
1330 y = new BigInteger(),
1331 z = new BigInteger(),
1332 r = ""
1333 this.divRemTo(d, y, z)
1334 while (y.signum() > 0) {
1335 r = (a + z.intValue())
1336 .toString(b)
1337 .substr(1) + r
1338 y.divRemTo(d, y, z)
1339 }
1340 return z.intValue()
1341 .toString(b) + r
1342 }
1343
1344 // (protected) convert from radix string
1345 function bnpFromRadix(s, b) {
1346 var self = this
1347 self.fromInt(0)
1348 if (b == null) b = 10
1349 var cs = self.chunkSize(b)
1350 var d = Math.pow(b, cs),
1351 mi = false,
1352 j = 0,
1353 w = 0
1354 for (var i = 0; i < s.length; ++i) {
1355 var x = intAt(s, i)
1356 if (x < 0) {
1357 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1358 continue
1359 }
1360 w = b * w + x
1361 if (++j >= cs) {
1362 self.dMultiply(d)
1363 self.dAddOffset(w, 0)
1364 j = 0
1365 w = 0
1366 }
1367 }
1368 if (j > 0) {
1369 self.dMultiply(Math.pow(b, j))
1370 self.dAddOffset(w, 0)
1371 }
1372 if (mi) BigInteger.ZERO.subTo(self, self)
1373 }
1374
1375 // (protected) alternate constructor
1376 function bnpFromNumber(a, b, c) {
1377 var self = this
1378 if ("number" == typeof b) {
1379 // new BigInteger(int,int,RNG)
1380 if (a < 2) self.fromInt(1)
1381 else {
1382 self.fromNumber(a, c)
1383 if (!self.testBit(a - 1)) // force MSB set
1384 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1385 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1386 while (!self.isProbablePrime(b)) {
1387 self.dAddOffset(2, 0)
1388 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1389 }
1390 }
1391 } else {
1392 // new BigInteger(int,RNG)
1393 var x = new Array(),
1394 t = a & 7
1395 x.length = (a >> 3) + 1
1396 b.nextBytes(x)
1397 if (t > 0) x[0] &= ((1 << t) - 1)
1398 else x[0] = 0
1399 self.fromString(x, 256)
1400 }
1401 }
1402
1403 // (public) convert to bigendian byte array
1404 function bnToByteArray() {
1405 var self = this
1406 var i = self.t,
1407 r = new Array()
1408 r[0] = self.s
1409 var p = self.DB - (i * self.DB) % 8,
1410 d, k = 0
1411 if (i-- > 0) {
1412 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1413 r[k++] = d | (self.s << (self.DB - p))
1414 while (i >= 0) {
1415 if (p < 8) {
1416 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1417 d |= self[--i] >> (p += self.DB - 8)
1418 } else {
1419 d = (self[i] >> (p -= 8)) & 0xff
1420 if (p <= 0) {
1421 p += self.DB
1422 --i
1423 }
1424 }
1425 if ((d & 0x80) != 0) d |= -256
1426 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1427 if (k > 0 || d != self.s) r[k++] = d
1428 }
1429 }
1430 return r
1431 }
1432
1433 function bnEquals(a) {
1434 return (this.compareTo(a) == 0)
1435 }
1436
1437 function bnMin(a) {
1438 return (this.compareTo(a) < 0) ? this : a
1439 }
1440
1441 function bnMax(a) {
1442 return (this.compareTo(a) > 0) ? this : a
1443 }
1444
1445 // (protected) r = this op a (bitwise)
1446 function bnpBitwiseTo(a, op, r) {
1447 var self = this
1448 var i, f, m = Math.min(a.t, self.t)
1449 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1450 if (a.t < self.t) {
1451 f = a.s & self.DM
1452 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1453 r.t = self.t
1454 } else {
1455 f = self.s & self.DM
1456 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1457 r.t = a.t
1458 }
1459 r.s = op(self.s, a.s)
1460 r.clamp()
1461 }
1462
1463 // (public) this & a
1464 function op_and(x, y) {
1465 return x & y
1466 }
1467
1468 function bnAnd(a) {
1469 var r = new BigInteger()
1470 this.bitwiseTo(a, op_and, r)
1471 return r
1472 }
1473
1474 // (public) this | a
1475 function op_or(x, y) {
1476 return x | y
1477 }
1478
1479 function bnOr(a) {
1480 var r = new BigInteger()
1481 this.bitwiseTo(a, op_or, r)
1482 return r
1483 }
1484
1485 // (public) this ^ a
1486 function op_xor(x, y) {
1487 return x ^ y
1488 }
1489
1490 function bnXor(a) {
1491 var r = new BigInteger()
1492 this.bitwiseTo(a, op_xor, r)
1493 return r
1494 }
1495
1496 // (public) this & ~a
1497 function op_andnot(x, y) {
1498 return x & ~y
1499 }
1500
1501 function bnAndNot(a) {
1502 var r = new BigInteger()
1503 this.bitwiseTo(a, op_andnot, r)
1504 return r
1505 }
1506
1507 // (public) ~this
1508 function bnNot() {
1509 var r = new BigInteger()
1510 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1511 r.t = this.t
1512 r.s = ~this.s
1513 return r
1514 }
1515
1516 // (public) this << n
1517 function bnShiftLeft(n) {
1518 var r = new BigInteger()
1519 if (n < 0) this.rShiftTo(-n, r)
1520 else this.lShiftTo(n, r)
1521 return r
1522 }
1523
1524 // (public) this >> n
1525 function bnShiftRight(n) {
1526 var r = new BigInteger()
1527 if (n < 0) this.lShiftTo(-n, r)
1528 else this.rShiftTo(n, r)
1529 return r
1530 }
1531
1532 // return index of lowest 1-bit in x, x < 2^31
1533 function lbit(x) {
1534 if (x == 0) return -1
1535 var r = 0
1536 if ((x & 0xffff) == 0) {
1537 x >>= 16
1538 r += 16
1539 }
1540 if ((x & 0xff) == 0) {
1541 x >>= 8
1542 r += 8
1543 }
1544 if ((x & 0xf) == 0) {
1545 x >>= 4
1546 r += 4
1547 }
1548 if ((x & 3) == 0) {
1549 x >>= 2
1550 r += 2
1551 }
1552 if ((x & 1) == 0)++r
1553 return r
1554 }
1555
1556 // (public) returns index of lowest 1-bit (or -1 if none)
1557 function bnGetLowestSetBit() {
1558 for (var i = 0; i < this.t; ++i)
1559 if (this[i] != 0) return i * this.DB + lbit(this[i])
1560 if (this.s < 0) return this.t * this.DB
1561 return -1
1562 }
1563
1564 // return number of 1 bits in x
1565 function cbit(x) {
1566 var r = 0
1567 while (x != 0) {
1568 x &= x - 1
1569 ++r
1570 }
1571 return r
1572 }
1573
1574 // (public) return number of set bits
1575 function bnBitCount() {
1576 var r = 0,
1577 x = this.s & this.DM
1578 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1579 return r
1580 }
1581
1582 // (public) true iff nth bit is set
1583 function bnTestBit(n) {
1584 var j = Math.floor(n / this.DB)
1585 if (j >= this.t) return (this.s != 0)
1586 return ((this[j] & (1 << (n % this.DB))) != 0)
1587 }
1588
1589 // (protected) this op (1<<n)
1590 function bnpChangeBit(n, op) {
1591 var r = BigInteger.ONE.shiftLeft(n)
1592 this.bitwiseTo(r, op, r)
1593 return r
1594 }
1595
1596 // (public) this | (1<<n)
1597 function bnSetBit(n) {
1598 return this.changeBit(n, op_or)
1599 }
1600
1601 // (public) this & ~(1<<n)
1602 function bnClearBit(n) {
1603 return this.changeBit(n, op_andnot)
1604 }
1605
1606 // (public) this ^ (1<<n)
1607 function bnFlipBit(n) {
1608 return this.changeBit(n, op_xor)
1609 }
1610
1611 // (protected) r = this + a
1612 function bnpAddTo(a, r) {
1613 var self = this
1614
1615 var i = 0,
1616 c = 0,
1617 m = Math.min(a.t, self.t)
1618 while (i < m) {
1619 c += self[i] + a[i]
1620 r[i++] = c & self.DM
1621 c >>= self.DB
1622 }
1623 if (a.t < self.t) {
1624 c += a.s
1625 while (i < self.t) {
1626 c += self[i]
1627 r[i++] = c & self.DM
1628 c >>= self.DB
1629 }
1630 c += self.s
1631 } else {
1632 c += self.s
1633 while (i < a.t) {
1634 c += a[i]
1635 r[i++] = c & self.DM
1636 c >>= self.DB
1637 }
1638 c += a.s
1639 }
1640 r.s = (c < 0) ? -1 : 0
1641 if (c > 0) r[i++] = c
1642 else if (c < -1) r[i++] = self.DV + c
1643 r.t = i
1644 r.clamp()
1645 }
1646
1647 // (public) this + a
1648 function bnAdd(a) {
1649 var r = new BigInteger()
1650 this.addTo(a, r)
1651 return r
1652 }
1653
1654 // (public) this - a
1655 function bnSubtract(a) {
1656 var r = new BigInteger()
1657 this.subTo(a, r)
1658 return r
1659 }
1660
1661 // (public) this * a
1662 function bnMultiply(a) {
1663 var r = new BigInteger()
1664 this.multiplyTo(a, r)
1665 return r
1666 }
1667
1668 // (public) this^2
1669 function bnSquare() {
1670 var r = new BigInteger()
1671 this.squareTo(r)
1672 return r
1673 }
1674
1675 // (public) this / a
1676 function bnDivide(a) {
1677 var r = new BigInteger()
1678 this.divRemTo(a, r, null)
1679 return r
1680 }
1681
1682 // (public) this % a
1683 function bnRemainder(a) {
1684 var r = new BigInteger()
1685 this.divRemTo(a, null, r)
1686 return r
1687 }
1688
1689 // (public) [this/a,this%a]
1690 function bnDivideAndRemainder(a) {
1691 var q = new BigInteger(),
1692 r = new BigInteger()
1693 this.divRemTo(a, q, r)
1694 return new Array(q, r)
1695 }
1696
1697 // (protected) this *= n, this >= 0, 1 < n < DV
1698 function bnpDMultiply(n) {
1699 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1700 ++this.t
1701 this.clamp()
1702 }
1703
1704 // (protected) this += n << w words, this >= 0
1705 function bnpDAddOffset(n, w) {
1706 if (n == 0) return
1707 while (this.t <= w) this[this.t++] = 0
1708 this[w] += n
1709 while (this[w] >= this.DV) {
1710 this[w] -= this.DV
1711 if (++w >= this.t) this[this.t++] = 0
1712 ++this[w]
1713 }
1714 }
1715
1716 // A "null" reducer
1717 function NullExp() {}
1718
1719 function nNop(x) {
1720 return x
1721 }
1722
1723 function nMulTo(x, y, r) {
1724 x.multiplyTo(y, r)
1725 }
1726
1727 function nSqrTo(x, r) {
1728 x.squareTo(r)
1729 }
1730
1731 NullExp.prototype.convert = nNop
1732 NullExp.prototype.revert = nNop
1733 NullExp.prototype.mulTo = nMulTo
1734 NullExp.prototype.sqrTo = nSqrTo
1735
1736 // (public) this^e
1737 function bnPow(e) {
1738 return this.exp(e, new NullExp())
1739 }
1740
1741 // (protected) r = lower n words of "this * a", a.t <= n
1742 // "this" should be the larger one if appropriate.
1743 function bnpMultiplyLowerTo(a, n, r) {
1744 var i = Math.min(this.t + a.t, n)
1745 r.s = 0; // assumes a,this >= 0
1746 r.t = i
1747 while (i > 0) r[--i] = 0
1748 var j
1749 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1750 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1751 r.clamp()
1752 }
1753
1754 // (protected) r = "this * a" without lower n words, n > 0
1755 // "this" should be the larger one if appropriate.
1756 function bnpMultiplyUpperTo(a, n, r) {
1757 --n
1758 var i = r.t = this.t + a.t - n
1759 r.s = 0; // assumes a,this >= 0
1760 while (--i >= 0) r[i] = 0
1761 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1762 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1763 r.clamp()
1764 r.drShiftTo(1, r)
1765 }
1766
1767 // Barrett modular reduction
1768 function Barrett(m) {
1769 // setup Barrett
1770 this.r2 = new BigInteger()
1771 this.q3 = new BigInteger()
1772 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1773 this.mu = this.r2.divide(m)
1774 this.m = m
1775 }
1776
1777 function barrettConvert(x) {
1778 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1779 else if (x.compareTo(this.m) < 0) return x
1780 else {
1781 var r = new BigInteger()
1782 x.copyTo(r)
1783 this.reduce(r)
1784 return r
1785 }
1786 }
1787
1788 function barrettRevert(x) {
1789 return x
1790 }
1791
1792 // x = x mod m (HAC 14.42)
1793 function barrettReduce(x) {
1794 var self = this
1795 x.drShiftTo(self.m.t - 1, self.r2)
1796 if (x.t > self.m.t + 1) {
1797 x.t = self.m.t + 1
1798 x.clamp()
1799 }
1800 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1801 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1802 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1803 x.subTo(self.r2, x)
1804 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1805 }
1806
1807 // r = x^2 mod m; x != r
1808 function barrettSqrTo(x, r) {
1809 x.squareTo(r)
1810 this.reduce(r)
1811 }
1812
1813 // r = x*y mod m; x,y != r
1814 function barrettMulTo(x, y, r) {
1815 x.multiplyTo(y, r)
1816 this.reduce(r)
1817 }
1818
1819 Barrett.prototype.convert = barrettConvert
1820 Barrett.prototype.revert = barrettRevert
1821 Barrett.prototype.reduce = barrettReduce
1822 Barrett.prototype.mulTo = barrettMulTo
1823 Barrett.prototype.sqrTo = barrettSqrTo
1824
1825 // (public) this^e % m (HAC 14.85)
1826 function bnModPow(e, m) {
1827 var i = e.bitLength(),
1828 k, r = nbv(1),
1829 z
1830 if (i <= 0) return r
1831 else if (i < 18) k = 1
1832 else if (i < 48) k = 3
1833 else if (i < 144) k = 4
1834 else if (i < 768) k = 5
1835 else k = 6
1836 if (i < 8)
1837 z = new Classic(m)
1838 else if (m.isEven())
1839 z = new Barrett(m)
1840 else
1841 z = new Montgomery(m)
1842
1843 // precomputation
1844 var g = new Array(),
1845 n = 3,
1846 k1 = k - 1,
1847 km = (1 << k) - 1
1848 g[1] = z.convert(this)
1849 if (k > 1) {
1850 var g2 = new BigInteger()
1851 z.sqrTo(g[1], g2)
1852 while (n <= km) {
1853 g[n] = new BigInteger()
1854 z.mulTo(g2, g[n - 2], g[n])
1855 n += 2
1856 }
1857 }
1858
1859 var j = e.t - 1,
1860 w, is1 = true,
1861 r2 = new BigInteger(),
1862 t
1863 i = nbits(e[j]) - 1
1864 while (j >= 0) {
1865 if (i >= k1) w = (e[j] >> (i - k1)) & km
1866 else {
1867 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1868 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1869 }
1870
1871 n = k
1872 while ((w & 1) == 0) {
1873 w >>= 1
1874 --n
1875 }
1876 if ((i -= n) < 0) {
1877 i += this.DB
1878 --j
1879 }
1880 if (is1) { // ret == 1, don't bother squaring or multiplying it
1881 g[w].copyTo(r)
1882 is1 = false
1883 } else {
1884 while (n > 1) {
1885 z.sqrTo(r, r2)
1886 z.sqrTo(r2, r)
1887 n -= 2
1888 }
1889 if (n > 0) z.sqrTo(r, r2)
1890 else {
1891 t = r
1892 r = r2
1893 r2 = t
1894 }
1895 z.mulTo(r2, g[w], r)
1896 }
1897
1898 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1899 z.sqrTo(r, r2)
1900 t = r
1901 r = r2
1902 r2 = t
1903 if (--i < 0) {
1904 i = this.DB - 1
1905 --j
1906 }
1907 }
1908 }
1909 return z.revert(r)
1910 }
1911
1912 // (public) gcd(this,a) (HAC 14.54)
1913 function bnGCD(a) {
1914 var x = (this.s < 0) ? this.negate() : this.clone()
1915 var y = (a.s < 0) ? a.negate() : a.clone()
1916 if (x.compareTo(y) < 0) {
1917 var t = x
1918 x = y
1919 y = t
1920 }
1921 var i = x.getLowestSetBit(),
1922 g = y.getLowestSetBit()
1923 if (g < 0) return x
1924 if (i < g) g = i
1925 if (g > 0) {
1926 x.rShiftTo(g, x)
1927 y.rShiftTo(g, y)
1928 }
1929 while (x.signum() > 0) {
1930 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1931 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1932 if (x.compareTo(y) >= 0) {
1933 x.subTo(y, x)
1934 x.rShiftTo(1, x)
1935 } else {
1936 y.subTo(x, y)
1937 y.rShiftTo(1, y)
1938 }
1939 }
1940 if (g > 0) y.lShiftTo(g, y)
1941 return y
1942 }
1943
1944 // (protected) this % n, n < 2^26
1945 function bnpModInt(n) {
1946 if (n <= 0) return 0
1947 var d = this.DV % n,
1948 r = (this.s < 0) ? n - 1 : 0
1949 if (this.t > 0)
1950 if (d == 0) r = this[0] % n
1951 else
1952 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1953 return r
1954 }
1955
1956 // (public) 1/this % m (HAC 14.61)
1957 function bnModInverse(m) {
1958 var ac = m.isEven()
1959 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1960 var u = m.clone(),
1961 v = this.clone()
1962 var a = nbv(1),
1963 b = nbv(0),
1964 c = nbv(0),
1965 d = nbv(1)
1966 while (u.signum() != 0) {
1967 while (u.isEven()) {
1968 u.rShiftTo(1, u)
1969 if (ac) {
1970 if (!a.isEven() || !b.isEven()) {
1971 a.addTo(this, a)
1972 b.subTo(m, b)
1973 }
1974 a.rShiftTo(1, a)
1975 } else if (!b.isEven()) b.subTo(m, b)
1976 b.rShiftTo(1, b)
1977 }
1978 while (v.isEven()) {
1979 v.rShiftTo(1, v)
1980 if (ac) {
1981 if (!c.isEven() || !d.isEven()) {
1982 c.addTo(this, c)
1983 d.subTo(m, d)
1984 }
1985 c.rShiftTo(1, c)
1986 } else if (!d.isEven()) d.subTo(m, d)
1987 d.rShiftTo(1, d)
1988 }
1989 if (u.compareTo(v) >= 0) {
1990 u.subTo(v, u)
1991 if (ac) a.subTo(c, a)
1992 b.subTo(d, b)
1993 } else {
1994 v.subTo(u, v)
1995 if (ac) c.subTo(a, c)
1996 d.subTo(b, d)
1997 }
1998 }
1999 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2000 if (d.compareTo(m) >= 0) return d.subtract(m)
2001 if (d.signum() < 0) d.addTo(m, d)
2002 else return d
2003 if (d.signum() < 0) return d.add(m)
2004 else return d
2005 }
2006
2007 var lowprimes = [
2008 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2009 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2010 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2011 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2012 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2013 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2014 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2015 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2016 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2017 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2018 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2019 ]
2020
2021 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2022
2023 // (public) test primality with certainty >= 1-.5^t
2024 function bnIsProbablePrime(t) {
2025 var i, x = this.abs()
2026 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2027 for (i = 0; i < lowprimes.length; ++i)
2028 if (x[0] == lowprimes[i]) return true
2029 return false
2030 }
2031 if (x.isEven()) return false
2032 i = 1
2033 while (i < lowprimes.length) {
2034 var m = lowprimes[i],
2035 j = i + 1
2036 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2037 m = x.modInt(m)
2038 while (i < j) if (m % lowprimes[i++] == 0) return false
2039 }
2040 return x.millerRabin(t)
2041 }
2042
2043 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2044 function bnpMillerRabin(t) {
2045 var n1 = this.subtract(BigInteger.ONE)
2046 var k = n1.getLowestSetBit()
2047 if (k <= 0) return false
2048 var r = n1.shiftRight(k)
2049 t = (t + 1) >> 1
2050 if (t > lowprimes.length) t = lowprimes.length
2051 var a = new BigInteger(null)
2052 var j, bases = []
2053 for (var i = 0; i < t; ++i) {
2054 for (;;) {
2055 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2056 if (bases.indexOf(j) == -1) break
2057 }
2058 bases.push(j)
2059 a.fromInt(j)
2060 var y = a.modPow(r, this)
2061 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2062 var j = 1
2063 while (j++ < k && y.compareTo(n1) != 0) {
2064 y = y.modPowInt(2, this)
2065 if (y.compareTo(BigInteger.ONE) == 0) return false
2066 }
2067 if (y.compareTo(n1) != 0) return false
2068 }
2069 }
2070 return true
2071 }
2072
2073 // protected
2074 proto.chunkSize = bnpChunkSize
2075 proto.toRadix = bnpToRadix
2076 proto.fromRadix = bnpFromRadix
2077 proto.fromNumber = bnpFromNumber
2078 proto.bitwiseTo = bnpBitwiseTo
2079 proto.changeBit = bnpChangeBit
2080 proto.addTo = bnpAddTo
2081 proto.dMultiply = bnpDMultiply
2082 proto.dAddOffset = bnpDAddOffset
2083 proto.multiplyLowerTo = bnpMultiplyLowerTo
2084 proto.multiplyUpperTo = bnpMultiplyUpperTo
2085 proto.modInt = bnpModInt
2086 proto.millerRabin = bnpMillerRabin
2087
2088 // public
2089 proto.clone = bnClone
2090 proto.intValue = bnIntValue
2091 proto.byteValue = bnByteValue
2092 proto.shortValue = bnShortValue
2093 proto.signum = bnSigNum
2094 proto.toByteArray = bnToByteArray
2095 proto.equals = bnEquals
2096 proto.min = bnMin
2097 proto.max = bnMax
2098 proto.and = bnAnd
2099 proto.or = bnOr
2100 proto.xor = bnXor
2101 proto.andNot = bnAndNot
2102 proto.not = bnNot
2103 proto.shiftLeft = bnShiftLeft
2104 proto.shiftRight = bnShiftRight
2105 proto.getLowestSetBit = bnGetLowestSetBit
2106 proto.bitCount = bnBitCount
2107 proto.testBit = bnTestBit
2108 proto.setBit = bnSetBit
2109 proto.clearBit = bnClearBit
2110 proto.flipBit = bnFlipBit
2111 proto.add = bnAdd
2112 proto.subtract = bnSubtract
2113 proto.multiply = bnMultiply
2114 proto.divide = bnDivide
2115 proto.remainder = bnRemainder
2116 proto.divideAndRemainder = bnDivideAndRemainder
2117 proto.modPow = bnModPow
2118 proto.modInverse = bnModInverse
2119 proto.pow = bnPow
2120 proto.gcd = bnGCD
2121 proto.isProbablePrime = bnIsProbablePrime
2122
2123 // JSBN-specific extension
2124 proto.square = bnSquare
2125
2126 // constants
2127 BigInteger.ZERO = nbv(0)
2128 BigInteger.ONE = nbv(1)
2129 BigInteger.valueOf = nbv
2130
2131 module.exports = BigInteger
2132
2133 },{"../package.json":4}],2:[function(require,module,exports){
2134 (function (Buffer){
2135 // FIXME: Kind of a weird way to throw exceptions, consider removing
2136 var assert = require('assert')
2137 var BigInteger = require('./bigi')
2138
2139 /**
2140 * Turns a byte array into a big integer.
2141 *
2142 * This function will interpret a byte array as a big integer in big
2143 * endian notation.
2144 */
2145 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2146 // BigInteger expects a DER integer conformant byte array
2147 if (byteArray[0] & 0x80) {
2148 return new BigInteger([0].concat(byteArray))
2149 }
2150
2151 return new BigInteger(byteArray)
2152 }
2153
2154 /**
2155 * Returns a byte array representation of the big integer.
2156 *
2157 * This returns the absolute of the contained value in big endian
2158 * form. A value of zero results in an empty array.
2159 */
2160 BigInteger.prototype.toByteArrayUnsigned = function() {
2161 var byteArray = this.toByteArray()
2162 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2163 }
2164
2165 BigInteger.fromDERInteger = function(byteArray) {
2166 return new BigInteger(byteArray)
2167 }
2168
2169 /*
2170 * Converts BigInteger to a DER integer representation.
2171 *
2172 * The format for this value uses the most significant bit as a sign
2173 * bit. If the most significant bit is already set and the integer is
2174 * positive, a 0x00 is prepended.
2175 *
2176 * Examples:
2177 *
2178 * 0 => 0x00
2179 * 1 => 0x01
2180 * -1 => 0xff
2181 * 127 => 0x7f
2182 * -127 => 0x81
2183 * 128 => 0x0080
2184 * -128 => 0x80
2185 * 255 => 0x00ff
2186 * -255 => 0xff01
2187 * 16300 => 0x3fac
2188 * -16300 => 0xc054
2189 * 62300 => 0x00f35c
2190 * -62300 => 0xff0ca4
2191 */
2192 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2193
2194 BigInteger.fromBuffer = function(buffer) {
2195 // BigInteger expects a DER integer conformant byte array
2196 if (buffer[0] & 0x80) {
2197 var byteArray = Array.prototype.slice.call(buffer)
2198
2199 return new BigInteger([0].concat(byteArray))
2200 }
2201
2202 return new BigInteger(buffer)
2203 }
2204
2205 BigInteger.fromHex = function(hex) {
2206 if (hex === '') return BigInteger.ZERO
2207
2208 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2209 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2210 return new BigInteger(hex, 16)
2211 }
2212
2213 BigInteger.prototype.toBuffer = function(size) {
2214 var byteArray = this.toByteArrayUnsigned()
2215 var zeros = []
2216
2217 var padding = size - byteArray.length
2218 while (zeros.length < padding) zeros.push(0)
2219
2220 return new Buffer(zeros.concat(byteArray))
2221 }
2222
2223 BigInteger.prototype.toHex = function(size) {
2224 return this.toBuffer(size).toString('hex')
2225 }
2226
2227 }).call(this,require("buffer").Buffer)
2228 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2229 var BigInteger = require('./bigi')
2230
2231 //addons
2232 require('./convert')
2233
2234 module.exports = BigInteger
2235 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2236 module.exports={
2237 "name": "bigi",
2238 "version": "1.4.0",
2239 "description": "Big integers.",
2240 "keywords": [
2241 "cryptography",
2242 "math",
2243 "bitcoin",
2244 "arbitrary",
2245 "precision",
2246 "arithmetic",
2247 "big",
2248 "integer",
2249 "int",
2250 "number",
2251 "biginteger",
2252 "bigint",
2253 "bignumber",
2254 "decimal",
2255 "float"
2256 ],
2257 "devDependencies": {
2258 "mocha": "^1.20.1",
2259 "jshint": "^2.5.1",
2260 "coveralls": "^2.10.0",
2261 "istanbul": "^0.2.11"
2262 },
2263 "repository": {
2264 "url": "https://github.com/cryptocoinjs/bigi",
2265 "type": "git"
2266 },
2267 "main": "./lib/index.js",
2268 "scripts": {
2269 "test": "_mocha -- test/*.js",
2270 "jshint": "jshint --config jshint.json lib/*.js ; true",
2271 "unit": "mocha",
2272 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2273 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2274 },
2275 "dependencies": {},
2276 "testling": {
2277 "files": "test/*.js",
2278 "harness": "mocha",
2279 "browsers": [
2280 "ie/9..latest",
2281 "firefox/latest",
2282 "chrome/latest",
2283 "safari/6.0..latest",
2284 "iphone/6.0..latest",
2285 "android-browser/4.2..latest"
2286 ]
2287 },
2288 "bugs": {
2289 "url": "https://github.com/cryptocoinjs/bigi/issues"
2290 },
2291 "homepage": "https://github.com/cryptocoinjs/bigi",
2292 "_id": "bigi@1.4.0",
2293 "dist": {
2294 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2295 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2296 },
2297 "_from": "bigi@^1.4.0",
2298 "_npmVersion": "1.4.3",
2299 "_npmUser": {
2300 "name": "jp",
2301 "email": "jprichardson@gmail.com"
2302 },
2303 "maintainers": [
2304 {
2305 "name": "jp",
2306 "email": "jprichardson@gmail.com"
2307 },
2308 {
2309 "name": "midnightlightning",
2310 "email": "boydb@midnightdesign.ws"
2311 },
2312 {
2313 "name": "sidazhang",
2314 "email": "sidazhang89@gmail.com"
2315 },
2316 {
2317 "name": "nadav",
2318 "email": "npm@shesek.info"
2319 }
2320 ],
2321 "directories": {},
2322 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2323 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2324 }
2325
2326 },{}],5:[function(require,module,exports){
2327 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2328 //
2329 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2330 //
2331 // Originally from narwhal.js (http://narwhaljs.org)
2332 // Copyright (c) 2009 Thomas Robinson <280north.com>
2333 //
2334 // Permission is hereby granted, free of charge, to any person obtaining a copy
2335 // of this software and associated documentation files (the 'Software'), to
2336 // deal in the Software without restriction, including without limitation the
2337 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2338 // sell copies of the Software, and to permit persons to whom the Software is
2339 // furnished to do so, subject to the following conditions:
2340 //
2341 // The above copyright notice and this permission notice shall be included in
2342 // all copies or substantial portions of the Software.
2343 //
2344 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2345 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2346 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2347 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2348 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2349 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2350
2351 // when used in node, this will actually load the util module we depend on
2352 // versus loading the builtin util module as happens otherwise
2353 // this is a bug in node module loading as far as I am concerned
2354 var util = require('util/');
2355
2356 var pSlice = Array.prototype.slice;
2357 var hasOwn = Object.prototype.hasOwnProperty;
2358
2359 // 1. The assert module provides functions that throw
2360 // AssertionError's when particular conditions are not met. The
2361 // assert module must conform to the following interface.
2362
2363 var assert = module.exports = ok;
2364
2365 // 2. The AssertionError is defined in assert.
2366 // new assert.AssertionError({ message: message,
2367 // actual: actual,
2368 // expected: expected })
2369
2370 assert.AssertionError = function AssertionError(options) {
2371 this.name = 'AssertionError';
2372 this.actual = options.actual;
2373 this.expected = options.expected;
2374 this.operator = options.operator;
2375 if (options.message) {
2376 this.message = options.message;
2377 this.generatedMessage = false;
2378 } else {
2379 this.message = getMessage(this);
2380 this.generatedMessage = true;
2381 }
2382 var stackStartFunction = options.stackStartFunction || fail;
2383
2384 if (Error.captureStackTrace) {
2385 Error.captureStackTrace(this, stackStartFunction);
2386 }
2387 else {
2388 // non v8 browsers so we can have a stacktrace
2389 var err = new Error();
2390 if (err.stack) {
2391 var out = err.stack;
2392
2393 // try to strip useless frames
2394 var fn_name = stackStartFunction.name;
2395 var idx = out.indexOf('\n' + fn_name);
2396 if (idx >= 0) {
2397 // once we have located the function frame
2398 // we need to strip out everything before it (and its line)
2399 var next_line = out.indexOf('\n', idx + 1);
2400 out = out.substring(next_line + 1);
2401 }
2402
2403 this.stack = out;
2404 }
2405 }
2406 };
2407
2408 // assert.AssertionError instanceof Error
2409 util.inherits(assert.AssertionError, Error);
2410
2411 function replacer(key, value) {
2412 if (util.isUndefined(value)) {
2413 return '' + value;
2414 }
2415 if (util.isNumber(value) && !isFinite(value)) {
2416 return value.toString();
2417 }
2418 if (util.isFunction(value) || util.isRegExp(value)) {
2419 return value.toString();
2420 }
2421 return value;
2422 }
2423
2424 function truncate(s, n) {
2425 if (util.isString(s)) {
2426 return s.length < n ? s : s.slice(0, n);
2427 } else {
2428 return s;
2429 }
2430 }
2431
2432 function getMessage(self) {
2433 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2434 self.operator + ' ' +
2435 truncate(JSON.stringify(self.expected, replacer), 128);
2436 }
2437
2438 // At present only the three keys mentioned above are used and
2439 // understood by the spec. Implementations or sub modules can pass
2440 // other keys to the AssertionError's constructor - they will be
2441 // ignored.
2442
2443 // 3. All of the following functions must throw an AssertionError
2444 // when a corresponding condition is not met, with a message that
2445 // may be undefined if not provided. All assertion methods provide
2446 // both the actual and expected values to the assertion error for
2447 // display purposes.
2448
2449 function fail(actual, expected, message, operator, stackStartFunction) {
2450 throw new assert.AssertionError({
2451 message: message,
2452 actual: actual,
2453 expected: expected,
2454 operator: operator,
2455 stackStartFunction: stackStartFunction
2456 });
2457 }
2458
2459 // EXTENSION! allows for well behaved errors defined elsewhere.
2460 assert.fail = fail;
2461
2462 // 4. Pure assertion tests whether a value is truthy, as determined
2463 // by !!guard.
2464 // assert.ok(guard, message_opt);
2465 // This statement is equivalent to assert.equal(true, !!guard,
2466 // message_opt);. To test strictly for the value true, use
2467 // assert.strictEqual(true, guard, message_opt);.
2468
2469 function ok(value, message) {
2470 if (!value) fail(value, true, message, '==', assert.ok);
2471 }
2472 assert.ok = ok;
2473
2474 // 5. The equality assertion tests shallow, coercive equality with
2475 // ==.
2476 // assert.equal(actual, expected, message_opt);
2477
2478 assert.equal = function equal(actual, expected, message) {
2479 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2480 };
2481
2482 // 6. The non-equality assertion tests for whether two objects are not equal
2483 // with != assert.notEqual(actual, expected, message_opt);
2484
2485 assert.notEqual = function notEqual(actual, expected, message) {
2486 if (actual == expected) {
2487 fail(actual, expected, message, '!=', assert.notEqual);
2488 }
2489 };
2490
2491 // 7. The equivalence assertion tests a deep equality relation.
2492 // assert.deepEqual(actual, expected, message_opt);
2493
2494 assert.deepEqual = function deepEqual(actual, expected, message) {
2495 if (!_deepEqual(actual, expected)) {
2496 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2497 }
2498 };
2499
2500 function _deepEqual(actual, expected) {
2501 // 7.1. All identical values are equivalent, as determined by ===.
2502 if (actual === expected) {
2503 return true;
2504
2505 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2506 if (actual.length != expected.length) return false;
2507
2508 for (var i = 0; i < actual.length; i++) {
2509 if (actual[i] !== expected[i]) return false;
2510 }
2511
2512 return true;
2513
2514 // 7.2. If the expected value is a Date object, the actual value is
2515 // equivalent if it is also a Date object that refers to the same time.
2516 } else if (util.isDate(actual) && util.isDate(expected)) {
2517 return actual.getTime() === expected.getTime();
2518
2519 // 7.3 If the expected value is a RegExp object, the actual value is
2520 // equivalent if it is also a RegExp object with the same source and
2521 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2522 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2523 return actual.source === expected.source &&
2524 actual.global === expected.global &&
2525 actual.multiline === expected.multiline &&
2526 actual.lastIndex === expected.lastIndex &&
2527 actual.ignoreCase === expected.ignoreCase;
2528
2529 // 7.4. Other pairs that do not both pass typeof value == 'object',
2530 // equivalence is determined by ==.
2531 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2532 return actual == expected;
2533
2534 // 7.5 For all other Object pairs, including Array objects, equivalence is
2535 // determined by having the same number of owned properties (as verified
2536 // with Object.prototype.hasOwnProperty.call), the same set of keys
2537 // (although not necessarily the same order), equivalent values for every
2538 // corresponding key, and an identical 'prototype' property. Note: this
2539 // accounts for both named and indexed properties on Arrays.
2540 } else {
2541 return objEquiv(actual, expected);
2542 }
2543 }
2544
2545 function isArguments(object) {
2546 return Object.prototype.toString.call(object) == '[object Arguments]';
2547 }
2548
2549 function objEquiv(a, b) {
2550 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2551 return false;
2552 // an identical 'prototype' property.
2553 if (a.prototype !== b.prototype) return false;
2554 // if one is a primitive, the other must be same
2555 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2556 return a === b;
2557 }
2558 var aIsArgs = isArguments(a),
2559 bIsArgs = isArguments(b);
2560 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2561 return false;
2562 if (aIsArgs) {
2563 a = pSlice.call(a);
2564 b = pSlice.call(b);
2565 return _deepEqual(a, b);
2566 }
2567 var ka = objectKeys(a),
2568 kb = objectKeys(b),
2569 key, i;
2570 // having the same number of owned properties (keys incorporates
2571 // hasOwnProperty)
2572 if (ka.length != kb.length)
2573 return false;
2574 //the same set of keys (although not necessarily the same order),
2575 ka.sort();
2576 kb.sort();
2577 //~~~cheap key test
2578 for (i = ka.length - 1; i >= 0; i--) {
2579 if (ka[i] != kb[i])
2580 return false;
2581 }
2582 //equivalent values for every corresponding key, and
2583 //~~~possibly expensive deep test
2584 for (i = ka.length - 1; i >= 0; i--) {
2585 key = ka[i];
2586 if (!_deepEqual(a[key], b[key])) return false;
2587 }
2588 return true;
2589 }
2590
2591 // 8. The non-equivalence assertion tests for any deep inequality.
2592 // assert.notDeepEqual(actual, expected, message_opt);
2593
2594 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2595 if (_deepEqual(actual, expected)) {
2596 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2597 }
2598 };
2599
2600 // 9. The strict equality assertion tests strict equality, as determined by ===.
2601 // assert.strictEqual(actual, expected, message_opt);
2602
2603 assert.strictEqual = function strictEqual(actual, expected, message) {
2604 if (actual !== expected) {
2605 fail(actual, expected, message, '===', assert.strictEqual);
2606 }
2607 };
2608
2609 // 10. The strict non-equality assertion tests for strict inequality, as
2610 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2611
2612 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2613 if (actual === expected) {
2614 fail(actual, expected, message, '!==', assert.notStrictEqual);
2615 }
2616 };
2617
2618 function expectedException(actual, expected) {
2619 if (!actual || !expected) {
2620 return false;
2621 }
2622
2623 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2624 return expected.test(actual);
2625 } else if (actual instanceof expected) {
2626 return true;
2627 } else if (expected.call({}, actual) === true) {
2628 return true;
2629 }
2630
2631 return false;
2632 }
2633
2634 function _throws(shouldThrow, block, expected, message) {
2635 var actual;
2636
2637 if (util.isString(expected)) {
2638 message = expected;
2639 expected = null;
2640 }
2641
2642 try {
2643 block();
2644 } catch (e) {
2645 actual = e;
2646 }
2647
2648 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2649 (message ? ' ' + message : '.');
2650
2651 if (shouldThrow && !actual) {
2652 fail(actual, expected, 'Missing expected exception' + message);
2653 }
2654
2655 if (!shouldThrow && expectedException(actual, expected)) {
2656 fail(actual, expected, 'Got unwanted exception' + message);
2657 }
2658
2659 if ((shouldThrow && actual && expected &&
2660 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2661 throw actual;
2662 }
2663 }
2664
2665 // 11. Expected to throw an error:
2666 // assert.throws(block, Error_opt, message_opt);
2667
2668 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2669 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2670 };
2671
2672 // EXTENSION! This is annoying to write outside this module.
2673 assert.doesNotThrow = function(block, /*optional*/message) {
2674 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2675 };
2676
2677 assert.ifError = function(err) { if (err) {throw err;}};
2678
2679 var objectKeys = Object.keys || function (obj) {
2680 var keys = [];
2681 for (var key in obj) {
2682 if (hasOwn.call(obj, key)) keys.push(key);
2683 }
2684 return keys;
2685 };
2686
2687 },{"util/":29}],6:[function(require,module,exports){
2688
2689 },{}],7:[function(require,module,exports){
2690 /*!
2691 * The buffer module from node.js, for the browser.
2692 *
2693 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2694 * @license MIT
2695 */
2696
2697 var base64 = require('base64-js')
2698 var ieee754 = require('ieee754')
2699 var isArray = require('is-array')
2700
2701 exports.Buffer = Buffer
2702 exports.SlowBuffer = SlowBuffer
2703 exports.INSPECT_MAX_BYTES = 50
2704 Buffer.poolSize = 8192 // not used by this implementation
2705
2706 var rootParent = {}
2707
2708 /**
2709 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2710 * === true Use Uint8Array implementation (fastest)
2711 * === false Use Object implementation (most compatible, even IE6)
2712 *
2713 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2714 * Opera 11.6+, iOS 4.2+.
2715 *
2716 * Due to various browser bugs, sometimes the Object implementation will be used even
2717 * when the browser supports typed arrays.
2718 *
2719 * Note:
2720 *
2721 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2722 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2723 *
2724 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2725 * on objects.
2726 *
2727 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2728 *
2729 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2730 * incorrect length in some situations.
2731
2732 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2733 * get the Object implementation, which is slower but behaves correctly.
2734 */
2735 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2736 function Bar () {}
2737 try {
2738 var arr = new Uint8Array(1)
2739 arr.foo = function () { return 42 }
2740 arr.constructor = Bar
2741 return arr.foo() === 42 && // typed array instances can be augmented
2742 arr.constructor === Bar && // constructor can be set
2743 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2744 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2745 } catch (e) {
2746 return false
2747 }
2748 })()
2749
2750 function kMaxLength () {
2751 return Buffer.TYPED_ARRAY_SUPPORT
2752 ? 0x7fffffff
2753 : 0x3fffffff
2754 }
2755
2756 /**
2757 * Class: Buffer
2758 * =============
2759 *
2760 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2761 * with function properties for all the node `Buffer` API functions. We use
2762 * `Uint8Array` so that square bracket notation works as expected -- it returns
2763 * a single octet.
2764 *
2765 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2766 * prototype.
2767 */
2768 function Buffer (arg) {
2769 if (!(this instanceof Buffer)) {
2770 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2771 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2772 return new Buffer(arg)
2773 }
2774
2775 this.length = 0
2776 this.parent = undefined
2777
2778 // Common case.
2779 if (typeof arg === 'number') {
2780 return fromNumber(this, arg)
2781 }
2782
2783 // Slightly less common case.
2784 if (typeof arg === 'string') {
2785 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2786 }
2787
2788 // Unusual.
2789 return fromObject(this, arg)
2790 }
2791
2792 function fromNumber (that, length) {
2793 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2794 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2795 for (var i = 0; i < length; i++) {
2796 that[i] = 0
2797 }
2798 }
2799 return that
2800 }
2801
2802 function fromString (that, string, encoding) {
2803 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2804
2805 // Assumption: byteLength() return value is always < kMaxLength.
2806 var length = byteLength(string, encoding) | 0
2807 that = allocate(that, length)
2808
2809 that.write(string, encoding)
2810 return that
2811 }
2812
2813 function fromObject (that, object) {
2814 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2815
2816 if (isArray(object)) return fromArray(that, object)
2817
2818 if (object == null) {
2819 throw new TypeError('must start with number, buffer, array or string')
2820 }
2821
2822 if (typeof ArrayBuffer !== 'undefined') {
2823 if (object.buffer instanceof ArrayBuffer) {
2824 return fromTypedArray(that, object)
2825 }
2826 if (object instanceof ArrayBuffer) {
2827 return fromArrayBuffer(that, object)
2828 }
2829 }
2830
2831 if (object.length) return fromArrayLike(that, object)
2832
2833 return fromJsonObject(that, object)
2834 }
2835
2836 function fromBuffer (that, buffer) {
2837 var length = checked(buffer.length) | 0
2838 that = allocate(that, length)
2839 buffer.copy(that, 0, 0, length)
2840 return that
2841 }
2842
2843 function fromArray (that, array) {
2844 var length = checked(array.length) | 0
2845 that = allocate(that, length)
2846 for (var i = 0; i < length; i += 1) {
2847 that[i] = array[i] & 255
2848 }
2849 return that
2850 }
2851
2852 // Duplicate of fromArray() to keep fromArray() monomorphic.
2853 function fromTypedArray (that, array) {
2854 var length = checked(array.length) | 0
2855 that = allocate(that, length)
2856 // Truncating the elements is probably not what people expect from typed
2857 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2858 // of the old Buffer constructor.
2859 for (var i = 0; i < length; i += 1) {
2860 that[i] = array[i] & 255
2861 }
2862 return that
2863 }
2864
2865 function fromArrayBuffer (that, array) {
2866 if (Buffer.TYPED_ARRAY_SUPPORT) {
2867 // Return an augmented `Uint8Array` instance, for best performance
2868 array.byteLength
2869 that = Buffer._augment(new Uint8Array(array))
2870 } else {
2871 // Fallback: Return an object instance of the Buffer class
2872 that = fromTypedArray(that, new Uint8Array(array))
2873 }
2874 return that
2875 }
2876
2877 function fromArrayLike (that, array) {
2878 var length = checked(array.length) | 0
2879 that = allocate(that, length)
2880 for (var i = 0; i < length; i += 1) {
2881 that[i] = array[i] & 255
2882 }
2883 return that
2884 }
2885
2886 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2887 // Returns a zero-length buffer for inputs that don't conform to the spec.
2888 function fromJsonObject (that, object) {
2889 var array
2890 var length = 0
2891
2892 if (object.type === 'Buffer' && isArray(object.data)) {
2893 array = object.data
2894 length = checked(array.length) | 0
2895 }
2896 that = allocate(that, length)
2897
2898 for (var i = 0; i < length; i += 1) {
2899 that[i] = array[i] & 255
2900 }
2901 return that
2902 }
2903
2904 function allocate (that, length) {
2905 if (Buffer.TYPED_ARRAY_SUPPORT) {
2906 // Return an augmented `Uint8Array` instance, for best performance
2907 that = Buffer._augment(new Uint8Array(length))
2908 } else {
2909 // Fallback: Return an object instance of the Buffer class
2910 that.length = length
2911 that._isBuffer = true
2912 }
2913
2914 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2915 if (fromPool) that.parent = rootParent
2916
2917 return that
2918 }
2919
2920 function checked (length) {
2921 // Note: cannot use `length < kMaxLength` here because that fails when
2922 // length is NaN (which is otherwise coerced to zero.)
2923 if (length >= kMaxLength()) {
2924 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2925 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2926 }
2927 return length | 0
2928 }
2929
2930 function SlowBuffer (subject, encoding) {
2931 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2932
2933 var buf = new Buffer(subject, encoding)
2934 delete buf.parent
2935 return buf
2936 }
2937
2938 Buffer.isBuffer = function isBuffer (b) {
2939 return !!(b != null && b._isBuffer)
2940 }
2941
2942 Buffer.compare = function compare (a, b) {
2943 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2944 throw new TypeError('Arguments must be Buffers')
2945 }
2946
2947 if (a === b) return 0
2948
2949 var x = a.length
2950 var y = b.length
2951
2952 var i = 0
2953 var len = Math.min(x, y)
2954 while (i < len) {
2955 if (a[i] !== b[i]) break
2956
2957 ++i
2958 }
2959
2960 if (i !== len) {
2961 x = a[i]
2962 y = b[i]
2963 }
2964
2965 if (x < y) return -1
2966 if (y < x) return 1
2967 return 0
2968 }
2969
2970 Buffer.isEncoding = function isEncoding (encoding) {
2971 switch (String(encoding).toLowerCase()) {
2972 case 'hex':
2973 case 'utf8':
2974 case 'utf-8':
2975 case 'ascii':
2976 case 'binary':
2977 case 'base64':
2978 case 'raw':
2979 case 'ucs2':
2980 case 'ucs-2':
2981 case 'utf16le':
2982 case 'utf-16le':
2983 return true
2984 default:
2985 return false
2986 }
2987 }
2988
2989 Buffer.concat = function concat (list, length) {
2990 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2991
2992 if (list.length === 0) {
2993 return new Buffer(0)
2994 }
2995
2996 var i
2997 if (length === undefined) {
2998 length = 0
2999 for (i = 0; i < list.length; i++) {
3000 length += list[i].length
3001 }
3002 }
3003
3004 var buf = new Buffer(length)
3005 var pos = 0
3006 for (i = 0; i < list.length; i++) {
3007 var item = list[i]
3008 item.copy(buf, pos)
3009 pos += item.length
3010 }
3011 return buf
3012 }
3013
3014 function byteLength (string, encoding) {
3015 if (typeof string !== 'string') string = '' + string
3016
3017 var len = string.length
3018 if (len === 0) return 0
3019
3020 // Use a for loop to avoid recursion
3021 var loweredCase = false
3022 for (;;) {
3023 switch (encoding) {
3024 case 'ascii':
3025 case 'binary':
3026 // Deprecated
3027 case 'raw':
3028 case 'raws':
3029 return len
3030 case 'utf8':
3031 case 'utf-8':
3032 return utf8ToBytes(string).length
3033 case 'ucs2':
3034 case 'ucs-2':
3035 case 'utf16le':
3036 case 'utf-16le':
3037 return len * 2
3038 case 'hex':
3039 return len >>> 1
3040 case 'base64':
3041 return base64ToBytes(string).length
3042 default:
3043 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3044 encoding = ('' + encoding).toLowerCase()
3045 loweredCase = true
3046 }
3047 }
3048 }
3049 Buffer.byteLength = byteLength
3050
3051 // pre-set for values that may exist in the future
3052 Buffer.prototype.length = undefined
3053 Buffer.prototype.parent = undefined
3054
3055 function slowToString (encoding, start, end) {
3056 var loweredCase = false
3057
3058 start = start | 0
3059 end = end === undefined || end === Infinity ? this.length : end | 0
3060
3061 if (!encoding) encoding = 'utf8'
3062 if (start < 0) start = 0
3063 if (end > this.length) end = this.length
3064 if (end <= start) return ''
3065
3066 while (true) {
3067 switch (encoding) {
3068 case 'hex':
3069 return hexSlice(this, start, end)
3070
3071 case 'utf8':
3072 case 'utf-8':
3073 return utf8Slice(this, start, end)
3074
3075 case 'ascii':
3076 return asciiSlice(this, start, end)
3077
3078 case 'binary':
3079 return binarySlice(this, start, end)
3080
3081 case 'base64':
3082 return base64Slice(this, start, end)
3083
3084 case 'ucs2':
3085 case 'ucs-2':
3086 case 'utf16le':
3087 case 'utf-16le':
3088 return utf16leSlice(this, start, end)
3089
3090 default:
3091 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3092 encoding = (encoding + '').toLowerCase()
3093 loweredCase = true
3094 }
3095 }
3096 }
3097
3098 Buffer.prototype.toString = function toString () {
3099 var length = this.length | 0
3100 if (length === 0) return ''
3101 if (arguments.length === 0) return utf8Slice(this, 0, length)
3102 return slowToString.apply(this, arguments)
3103 }
3104
3105 Buffer.prototype.equals = function equals (b) {
3106 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3107 if (this === b) return true
3108 return Buffer.compare(this, b) === 0
3109 }
3110
3111 Buffer.prototype.inspect = function inspect () {
3112 var str = ''
3113 var max = exports.INSPECT_MAX_BYTES
3114 if (this.length > 0) {
3115 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3116 if (this.length > max) str += ' ... '
3117 }
3118 return '<Buffer ' + str + '>'
3119 }
3120
3121 Buffer.prototype.compare = function compare (b) {
3122 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3123 if (this === b) return 0
3124 return Buffer.compare(this, b)
3125 }
3126
3127 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3128 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3129 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3130 byteOffset >>= 0
3131
3132 if (this.length === 0) return -1
3133 if (byteOffset >= this.length) return -1
3134
3135 // Negative offsets start from the end of the buffer
3136 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3137
3138 if (typeof val === 'string') {
3139 if (val.length === 0) return -1 // special case: looking for empty string always fails
3140 return String.prototype.indexOf.call(this, val, byteOffset)
3141 }
3142 if (Buffer.isBuffer(val)) {
3143 return arrayIndexOf(this, val, byteOffset)
3144 }
3145 if (typeof val === 'number') {
3146 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3147 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3148 }
3149 return arrayIndexOf(this, [ val ], byteOffset)
3150 }
3151
3152 function arrayIndexOf (arr, val, byteOffset) {
3153 var foundIndex = -1
3154 for (var i = 0; byteOffset + i < arr.length; i++) {
3155 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3156 if (foundIndex === -1) foundIndex = i
3157 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3158 } else {
3159 foundIndex = -1
3160 }
3161 }
3162 return -1
3163 }
3164
3165 throw new TypeError('val must be string, number or Buffer')
3166 }
3167
3168 // `get` is deprecated
3169 Buffer.prototype.get = function get (offset) {
3170 console.log('.get() is deprecated. Access using array indexes instead.')
3171 return this.readUInt8(offset)
3172 }
3173
3174 // `set` is deprecated
3175 Buffer.prototype.set = function set (v, offset) {
3176 console.log('.set() is deprecated. Access using array indexes instead.')
3177 return this.writeUInt8(v, offset)
3178 }
3179
3180 function hexWrite (buf, string, offset, length) {
3181 offset = Number(offset) || 0
3182 var remaining = buf.length - offset
3183 if (!length) {
3184 length = remaining
3185 } else {
3186 length = Number(length)
3187 if (length > remaining) {
3188 length = remaining
3189 }
3190 }
3191
3192 // must be an even number of digits
3193 var strLen = string.length
3194 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3195
3196 if (length > strLen / 2) {
3197 length = strLen / 2
3198 }
3199 for (var i = 0; i < length; i++) {
3200 var parsed = parseInt(string.substr(i * 2, 2), 16)
3201 if (isNaN(parsed)) throw new Error('Invalid hex string')
3202 buf[offset + i] = parsed
3203 }
3204 return i
3205 }
3206
3207 function utf8Write (buf, string, offset, length) {
3208 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3209 }
3210
3211 function asciiWrite (buf, string, offset, length) {
3212 return blitBuffer(asciiToBytes(string), buf, offset, length)
3213 }
3214
3215 function binaryWrite (buf, string, offset, length) {
3216 return asciiWrite(buf, string, offset, length)
3217 }
3218
3219 function base64Write (buf, string, offset, length) {
3220 return blitBuffer(base64ToBytes(string), buf, offset, length)
3221 }
3222
3223 function ucs2Write (buf, string, offset, length) {
3224 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3225 }
3226
3227 Buffer.prototype.write = function write (string, offset, length, encoding) {
3228 // Buffer#write(string)
3229 if (offset === undefined) {
3230 encoding = 'utf8'
3231 length = this.length
3232 offset = 0
3233 // Buffer#write(string, encoding)
3234 } else if (length === undefined && typeof offset === 'string') {
3235 encoding = offset
3236 length = this.length
3237 offset = 0
3238 // Buffer#write(string, offset[, length][, encoding])
3239 } else if (isFinite(offset)) {
3240 offset = offset | 0
3241 if (isFinite(length)) {
3242 length = length | 0
3243 if (encoding === undefined) encoding = 'utf8'
3244 } else {
3245 encoding = length
3246 length = undefined
3247 }
3248 // legacy write(string, encoding, offset, length) - remove in v0.13
3249 } else {
3250 var swap = encoding
3251 encoding = offset
3252 offset = length | 0
3253 length = swap
3254 }
3255
3256 var remaining = this.length - offset
3257 if (length === undefined || length > remaining) length = remaining
3258
3259 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3260 throw new RangeError('attempt to write outside buffer bounds')
3261 }
3262
3263 if (!encoding) encoding = 'utf8'
3264
3265 var loweredCase = false
3266 for (;;) {
3267 switch (encoding) {
3268 case 'hex':
3269 return hexWrite(this, string, offset, length)
3270
3271 case 'utf8':
3272 case 'utf-8':
3273 return utf8Write(this, string, offset, length)
3274
3275 case 'ascii':
3276 return asciiWrite(this, string, offset, length)
3277
3278 case 'binary':
3279 return binaryWrite(this, string, offset, length)
3280
3281 case 'base64':
3282 // Warning: maxLength not taken into account in base64Write
3283 return base64Write(this, string, offset, length)
3284
3285 case 'ucs2':
3286 case 'ucs-2':
3287 case 'utf16le':
3288 case 'utf-16le':
3289 return ucs2Write(this, string, offset, length)
3290
3291 default:
3292 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3293 encoding = ('' + encoding).toLowerCase()
3294 loweredCase = true
3295 }
3296 }
3297 }
3298
3299 Buffer.prototype.toJSON = function toJSON () {
3300 return {
3301 type: 'Buffer',
3302 data: Array.prototype.slice.call(this._arr || this, 0)
3303 }
3304 }
3305
3306 function base64Slice (buf, start, end) {
3307 if (start === 0 && end === buf.length) {
3308 return base64.fromByteArray(buf)
3309 } else {
3310 return base64.fromByteArray(buf.slice(start, end))
3311 }
3312 }
3313
3314 function utf8Slice (buf, start, end) {
3315 end = Math.min(buf.length, end)
3316 var firstByte
3317 var secondByte
3318 var thirdByte
3319 var fourthByte
3320 var bytesPerSequence
3321 var tempCodePoint
3322 var codePoint
3323 var res = []
3324 var i = start
3325
3326 for (; i < end; i += bytesPerSequence) {
3327 firstByte = buf[i]
3328 codePoint = 0xFFFD
3329
3330 if (firstByte > 0xEF) {
3331 bytesPerSequence = 4
3332 } else if (firstByte > 0xDF) {
3333 bytesPerSequence = 3
3334 } else if (firstByte > 0xBF) {
3335 bytesPerSequence = 2
3336 } else {
3337 bytesPerSequence = 1
3338 }
3339
3340 if (i + bytesPerSequence <= end) {
3341 switch (bytesPerSequence) {
3342 case 1:
3343 if (firstByte < 0x80) {
3344 codePoint = firstByte
3345 }
3346 break
3347 case 2:
3348 secondByte = buf[i + 1]
3349 if ((secondByte & 0xC0) === 0x80) {
3350 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3351 if (tempCodePoint > 0x7F) {
3352 codePoint = tempCodePoint
3353 }
3354 }
3355 break
3356 case 3:
3357 secondByte = buf[i + 1]
3358 thirdByte = buf[i + 2]
3359 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3360 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3361 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3362 codePoint = tempCodePoint
3363 }
3364 }
3365 break
3366 case 4:
3367 secondByte = buf[i + 1]
3368 thirdByte = buf[i + 2]
3369 fourthByte = buf[i + 3]
3370 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3371 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3372 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3373 codePoint = tempCodePoint
3374 }
3375 }
3376 }
3377 }
3378
3379 if (codePoint === 0xFFFD) {
3380 // we generated an invalid codePoint so make sure to only advance by 1 byte
3381 bytesPerSequence = 1
3382 } else if (codePoint > 0xFFFF) {
3383 // encode to utf16 (surrogate pair dance)
3384 codePoint -= 0x10000
3385 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3386 codePoint = 0xDC00 | codePoint & 0x3FF
3387 }
3388
3389 res.push(codePoint)
3390 }
3391
3392 return String.fromCharCode.apply(String, res)
3393 }
3394
3395 function asciiSlice (buf, start, end) {
3396 var ret = ''
3397 end = Math.min(buf.length, end)
3398
3399 for (var i = start; i < end; i++) {
3400 ret += String.fromCharCode(buf[i] & 0x7F)
3401 }
3402 return ret
3403 }
3404
3405 function binarySlice (buf, start, end) {
3406 var ret = ''
3407 end = Math.min(buf.length, end)
3408
3409 for (var i = start; i < end; i++) {
3410 ret += String.fromCharCode(buf[i])
3411 }
3412 return ret
3413 }
3414
3415 function hexSlice (buf, start, end) {
3416 var len = buf.length
3417
3418 if (!start || start < 0) start = 0
3419 if (!end || end < 0 || end > len) end = len
3420
3421 var out = ''
3422 for (var i = start; i < end; i++) {
3423 out += toHex(buf[i])
3424 }
3425 return out
3426 }
3427
3428 function utf16leSlice (buf, start, end) {
3429 var bytes = buf.slice(start, end)
3430 var res = ''
3431 for (var i = 0; i < bytes.length; i += 2) {
3432 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3433 }
3434 return res
3435 }
3436
3437 Buffer.prototype.slice = function slice (start, end) {
3438 var len = this.length
3439 start = ~~start
3440 end = end === undefined ? len : ~~end
3441
3442 if (start < 0) {
3443 start += len
3444 if (start < 0) start = 0
3445 } else if (start > len) {
3446 start = len
3447 }
3448
3449 if (end < 0) {
3450 end += len
3451 if (end < 0) end = 0
3452 } else if (end > len) {
3453 end = len
3454 }
3455
3456 if (end < start) end = start
3457
3458 var newBuf
3459 if (Buffer.TYPED_ARRAY_SUPPORT) {
3460 newBuf = Buffer._augment(this.subarray(start, end))
3461 } else {
3462 var sliceLen = end - start
3463 newBuf = new Buffer(sliceLen, undefined)
3464 for (var i = 0; i < sliceLen; i++) {
3465 newBuf[i] = this[i + start]
3466 }
3467 }
3468
3469 if (newBuf.length) newBuf.parent = this.parent || this
3470
3471 return newBuf
3472 }
3473
3474 /*
3475 * Need to make sure that buffer isn't trying to write out of bounds.
3476 */
3477 function checkOffset (offset, ext, length) {
3478 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3479 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3480 }
3481
3482 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3483 offset = offset | 0
3484 byteLength = byteLength | 0
3485 if (!noAssert) checkOffset(offset, byteLength, this.length)
3486
3487 var val = this[offset]
3488 var mul = 1
3489 var i = 0
3490 while (++i < byteLength && (mul *= 0x100)) {
3491 val += this[offset + i] * mul
3492 }
3493
3494 return val
3495 }
3496
3497 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3498 offset = offset | 0
3499 byteLength = byteLength | 0
3500 if (!noAssert) {
3501 checkOffset(offset, byteLength, this.length)
3502 }
3503
3504 var val = this[offset + --byteLength]
3505 var mul = 1
3506 while (byteLength > 0 && (mul *= 0x100)) {
3507 val += this[offset + --byteLength] * mul
3508 }
3509
3510 return val
3511 }
3512
3513 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3514 if (!noAssert) checkOffset(offset, 1, this.length)
3515 return this[offset]
3516 }
3517
3518 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3519 if (!noAssert) checkOffset(offset, 2, this.length)
3520 return this[offset] | (this[offset + 1] << 8)
3521 }
3522
3523 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3524 if (!noAssert) checkOffset(offset, 2, this.length)
3525 return (this[offset] << 8) | this[offset + 1]
3526 }
3527
3528 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3529 if (!noAssert) checkOffset(offset, 4, this.length)
3530
3531 return ((this[offset]) |
3532 (this[offset + 1] << 8) |
3533 (this[offset + 2] << 16)) +
3534 (this[offset + 3] * 0x1000000)
3535 }
3536
3537 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3538 if (!noAssert) checkOffset(offset, 4, this.length)
3539
3540 return (this[offset] * 0x1000000) +
3541 ((this[offset + 1] << 16) |
3542 (this[offset + 2] << 8) |
3543 this[offset + 3])
3544 }
3545
3546 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3547 offset = offset | 0
3548 byteLength = byteLength | 0
3549 if (!noAssert) checkOffset(offset, byteLength, this.length)
3550
3551 var val = this[offset]
3552 var mul = 1
3553 var i = 0
3554 while (++i < byteLength && (mul *= 0x100)) {
3555 val += this[offset + i] * mul
3556 }
3557 mul *= 0x80
3558
3559 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3560
3561 return val
3562 }
3563
3564 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3565 offset = offset | 0
3566 byteLength = byteLength | 0
3567 if (!noAssert) checkOffset(offset, byteLength, this.length)
3568
3569 var i = byteLength
3570 var mul = 1
3571 var val = this[offset + --i]
3572 while (i > 0 && (mul *= 0x100)) {
3573 val += this[offset + --i] * mul
3574 }
3575 mul *= 0x80
3576
3577 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3578
3579 return val
3580 }
3581
3582 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3583 if (!noAssert) checkOffset(offset, 1, this.length)
3584 if (!(this[offset] & 0x80)) return (this[offset])
3585 return ((0xff - this[offset] + 1) * -1)
3586 }
3587
3588 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3589 if (!noAssert) checkOffset(offset, 2, this.length)
3590 var val = this[offset] | (this[offset + 1] << 8)
3591 return (val & 0x8000) ? val | 0xFFFF0000 : val
3592 }
3593
3594 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3595 if (!noAssert) checkOffset(offset, 2, this.length)
3596 var val = this[offset + 1] | (this[offset] << 8)
3597 return (val & 0x8000) ? val | 0xFFFF0000 : val
3598 }
3599
3600 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3601 if (!noAssert) checkOffset(offset, 4, this.length)
3602
3603 return (this[offset]) |
3604 (this[offset + 1] << 8) |
3605 (this[offset + 2] << 16) |
3606 (this[offset + 3] << 24)
3607 }
3608
3609 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3610 if (!noAssert) checkOffset(offset, 4, this.length)
3611
3612 return (this[offset] << 24) |
3613 (this[offset + 1] << 16) |
3614 (this[offset + 2] << 8) |
3615 (this[offset + 3])
3616 }
3617
3618 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3619 if (!noAssert) checkOffset(offset, 4, this.length)
3620 return ieee754.read(this, offset, true, 23, 4)
3621 }
3622
3623 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3624 if (!noAssert) checkOffset(offset, 4, this.length)
3625 return ieee754.read(this, offset, false, 23, 4)
3626 }
3627
3628 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3629 if (!noAssert) checkOffset(offset, 8, this.length)
3630 return ieee754.read(this, offset, true, 52, 8)
3631 }
3632
3633 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3634 if (!noAssert) checkOffset(offset, 8, this.length)
3635 return ieee754.read(this, offset, false, 52, 8)
3636 }
3637
3638 function checkInt (buf, value, offset, ext, max, min) {
3639 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3640 if (value > max || value < min) throw new RangeError('value is out of bounds')
3641 if (offset + ext > buf.length) throw new RangeError('index out of range')
3642 }
3643
3644 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3645 value = +value
3646 offset = offset | 0
3647 byteLength = byteLength | 0
3648 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3649
3650 var mul = 1
3651 var i = 0
3652 this[offset] = value & 0xFF
3653 while (++i < byteLength && (mul *= 0x100)) {
3654 this[offset + i] = (value / mul) & 0xFF
3655 }
3656
3657 return offset + byteLength
3658 }
3659
3660 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3661 value = +value
3662 offset = offset | 0
3663 byteLength = byteLength | 0
3664 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3665
3666 var i = byteLength - 1
3667 var mul = 1
3668 this[offset + i] = value & 0xFF
3669 while (--i >= 0 && (mul *= 0x100)) {
3670 this[offset + i] = (value / mul) & 0xFF
3671 }
3672
3673 return offset + byteLength
3674 }
3675
3676 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3677 value = +value
3678 offset = offset | 0
3679 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3680 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3681 this[offset] = value
3682 return offset + 1
3683 }
3684
3685 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3686 if (value < 0) value = 0xffff + value + 1
3687 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3688 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3689 (littleEndian ? i : 1 - i) * 8
3690 }
3691 }
3692
3693 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3694 value = +value
3695 offset = offset | 0
3696 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3697 if (Buffer.TYPED_ARRAY_SUPPORT) {
3698 this[offset] = value
3699 this[offset + 1] = (value >>> 8)
3700 } else {
3701 objectWriteUInt16(this, value, offset, true)
3702 }
3703 return offset + 2
3704 }
3705
3706 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3707 value = +value
3708 offset = offset | 0
3709 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3710 if (Buffer.TYPED_ARRAY_SUPPORT) {
3711 this[offset] = (value >>> 8)
3712 this[offset + 1] = value
3713 } else {
3714 objectWriteUInt16(this, value, offset, false)
3715 }
3716 return offset + 2
3717 }
3718
3719 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3720 if (value < 0) value = 0xffffffff + value + 1
3721 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3722 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3723 }
3724 }
3725
3726 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3727 value = +value
3728 offset = offset | 0
3729 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3730 if (Buffer.TYPED_ARRAY_SUPPORT) {
3731 this[offset + 3] = (value >>> 24)
3732 this[offset + 2] = (value >>> 16)
3733 this[offset + 1] = (value >>> 8)
3734 this[offset] = value
3735 } else {
3736 objectWriteUInt32(this, value, offset, true)
3737 }
3738 return offset + 4
3739 }
3740
3741 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3742 value = +value
3743 offset = offset | 0
3744 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3745 if (Buffer.TYPED_ARRAY_SUPPORT) {
3746 this[offset] = (value >>> 24)
3747 this[offset + 1] = (value >>> 16)
3748 this[offset + 2] = (value >>> 8)
3749 this[offset + 3] = value
3750 } else {
3751 objectWriteUInt32(this, value, offset, false)
3752 }
3753 return offset + 4
3754 }
3755
3756 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3757 value = +value
3758 offset = offset | 0
3759 if (!noAssert) {
3760 var limit = Math.pow(2, 8 * byteLength - 1)
3761
3762 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3763 }
3764
3765 var i = 0
3766 var mul = 1
3767 var sub = value < 0 ? 1 : 0
3768 this[offset] = value & 0xFF
3769 while (++i < byteLength && (mul *= 0x100)) {
3770 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3771 }
3772
3773 return offset + byteLength
3774 }
3775
3776 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3777 value = +value
3778 offset = offset | 0
3779 if (!noAssert) {
3780 var limit = Math.pow(2, 8 * byteLength - 1)
3781
3782 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3783 }
3784
3785 var i = byteLength - 1
3786 var mul = 1
3787 var sub = value < 0 ? 1 : 0
3788 this[offset + i] = value & 0xFF
3789 while (--i >= 0 && (mul *= 0x100)) {
3790 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3791 }
3792
3793 return offset + byteLength
3794 }
3795
3796 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3797 value = +value
3798 offset = offset | 0
3799 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3800 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3801 if (value < 0) value = 0xff + value + 1
3802 this[offset] = value
3803 return offset + 1
3804 }
3805
3806 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3807 value = +value
3808 offset = offset | 0
3809 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3810 if (Buffer.TYPED_ARRAY_SUPPORT) {
3811 this[offset] = value
3812 this[offset + 1] = (value >>> 8)
3813 } else {
3814 objectWriteUInt16(this, value, offset, true)
3815 }
3816 return offset + 2
3817 }
3818
3819 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3820 value = +value
3821 offset = offset | 0
3822 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3823 if (Buffer.TYPED_ARRAY_SUPPORT) {
3824 this[offset] = (value >>> 8)
3825 this[offset + 1] = value
3826 } else {
3827 objectWriteUInt16(this, value, offset, false)
3828 }
3829 return offset + 2
3830 }
3831
3832 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3833 value = +value
3834 offset = offset | 0
3835 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3836 if (Buffer.TYPED_ARRAY_SUPPORT) {
3837 this[offset] = value
3838 this[offset + 1] = (value >>> 8)
3839 this[offset + 2] = (value >>> 16)
3840 this[offset + 3] = (value >>> 24)
3841 } else {
3842 objectWriteUInt32(this, value, offset, true)
3843 }
3844 return offset + 4
3845 }
3846
3847 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3848 value = +value
3849 offset = offset | 0
3850 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3851 if (value < 0) value = 0xffffffff + value + 1
3852 if (Buffer.TYPED_ARRAY_SUPPORT) {
3853 this[offset] = (value >>> 24)
3854 this[offset + 1] = (value >>> 16)
3855 this[offset + 2] = (value >>> 8)
3856 this[offset + 3] = value
3857 } else {
3858 objectWriteUInt32(this, value, offset, false)
3859 }
3860 return offset + 4
3861 }
3862
3863 function checkIEEE754 (buf, value, offset, ext, max, min) {
3864 if (value > max || value < min) throw new RangeError('value is out of bounds')
3865 if (offset + ext > buf.length) throw new RangeError('index out of range')
3866 if (offset < 0) throw new RangeError('index out of range')
3867 }
3868
3869 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3870 if (!noAssert) {
3871 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3872 }
3873 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3874 return offset + 4
3875 }
3876
3877 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3878 return writeFloat(this, value, offset, true, noAssert)
3879 }
3880
3881 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3882 return writeFloat(this, value, offset, false, noAssert)
3883 }
3884
3885 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3886 if (!noAssert) {
3887 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3888 }
3889 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3890 return offset + 8
3891 }
3892
3893 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3894 return writeDouble(this, value, offset, true, noAssert)
3895 }
3896
3897 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3898 return writeDouble(this, value, offset, false, noAssert)
3899 }
3900
3901 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3902 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3903 if (!start) start = 0
3904 if (!end && end !== 0) end = this.length
3905 if (targetStart >= target.length) targetStart = target.length
3906 if (!targetStart) targetStart = 0
3907 if (end > 0 && end < start) end = start
3908
3909 // Copy 0 bytes; we're done
3910 if (end === start) return 0
3911 if (target.length === 0 || this.length === 0) return 0
3912
3913 // Fatal error conditions
3914 if (targetStart < 0) {
3915 throw new RangeError('targetStart out of bounds')
3916 }
3917 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3918 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3919
3920 // Are we oob?
3921 if (end > this.length) end = this.length
3922 if (target.length - targetStart < end - start) {
3923 end = target.length - targetStart + start
3924 }
3925
3926 var len = end - start
3927 var i
3928
3929 if (this === target && start < targetStart && targetStart < end) {
3930 // descending copy from end
3931 for (i = len - 1; i >= 0; i--) {
3932 target[i + targetStart] = this[i + start]
3933 }
3934 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3935 // ascending copy from start
3936 for (i = 0; i < len; i++) {
3937 target[i + targetStart] = this[i + start]
3938 }
3939 } else {
3940 target._set(this.subarray(start, start + len), targetStart)
3941 }
3942
3943 return len
3944 }
3945
3946 // fill(value, start=0, end=buffer.length)
3947 Buffer.prototype.fill = function fill (value, start, end) {
3948 if (!value) value = 0
3949 if (!start) start = 0
3950 if (!end) end = this.length
3951
3952 if (end < start) throw new RangeError('end < start')
3953
3954 // Fill 0 bytes; we're done
3955 if (end === start) return
3956 if (this.length === 0) return
3957
3958 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3959 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3960
3961 var i
3962 if (typeof value === 'number') {
3963 for (i = start; i < end; i++) {
3964 this[i] = value
3965 }
3966 } else {
3967 var bytes = utf8ToBytes(value.toString())
3968 var len = bytes.length
3969 for (i = start; i < end; i++) {
3970 this[i] = bytes[i % len]
3971 }
3972 }
3973
3974 return this
3975 }
3976
3977 /**
3978 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3979 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3980 */
3981 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3982 if (typeof Uint8Array !== 'undefined') {
3983 if (Buffer.TYPED_ARRAY_SUPPORT) {
3984 return (new Buffer(this)).buffer
3985 } else {
3986 var buf = new Uint8Array(this.length)
3987 for (var i = 0, len = buf.length; i < len; i += 1) {
3988 buf[i] = this[i]
3989 }
3990 return buf.buffer
3991 }
3992 } else {
3993 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3994 }
3995 }
3996
3997 // HELPER FUNCTIONS
3998 // ================
3999
4000 var BP = Buffer.prototype
4001
4002 /**
4003 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4004 */
4005 Buffer._augment = function _augment (arr) {
4006 arr.constructor = Buffer
4007 arr._isBuffer = true
4008
4009 // save reference to original Uint8Array set method before overwriting
4010 arr._set = arr.set
4011
4012 // deprecated
4013 arr.get = BP.get
4014 arr.set = BP.set
4015
4016 arr.write = BP.write
4017 arr.toString = BP.toString
4018 arr.toLocaleString = BP.toString
4019 arr.toJSON = BP.toJSON
4020 arr.equals = BP.equals
4021 arr.compare = BP.compare
4022 arr.indexOf = BP.indexOf
4023 arr.copy = BP.copy
4024 arr.slice = BP.slice
4025 arr.readUIntLE = BP.readUIntLE
4026 arr.readUIntBE = BP.readUIntBE
4027 arr.readUInt8 = BP.readUInt8
4028 arr.readUInt16LE = BP.readUInt16LE
4029 arr.readUInt16BE = BP.readUInt16BE
4030 arr.readUInt32LE = BP.readUInt32LE
4031 arr.readUInt32BE = BP.readUInt32BE
4032 arr.readIntLE = BP.readIntLE
4033 arr.readIntBE = BP.readIntBE
4034 arr.readInt8 = BP.readInt8
4035 arr.readInt16LE = BP.readInt16LE
4036 arr.readInt16BE = BP.readInt16BE
4037 arr.readInt32LE = BP.readInt32LE
4038 arr.readInt32BE = BP.readInt32BE
4039 arr.readFloatLE = BP.readFloatLE
4040 arr.readFloatBE = BP.readFloatBE
4041 arr.readDoubleLE = BP.readDoubleLE
4042 arr.readDoubleBE = BP.readDoubleBE
4043 arr.writeUInt8 = BP.writeUInt8
4044 arr.writeUIntLE = BP.writeUIntLE
4045 arr.writeUIntBE = BP.writeUIntBE
4046 arr.writeUInt16LE = BP.writeUInt16LE
4047 arr.writeUInt16BE = BP.writeUInt16BE
4048 arr.writeUInt32LE = BP.writeUInt32LE
4049 arr.writeUInt32BE = BP.writeUInt32BE
4050 arr.writeIntLE = BP.writeIntLE
4051 arr.writeIntBE = BP.writeIntBE
4052 arr.writeInt8 = BP.writeInt8
4053 arr.writeInt16LE = BP.writeInt16LE
4054 arr.writeInt16BE = BP.writeInt16BE
4055 arr.writeInt32LE = BP.writeInt32LE
4056 arr.writeInt32BE = BP.writeInt32BE
4057 arr.writeFloatLE = BP.writeFloatLE
4058 arr.writeFloatBE = BP.writeFloatBE
4059 arr.writeDoubleLE = BP.writeDoubleLE
4060 arr.writeDoubleBE = BP.writeDoubleBE
4061 arr.fill = BP.fill
4062 arr.inspect = BP.inspect
4063 arr.toArrayBuffer = BP.toArrayBuffer
4064
4065 return arr
4066 }
4067
4068 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4069
4070 function base64clean (str) {
4071 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4072 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4073 // Node converts strings with length < 2 to ''
4074 if (str.length < 2) return ''
4075 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4076 while (str.length % 4 !== 0) {
4077 str = str + '='
4078 }
4079 return str
4080 }
4081
4082 function stringtrim (str) {
4083 if (str.trim) return str.trim()
4084 return str.replace(/^\s+|\s+$/g, '')
4085 }
4086
4087 function toHex (n) {
4088 if (n < 16) return '0' + n.toString(16)
4089 return n.toString(16)
4090 }
4091
4092 function utf8ToBytes (string, units) {
4093 units = units || Infinity
4094 var codePoint
4095 var length = string.length
4096 var leadSurrogate = null
4097 var bytes = []
4098
4099 for (var i = 0; i < length; i++) {
4100 codePoint = string.charCodeAt(i)
4101
4102 // is surrogate component
4103 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4104 // last char was a lead
4105 if (!leadSurrogate) {
4106 // no lead yet
4107 if (codePoint > 0xDBFF) {
4108 // unexpected trail
4109 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4110 continue
4111
4112 } else if (i + 1 === length) {
4113 // unpaired lead
4114 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4115 continue
4116 }
4117
4118 // valid lead
4119 leadSurrogate = codePoint
4120
4121 continue
4122 }
4123
4124 // 2 leads in a row
4125 if (codePoint < 0xDC00) {
4126 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4127 leadSurrogate = codePoint
4128 continue
4129 }
4130
4131 // valid surrogate pair
4132 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4133
4134 } else if (leadSurrogate) {
4135 // valid bmp char, but last char was a lead
4136 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4137 }
4138
4139 leadSurrogate = null
4140
4141 // encode utf8
4142 if (codePoint < 0x80) {
4143 if ((units -= 1) < 0) break
4144 bytes.push(codePoint)
4145 } else if (codePoint < 0x800) {
4146 if ((units -= 2) < 0) break
4147 bytes.push(
4148 codePoint >> 0x6 | 0xC0,
4149 codePoint & 0x3F | 0x80
4150 )
4151 } else if (codePoint < 0x10000) {
4152 if ((units -= 3) < 0) break
4153 bytes.push(
4154 codePoint >> 0xC | 0xE0,
4155 codePoint >> 0x6 & 0x3F | 0x80,
4156 codePoint & 0x3F | 0x80
4157 )
4158 } else if (codePoint < 0x110000) {
4159 if ((units -= 4) < 0) break
4160 bytes.push(
4161 codePoint >> 0x12 | 0xF0,
4162 codePoint >> 0xC & 0x3F | 0x80,
4163 codePoint >> 0x6 & 0x3F | 0x80,
4164 codePoint & 0x3F | 0x80
4165 )
4166 } else {
4167 throw new Error('Invalid code point')
4168 }
4169 }
4170
4171 return bytes
4172 }
4173
4174 function asciiToBytes (str) {
4175 var byteArray = []
4176 for (var i = 0; i < str.length; i++) {
4177 // Node's code seems to be doing this and not & 0x7F..
4178 byteArray.push(str.charCodeAt(i) & 0xFF)
4179 }
4180 return byteArray
4181 }
4182
4183 function utf16leToBytes (str, units) {
4184 var c, hi, lo
4185 var byteArray = []
4186 for (var i = 0; i < str.length; i++) {
4187 if ((units -= 2) < 0) break
4188
4189 c = str.charCodeAt(i)
4190 hi = c >> 8
4191 lo = c % 256
4192 byteArray.push(lo)
4193 byteArray.push(hi)
4194 }
4195
4196 return byteArray
4197 }
4198
4199 function base64ToBytes (str) {
4200 return base64.toByteArray(base64clean(str))
4201 }
4202
4203 function blitBuffer (src, dst, offset, length) {
4204 for (var i = 0; i < length; i++) {
4205 if ((i + offset >= dst.length) || (i >= src.length)) break
4206 dst[i + offset] = src[i]
4207 }
4208 return i
4209 }
4210
4211 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4212 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4213
4214 ;(function (exports) {
4215 'use strict';
4216
4217 var Arr = (typeof Uint8Array !== 'undefined')
4218 ? Uint8Array
4219 : Array
4220
4221 var PLUS = '+'.charCodeAt(0)
4222 var SLASH = '/'.charCodeAt(0)
4223 var NUMBER = '0'.charCodeAt(0)
4224 var LOWER = 'a'.charCodeAt(0)
4225 var UPPER = 'A'.charCodeAt(0)
4226 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4227 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4228
4229 function decode (elt) {
4230 var code = elt.charCodeAt(0)
4231 if (code === PLUS ||
4232 code === PLUS_URL_SAFE)
4233 return 62 // '+'
4234 if (code === SLASH ||
4235 code === SLASH_URL_SAFE)
4236 return 63 // '/'
4237 if (code < NUMBER)
4238 return -1 //no match
4239 if (code < NUMBER + 10)
4240 return code - NUMBER + 26 + 26
4241 if (code < UPPER + 26)
4242 return code - UPPER
4243 if (code < LOWER + 26)
4244 return code - LOWER + 26
4245 }
4246
4247 function b64ToByteArray (b64) {
4248 var i, j, l, tmp, placeHolders, arr
4249
4250 if (b64.length % 4 > 0) {
4251 throw new Error('Invalid string. Length must be a multiple of 4')
4252 }
4253
4254 // the number of equal signs (place holders)
4255 // if there are two placeholders, than the two characters before it
4256 // represent one byte
4257 // if there is only one, then the three characters before it represent 2 bytes
4258 // this is just a cheap hack to not do indexOf twice
4259 var len = b64.length
4260 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4261
4262 // base64 is 4/3 + up to two characters of the original data
4263 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4264
4265 // if there are placeholders, only get up to the last complete 4 chars
4266 l = placeHolders > 0 ? b64.length - 4 : b64.length
4267
4268 var L = 0
4269
4270 function push (v) {
4271 arr[L++] = v
4272 }
4273
4274 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4275 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4276 push((tmp & 0xFF0000) >> 16)
4277 push((tmp & 0xFF00) >> 8)
4278 push(tmp & 0xFF)
4279 }
4280
4281 if (placeHolders === 2) {
4282 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4283 push(tmp & 0xFF)
4284 } else if (placeHolders === 1) {
4285 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4286 push((tmp >> 8) & 0xFF)
4287 push(tmp & 0xFF)
4288 }
4289
4290 return arr
4291 }
4292
4293 function uint8ToBase64 (uint8) {
4294 var i,
4295 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4296 output = "",
4297 temp, length
4298
4299 function encode (num) {
4300 return lookup.charAt(num)
4301 }
4302
4303 function tripletToBase64 (num) {
4304 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4305 }
4306
4307 // go through the array every three bytes, we'll deal with trailing stuff later
4308 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4309 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4310 output += tripletToBase64(temp)
4311 }
4312
4313 // pad the end with zeros, but make sure to not forget the extra bytes
4314 switch (extraBytes) {
4315 case 1:
4316 temp = uint8[uint8.length - 1]
4317 output += encode(temp >> 2)
4318 output += encode((temp << 4) & 0x3F)
4319 output += '=='
4320 break
4321 case 2:
4322 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4323 output += encode(temp >> 10)
4324 output += encode((temp >> 4) & 0x3F)
4325 output += encode((temp << 2) & 0x3F)
4326 output += '='
4327 break
4328 }
4329
4330 return output
4331 }
4332
4333 exports.toByteArray = b64ToByteArray
4334 exports.fromByteArray = uint8ToBase64
4335 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4336
4337 },{}],9:[function(require,module,exports){
4338 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4339 var e, m
4340 var eLen = nBytes * 8 - mLen - 1
4341 var eMax = (1 << eLen) - 1
4342 var eBias = eMax >> 1
4343 var nBits = -7
4344 var i = isLE ? (nBytes - 1) : 0
4345 var d = isLE ? -1 : 1
4346 var s = buffer[offset + i]
4347
4348 i += d
4349
4350 e = s & ((1 << (-nBits)) - 1)
4351 s >>= (-nBits)
4352 nBits += eLen
4353 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4354
4355 m = e & ((1 << (-nBits)) - 1)
4356 e >>= (-nBits)
4357 nBits += mLen
4358 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4359
4360 if (e === 0) {
4361 e = 1 - eBias
4362 } else if (e === eMax) {
4363 return m ? NaN : ((s ? -1 : 1) * Infinity)
4364 } else {
4365 m = m + Math.pow(2, mLen)
4366 e = e - eBias
4367 }
4368 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4369 }
4370
4371 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4372 var e, m, c
4373 var eLen = nBytes * 8 - mLen - 1
4374 var eMax = (1 << eLen) - 1
4375 var eBias = eMax >> 1
4376 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4377 var i = isLE ? 0 : (nBytes - 1)
4378 var d = isLE ? 1 : -1
4379 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4380
4381 value = Math.abs(value)
4382
4383 if (isNaN(value) || value === Infinity) {
4384 m = isNaN(value) ? 1 : 0
4385 e = eMax
4386 } else {
4387 e = Math.floor(Math.log(value) / Math.LN2)
4388 if (value * (c = Math.pow(2, -e)) < 1) {
4389 e--
4390 c *= 2
4391 }
4392 if (e + eBias >= 1) {
4393 value += rt / c
4394 } else {
4395 value += rt * Math.pow(2, 1 - eBias)
4396 }
4397 if (value * c >= 2) {
4398 e++
4399 c /= 2
4400 }
4401
4402 if (e + eBias >= eMax) {
4403 m = 0
4404 e = eMax
4405 } else if (e + eBias >= 1) {
4406 m = (value * c - 1) * Math.pow(2, mLen)
4407 e = e + eBias
4408 } else {
4409 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4410 e = 0
4411 }
4412 }
4413
4414 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4415
4416 e = (e << mLen) | m
4417 eLen += mLen
4418 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4419
4420 buffer[offset + i - d] |= s * 128
4421 }
4422
4423 },{}],10:[function(require,module,exports){
4424
4425 /**
4426 * isArray
4427 */
4428
4429 var isArray = Array.isArray;
4430
4431 /**
4432 * toString
4433 */
4434
4435 var str = Object.prototype.toString;
4436
4437 /**
4438 * Whether or not the given `val`
4439 * is an array.
4440 *
4441 * example:
4442 *
4443 * isArray([]);
4444 * // > true
4445 * isArray(arguments);
4446 * // > false
4447 * isArray('');
4448 * // > false
4449 *
4450 * @param {mixed} val
4451 * @return {bool}
4452 */
4453
4454 module.exports = isArray || function (val) {
4455 return !! val && '[object Array]' == str.call(val);
4456 };
4457
4458 },{}],11:[function(require,module,exports){
4459 // Copyright Joyent, Inc. and other Node contributors.
4460 //
4461 // Permission is hereby granted, free of charge, to any person obtaining a
4462 // copy of this software and associated documentation files (the
4463 // "Software"), to deal in the Software without restriction, including
4464 // without limitation the rights to use, copy, modify, merge, publish,
4465 // distribute, sublicense, and/or sell copies of the Software, and to permit
4466 // persons to whom the Software is furnished to do so, subject to the
4467 // following conditions:
4468 //
4469 // The above copyright notice and this permission notice shall be included
4470 // in all copies or substantial portions of the Software.
4471 //
4472 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4473 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4474 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4475 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4476 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4477 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4478 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4479
4480 function EventEmitter() {
4481 this._events = this._events || {};
4482 this._maxListeners = this._maxListeners || undefined;
4483 }
4484 module.exports = EventEmitter;
4485
4486 // Backwards-compat with node 0.10.x
4487 EventEmitter.EventEmitter = EventEmitter;
4488
4489 EventEmitter.prototype._events = undefined;
4490 EventEmitter.prototype._maxListeners = undefined;
4491
4492 // By default EventEmitters will print a warning if more than 10 listeners are
4493 // added to it. This is a useful default which helps finding memory leaks.
4494 EventEmitter.defaultMaxListeners = 10;
4495
4496 // Obviously not all Emitters should be limited to 10. This function allows
4497 // that to be increased. Set to zero for unlimited.
4498 EventEmitter.prototype.setMaxListeners = function(n) {
4499 if (!isNumber(n) || n < 0 || isNaN(n))
4500 throw TypeError('n must be a positive number');
4501 this._maxListeners = n;
4502 return this;
4503 };
4504
4505 EventEmitter.prototype.emit = function(type) {
4506 var er, handler, len, args, i, listeners;
4507
4508 if (!this._events)
4509 this._events = {};
4510
4511 // If there is no 'error' event listener then throw.
4512 if (type === 'error') {
4513 if (!this._events.error ||
4514 (isObject(this._events.error) && !this._events.error.length)) {
4515 er = arguments[1];
4516 if (er instanceof Error) {
4517 throw er; // Unhandled 'error' event
4518 }
4519 throw TypeError('Uncaught, unspecified "error" event.');
4520 }
4521 }
4522
4523 handler = this._events[type];
4524
4525 if (isUndefined(handler))
4526 return false;
4527
4528 if (isFunction(handler)) {
4529 switch (arguments.length) {
4530 // fast cases
4531 case 1:
4532 handler.call(this);
4533 break;
4534 case 2:
4535 handler.call(this, arguments[1]);
4536 break;
4537 case 3:
4538 handler.call(this, arguments[1], arguments[2]);
4539 break;
4540 // slower
4541 default:
4542 len = arguments.length;
4543 args = new Array(len - 1);
4544 for (i = 1; i < len; i++)
4545 args[i - 1] = arguments[i];
4546 handler.apply(this, args);
4547 }
4548 } else if (isObject(handler)) {
4549 len = arguments.length;
4550 args = new Array(len - 1);
4551 for (i = 1; i < len; i++)
4552 args[i - 1] = arguments[i];
4553
4554 listeners = handler.slice();
4555 len = listeners.length;
4556 for (i = 0; i < len; i++)
4557 listeners[i].apply(this, args);
4558 }
4559
4560 return true;
4561 };
4562
4563 EventEmitter.prototype.addListener = function(type, listener) {
4564 var m;
4565
4566 if (!isFunction(listener))
4567 throw TypeError('listener must be a function');
4568
4569 if (!this._events)
4570 this._events = {};
4571
4572 // To avoid recursion in the case that type === "newListener"! Before
4573 // adding it to the listeners, first emit "newListener".
4574 if (this._events.newListener)
4575 this.emit('newListener', type,
4576 isFunction(listener.listener) ?
4577 listener.listener : listener);
4578
4579 if (!this._events[type])
4580 // Optimize the case of one listener. Don't need the extra array object.
4581 this._events[type] = listener;
4582 else if (isObject(this._events[type]))
4583 // If we've already got an array, just append.
4584 this._events[type].push(listener);
4585 else
4586 // Adding the second element, need to change to array.
4587 this._events[type] = [this._events[type], listener];
4588
4589 // Check for listener leak
4590 if (isObject(this._events[type]) && !this._events[type].warned) {
4591 var m;
4592 if (!isUndefined(this._maxListeners)) {
4593 m = this._maxListeners;
4594 } else {
4595 m = EventEmitter.defaultMaxListeners;
4596 }
4597
4598 if (m && m > 0 && this._events[type].length > m) {
4599 this._events[type].warned = true;
4600 console.error('(node) warning: possible EventEmitter memory ' +
4601 'leak detected. %d listeners added. ' +
4602 'Use emitter.setMaxListeners() to increase limit.',
4603 this._events[type].length);
4604 if (typeof console.trace === 'function') {
4605 // not supported in IE 10
4606 console.trace();
4607 }
4608 }
4609 }
4610
4611 return this;
4612 };
4613
4614 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4615
4616 EventEmitter.prototype.once = function(type, listener) {
4617 if (!isFunction(listener))
4618 throw TypeError('listener must be a function');
4619
4620 var fired = false;
4621
4622 function g() {
4623 this.removeListener(type, g);
4624
4625 if (!fired) {
4626 fired = true;
4627 listener.apply(this, arguments);
4628 }
4629 }
4630
4631 g.listener = listener;
4632 this.on(type, g);
4633
4634 return this;
4635 };
4636
4637 // emits a 'removeListener' event iff the listener was removed
4638 EventEmitter.prototype.removeListener = function(type, listener) {
4639 var list, position, length, i;
4640
4641 if (!isFunction(listener))
4642 throw TypeError('listener must be a function');
4643
4644 if (!this._events || !this._events[type])
4645 return this;
4646
4647 list = this._events[type];
4648 length = list.length;
4649 position = -1;
4650
4651 if (list === listener ||
4652 (isFunction(list.listener) && list.listener === listener)) {
4653 delete this._events[type];
4654 if (this._events.removeListener)
4655 this.emit('removeListener', type, listener);
4656
4657 } else if (isObject(list)) {
4658 for (i = length; i-- > 0;) {
4659 if (list[i] === listener ||
4660 (list[i].listener && list[i].listener === listener)) {
4661 position = i;
4662 break;
4663 }
4664 }
4665
4666 if (position < 0)
4667 return this;
4668
4669 if (list.length === 1) {
4670 list.length = 0;
4671 delete this._events[type];
4672 } else {
4673 list.splice(position, 1);
4674 }
4675
4676 if (this._events.removeListener)
4677 this.emit('removeListener', type, listener);
4678 }
4679
4680 return this;
4681 };
4682
4683 EventEmitter.prototype.removeAllListeners = function(type) {
4684 var key, listeners;
4685
4686 if (!this._events)
4687 return this;
4688
4689 // not listening for removeListener, no need to emit
4690 if (!this._events.removeListener) {
4691 if (arguments.length === 0)
4692 this._events = {};
4693 else if (this._events[type])
4694 delete this._events[type];
4695 return this;
4696 }
4697
4698 // emit removeListener for all listeners on all events
4699 if (arguments.length === 0) {
4700 for (key in this._events) {
4701 if (key === 'removeListener') continue;
4702 this.removeAllListeners(key);
4703 }
4704 this.removeAllListeners('removeListener');
4705 this._events = {};
4706 return this;
4707 }
4708
4709 listeners = this._events[type];
4710
4711 if (isFunction(listeners)) {
4712 this.removeListener(type, listeners);
4713 } else {
4714 // LIFO order
4715 while (listeners.length)
4716 this.removeListener(type, listeners[listeners.length - 1]);
4717 }
4718 delete this._events[type];
4719
4720 return this;
4721 };
4722
4723 EventEmitter.prototype.listeners = function(type) {
4724 var ret;
4725 if (!this._events || !this._events[type])
4726 ret = [];
4727 else if (isFunction(this._events[type]))
4728 ret = [this._events[type]];
4729 else
4730 ret = this._events[type].slice();
4731 return ret;
4732 };
4733
4734 EventEmitter.listenerCount = function(emitter, type) {
4735 var ret;
4736 if (!emitter._events || !emitter._events[type])
4737 ret = 0;
4738 else if (isFunction(emitter._events[type]))
4739 ret = 1;
4740 else
4741 ret = emitter._events[type].length;
4742 return ret;
4743 };
4744
4745 function isFunction(arg) {
4746 return typeof arg === 'function';
4747 }
4748
4749 function isNumber(arg) {
4750 return typeof arg === 'number';
4751 }
4752
4753 function isObject(arg) {
4754 return typeof arg === 'object' && arg !== null;
4755 }
4756
4757 function isUndefined(arg) {
4758 return arg === void 0;
4759 }
4760
4761 },{}],12:[function(require,module,exports){
4762 if (typeof Object.create === 'function') {
4763 // implementation from standard node.js 'util' module
4764 module.exports = function inherits(ctor, superCtor) {
4765 ctor.super_ = superCtor
4766 ctor.prototype = Object.create(superCtor.prototype, {
4767 constructor: {
4768 value: ctor,
4769 enumerable: false,
4770 writable: true,
4771 configurable: true
4772 }
4773 });
4774 };
4775 } else {
4776 // old school shim for old browsers
4777 module.exports = function inherits(ctor, superCtor) {
4778 ctor.super_ = superCtor
4779 var TempCtor = function () {}
4780 TempCtor.prototype = superCtor.prototype
4781 ctor.prototype = new TempCtor()
4782 ctor.prototype.constructor = ctor
4783 }
4784 }
4785
4786 },{}],13:[function(require,module,exports){
4787 module.exports = Array.isArray || function (arr) {
4788 return Object.prototype.toString.call(arr) == '[object Array]';
4789 };
4790
4791 },{}],14:[function(require,module,exports){
4792 // shim for using process in browser
4793
4794 var process = module.exports = {};
4795 var queue = [];
4796 var draining = false;
4797 var currentQueue;
4798 var queueIndex = -1;
4799
4800 function cleanUpNextTick() {
4801 draining = false;
4802 if (currentQueue.length) {
4803 queue = currentQueue.concat(queue);
4804 } else {
4805 queueIndex = -1;
4806 }
4807 if (queue.length) {
4808 drainQueue();
4809 }
4810 }
4811
4812 function drainQueue() {
4813 if (draining) {
4814 return;
4815 }
4816 var timeout = setTimeout(cleanUpNextTick);
4817 draining = true;
4818
4819 var len = queue.length;
4820 while(len) {
4821 currentQueue = queue;
4822 queue = [];
4823 while (++queueIndex < len) {
4824 currentQueue[queueIndex].run();
4825 }
4826 queueIndex = -1;
4827 len = queue.length;
4828 }
4829 currentQueue = null;
4830 draining = false;
4831 clearTimeout(timeout);
4832 }
4833
4834 process.nextTick = function (fun) {
4835 var args = new Array(arguments.length - 1);
4836 if (arguments.length > 1) {
4837 for (var i = 1; i < arguments.length; i++) {
4838 args[i - 1] = arguments[i];
4839 }
4840 }
4841 queue.push(new Item(fun, args));
4842 if (queue.length === 1 && !draining) {
4843 setTimeout(drainQueue, 0);
4844 }
4845 };
4846
4847 // v8 likes predictible objects
4848 function Item(fun, array) {
4849 this.fun = fun;
4850 this.array = array;
4851 }
4852 Item.prototype.run = function () {
4853 this.fun.apply(null, this.array);
4854 };
4855 process.title = 'browser';
4856 process.browser = true;
4857 process.env = {};
4858 process.argv = [];
4859 process.version = ''; // empty string to avoid regexp issues
4860 process.versions = {};
4861
4862 function noop() {}
4863
4864 process.on = noop;
4865 process.addListener = noop;
4866 process.once = noop;
4867 process.off = noop;
4868 process.removeListener = noop;
4869 process.removeAllListeners = noop;
4870 process.emit = noop;
4871
4872 process.binding = function (name) {
4873 throw new Error('process.binding is not supported');
4874 };
4875
4876 // TODO(shtylman)
4877 process.cwd = function () { return '/' };
4878 process.chdir = function (dir) {
4879 throw new Error('process.chdir is not supported');
4880 };
4881 process.umask = function() { return 0; };
4882
4883 },{}],15:[function(require,module,exports){
4884 module.exports = require("./lib/_stream_duplex.js")
4885
4886 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4887 (function (process){
4888 // Copyright Joyent, Inc. and other Node contributors.
4889 //
4890 // Permission is hereby granted, free of charge, to any person obtaining a
4891 // copy of this software and associated documentation files (the
4892 // "Software"), to deal in the Software without restriction, including
4893 // without limitation the rights to use, copy, modify, merge, publish,
4894 // distribute, sublicense, and/or sell copies of the Software, and to permit
4895 // persons to whom the Software is furnished to do so, subject to the
4896 // following conditions:
4897 //
4898 // The above copyright notice and this permission notice shall be included
4899 // in all copies or substantial portions of the Software.
4900 //
4901 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4902 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4903 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4904 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4905 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4906 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4907 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4908
4909 // a duplex stream is just a stream that is both readable and writable.
4910 // Since JS doesn't have multiple prototypal inheritance, this class
4911 // prototypally inherits from Readable, and then parasitically from
4912 // Writable.
4913
4914 module.exports = Duplex;
4915
4916 /*<replacement>*/
4917 var objectKeys = Object.keys || function (obj) {
4918 var keys = [];
4919 for (var key in obj) keys.push(key);
4920 return keys;
4921 }
4922 /*</replacement>*/
4923
4924
4925 /*<replacement>*/
4926 var util = require('core-util-is');
4927 util.inherits = require('inherits');
4928 /*</replacement>*/
4929
4930 var Readable = require('./_stream_readable');
4931 var Writable = require('./_stream_writable');
4932
4933 util.inherits(Duplex, Readable);
4934
4935 forEach(objectKeys(Writable.prototype), function(method) {
4936 if (!Duplex.prototype[method])
4937 Duplex.prototype[method] = Writable.prototype[method];
4938 });
4939
4940 function Duplex(options) {
4941 if (!(this instanceof Duplex))
4942 return new Duplex(options);
4943
4944 Readable.call(this, options);
4945 Writable.call(this, options);
4946
4947 if (options && options.readable === false)
4948 this.readable = false;
4949
4950 if (options && options.writable === false)
4951 this.writable = false;
4952
4953 this.allowHalfOpen = true;
4954 if (options && options.allowHalfOpen === false)
4955 this.allowHalfOpen = false;
4956
4957 this.once('end', onend);
4958 }
4959
4960 // the no-half-open enforcer
4961 function onend() {
4962 // if we allow half-open state, or if the writable side ended,
4963 // then we're ok.
4964 if (this.allowHalfOpen || this._writableState.ended)
4965 return;
4966
4967 // no more data can be written.
4968 // But allow more writes to happen in this tick.
4969 process.nextTick(this.end.bind(this));
4970 }
4971
4972 function forEach (xs, f) {
4973 for (var i = 0, l = xs.length; i < l; i++) {
4974 f(xs[i], i);
4975 }
4976 }
4977
4978 }).call(this,require('_process'))
4979 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4980 // Copyright Joyent, Inc. and other Node contributors.
4981 //
4982 // Permission is hereby granted, free of charge, to any person obtaining a
4983 // copy of this software and associated documentation files (the
4984 // "Software"), to deal in the Software without restriction, including
4985 // without limitation the rights to use, copy, modify, merge, publish,
4986 // distribute, sublicense, and/or sell copies of the Software, and to permit
4987 // persons to whom the Software is furnished to do so, subject to the
4988 // following conditions:
4989 //
4990 // The above copyright notice and this permission notice shall be included
4991 // in all copies or substantial portions of the Software.
4992 //
4993 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4994 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4995 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4996 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4997 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4998 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4999 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5000
5001 // a passthrough stream.
5002 // basically just the most minimal sort of Transform stream.
5003 // Every written chunk gets output as-is.
5004
5005 module.exports = PassThrough;
5006
5007 var Transform = require('./_stream_transform');
5008
5009 /*<replacement>*/
5010 var util = require('core-util-is');
5011 util.inherits = require('inherits');
5012 /*</replacement>*/
5013
5014 util.inherits(PassThrough, Transform);
5015
5016 function PassThrough(options) {
5017 if (!(this instanceof PassThrough))
5018 return new PassThrough(options);
5019
5020 Transform.call(this, options);
5021 }
5022
5023 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5024 cb(null, chunk);
5025 };
5026
5027 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5028 (function (process){
5029 // Copyright Joyent, Inc. and other Node contributors.
5030 //
5031 // Permission is hereby granted, free of charge, to any person obtaining a
5032 // copy of this software and associated documentation files (the
5033 // "Software"), to deal in the Software without restriction, including
5034 // without limitation the rights to use, copy, modify, merge, publish,
5035 // distribute, sublicense, and/or sell copies of the Software, and to permit
5036 // persons to whom the Software is furnished to do so, subject to the
5037 // following conditions:
5038 //
5039 // The above copyright notice and this permission notice shall be included
5040 // in all copies or substantial portions of the Software.
5041 //
5042 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5043 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5044 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5045 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5046 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5047 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5048 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5049
5050 module.exports = Readable;
5051
5052 /*<replacement>*/
5053 var isArray = require('isarray');
5054 /*</replacement>*/
5055
5056
5057 /*<replacement>*/
5058 var Buffer = require('buffer').Buffer;
5059 /*</replacement>*/
5060
5061 Readable.ReadableState = ReadableState;
5062
5063 var EE = require('events').EventEmitter;
5064
5065 /*<replacement>*/
5066 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5067 return emitter.listeners(type).length;
5068 };
5069 /*</replacement>*/
5070
5071 var Stream = require('stream');
5072
5073 /*<replacement>*/
5074 var util = require('core-util-is');
5075 util.inherits = require('inherits');
5076 /*</replacement>*/
5077
5078 var StringDecoder;
5079
5080
5081 /*<replacement>*/
5082 var debug = require('util');
5083 if (debug && debug.debuglog) {
5084 debug = debug.debuglog('stream');
5085 } else {
5086 debug = function () {};
5087 }
5088 /*</replacement>*/
5089
5090
5091 util.inherits(Readable, Stream);
5092
5093 function ReadableState(options, stream) {
5094 var Duplex = require('./_stream_duplex');
5095
5096 options = options || {};
5097
5098 // the point at which it stops calling _read() to fill the buffer
5099 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5100 var hwm = options.highWaterMark;
5101 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5102 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5103
5104 // cast to ints.
5105 this.highWaterMark = ~~this.highWaterMark;
5106
5107 this.buffer = [];
5108 this.length = 0;
5109 this.pipes = null;
5110 this.pipesCount = 0;
5111 this.flowing = null;
5112 this.ended = false;
5113 this.endEmitted = false;
5114 this.reading = false;
5115
5116 // a flag to be able to tell if the onwrite cb is called immediately,
5117 // or on a later tick. We set this to true at first, because any
5118 // actions that shouldn't happen until "later" should generally also
5119 // not happen before the first write call.
5120 this.sync = true;
5121
5122 // whenever we return null, then we set a flag to say
5123 // that we're awaiting a 'readable' event emission.
5124 this.needReadable = false;
5125 this.emittedReadable = false;
5126 this.readableListening = false;
5127
5128
5129 // object stream flag. Used to make read(n) ignore n and to
5130 // make all the buffer merging and length checks go away
5131 this.objectMode = !!options.objectMode;
5132
5133 if (stream instanceof Duplex)
5134 this.objectMode = this.objectMode || !!options.readableObjectMode;
5135
5136 // Crypto is kind of old and crusty. Historically, its default string
5137 // encoding is 'binary' so we have to make this configurable.
5138 // Everything else in the universe uses 'utf8', though.
5139 this.defaultEncoding = options.defaultEncoding || 'utf8';
5140
5141 // when piping, we only care about 'readable' events that happen
5142 // after read()ing all the bytes and not getting any pushback.
5143 this.ranOut = false;
5144
5145 // the number of writers that are awaiting a drain event in .pipe()s
5146 this.awaitDrain = 0;
5147
5148 // if true, a maybeReadMore has been scheduled
5149 this.readingMore = false;
5150
5151 this.decoder = null;
5152 this.encoding = null;
5153 if (options.encoding) {
5154 if (!StringDecoder)
5155 StringDecoder = require('string_decoder/').StringDecoder;
5156 this.decoder = new StringDecoder(options.encoding);
5157 this.encoding = options.encoding;
5158 }
5159 }
5160
5161 function Readable(options) {
5162 var Duplex = require('./_stream_duplex');
5163
5164 if (!(this instanceof Readable))
5165 return new Readable(options);
5166
5167 this._readableState = new ReadableState(options, this);
5168
5169 // legacy
5170 this.readable = true;
5171
5172 Stream.call(this);
5173 }
5174
5175 // Manually shove something into the read() buffer.
5176 // This returns true if the highWaterMark has not been hit yet,
5177 // similar to how Writable.write() returns true if you should
5178 // write() some more.
5179 Readable.prototype.push = function(chunk, encoding) {
5180 var state = this._readableState;
5181
5182 if (util.isString(chunk) && !state.objectMode) {
5183 encoding = encoding || state.defaultEncoding;
5184 if (encoding !== state.encoding) {
5185 chunk = new Buffer(chunk, encoding);
5186 encoding = '';
5187 }
5188 }
5189
5190 return readableAddChunk(this, state, chunk, encoding, false);
5191 };
5192
5193 // Unshift should *always* be something directly out of read()
5194 Readable.prototype.unshift = function(chunk) {
5195 var state = this._readableState;
5196 return readableAddChunk(this, state, chunk, '', true);
5197 };
5198
5199 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5200 var er = chunkInvalid(state, chunk);
5201 if (er) {
5202 stream.emit('error', er);
5203 } else if (util.isNullOrUndefined(chunk)) {
5204 state.reading = false;
5205 if (!state.ended)
5206 onEofChunk(stream, state);
5207 } else if (state.objectMode || chunk && chunk.length > 0) {
5208 if (state.ended && !addToFront) {
5209 var e = new Error('stream.push() after EOF');
5210 stream.emit('error', e);
5211 } else if (state.endEmitted && addToFront) {
5212 var e = new Error('stream.unshift() after end event');
5213 stream.emit('error', e);
5214 } else {
5215 if (state.decoder && !addToFront && !encoding)
5216 chunk = state.decoder.write(chunk);
5217
5218 if (!addToFront)
5219 state.reading = false;
5220
5221 // if we want the data now, just emit it.
5222 if (state.flowing && state.length === 0 && !state.sync) {
5223 stream.emit('data', chunk);
5224 stream.read(0);
5225 } else {
5226 // update the buffer info.
5227 state.length += state.objectMode ? 1 : chunk.length;
5228 if (addToFront)
5229 state.buffer.unshift(chunk);
5230 else
5231 state.buffer.push(chunk);
5232
5233 if (state.needReadable)
5234 emitReadable(stream);
5235 }
5236
5237 maybeReadMore(stream, state);
5238 }
5239 } else if (!addToFront) {
5240 state.reading = false;
5241 }
5242
5243 return needMoreData(state);
5244 }
5245
5246
5247
5248 // if it's past the high water mark, we can push in some more.
5249 // Also, if we have no data yet, we can stand some
5250 // more bytes. This is to work around cases where hwm=0,
5251 // such as the repl. Also, if the push() triggered a
5252 // readable event, and the user called read(largeNumber) such that
5253 // needReadable was set, then we ought to push more, so that another
5254 // 'readable' event will be triggered.
5255 function needMoreData(state) {
5256 return !state.ended &&
5257 (state.needReadable ||
5258 state.length < state.highWaterMark ||
5259 state.length === 0);
5260 }
5261
5262 // backwards compatibility.
5263 Readable.prototype.setEncoding = function(enc) {
5264 if (!StringDecoder)
5265 StringDecoder = require('string_decoder/').StringDecoder;
5266 this._readableState.decoder = new StringDecoder(enc);
5267 this._readableState.encoding = enc;
5268 return this;
5269 };
5270
5271 // Don't raise the hwm > 128MB
5272 var MAX_HWM = 0x800000;
5273 function roundUpToNextPowerOf2(n) {
5274 if (n >= MAX_HWM) {
5275 n = MAX_HWM;
5276 } else {
5277 // Get the next highest power of 2
5278 n--;
5279 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5280 n++;
5281 }
5282 return n;
5283 }
5284
5285 function howMuchToRead(n, state) {
5286 if (state.length === 0 && state.ended)
5287 return 0;
5288
5289 if (state.objectMode)
5290 return n === 0 ? 0 : 1;
5291
5292 if (isNaN(n) || util.isNull(n)) {
5293 // only flow one buffer at a time
5294 if (state.flowing && state.buffer.length)
5295 return state.buffer[0].length;
5296 else
5297 return state.length;
5298 }
5299
5300 if (n <= 0)
5301 return 0;
5302
5303 // If we're asking for more than the target buffer level,
5304 // then raise the water mark. Bump up to the next highest
5305 // power of 2, to prevent increasing it excessively in tiny
5306 // amounts.
5307 if (n > state.highWaterMark)
5308 state.highWaterMark = roundUpToNextPowerOf2(n);
5309
5310 // don't have that much. return null, unless we've ended.
5311 if (n > state.length) {
5312 if (!state.ended) {
5313 state.needReadable = true;
5314 return 0;
5315 } else
5316 return state.length;
5317 }
5318
5319 return n;
5320 }
5321
5322 // you can override either this method, or the async _read(n) below.
5323 Readable.prototype.read = function(n) {
5324 debug('read', n);
5325 var state = this._readableState;
5326 var nOrig = n;
5327
5328 if (!util.isNumber(n) || n > 0)
5329 state.emittedReadable = false;
5330
5331 // if we're doing read(0) to trigger a readable event, but we
5332 // already have a bunch of data in the buffer, then just trigger
5333 // the 'readable' event and move on.
5334 if (n === 0 &&
5335 state.needReadable &&
5336 (state.length >= state.highWaterMark || state.ended)) {
5337 debug('read: emitReadable', state.length, state.ended);
5338 if (state.length === 0 && state.ended)
5339 endReadable(this);
5340 else
5341 emitReadable(this);
5342 return null;
5343 }
5344
5345 n = howMuchToRead(n, state);
5346
5347 // if we've ended, and we're now clear, then finish it up.
5348 if (n === 0 && state.ended) {
5349 if (state.length === 0)
5350 endReadable(this);
5351 return null;
5352 }
5353
5354 // All the actual chunk generation logic needs to be
5355 // *below* the call to _read. The reason is that in certain
5356 // synthetic stream cases, such as passthrough streams, _read
5357 // may be a completely synchronous operation which may change
5358 // the state of the read buffer, providing enough data when
5359 // before there was *not* enough.
5360 //
5361 // So, the steps are:
5362 // 1. Figure out what the state of things will be after we do
5363 // a read from the buffer.
5364 //
5365 // 2. If that resulting state will trigger a _read, then call _read.
5366 // Note that this may be asynchronous, or synchronous. Yes, it is
5367 // deeply ugly to write APIs this way, but that still doesn't mean
5368 // that the Readable class should behave improperly, as streams are
5369 // designed to be sync/async agnostic.
5370 // Take note if the _read call is sync or async (ie, if the read call
5371 // has returned yet), so that we know whether or not it's safe to emit
5372 // 'readable' etc.
5373 //
5374 // 3. Actually pull the requested chunks out of the buffer and return.
5375
5376 // if we need a readable event, then we need to do some reading.
5377 var doRead = state.needReadable;
5378 debug('need readable', doRead);
5379
5380 // if we currently have less than the highWaterMark, then also read some
5381 if (state.length === 0 || state.length - n < state.highWaterMark) {
5382 doRead = true;
5383 debug('length less than watermark', doRead);
5384 }
5385
5386 // however, if we've ended, then there's no point, and if we're already
5387 // reading, then it's unnecessary.
5388 if (state.ended || state.reading) {
5389 doRead = false;
5390 debug('reading or ended', doRead);
5391 }
5392
5393 if (doRead) {
5394 debug('do read');
5395 state.reading = true;
5396 state.sync = true;
5397 // if the length is currently zero, then we *need* a readable event.
5398 if (state.length === 0)
5399 state.needReadable = true;
5400 // call internal read method
5401 this._read(state.highWaterMark);
5402 state.sync = false;
5403 }
5404
5405 // If _read pushed data synchronously, then `reading` will be false,
5406 // and we need to re-evaluate how much data we can return to the user.
5407 if (doRead && !state.reading)
5408 n = howMuchToRead(nOrig, state);
5409
5410 var ret;
5411 if (n > 0)
5412 ret = fromList(n, state);
5413 else
5414 ret = null;
5415
5416 if (util.isNull(ret)) {
5417 state.needReadable = true;
5418 n = 0;
5419 }
5420
5421 state.length -= n;
5422
5423 // If we have nothing in the buffer, then we want to know
5424 // as soon as we *do* get something into the buffer.
5425 if (state.length === 0 && !state.ended)
5426 state.needReadable = true;
5427
5428 // If we tried to read() past the EOF, then emit end on the next tick.
5429 if (nOrig !== n && state.ended && state.length === 0)
5430 endReadable(this);
5431
5432 if (!util.isNull(ret))
5433 this.emit('data', ret);
5434
5435 return ret;
5436 };
5437
5438 function chunkInvalid(state, chunk) {
5439 var er = null;
5440 if (!util.isBuffer(chunk) &&
5441 !util.isString(chunk) &&
5442 !util.isNullOrUndefined(chunk) &&
5443 !state.objectMode) {
5444 er = new TypeError('Invalid non-string/buffer chunk');
5445 }
5446 return er;
5447 }
5448
5449
5450 function onEofChunk(stream, state) {
5451 if (state.decoder && !state.ended) {
5452 var chunk = state.decoder.end();
5453 if (chunk && chunk.length) {
5454 state.buffer.push(chunk);
5455 state.length += state.objectMode ? 1 : chunk.length;
5456 }
5457 }
5458 state.ended = true;
5459
5460 // emit 'readable' now to make sure it gets picked up.
5461 emitReadable(stream);
5462 }
5463
5464 // Don't emit readable right away in sync mode, because this can trigger
5465 // another read() call => stack overflow. This way, it might trigger
5466 // a nextTick recursion warning, but that's not so bad.
5467 function emitReadable(stream) {
5468 var state = stream._readableState;
5469 state.needReadable = false;
5470 if (!state.emittedReadable) {
5471 debug('emitReadable', state.flowing);
5472 state.emittedReadable = true;
5473 if (state.sync)
5474 process.nextTick(function() {
5475 emitReadable_(stream);
5476 });
5477 else
5478 emitReadable_(stream);
5479 }
5480 }
5481
5482 function emitReadable_(stream) {
5483 debug('emit readable');
5484 stream.emit('readable');
5485 flow(stream);
5486 }
5487
5488
5489 // at this point, the user has presumably seen the 'readable' event,
5490 // and called read() to consume some data. that may have triggered
5491 // in turn another _read(n) call, in which case reading = true if
5492 // it's in progress.
5493 // However, if we're not ended, or reading, and the length < hwm,
5494 // then go ahead and try to read some more preemptively.
5495 function maybeReadMore(stream, state) {
5496 if (!state.readingMore) {
5497 state.readingMore = true;
5498 process.nextTick(function() {
5499 maybeReadMore_(stream, state);
5500 });
5501 }
5502 }
5503
5504 function maybeReadMore_(stream, state) {
5505 var len = state.length;
5506 while (!state.reading && !state.flowing && !state.ended &&
5507 state.length < state.highWaterMark) {
5508 debug('maybeReadMore read 0');
5509 stream.read(0);
5510 if (len === state.length)
5511 // didn't get any data, stop spinning.
5512 break;
5513 else
5514 len = state.length;
5515 }
5516 state.readingMore = false;
5517 }
5518
5519 // abstract method. to be overridden in specific implementation classes.
5520 // call cb(er, data) where data is <= n in length.
5521 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5522 // arbitrary, and perhaps not very meaningful.
5523 Readable.prototype._read = function(n) {
5524 this.emit('error', new Error('not implemented'));
5525 };
5526
5527 Readable.prototype.pipe = function(dest, pipeOpts) {
5528 var src = this;
5529 var state = this._readableState;
5530
5531 switch (state.pipesCount) {
5532 case 0:
5533 state.pipes = dest;
5534 break;
5535 case 1:
5536 state.pipes = [state.pipes, dest];
5537 break;
5538 default:
5539 state.pipes.push(dest);
5540 break;
5541 }
5542 state.pipesCount += 1;
5543 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5544
5545 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5546 dest !== process.stdout &&
5547 dest !== process.stderr;
5548
5549 var endFn = doEnd ? onend : cleanup;
5550 if (state.endEmitted)
5551 process.nextTick(endFn);
5552 else
5553 src.once('end', endFn);
5554
5555 dest.on('unpipe', onunpipe);
5556 function onunpipe(readable) {
5557 debug('onunpipe');
5558 if (readable === src) {
5559 cleanup();
5560 }
5561 }
5562
5563 function onend() {
5564 debug('onend');
5565 dest.end();
5566 }
5567
5568 // when the dest drains, it reduces the awaitDrain counter
5569 // on the source. This would be more elegant with a .once()
5570 // handler in flow(), but adding and removing repeatedly is
5571 // too slow.
5572 var ondrain = pipeOnDrain(src);
5573 dest.on('drain', ondrain);
5574
5575 function cleanup() {
5576 debug('cleanup');
5577 // cleanup event handlers once the pipe is broken
5578 dest.removeListener('close', onclose);
5579 dest.removeListener('finish', onfinish);
5580 dest.removeListener('drain', ondrain);
5581 dest.removeListener('error', onerror);
5582 dest.removeListener('unpipe', onunpipe);
5583 src.removeListener('end', onend);
5584 src.removeListener('end', cleanup);
5585 src.removeListener('data', ondata);
5586
5587 // if the reader is waiting for a drain event from this
5588 // specific writer, then it would cause it to never start
5589 // flowing again.
5590 // So, if this is awaiting a drain, then we just call it now.
5591 // If we don't know, then assume that we are waiting for one.
5592 if (state.awaitDrain &&
5593 (!dest._writableState || dest._writableState.needDrain))
5594 ondrain();
5595 }
5596
5597 src.on('data', ondata);
5598 function ondata(chunk) {
5599 debug('ondata');
5600 var ret = dest.write(chunk);
5601 if (false === ret) {
5602 debug('false write response, pause',
5603 src._readableState.awaitDrain);
5604 src._readableState.awaitDrain++;
5605 src.pause();
5606 }
5607 }
5608
5609 // if the dest has an error, then stop piping into it.
5610 // however, don't suppress the throwing behavior for this.
5611 function onerror(er) {
5612 debug('onerror', er);
5613 unpipe();
5614 dest.removeListener('error', onerror);
5615 if (EE.listenerCount(dest, 'error') === 0)
5616 dest.emit('error', er);
5617 }
5618 // This is a brutally ugly hack to make sure that our error handler
5619 // is attached before any userland ones. NEVER DO THIS.
5620 if (!dest._events || !dest._events.error)
5621 dest.on('error', onerror);
5622 else if (isArray(dest._events.error))
5623 dest._events.error.unshift(onerror);
5624 else
5625 dest._events.error = [onerror, dest._events.error];
5626
5627
5628
5629 // Both close and finish should trigger unpipe, but only once.
5630 function onclose() {
5631 dest.removeListener('finish', onfinish);
5632 unpipe();
5633 }
5634 dest.once('close', onclose);
5635 function onfinish() {
5636 debug('onfinish');
5637 dest.removeListener('close', onclose);
5638 unpipe();
5639 }
5640 dest.once('finish', onfinish);
5641
5642 function unpipe() {
5643 debug('unpipe');
5644 src.unpipe(dest);
5645 }
5646
5647 // tell the dest that it's being piped to
5648 dest.emit('pipe', src);
5649
5650 // start the flow if it hasn't been started already.
5651 if (!state.flowing) {
5652 debug('pipe resume');
5653 src.resume();
5654 }
5655
5656 return dest;
5657 };
5658
5659 function pipeOnDrain(src) {
5660 return function() {
5661 var state = src._readableState;
5662 debug('pipeOnDrain', state.awaitDrain);
5663 if (state.awaitDrain)
5664 state.awaitDrain--;
5665 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5666 state.flowing = true;
5667 flow(src);
5668 }
5669 };
5670 }
5671
5672
5673 Readable.prototype.unpipe = function(dest) {
5674 var state = this._readableState;
5675
5676 // if we're not piping anywhere, then do nothing.
5677 if (state.pipesCount === 0)
5678 return this;
5679
5680 // just one destination. most common case.
5681 if (state.pipesCount === 1) {
5682 // passed in one, but it's not the right one.
5683 if (dest && dest !== state.pipes)
5684 return this;
5685
5686 if (!dest)
5687 dest = state.pipes;
5688
5689 // got a match.
5690 state.pipes = null;
5691 state.pipesCount = 0;
5692 state.flowing = false;
5693 if (dest)
5694 dest.emit('unpipe', this);
5695 return this;
5696 }
5697
5698 // slow case. multiple pipe destinations.
5699
5700 if (!dest) {
5701 // remove all.
5702 var dests = state.pipes;
5703 var len = state.pipesCount;
5704 state.pipes = null;
5705 state.pipesCount = 0;
5706 state.flowing = false;
5707
5708 for (var i = 0; i < len; i++)
5709 dests[i].emit('unpipe', this);
5710 return this;
5711 }
5712
5713 // try to find the right one.
5714 var i = indexOf(state.pipes, dest);
5715 if (i === -1)
5716 return this;
5717
5718 state.pipes.splice(i, 1);
5719 state.pipesCount -= 1;
5720 if (state.pipesCount === 1)
5721 state.pipes = state.pipes[0];
5722
5723 dest.emit('unpipe', this);
5724
5725 return this;
5726 };
5727
5728 // set up data events if they are asked for
5729 // Ensure readable listeners eventually get something
5730 Readable.prototype.on = function(ev, fn) {
5731 var res = Stream.prototype.on.call(this, ev, fn);
5732
5733 // If listening to data, and it has not explicitly been paused,
5734 // then call resume to start the flow of data on the next tick.
5735 if (ev === 'data' && false !== this._readableState.flowing) {
5736 this.resume();
5737 }
5738
5739 if (ev === 'readable' && this.readable) {
5740 var state = this._readableState;
5741 if (!state.readableListening) {
5742 state.readableListening = true;
5743 state.emittedReadable = false;
5744 state.needReadable = true;
5745 if (!state.reading) {
5746 var self = this;
5747 process.nextTick(function() {
5748 debug('readable nexttick read 0');
5749 self.read(0);
5750 });
5751 } else if (state.length) {
5752 emitReadable(this, state);
5753 }
5754 }
5755 }
5756
5757 return res;
5758 };
5759 Readable.prototype.addListener = Readable.prototype.on;
5760
5761 // pause() and resume() are remnants of the legacy readable stream API
5762 // If the user uses them, then switch into old mode.
5763 Readable.prototype.resume = function() {
5764 var state = this._readableState;
5765 if (!state.flowing) {
5766 debug('resume');
5767 state.flowing = true;
5768 if (!state.reading) {
5769 debug('resume read 0');
5770 this.read(0);
5771 }
5772 resume(this, state);
5773 }
5774 return this;
5775 };
5776
5777 function resume(stream, state) {
5778 if (!state.resumeScheduled) {
5779 state.resumeScheduled = true;
5780 process.nextTick(function() {
5781 resume_(stream, state);
5782 });
5783 }
5784 }
5785
5786 function resume_(stream, state) {
5787 state.resumeScheduled = false;
5788 stream.emit('resume');
5789 flow(stream);
5790 if (state.flowing && !state.reading)
5791 stream.read(0);
5792 }
5793
5794 Readable.prototype.pause = function() {
5795 debug('call pause flowing=%j', this._readableState.flowing);
5796 if (false !== this._readableState.flowing) {
5797 debug('pause');
5798 this._readableState.flowing = false;
5799 this.emit('pause');
5800 }
5801 return this;
5802 };
5803
5804 function flow(stream) {
5805 var state = stream._readableState;
5806 debug('flow', state.flowing);
5807 if (state.flowing) {
5808 do {
5809 var chunk = stream.read();
5810 } while (null !== chunk && state.flowing);
5811 }
5812 }
5813
5814 // wrap an old-style stream as the async data source.
5815 // This is *not* part of the readable stream interface.
5816 // It is an ugly unfortunate mess of history.
5817 Readable.prototype.wrap = function(stream) {
5818 var state = this._readableState;
5819 var paused = false;
5820
5821 var self = this;
5822 stream.on('end', function() {
5823 debug('wrapped end');
5824 if (state.decoder && !state.ended) {
5825 var chunk = state.decoder.end();
5826 if (chunk && chunk.length)
5827 self.push(chunk);
5828 }
5829
5830 self.push(null);
5831 });
5832
5833 stream.on('data', function(chunk) {
5834 debug('wrapped data');
5835 if (state.decoder)
5836 chunk = state.decoder.write(chunk);
5837 if (!chunk || !state.objectMode && !chunk.length)
5838 return;
5839
5840 var ret = self.push(chunk);
5841 if (!ret) {
5842 paused = true;
5843 stream.pause();
5844 }
5845 });
5846
5847 // proxy all the other methods.
5848 // important when wrapping filters and duplexes.
5849 for (var i in stream) {
5850 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5851 this[i] = function(method) { return function() {
5852 return stream[method].apply(stream, arguments);
5853 }}(i);
5854 }
5855 }
5856
5857 // proxy certain important events.
5858 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5859 forEach(events, function(ev) {
5860 stream.on(ev, self.emit.bind(self, ev));
5861 });
5862
5863 // when we try to consume some more bytes, simply unpause the
5864 // underlying stream.
5865 self._read = function(n) {
5866 debug('wrapped _read', n);
5867 if (paused) {
5868 paused = false;
5869 stream.resume();
5870 }
5871 };
5872
5873 return self;
5874 };
5875
5876
5877
5878 // exposed for testing purposes only.
5879 Readable._fromList = fromList;
5880
5881 // Pluck off n bytes from an array of buffers.
5882 // Length is the combined lengths of all the buffers in the list.
5883 function fromList(n, state) {
5884 var list = state.buffer;
5885 var length = state.length;
5886 var stringMode = !!state.decoder;
5887 var objectMode = !!state.objectMode;
5888 var ret;
5889
5890 // nothing in the list, definitely empty.
5891 if (list.length === 0)
5892 return null;
5893
5894 if (length === 0)
5895 ret = null;
5896 else if (objectMode)
5897 ret = list.shift();
5898 else if (!n || n >= length) {
5899 // read it all, truncate the array.
5900 if (stringMode)
5901 ret = list.join('');
5902 else
5903 ret = Buffer.concat(list, length);
5904 list.length = 0;
5905 } else {
5906 // read just some of it.
5907 if (n < list[0].length) {
5908 // just take a part of the first list item.
5909 // slice is the same for buffers and strings.
5910 var buf = list[0];
5911 ret = buf.slice(0, n);
5912 list[0] = buf.slice(n);
5913 } else if (n === list[0].length) {
5914 // first list is a perfect match
5915 ret = list.shift();
5916 } else {
5917 // complex case.
5918 // we have enough to cover it, but it spans past the first buffer.
5919 if (stringMode)
5920 ret = '';
5921 else
5922 ret = new Buffer(n);
5923
5924 var c = 0;
5925 for (var i = 0, l = list.length; i < l && c < n; i++) {
5926 var buf = list[0];
5927 var cpy = Math.min(n - c, buf.length);
5928
5929 if (stringMode)
5930 ret += buf.slice(0, cpy);
5931 else
5932 buf.copy(ret, c, 0, cpy);
5933
5934 if (cpy < buf.length)
5935 list[0] = buf.slice(cpy);
5936 else
5937 list.shift();
5938
5939 c += cpy;
5940 }
5941 }
5942 }
5943
5944 return ret;
5945 }
5946
5947 function endReadable(stream) {
5948 var state = stream._readableState;
5949
5950 // If we get here before consuming all the bytes, then that is a
5951 // bug in node. Should never happen.
5952 if (state.length > 0)
5953 throw new Error('endReadable called on non-empty stream');
5954
5955 if (!state.endEmitted) {
5956 state.ended = true;
5957 process.nextTick(function() {
5958 // Check that we didn't get one last unshift.
5959 if (!state.endEmitted && state.length === 0) {
5960 state.endEmitted = true;
5961 stream.readable = false;
5962 stream.emit('end');
5963 }
5964 });
5965 }
5966 }
5967
5968 function forEach (xs, f) {
5969 for (var i = 0, l = xs.length; i < l; i++) {
5970 f(xs[i], i);
5971 }
5972 }
5973
5974 function indexOf (xs, x) {
5975 for (var i = 0, l = xs.length; i < l; i++) {
5976 if (xs[i] === x) return i;
5977 }
5978 return -1;
5979 }
5980
5981 }).call(this,require('_process'))
5982 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
5983 // Copyright Joyent, Inc. and other Node contributors.
5984 //
5985 // Permission is hereby granted, free of charge, to any person obtaining a
5986 // copy of this software and associated documentation files (the
5987 // "Software"), to deal in the Software without restriction, including
5988 // without limitation the rights to use, copy, modify, merge, publish,
5989 // distribute, sublicense, and/or sell copies of the Software, and to permit
5990 // persons to whom the Software is furnished to do so, subject to the
5991 // following conditions:
5992 //
5993 // The above copyright notice and this permission notice shall be included
5994 // in all copies or substantial portions of the Software.
5995 //
5996 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5997 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5998 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5999 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6000 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6001 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6002 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6003
6004
6005 // a transform stream is a readable/writable stream where you do
6006 // something with the data. Sometimes it's called a "filter",
6007 // but that's not a great name for it, since that implies a thing where
6008 // some bits pass through, and others are simply ignored. (That would
6009 // be a valid example of a transform, of course.)
6010 //
6011 // While the output is causally related to the input, it's not a
6012 // necessarily symmetric or synchronous transformation. For example,
6013 // a zlib stream might take multiple plain-text writes(), and then
6014 // emit a single compressed chunk some time in the future.
6015 //
6016 // Here's how this works:
6017 //
6018 // The Transform stream has all the aspects of the readable and writable
6019 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6020 // internally, and returns false if there's a lot of pending writes
6021 // buffered up. When you call read(), that calls _read(n) until
6022 // there's enough pending readable data buffered up.
6023 //
6024 // In a transform stream, the written data is placed in a buffer. When
6025 // _read(n) is called, it transforms the queued up data, calling the
6026 // buffered _write cb's as it consumes chunks. If consuming a single
6027 // written chunk would result in multiple output chunks, then the first
6028 // outputted bit calls the readcb, and subsequent chunks just go into
6029 // the read buffer, and will cause it to emit 'readable' if necessary.
6030 //
6031 // This way, back-pressure is actually determined by the reading side,
6032 // since _read has to be called to start processing a new chunk. However,
6033 // a pathological inflate type of transform can cause excessive buffering
6034 // here. For example, imagine a stream where every byte of input is
6035 // interpreted as an integer from 0-255, and then results in that many
6036 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6037 // 1kb of data being output. In this case, you could write a very small
6038 // amount of input, and end up with a very large amount of output. In
6039 // such a pathological inflating mechanism, there'd be no way to tell
6040 // the system to stop doing the transform. A single 4MB write could
6041 // cause the system to run out of memory.
6042 //
6043 // However, even in such a pathological case, only a single written chunk
6044 // would be consumed, and then the rest would wait (un-transformed) until
6045 // the results of the previous transformed chunk were consumed.
6046
6047 module.exports = Transform;
6048
6049 var Duplex = require('./_stream_duplex');
6050
6051 /*<replacement>*/
6052 var util = require('core-util-is');
6053 util.inherits = require('inherits');
6054 /*</replacement>*/
6055
6056 util.inherits(Transform, Duplex);
6057
6058
6059 function TransformState(options, stream) {
6060 this.afterTransform = function(er, data) {
6061 return afterTransform(stream, er, data);
6062 };
6063
6064 this.needTransform = false;
6065 this.transforming = false;
6066 this.writecb = null;
6067 this.writechunk = null;
6068 }
6069
6070 function afterTransform(stream, er, data) {
6071 var ts = stream._transformState;
6072 ts.transforming = false;
6073
6074 var cb = ts.writecb;
6075
6076 if (!cb)
6077 return stream.emit('error', new Error('no writecb in Transform class'));
6078
6079 ts.writechunk = null;
6080 ts.writecb = null;
6081
6082 if (!util.isNullOrUndefined(data))
6083 stream.push(data);
6084
6085 if (cb)
6086 cb(er);
6087
6088 var rs = stream._readableState;
6089 rs.reading = false;
6090 if (rs.needReadable || rs.length < rs.highWaterMark) {
6091 stream._read(rs.highWaterMark);
6092 }
6093 }
6094
6095
6096 function Transform(options) {
6097 if (!(this instanceof Transform))
6098 return new Transform(options);
6099
6100 Duplex.call(this, options);
6101
6102 this._transformState = new TransformState(options, this);
6103
6104 // when the writable side finishes, then flush out anything remaining.
6105 var stream = this;
6106
6107 // start out asking for a readable event once data is transformed.
6108 this._readableState.needReadable = true;
6109
6110 // we have implemented the _read method, and done the other things
6111 // that Readable wants before the first _read call, so unset the
6112 // sync guard flag.
6113 this._readableState.sync = false;
6114
6115 this.once('prefinish', function() {
6116 if (util.isFunction(this._flush))
6117 this._flush(function(er) {
6118 done(stream, er);
6119 });
6120 else
6121 done(stream);
6122 });
6123 }
6124
6125 Transform.prototype.push = function(chunk, encoding) {
6126 this._transformState.needTransform = false;
6127 return Duplex.prototype.push.call(this, chunk, encoding);
6128 };
6129
6130 // This is the part where you do stuff!
6131 // override this function in implementation classes.
6132 // 'chunk' is an input chunk.
6133 //
6134 // Call `push(newChunk)` to pass along transformed output
6135 // to the readable side. You may call 'push' zero or more times.
6136 //
6137 // Call `cb(err)` when you are done with this chunk. If you pass
6138 // an error, then that'll put the hurt on the whole operation. If you
6139 // never call cb(), then you'll never get another chunk.
6140 Transform.prototype._transform = function(chunk, encoding, cb) {
6141 throw new Error('not implemented');
6142 };
6143
6144 Transform.prototype._write = function(chunk, encoding, cb) {
6145 var ts = this._transformState;
6146 ts.writecb = cb;
6147 ts.writechunk = chunk;
6148 ts.writeencoding = encoding;
6149 if (!ts.transforming) {
6150 var rs = this._readableState;
6151 if (ts.needTransform ||
6152 rs.needReadable ||
6153 rs.length < rs.highWaterMark)
6154 this._read(rs.highWaterMark);
6155 }
6156 };
6157
6158 // Doesn't matter what the args are here.
6159 // _transform does all the work.
6160 // That we got here means that the readable side wants more data.
6161 Transform.prototype._read = function(n) {
6162 var ts = this._transformState;
6163
6164 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6165 ts.transforming = true;
6166 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6167 } else {
6168 // mark that we need a transform, so that any data that comes in
6169 // will get processed, now that we've asked for it.
6170 ts.needTransform = true;
6171 }
6172 };
6173
6174
6175 function done(stream, er) {
6176 if (er)
6177 return stream.emit('error', er);
6178
6179 // if there's nothing in the write buffer, then that means
6180 // that nothing more will ever be provided
6181 var ws = stream._writableState;
6182 var ts = stream._transformState;
6183
6184 if (ws.length)
6185 throw new Error('calling transform done when ws.length != 0');
6186
6187 if (ts.transforming)
6188 throw new Error('calling transform done when still transforming');
6189
6190 return stream.push(null);
6191 }
6192
6193 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6194 (function (process){
6195 // Copyright Joyent, Inc. and other Node contributors.
6196 //
6197 // Permission is hereby granted, free of charge, to any person obtaining a
6198 // copy of this software and associated documentation files (the
6199 // "Software"), to deal in the Software without restriction, including
6200 // without limitation the rights to use, copy, modify, merge, publish,
6201 // distribute, sublicense, and/or sell copies of the Software, and to permit
6202 // persons to whom the Software is furnished to do so, subject to the
6203 // following conditions:
6204 //
6205 // The above copyright notice and this permission notice shall be included
6206 // in all copies or substantial portions of the Software.
6207 //
6208 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6209 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6210 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6211 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6212 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6213 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6214 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6215
6216 // A bit simpler than readable streams.
6217 // Implement an async ._write(chunk, cb), and it'll handle all
6218 // the drain event emission and buffering.
6219
6220 module.exports = Writable;
6221
6222 /*<replacement>*/
6223 var Buffer = require('buffer').Buffer;
6224 /*</replacement>*/
6225
6226 Writable.WritableState = WritableState;
6227
6228
6229 /*<replacement>*/
6230 var util = require('core-util-is');
6231 util.inherits = require('inherits');
6232 /*</replacement>*/
6233
6234 var Stream = require('stream');
6235
6236 util.inherits(Writable, Stream);
6237
6238 function WriteReq(chunk, encoding, cb) {
6239 this.chunk = chunk;
6240 this.encoding = encoding;
6241 this.callback = cb;
6242 }
6243
6244 function WritableState(options, stream) {
6245 var Duplex = require('./_stream_duplex');
6246
6247 options = options || {};
6248
6249 // the point at which write() starts returning false
6250 // Note: 0 is a valid value, means that we always return false if
6251 // the entire buffer is not flushed immediately on write()
6252 var hwm = options.highWaterMark;
6253 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6254 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6255
6256 // object stream flag to indicate whether or not this stream
6257 // contains buffers or objects.
6258 this.objectMode = !!options.objectMode;
6259
6260 if (stream instanceof Duplex)
6261 this.objectMode = this.objectMode || !!options.writableObjectMode;
6262
6263 // cast to ints.
6264 this.highWaterMark = ~~this.highWaterMark;
6265
6266 this.needDrain = false;
6267 // at the start of calling end()
6268 this.ending = false;
6269 // when end() has been called, and returned
6270 this.ended = false;
6271 // when 'finish' is emitted
6272 this.finished = false;
6273
6274 // should we decode strings into buffers before passing to _write?
6275 // this is here so that some node-core streams can optimize string
6276 // handling at a lower level.
6277 var noDecode = options.decodeStrings === false;
6278 this.decodeStrings = !noDecode;
6279
6280 // Crypto is kind of old and crusty. Historically, its default string
6281 // encoding is 'binary' so we have to make this configurable.
6282 // Everything else in the universe uses 'utf8', though.
6283 this.defaultEncoding = options.defaultEncoding || 'utf8';
6284
6285 // not an actual buffer we keep track of, but a measurement
6286 // of how much we're waiting to get pushed to some underlying
6287 // socket or file.
6288 this.length = 0;
6289
6290 // a flag to see when we're in the middle of a write.
6291 this.writing = false;
6292
6293 // when true all writes will be buffered until .uncork() call
6294 this.corked = 0;
6295
6296 // a flag to be able to tell if the onwrite cb is called immediately,
6297 // or on a later tick. We set this to true at first, because any
6298 // actions that shouldn't happen until "later" should generally also
6299 // not happen before the first write call.
6300 this.sync = true;
6301
6302 // a flag to know if we're processing previously buffered items, which
6303 // may call the _write() callback in the same tick, so that we don't
6304 // end up in an overlapped onwrite situation.
6305 this.bufferProcessing = false;
6306
6307 // the callback that's passed to _write(chunk,cb)
6308 this.onwrite = function(er) {
6309 onwrite(stream, er);
6310 };
6311
6312 // the callback that the user supplies to write(chunk,encoding,cb)
6313 this.writecb = null;
6314
6315 // the amount that is being written when _write is called.
6316 this.writelen = 0;
6317
6318 this.buffer = [];
6319
6320 // number of pending user-supplied write callbacks
6321 // this must be 0 before 'finish' can be emitted
6322 this.pendingcb = 0;
6323
6324 // emit prefinish if the only thing we're waiting for is _write cbs
6325 // This is relevant for synchronous Transform streams
6326 this.prefinished = false;
6327
6328 // True if the error was already emitted and should not be thrown again
6329 this.errorEmitted = false;
6330 }
6331
6332 function Writable(options) {
6333 var Duplex = require('./_stream_duplex');
6334
6335 // Writable ctor is applied to Duplexes, though they're not
6336 // instanceof Writable, they're instanceof Readable.
6337 if (!(this instanceof Writable) && !(this instanceof Duplex))
6338 return new Writable(options);
6339
6340 this._writableState = new WritableState(options, this);
6341
6342 // legacy.
6343 this.writable = true;
6344
6345 Stream.call(this);
6346 }
6347
6348 // Otherwise people can pipe Writable streams, which is just wrong.
6349 Writable.prototype.pipe = function() {
6350 this.emit('error', new Error('Cannot pipe. Not readable.'));
6351 };
6352
6353
6354 function writeAfterEnd(stream, state, cb) {
6355 var er = new Error('write after end');
6356 // TODO: defer error events consistently everywhere, not just the cb
6357 stream.emit('error', er);
6358 process.nextTick(function() {
6359 cb(er);
6360 });
6361 }
6362
6363 // If we get something that is not a buffer, string, null, or undefined,
6364 // and we're not in objectMode, then that's an error.
6365 // Otherwise stream chunks are all considered to be of length=1, and the
6366 // watermarks determine how many objects to keep in the buffer, rather than
6367 // how many bytes or characters.
6368 function validChunk(stream, state, chunk, cb) {
6369 var valid = true;
6370 if (!util.isBuffer(chunk) &&
6371 !util.isString(chunk) &&
6372 !util.isNullOrUndefined(chunk) &&
6373 !state.objectMode) {
6374 var er = new TypeError('Invalid non-string/buffer chunk');
6375 stream.emit('error', er);
6376 process.nextTick(function() {
6377 cb(er);
6378 });
6379 valid = false;
6380 }
6381 return valid;
6382 }
6383
6384 Writable.prototype.write = function(chunk, encoding, cb) {
6385 var state = this._writableState;
6386 var ret = false;
6387
6388 if (util.isFunction(encoding)) {
6389 cb = encoding;
6390 encoding = null;
6391 }
6392
6393 if (util.isBuffer(chunk))
6394 encoding = 'buffer';
6395 else if (!encoding)
6396 encoding = state.defaultEncoding;
6397
6398 if (!util.isFunction(cb))
6399 cb = function() {};
6400
6401 if (state.ended)
6402 writeAfterEnd(this, state, cb);
6403 else if (validChunk(this, state, chunk, cb)) {
6404 state.pendingcb++;
6405 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6406 }
6407
6408 return ret;
6409 };
6410
6411 Writable.prototype.cork = function() {
6412 var state = this._writableState;
6413
6414 state.corked++;
6415 };
6416
6417 Writable.prototype.uncork = function() {
6418 var state = this._writableState;
6419
6420 if (state.corked) {
6421 state.corked--;
6422
6423 if (!state.writing &&
6424 !state.corked &&
6425 !state.finished &&
6426 !state.bufferProcessing &&
6427 state.buffer.length)
6428 clearBuffer(this, state);
6429 }
6430 };
6431
6432 function decodeChunk(state, chunk, encoding) {
6433 if (!state.objectMode &&
6434 state.decodeStrings !== false &&
6435 util.isString(chunk)) {
6436 chunk = new Buffer(chunk, encoding);
6437 }
6438 return chunk;
6439 }
6440
6441 // if we're already writing something, then just put this
6442 // in the queue, and wait our turn. Otherwise, call _write
6443 // If we return false, then we need a drain event, so set that flag.
6444 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6445 chunk = decodeChunk(state, chunk, encoding);
6446 if (util.isBuffer(chunk))
6447 encoding = 'buffer';
6448 var len = state.objectMode ? 1 : chunk.length;
6449
6450 state.length += len;
6451
6452 var ret = state.length < state.highWaterMark;
6453 // we must ensure that previous needDrain will not be reset to false.
6454 if (!ret)
6455 state.needDrain = true;
6456
6457 if (state.writing || state.corked)
6458 state.buffer.push(new WriteReq(chunk, encoding, cb));
6459 else
6460 doWrite(stream, state, false, len, chunk, encoding, cb);
6461
6462 return ret;
6463 }
6464
6465 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6466 state.writelen = len;
6467 state.writecb = cb;
6468 state.writing = true;
6469 state.sync = true;
6470 if (writev)
6471 stream._writev(chunk, state.onwrite);
6472 else
6473 stream._write(chunk, encoding, state.onwrite);
6474 state.sync = false;
6475 }
6476
6477 function onwriteError(stream, state, sync, er, cb) {
6478 if (sync)
6479 process.nextTick(function() {
6480 state.pendingcb--;
6481 cb(er);
6482 });
6483 else {
6484 state.pendingcb--;
6485 cb(er);
6486 }
6487
6488 stream._writableState.errorEmitted = true;
6489 stream.emit('error', er);
6490 }
6491
6492 function onwriteStateUpdate(state) {
6493 state.writing = false;
6494 state.writecb = null;
6495 state.length -= state.writelen;
6496 state.writelen = 0;
6497 }
6498
6499 function onwrite(stream, er) {
6500 var state = stream._writableState;
6501 var sync = state.sync;
6502 var cb = state.writecb;
6503
6504 onwriteStateUpdate(state);
6505
6506 if (er)
6507 onwriteError(stream, state, sync, er, cb);
6508 else {
6509 // Check if we're actually ready to finish, but don't emit yet
6510 var finished = needFinish(stream, state);
6511
6512 if (!finished &&
6513 !state.corked &&
6514 !state.bufferProcessing &&
6515 state.buffer.length) {
6516 clearBuffer(stream, state);
6517 }
6518
6519 if (sync) {
6520 process.nextTick(function() {
6521 afterWrite(stream, state, finished, cb);
6522 });
6523 } else {
6524 afterWrite(stream, state, finished, cb);
6525 }
6526 }
6527 }
6528
6529 function afterWrite(stream, state, finished, cb) {
6530 if (!finished)
6531 onwriteDrain(stream, state);
6532 state.pendingcb--;
6533 cb();
6534 finishMaybe(stream, state);
6535 }
6536
6537 // Must force callback to be called on nextTick, so that we don't
6538 // emit 'drain' before the write() consumer gets the 'false' return
6539 // value, and has a chance to attach a 'drain' listener.
6540 function onwriteDrain(stream, state) {
6541 if (state.length === 0 && state.needDrain) {
6542 state.needDrain = false;
6543 stream.emit('drain');
6544 }
6545 }
6546
6547
6548 // if there's something in the buffer waiting, then process it
6549 function clearBuffer(stream, state) {
6550 state.bufferProcessing = true;
6551
6552 if (stream._writev && state.buffer.length > 1) {
6553 // Fast case, write everything using _writev()
6554 var cbs = [];
6555 for (var c = 0; c < state.buffer.length; c++)
6556 cbs.push(state.buffer[c].callback);
6557
6558 // count the one we are adding, as well.
6559 // TODO(isaacs) clean this up
6560 state.pendingcb++;
6561 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6562 for (var i = 0; i < cbs.length; i++) {
6563 state.pendingcb--;
6564 cbs[i](err);
6565 }
6566 });
6567
6568 // Clear buffer
6569 state.buffer = [];
6570 } else {
6571 // Slow case, write chunks one-by-one
6572 for (var c = 0; c < state.buffer.length; c++) {
6573 var entry = state.buffer[c];
6574 var chunk = entry.chunk;
6575 var encoding = entry.encoding;
6576 var cb = entry.callback;
6577 var len = state.objectMode ? 1 : chunk.length;
6578
6579 doWrite(stream, state, false, len, chunk, encoding, cb);
6580
6581 // if we didn't call the onwrite immediately, then
6582 // it means that we need to wait until it does.
6583 // also, that means that the chunk and cb are currently
6584 // being processed, so move the buffer counter past them.
6585 if (state.writing) {
6586 c++;
6587 break;
6588 }
6589 }
6590
6591 if (c < state.buffer.length)
6592 state.buffer = state.buffer.slice(c);
6593 else
6594 state.buffer.length = 0;
6595 }
6596
6597 state.bufferProcessing = false;
6598 }
6599
6600 Writable.prototype._write = function(chunk, encoding, cb) {
6601 cb(new Error('not implemented'));
6602
6603 };
6604
6605 Writable.prototype._writev = null;
6606
6607 Writable.prototype.end = function(chunk, encoding, cb) {
6608 var state = this._writableState;
6609
6610 if (util.isFunction(chunk)) {
6611 cb = chunk;
6612 chunk = null;
6613 encoding = null;
6614 } else if (util.isFunction(encoding)) {
6615 cb = encoding;
6616 encoding = null;
6617 }
6618
6619 if (!util.isNullOrUndefined(chunk))
6620 this.write(chunk, encoding);
6621
6622 // .end() fully uncorks
6623 if (state.corked) {
6624 state.corked = 1;
6625 this.uncork();
6626 }
6627
6628 // ignore unnecessary end() calls.
6629 if (!state.ending && !state.finished)
6630 endWritable(this, state, cb);
6631 };
6632
6633
6634 function needFinish(stream, state) {
6635 return (state.ending &&
6636 state.length === 0 &&
6637 !state.finished &&
6638 !state.writing);
6639 }
6640
6641 function prefinish(stream, state) {
6642 if (!state.prefinished) {
6643 state.prefinished = true;
6644 stream.emit('prefinish');
6645 }
6646 }
6647
6648 function finishMaybe(stream, state) {
6649 var need = needFinish(stream, state);
6650 if (need) {
6651 if (state.pendingcb === 0) {
6652 prefinish(stream, state);
6653 state.finished = true;
6654 stream.emit('finish');
6655 } else
6656 prefinish(stream, state);
6657 }
6658 return need;
6659 }
6660
6661 function endWritable(stream, state, cb) {
6662 state.ending = true;
6663 finishMaybe(stream, state);
6664 if (cb) {
6665 if (state.finished)
6666 process.nextTick(cb);
6667 else
6668 stream.once('finish', cb);
6669 }
6670 state.ended = true;
6671 }
6672
6673 }).call(this,require('_process'))
6674 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6675 (function (Buffer){
6676 // Copyright Joyent, Inc. and other Node contributors.
6677 //
6678 // Permission is hereby granted, free of charge, to any person obtaining a
6679 // copy of this software and associated documentation files (the
6680 // "Software"), to deal in the Software without restriction, including
6681 // without limitation the rights to use, copy, modify, merge, publish,
6682 // distribute, sublicense, and/or sell copies of the Software, and to permit
6683 // persons to whom the Software is furnished to do so, subject to the
6684 // following conditions:
6685 //
6686 // The above copyright notice and this permission notice shall be included
6687 // in all copies or substantial portions of the Software.
6688 //
6689 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6690 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6691 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6692 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6693 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6694 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6695 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6696
6697 // NOTE: These type checking functions intentionally don't use `instanceof`
6698 // because it is fragile and can be easily faked with `Object.create()`.
6699 function isArray(ar) {
6700 return Array.isArray(ar);
6701 }
6702 exports.isArray = isArray;
6703
6704 function isBoolean(arg) {
6705 return typeof arg === 'boolean';
6706 }
6707 exports.isBoolean = isBoolean;
6708
6709 function isNull(arg) {
6710 return arg === null;
6711 }
6712 exports.isNull = isNull;
6713
6714 function isNullOrUndefined(arg) {
6715 return arg == null;
6716 }
6717 exports.isNullOrUndefined = isNullOrUndefined;
6718
6719 function isNumber(arg) {
6720 return typeof arg === 'number';
6721 }
6722 exports.isNumber = isNumber;
6723
6724 function isString(arg) {
6725 return typeof arg === 'string';
6726 }
6727 exports.isString = isString;
6728
6729 function isSymbol(arg) {
6730 return typeof arg === 'symbol';
6731 }
6732 exports.isSymbol = isSymbol;
6733
6734 function isUndefined(arg) {
6735 return arg === void 0;
6736 }
6737 exports.isUndefined = isUndefined;
6738
6739 function isRegExp(re) {
6740 return isObject(re) && objectToString(re) === '[object RegExp]';
6741 }
6742 exports.isRegExp = isRegExp;
6743
6744 function isObject(arg) {
6745 return typeof arg === 'object' && arg !== null;
6746 }
6747 exports.isObject = isObject;
6748
6749 function isDate(d) {
6750 return isObject(d) && objectToString(d) === '[object Date]';
6751 }
6752 exports.isDate = isDate;
6753
6754 function isError(e) {
6755 return isObject(e) &&
6756 (objectToString(e) === '[object Error]' || e instanceof Error);
6757 }
6758 exports.isError = isError;
6759
6760 function isFunction(arg) {
6761 return typeof arg === 'function';
6762 }
6763 exports.isFunction = isFunction;
6764
6765 function isPrimitive(arg) {
6766 return arg === null ||
6767 typeof arg === 'boolean' ||
6768 typeof arg === 'number' ||
6769 typeof arg === 'string' ||
6770 typeof arg === 'symbol' || // ES6 symbol
6771 typeof arg === 'undefined';
6772 }
6773 exports.isPrimitive = isPrimitive;
6774
6775 function isBuffer(arg) {
6776 return Buffer.isBuffer(arg);
6777 }
6778 exports.isBuffer = isBuffer;
6779
6780 function objectToString(o) {
6781 return Object.prototype.toString.call(o);
6782 }
6783 }).call(this,require("buffer").Buffer)
6784 },{"buffer":7}],22:[function(require,module,exports){
6785 module.exports = require("./lib/_stream_passthrough.js")
6786
6787 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6788 exports = module.exports = require('./lib/_stream_readable.js');
6789 exports.Stream = require('stream');
6790 exports.Readable = exports;
6791 exports.Writable = require('./lib/_stream_writable.js');
6792 exports.Duplex = require('./lib/_stream_duplex.js');
6793 exports.Transform = require('./lib/_stream_transform.js');
6794 exports.PassThrough = require('./lib/_stream_passthrough.js');
6795
6796 },{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
6797 module.exports = require("./lib/_stream_transform.js")
6798
6799 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6800 module.exports = require("./lib/_stream_writable.js")
6801
6802 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6803 // Copyright Joyent, Inc. and other Node contributors.
6804 //
6805 // Permission is hereby granted, free of charge, to any person obtaining a
6806 // copy of this software and associated documentation files (the
6807 // "Software"), to deal in the Software without restriction, including
6808 // without limitation the rights to use, copy, modify, merge, publish,
6809 // distribute, sublicense, and/or sell copies of the Software, and to permit
6810 // persons to whom the Software is furnished to do so, subject to the
6811 // following conditions:
6812 //
6813 // The above copyright notice and this permission notice shall be included
6814 // in all copies or substantial portions of the Software.
6815 //
6816 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6817 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6818 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6819 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6820 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6821 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6822 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6823
6824 module.exports = Stream;
6825
6826 var EE = require('events').EventEmitter;
6827 var inherits = require('inherits');
6828
6829 inherits(Stream, EE);
6830 Stream.Readable = require('readable-stream/readable.js');
6831 Stream.Writable = require('readable-stream/writable.js');
6832 Stream.Duplex = require('readable-stream/duplex.js');
6833 Stream.Transform = require('readable-stream/transform.js');
6834 Stream.PassThrough = require('readable-stream/passthrough.js');
6835
6836 // Backwards-compat with node 0.4.x
6837 Stream.Stream = Stream;
6838
6839
6840
6841 // old-style streams. Note that the pipe method (the only relevant
6842 // part of this class) is overridden in the Readable class.
6843
6844 function Stream() {
6845 EE.call(this);
6846 }
6847
6848 Stream.prototype.pipe = function(dest, options) {
6849 var source = this;
6850
6851 function ondata(chunk) {
6852 if (dest.writable) {
6853 if (false === dest.write(chunk) && source.pause) {
6854 source.pause();
6855 }
6856 }
6857 }
6858
6859 source.on('data', ondata);
6860
6861 function ondrain() {
6862 if (source.readable && source.resume) {
6863 source.resume();
6864 }
6865 }
6866
6867 dest.on('drain', ondrain);
6868
6869 // If the 'end' option is not supplied, dest.end() will be called when
6870 // source gets the 'end' or 'close' events. Only dest.end() once.
6871 if (!dest._isStdio && (!options || options.end !== false)) {
6872 source.on('end', onend);
6873 source.on('close', onclose);
6874 }
6875
6876 var didOnEnd = false;
6877 function onend() {
6878 if (didOnEnd) return;
6879 didOnEnd = true;
6880
6881 dest.end();
6882 }
6883
6884
6885 function onclose() {
6886 if (didOnEnd) return;
6887 didOnEnd = true;
6888
6889 if (typeof dest.destroy === 'function') dest.destroy();
6890 }
6891
6892 // don't leave dangling pipes when there are errors.
6893 function onerror(er) {
6894 cleanup();
6895 if (EE.listenerCount(this, 'error') === 0) {
6896 throw er; // Unhandled stream error in pipe.
6897 }
6898 }
6899
6900 source.on('error', onerror);
6901 dest.on('error', onerror);
6902
6903 // remove all the event listeners that were added.
6904 function cleanup() {
6905 source.removeListener('data', ondata);
6906 dest.removeListener('drain', ondrain);
6907
6908 source.removeListener('end', onend);
6909 source.removeListener('close', onclose);
6910
6911 source.removeListener('error', onerror);
6912 dest.removeListener('error', onerror);
6913
6914 source.removeListener('end', cleanup);
6915 source.removeListener('close', cleanup);
6916
6917 dest.removeListener('close', cleanup);
6918 }
6919
6920 source.on('end', cleanup);
6921 source.on('close', cleanup);
6922
6923 dest.on('close', cleanup);
6924
6925 dest.emit('pipe', source);
6926
6927 // Allow for unix-like usage: A.pipe(B).pipe(C)
6928 return dest;
6929 };
6930
6931 },{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
6932 // Copyright Joyent, Inc. and other Node contributors.
6933 //
6934 // Permission is hereby granted, free of charge, to any person obtaining a
6935 // copy of this software and associated documentation files (the
6936 // "Software"), to deal in the Software without restriction, including
6937 // without limitation the rights to use, copy, modify, merge, publish,
6938 // distribute, sublicense, and/or sell copies of the Software, and to permit
6939 // persons to whom the Software is furnished to do so, subject to the
6940 // following conditions:
6941 //
6942 // The above copyright notice and this permission notice shall be included
6943 // in all copies or substantial portions of the Software.
6944 //
6945 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6946 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6947 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6948 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6949 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6950 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6951 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6952
6953 var Buffer = require('buffer').Buffer;
6954
6955 var isBufferEncoding = Buffer.isEncoding
6956 || function(encoding) {
6957 switch (encoding && encoding.toLowerCase()) {
6958 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
6959 default: return false;
6960 }
6961 }
6962
6963
6964 function assertEncoding(encoding) {
6965 if (encoding && !isBufferEncoding(encoding)) {
6966 throw new Error('Unknown encoding: ' + encoding);
6967 }
6968 }
6969
6970 // StringDecoder provides an interface for efficiently splitting a series of
6971 // buffers into a series of JS strings without breaking apart multi-byte
6972 // characters. CESU-8 is handled as part of the UTF-8 encoding.
6973 //
6974 // @TODO Handling all encodings inside a single object makes it very difficult
6975 // to reason about this code, so it should be split up in the future.
6976 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6977 // points as used by CESU-8.
6978 var StringDecoder = exports.StringDecoder = function(encoding) {
6979 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6980 assertEncoding(encoding);
6981 switch (this.encoding) {
6982 case 'utf8':
6983 // CESU-8 represents each of Surrogate Pair by 3-bytes
6984 this.surrogateSize = 3;
6985 break;
6986 case 'ucs2':
6987 case 'utf16le':
6988 // UTF-16 represents each of Surrogate Pair by 2-bytes
6989 this.surrogateSize = 2;
6990 this.detectIncompleteChar = utf16DetectIncompleteChar;
6991 break;
6992 case 'base64':
6993 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6994 this.surrogateSize = 3;
6995 this.detectIncompleteChar = base64DetectIncompleteChar;
6996 break;
6997 default:
6998 this.write = passThroughWrite;
6999 return;
7000 }
7001
7002 // Enough space to store all bytes of a single character. UTF-8 needs 4
7003 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7004 this.charBuffer = new Buffer(6);
7005 // Number of bytes received for the current incomplete multi-byte character.
7006 this.charReceived = 0;
7007 // Number of bytes expected for the current incomplete multi-byte character.
7008 this.charLength = 0;
7009 };
7010
7011
7012 // write decodes the given buffer and returns it as JS string that is
7013 // guaranteed to not contain any partial multi-byte characters. Any partial
7014 // character found at the end of the buffer is buffered up, and will be
7015 // returned when calling write again with the remaining bytes.
7016 //
7017 // Note: Converting a Buffer containing an orphan surrogate to a String
7018 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7019 // Buffer#write) will replace incomplete surrogates with the unicode
7020 // replacement character. See https://codereview.chromium.org/121173009/ .
7021 StringDecoder.prototype.write = function(buffer) {
7022 var charStr = '';
7023 // if our last write ended with an incomplete multibyte character
7024 while (this.charLength) {
7025 // determine how many remaining bytes this buffer has to offer for this char
7026 var available = (buffer.length >= this.charLength - this.charReceived) ?
7027 this.charLength - this.charReceived :
7028 buffer.length;
7029
7030 // add the new bytes to the char buffer
7031 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7032 this.charReceived += available;
7033
7034 if (this.charReceived < this.charLength) {
7035 // still not enough chars in this buffer? wait for more ...
7036 return '';
7037 }
7038
7039 // remove bytes belonging to the current character from the buffer
7040 buffer = buffer.slice(available, buffer.length);
7041
7042 // get the character that was split
7043 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7044
7045 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7046 var charCode = charStr.charCodeAt(charStr.length - 1);
7047 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7048 this.charLength += this.surrogateSize;
7049 charStr = '';
7050 continue;
7051 }
7052 this.charReceived = this.charLength = 0;
7053
7054 // if there are no more bytes in this buffer, just emit our char
7055 if (buffer.length === 0) {
7056 return charStr;
7057 }
7058 break;
7059 }
7060
7061 // determine and set charLength / charReceived
7062 this.detectIncompleteChar(buffer);
7063
7064 var end = buffer.length;
7065 if (this.charLength) {
7066 // buffer the incomplete character bytes we got
7067 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7068 end -= this.charReceived;
7069 }
7070
7071 charStr += buffer.toString(this.encoding, 0, end);
7072
7073 var end = charStr.length - 1;
7074 var charCode = charStr.charCodeAt(end);
7075 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7076 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7077 var size = this.surrogateSize;
7078 this.charLength += size;
7079 this.charReceived += size;
7080 this.charBuffer.copy(this.charBuffer, size, 0, size);
7081 buffer.copy(this.charBuffer, 0, 0, size);
7082 return charStr.substring(0, end);
7083 }
7084
7085 // or just emit the charStr
7086 return charStr;
7087 };
7088
7089 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7090 // the end of the given buffer. If so, it sets this.charLength to the byte
7091 // length that character, and sets this.charReceived to the number of bytes
7092 // that are available for this character.
7093 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7094 // determine how many bytes we have to check at the end of this buffer
7095 var i = (buffer.length >= 3) ? 3 : buffer.length;
7096
7097 // Figure out if one of the last i bytes of our buffer announces an
7098 // incomplete char.
7099 for (; i > 0; i--) {
7100 var c = buffer[buffer.length - i];
7101
7102 // See http://en.wikipedia.org/wiki/UTF-8#Description
7103
7104 // 110XXXXX
7105 if (i == 1 && c >> 5 == 0x06) {
7106 this.charLength = 2;
7107 break;
7108 }
7109
7110 // 1110XXXX
7111 if (i <= 2 && c >> 4 == 0x0E) {
7112 this.charLength = 3;
7113 break;
7114 }
7115
7116 // 11110XXX
7117 if (i <= 3 && c >> 3 == 0x1E) {
7118 this.charLength = 4;
7119 break;
7120 }
7121 }
7122 this.charReceived = i;
7123 };
7124
7125 StringDecoder.prototype.end = function(buffer) {
7126 var res = '';
7127 if (buffer && buffer.length)
7128 res = this.write(buffer);
7129
7130 if (this.charReceived) {
7131 var cr = this.charReceived;
7132 var buf = this.charBuffer;
7133 var enc = this.encoding;
7134 res += buf.slice(0, cr).toString(enc);
7135 }
7136
7137 return res;
7138 };
7139
7140 function passThroughWrite(buffer) {
7141 return buffer.toString(this.encoding);
7142 }
7143
7144 function utf16DetectIncompleteChar(buffer) {
7145 this.charReceived = buffer.length % 2;
7146 this.charLength = this.charReceived ? 2 : 0;
7147 }
7148
7149 function base64DetectIncompleteChar(buffer) {
7150 this.charReceived = buffer.length % 3;
7151 this.charLength = this.charReceived ? 3 : 0;
7152 }
7153
7154 },{"buffer":7}],28:[function(require,module,exports){
7155 module.exports = function isBuffer(arg) {
7156 return arg && typeof arg === 'object'
7157 && typeof arg.copy === 'function'
7158 && typeof arg.fill === 'function'
7159 && typeof arg.readUInt8 === 'function';
7160 }
7161 },{}],29:[function(require,module,exports){
7162 (function (process,global){
7163 // Copyright Joyent, Inc. and other Node contributors.
7164 //
7165 // Permission is hereby granted, free of charge, to any person obtaining a
7166 // copy of this software and associated documentation files (the
7167 // "Software"), to deal in the Software without restriction, including
7168 // without limitation the rights to use, copy, modify, merge, publish,
7169 // distribute, sublicense, and/or sell copies of the Software, and to permit
7170 // persons to whom the Software is furnished to do so, subject to the
7171 // following conditions:
7172 //
7173 // The above copyright notice and this permission notice shall be included
7174 // in all copies or substantial portions of the Software.
7175 //
7176 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7177 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7178 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7179 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7180 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7181 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7182 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7183
7184 var formatRegExp = /%[sdj%]/g;
7185 exports.format = function(f) {
7186 if (!isString(f)) {
7187 var objects = [];
7188 for (var i = 0; i < arguments.length; i++) {
7189 objects.push(inspect(arguments[i]));
7190 }
7191 return objects.join(' ');
7192 }
7193
7194 var i = 1;
7195 var args = arguments;
7196 var len = args.length;
7197 var str = String(f).replace(formatRegExp, function(x) {
7198 if (x === '%%') return '%';
7199 if (i >= len) return x;
7200 switch (x) {
7201 case '%s': return String(args[i++]);
7202 case '%d': return Number(args[i++]);
7203 case '%j':
7204 try {
7205 return JSON.stringify(args[i++]);
7206 } catch (_) {
7207 return '[Circular]';
7208 }
7209 default:
7210 return x;
7211 }
7212 });
7213 for (var x = args[i]; i < len; x = args[++i]) {
7214 if (isNull(x) || !isObject(x)) {
7215 str += ' ' + x;
7216 } else {
7217 str += ' ' + inspect(x);
7218 }
7219 }
7220 return str;
7221 };
7222
7223
7224 // Mark that a method should not be used.
7225 // Returns a modified function which warns once by default.
7226 // If --no-deprecation is set, then it is a no-op.
7227 exports.deprecate = function(fn, msg) {
7228 // Allow for deprecating things in the process of starting up.
7229 if (isUndefined(global.process)) {
7230 return function() {
7231 return exports.deprecate(fn, msg).apply(this, arguments);
7232 };
7233 }
7234
7235 if (process.noDeprecation === true) {
7236 return fn;
7237 }
7238
7239 var warned = false;
7240 function deprecated() {
7241 if (!warned) {
7242 if (process.throwDeprecation) {
7243 throw new Error(msg);
7244 } else if (process.traceDeprecation) {
7245 console.trace(msg);
7246 } else {
7247 console.error(msg);
7248 }
7249 warned = true;
7250 }
7251 return fn.apply(this, arguments);
7252 }
7253
7254 return deprecated;
7255 };
7256
7257
7258 var debugs = {};
7259 var debugEnviron;
7260 exports.debuglog = function(set) {
7261 if (isUndefined(debugEnviron))
7262 debugEnviron = process.env.NODE_DEBUG || '';
7263 set = set.toUpperCase();
7264 if (!debugs[set]) {
7265 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7266 var pid = process.pid;
7267 debugs[set] = function() {
7268 var msg = exports.format.apply(exports, arguments);
7269 console.error('%s %d: %s', set, pid, msg);
7270 };
7271 } else {
7272 debugs[set] = function() {};
7273 }
7274 }
7275 return debugs[set];
7276 };
7277
7278
7279 /**
7280 * Echos the value of a value. Trys to print the value out
7281 * in the best way possible given the different types.
7282 *
7283 * @param {Object} obj The object to print out.
7284 * @param {Object} opts Optional options object that alters the output.
7285 */
7286 /* legacy: obj, showHidden, depth, colors*/
7287 function inspect(obj, opts) {
7288 // default options
7289 var ctx = {
7290 seen: [],
7291 stylize: stylizeNoColor
7292 };
7293 // legacy...
7294 if (arguments.length >= 3) ctx.depth = arguments[2];
7295 if (arguments.length >= 4) ctx.colors = arguments[3];
7296 if (isBoolean(opts)) {
7297 // legacy...
7298 ctx.showHidden = opts;
7299 } else if (opts) {
7300 // got an "options" object
7301 exports._extend(ctx, opts);
7302 }
7303 // set default options
7304 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7305 if (isUndefined(ctx.depth)) ctx.depth = 2;
7306 if (isUndefined(ctx.colors)) ctx.colors = false;
7307 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7308 if (ctx.colors) ctx.stylize = stylizeWithColor;
7309 return formatValue(ctx, obj, ctx.depth);
7310 }
7311 exports.inspect = inspect;
7312
7313
7314 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7315 inspect.colors = {
7316 'bold' : [1, 22],
7317 'italic' : [3, 23],
7318 'underline' : [4, 24],
7319 'inverse' : [7, 27],
7320 'white' : [37, 39],
7321 'grey' : [90, 39],
7322 'black' : [30, 39],
7323 'blue' : [34, 39],
7324 'cyan' : [36, 39],
7325 'green' : [32, 39],
7326 'magenta' : [35, 39],
7327 'red' : [31, 39],
7328 'yellow' : [33, 39]
7329 };
7330
7331 // Don't use 'blue' not visible on cmd.exe
7332 inspect.styles = {
7333 'special': 'cyan',
7334 'number': 'yellow',
7335 'boolean': 'yellow',
7336 'undefined': 'grey',
7337 'null': 'bold',
7338 'string': 'green',
7339 'date': 'magenta',
7340 // "name": intentionally not styling
7341 'regexp': 'red'
7342 };
7343
7344
7345 function stylizeWithColor(str, styleType) {
7346 var style = inspect.styles[styleType];
7347
7348 if (style) {
7349 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7350 '\u001b[' + inspect.colors[style][1] + 'm';
7351 } else {
7352 return str;
7353 }
7354 }
7355
7356
7357 function stylizeNoColor(str, styleType) {
7358 return str;
7359 }
7360
7361
7362 function arrayToHash(array) {
7363 var hash = {};
7364
7365 array.forEach(function(val, idx) {
7366 hash[val] = true;
7367 });
7368
7369 return hash;
7370 }
7371
7372
7373 function formatValue(ctx, value, recurseTimes) {
7374 // Provide a hook for user-specified inspect functions.
7375 // Check that value is an object with an inspect function on it
7376 if (ctx.customInspect &&
7377 value &&
7378 isFunction(value.inspect) &&
7379 // Filter out the util module, it's inspect function is special
7380 value.inspect !== exports.inspect &&
7381 // Also filter out any prototype objects using the circular check.
7382 !(value.constructor && value.constructor.prototype === value)) {
7383 var ret = value.inspect(recurseTimes, ctx);
7384 if (!isString(ret)) {
7385 ret = formatValue(ctx, ret, recurseTimes);
7386 }
7387 return ret;
7388 }
7389
7390 // Primitive types cannot have properties
7391 var primitive = formatPrimitive(ctx, value);
7392 if (primitive) {
7393 return primitive;
7394 }
7395
7396 // Look up the keys of the object.
7397 var keys = Object.keys(value);
7398 var visibleKeys = arrayToHash(keys);
7399
7400 if (ctx.showHidden) {
7401 keys = Object.getOwnPropertyNames(value);
7402 }
7403
7404 // IE doesn't make error fields non-enumerable
7405 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7406 if (isError(value)
7407 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7408 return formatError(value);
7409 }
7410
7411 // Some type of object without properties can be shortcutted.
7412 if (keys.length === 0) {
7413 if (isFunction(value)) {
7414 var name = value.name ? ': ' + value.name : '';
7415 return ctx.stylize('[Function' + name + ']', 'special');
7416 }
7417 if (isRegExp(value)) {
7418 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7419 }
7420 if (isDate(value)) {
7421 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7422 }
7423 if (isError(value)) {
7424 return formatError(value);
7425 }
7426 }
7427
7428 var base = '', array = false, braces = ['{', '}'];
7429
7430 // Make Array say that they are Array
7431 if (isArray(value)) {
7432 array = true;
7433 braces = ['[', ']'];
7434 }
7435
7436 // Make functions say that they are functions
7437 if (isFunction(value)) {
7438 var n = value.name ? ': ' + value.name : '';
7439 base = ' [Function' + n + ']';
7440 }
7441
7442 // Make RegExps say that they are RegExps
7443 if (isRegExp(value)) {
7444 base = ' ' + RegExp.prototype.toString.call(value);
7445 }
7446
7447 // Make dates with properties first say the date
7448 if (isDate(value)) {
7449 base = ' ' + Date.prototype.toUTCString.call(value);
7450 }
7451
7452 // Make error with message first say the error
7453 if (isError(value)) {
7454 base = ' ' + formatError(value);
7455 }
7456
7457 if (keys.length === 0 && (!array || value.length == 0)) {
7458 return braces[0] + base + braces[1];
7459 }
7460
7461 if (recurseTimes < 0) {
7462 if (isRegExp(value)) {
7463 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7464 } else {
7465 return ctx.stylize('[Object]', 'special');
7466 }
7467 }
7468
7469 ctx.seen.push(value);
7470
7471 var output;
7472 if (array) {
7473 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7474 } else {
7475 output = keys.map(function(key) {
7476 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7477 });
7478 }
7479
7480 ctx.seen.pop();
7481
7482 return reduceToSingleString(output, base, braces);
7483 }
7484
7485
7486 function formatPrimitive(ctx, value) {
7487 if (isUndefined(value))
7488 return ctx.stylize('undefined', 'undefined');
7489 if (isString(value)) {
7490 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7491 .replace(/'/g, "\\'")
7492 .replace(/\\"/g, '"') + '\'';
7493 return ctx.stylize(simple, 'string');
7494 }
7495 if (isNumber(value))
7496 return ctx.stylize('' + value, 'number');
7497 if (isBoolean(value))
7498 return ctx.stylize('' + value, 'boolean');
7499 // For some reason typeof null is "object", so special case here.
7500 if (isNull(value))
7501 return ctx.stylize('null', 'null');
7502 }
7503
7504
7505 function formatError(value) {
7506 return '[' + Error.prototype.toString.call(value) + ']';
7507 }
7508
7509
7510 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7511 var output = [];
7512 for (var i = 0, l = value.length; i < l; ++i) {
7513 if (hasOwnProperty(value, String(i))) {
7514 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7515 String(i), true));
7516 } else {
7517 output.push('');
7518 }
7519 }
7520 keys.forEach(function(key) {
7521 if (!key.match(/^\d+$/)) {
7522 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7523 key, true));
7524 }
7525 });
7526 return output;
7527 }
7528
7529
7530 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7531 var name, str, desc;
7532 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7533 if (desc.get) {
7534 if (desc.set) {
7535 str = ctx.stylize('[Getter/Setter]', 'special');
7536 } else {
7537 str = ctx.stylize('[Getter]', 'special');
7538 }
7539 } else {
7540 if (desc.set) {
7541 str = ctx.stylize('[Setter]', 'special');
7542 }
7543 }
7544 if (!hasOwnProperty(visibleKeys, key)) {
7545 name = '[' + key + ']';
7546 }
7547 if (!str) {
7548 if (ctx.seen.indexOf(desc.value) < 0) {
7549 if (isNull(recurseTimes)) {
7550 str = formatValue(ctx, desc.value, null);
7551 } else {
7552 str = formatValue(ctx, desc.value, recurseTimes - 1);
7553 }
7554 if (str.indexOf('\n') > -1) {
7555 if (array) {
7556 str = str.split('\n').map(function(line) {
7557 return ' ' + line;
7558 }).join('\n').substr(2);
7559 } else {
7560 str = '\n' + str.split('\n').map(function(line) {
7561 return ' ' + line;
7562 }).join('\n');
7563 }
7564 }
7565 } else {
7566 str = ctx.stylize('[Circular]', 'special');
7567 }
7568 }
7569 if (isUndefined(name)) {
7570 if (array && key.match(/^\d+$/)) {
7571 return str;
7572 }
7573 name = JSON.stringify('' + key);
7574 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7575 name = name.substr(1, name.length - 2);
7576 name = ctx.stylize(name, 'name');
7577 } else {
7578 name = name.replace(/'/g, "\\'")
7579 .replace(/\\"/g, '"')
7580 .replace(/(^"|"$)/g, "'");
7581 name = ctx.stylize(name, 'string');
7582 }
7583 }
7584
7585 return name + ': ' + str;
7586 }
7587
7588
7589 function reduceToSingleString(output, base, braces) {
7590 var numLinesEst = 0;
7591 var length = output.reduce(function(prev, cur) {
7592 numLinesEst++;
7593 if (cur.indexOf('\n') >= 0) numLinesEst++;
7594 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7595 }, 0);
7596
7597 if (length > 60) {
7598 return braces[0] +
7599 (base === '' ? '' : base + '\n ') +
7600 ' ' +
7601 output.join(',\n ') +
7602 ' ' +
7603 braces[1];
7604 }
7605
7606 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7607 }
7608
7609
7610 // NOTE: These type checking functions intentionally don't use `instanceof`
7611 // because it is fragile and can be easily faked with `Object.create()`.
7612 function isArray(ar) {
7613 return Array.isArray(ar);
7614 }
7615 exports.isArray = isArray;
7616
7617 function isBoolean(arg) {
7618 return typeof arg === 'boolean';
7619 }
7620 exports.isBoolean = isBoolean;
7621
7622 function isNull(arg) {
7623 return arg === null;
7624 }
7625 exports.isNull = isNull;
7626
7627 function isNullOrUndefined(arg) {
7628 return arg == null;
7629 }
7630 exports.isNullOrUndefined = isNullOrUndefined;
7631
7632 function isNumber(arg) {
7633 return typeof arg === 'number';
7634 }
7635 exports.isNumber = isNumber;
7636
7637 function isString(arg) {
7638 return typeof arg === 'string';
7639 }
7640 exports.isString = isString;
7641
7642 function isSymbol(arg) {
7643 return typeof arg === 'symbol';
7644 }
7645 exports.isSymbol = isSymbol;
7646
7647 function isUndefined(arg) {
7648 return arg === void 0;
7649 }
7650 exports.isUndefined = isUndefined;
7651
7652 function isRegExp(re) {
7653 return isObject(re) && objectToString(re) === '[object RegExp]';
7654 }
7655 exports.isRegExp = isRegExp;
7656
7657 function isObject(arg) {
7658 return typeof arg === 'object' && arg !== null;
7659 }
7660 exports.isObject = isObject;
7661
7662 function isDate(d) {
7663 return isObject(d) && objectToString(d) === '[object Date]';
7664 }
7665 exports.isDate = isDate;
7666
7667 function isError(e) {
7668 return isObject(e) &&
7669 (objectToString(e) === '[object Error]' || e instanceof Error);
7670 }
7671 exports.isError = isError;
7672
7673 function isFunction(arg) {
7674 return typeof arg === 'function';
7675 }
7676 exports.isFunction = isFunction;
7677
7678 function isPrimitive(arg) {
7679 return arg === null ||
7680 typeof arg === 'boolean' ||
7681 typeof arg === 'number' ||
7682 typeof arg === 'string' ||
7683 typeof arg === 'symbol' || // ES6 symbol
7684 typeof arg === 'undefined';
7685 }
7686 exports.isPrimitive = isPrimitive;
7687
7688 exports.isBuffer = require('./support/isBuffer');
7689
7690 function objectToString(o) {
7691 return Object.prototype.toString.call(o);
7692 }
7693
7694
7695 function pad(n) {
7696 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7697 }
7698
7699
7700 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7701 'Oct', 'Nov', 'Dec'];
7702
7703 // 26 Feb 16:19:34
7704 function timestamp() {
7705 var d = new Date();
7706 var time = [pad(d.getHours()),
7707 pad(d.getMinutes()),
7708 pad(d.getSeconds())].join(':');
7709 return [d.getDate(), months[d.getMonth()], time].join(' ');
7710 }
7711
7712
7713 // log is just a thin wrapper to console.log that prepends a timestamp
7714 exports.log = function() {
7715 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7716 };
7717
7718
7719 /**
7720 * Inherit the prototype methods from one constructor into another.
7721 *
7722 * The Function.prototype.inherits from lang.js rewritten as a standalone
7723 * function (not on Function.prototype). NOTE: If this file is to be loaded
7724 * during bootstrapping this function needs to be rewritten using some native
7725 * functions as prototype setup using normal JavaScript does not work as
7726 * expected during bootstrapping (see mirror.js in r114903).
7727 *
7728 * @param {function} ctor Constructor function which needs to inherit the
7729 * prototype.
7730 * @param {function} superCtor Constructor function to inherit prototype from.
7731 */
7732 exports.inherits = require('inherits');
7733
7734 exports._extend = function(origin, add) {
7735 // Don't do anything if add isn't an object
7736 if (!add || !isObject(add)) return origin;
7737
7738 var keys = Object.keys(add);
7739 var i = keys.length;
7740 while (i--) {
7741 origin[keys[i]] = add[keys[i]];
7742 }
7743 return origin;
7744 };
7745
7746 function hasOwnProperty(obj, prop) {
7747 return Object.prototype.hasOwnProperty.call(obj, prop);
7748 }
7749
7750 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7751 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7752 // Base58 encoding/decoding
7753 // Originally written by Mike Hearn for BitcoinJ
7754 // Copyright (c) 2011 Google Inc
7755 // Ported to JavaScript by Stefan Thomas
7756 // Merged Buffer refactorings from base58-native by Stephen Pair
7757 // Copyright (c) 2013 BitPay Inc
7758
7759 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7760 var ALPHABET_MAP = {}
7761 for(var i = 0; i < ALPHABET.length; i++) {
7762 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7763 }
7764 var BASE = 58
7765
7766 function encode(buffer) {
7767 if (buffer.length === 0) return ''
7768
7769 var i, j, digits = [0]
7770 for (i = 0; i < buffer.length; i++) {
7771 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7772
7773 digits[0] += buffer[i]
7774
7775 var carry = 0
7776 for (j = 0; j < digits.length; ++j) {
7777 digits[j] += carry
7778
7779 carry = (digits[j] / BASE) | 0
7780 digits[j] %= BASE
7781 }
7782
7783 while (carry) {
7784 digits.push(carry % BASE)
7785
7786 carry = (carry / BASE) | 0
7787 }
7788 }
7789
7790 // deal with leading zeros
7791 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7792
7793 // convert digits to a string
7794 var stringOutput = ""
7795 for (var i = digits.length - 1; i >= 0; i--) {
7796 stringOutput = stringOutput + ALPHABET[digits[i]]
7797 }
7798 return stringOutput
7799 }
7800
7801 function decode(string) {
7802 if (string.length === 0) return []
7803
7804 var i, j, bytes = [0]
7805 for (i = 0; i < string.length; i++) {
7806 var c = string[i]
7807 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7808
7809 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7810 bytes[0] += ALPHABET_MAP[c]
7811
7812 var carry = 0
7813 for (j = 0; j < bytes.length; ++j) {
7814 bytes[j] += carry
7815
7816 carry = bytes[j] >> 8
7817 bytes[j] &= 0xff
7818 }
7819
7820 while (carry) {
7821 bytes.push(carry & 0xff)
7822
7823 carry >>= 8
7824 }
7825 }
7826
7827 // deal with leading zeros
7828 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7829
7830 return bytes.reverse()
7831 }
7832
7833 module.exports = {
7834 encode: encode,
7835 decode: decode
7836 }
7837
7838 },{}],31:[function(require,module,exports){
7839 (function (Buffer){
7840 'use strict'
7841
7842 var base58 = require('bs58')
7843 var createHash = require('create-hash')
7844
7845 // SHA256(SHA256(buffer))
7846 function sha256x2 (buffer) {
7847 buffer = createHash('sha256').update(buffer).digest()
7848 return createHash('sha256').update(buffer).digest()
7849 }
7850
7851 // Encode a buffer as a base58-check encoded string
7852 function encode (payload) {
7853 var checksum = sha256x2(payload).slice(0, 4)
7854
7855 return base58.encode(Buffer.concat([
7856 payload,
7857 checksum
7858 ]))
7859 }
7860
7861 // Decode a base58-check encoded string to a buffer
7862 function decode (string) {
7863 var buffer = new Buffer(base58.decode(string))
7864
7865 var payload = buffer.slice(0, -4)
7866 var checksum = buffer.slice(-4)
7867 var newChecksum = sha256x2(payload).slice(0, 4)
7868
7869 for (var i = 0; i < newChecksum.length; ++i) {
7870 if (newChecksum[i] === checksum[i]) continue
7871
7872 throw new Error('Invalid checksum')
7873 }
7874
7875 return payload
7876 }
7877
7878 module.exports = {
7879 encode: encode,
7880 decode: decode
7881 }
7882
7883 }).call(this,require("buffer").Buffer)
7884 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7885 (function (Buffer){
7886 'use strict';
7887 var inherits = require('inherits')
7888 var md5 = require('./md5')
7889 var rmd160 = require('ripemd160')
7890 var sha = require('sha.js')
7891
7892 var Transform = require('stream').Transform
7893
7894 function HashNoConstructor(hash) {
7895 Transform.call(this)
7896
7897 this._hash = hash
7898 this.buffers = []
7899 }
7900
7901 inherits(HashNoConstructor, Transform)
7902
7903 HashNoConstructor.prototype._transform = function (data, _, next) {
7904 this.buffers.push(data)
7905
7906 next()
7907 }
7908
7909 HashNoConstructor.prototype._flush = function (next) {
7910 this.push(this.digest())
7911 next()
7912 }
7913
7914 HashNoConstructor.prototype.update = function (data, enc) {
7915 if (typeof data === 'string') {
7916 data = new Buffer(data, enc)
7917 }
7918
7919 this.buffers.push(data)
7920 return this
7921 }
7922
7923 HashNoConstructor.prototype.digest = function (enc) {
7924 var buf = Buffer.concat(this.buffers)
7925 var r = this._hash(buf)
7926 this.buffers = null
7927
7928 return enc ? r.toString(enc) : r
7929 }
7930
7931 function Hash(hash) {
7932 Transform.call(this)
7933
7934 this._hash = hash
7935 }
7936
7937 inherits(Hash, Transform)
7938
7939 Hash.prototype._transform = function (data, enc, next) {
7940 if (enc) data = new Buffer(data, enc)
7941
7942 this._hash.update(data)
7943
7944 next()
7945 }
7946
7947 Hash.prototype._flush = function (next) {
7948 this.push(this._hash.digest())
7949 this._hash = null
7950
7951 next()
7952 }
7953
7954 Hash.prototype.update = function (data, enc) {
7955 if (typeof data === 'string') {
7956 data = new Buffer(data, enc)
7957 }
7958
7959 this._hash.update(data)
7960 return this
7961 }
7962
7963 Hash.prototype.digest = function (enc) {
7964 var outData = this._hash.digest()
7965
7966 return enc ? outData.toString(enc) : outData
7967 }
7968
7969 module.exports = function createHash (alg) {
7970 if ('md5' === alg) return new HashNoConstructor(md5)
7971 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7972
7973 return new Hash(sha(alg))
7974 }
7975
7976 }).call(this,require("buffer").Buffer)
7977 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
7978 (function (Buffer){
7979 'use strict';
7980 var intSize = 4;
7981 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7982 var chrsz = 8;
7983
7984 function toArray(buf, bigEndian) {
7985 if ((buf.length % intSize) !== 0) {
7986 var len = buf.length + (intSize - (buf.length % intSize));
7987 buf = Buffer.concat([buf, zeroBuffer], len);
7988 }
7989
7990 var arr = [];
7991 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7992 for (var i = 0; i < buf.length; i += intSize) {
7993 arr.push(fn.call(buf, i));
7994 }
7995 return arr;
7996 }
7997
7998 function toBuffer(arr, size, bigEndian) {
7999 var buf = new Buffer(size);
8000 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8001 for (var i = 0; i < arr.length; i++) {
8002 fn.call(buf, arr[i], i * 4, true);
8003 }
8004 return buf;
8005 }
8006
8007 function hash(buf, fn, hashSize, bigEndian) {
8008 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8009 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8010 return toBuffer(arr, hashSize, bigEndian);
8011 }
8012 exports.hash = hash;
8013 }).call(this,require("buffer").Buffer)
8014 },{"buffer":7}],34:[function(require,module,exports){
8015 'use strict';
8016 /*
8017 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8018 * Digest Algorithm, as defined in RFC 1321.
8019 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8020 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8021 * Distributed under the BSD License
8022 * See http://pajhome.org.uk/crypt/md5 for more info.
8023 */
8024
8025 var helpers = require('./helpers');
8026
8027 /*
8028 * Calculate the MD5 of an array of little-endian words, and a bit length
8029 */
8030 function core_md5(x, len)
8031 {
8032 /* append padding */
8033 x[len >> 5] |= 0x80 << ((len) % 32);
8034 x[(((len + 64) >>> 9) << 4) + 14] = len;
8035
8036 var a = 1732584193;
8037 var b = -271733879;
8038 var c = -1732584194;
8039 var d = 271733878;
8040
8041 for(var i = 0; i < x.length; i += 16)
8042 {
8043 var olda = a;
8044 var oldb = b;
8045 var oldc = c;
8046 var oldd = d;
8047
8048 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8049 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8050 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8051 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8052 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8053 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8054 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8055 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8056 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8057 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8058 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8059 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8060 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8061 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8062 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8063 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8064
8065 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8066 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8067 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8068 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8069 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8070 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8071 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8072 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8073 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8074 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8075 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8076 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8077 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8078 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8079 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8080 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8081
8082 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8083 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8084 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8085 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8086 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8087 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8088 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8089 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8090 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8091 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8092 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8093 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8094 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8095 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8096 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8097 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8098
8099 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8100 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8101 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8102 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8103 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8104 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8105 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8106 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8107 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8108 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8109 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8110 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8111 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8112 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8113 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8114 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8115
8116 a = safe_add(a, olda);
8117 b = safe_add(b, oldb);
8118 c = safe_add(c, oldc);
8119 d = safe_add(d, oldd);
8120 }
8121 return Array(a, b, c, d);
8122
8123 }
8124
8125 /*
8126 * These functions implement the four basic operations the algorithm uses.
8127 */
8128 function md5_cmn(q, a, b, x, s, t)
8129 {
8130 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8131 }
8132 function md5_ff(a, b, c, d, x, s, t)
8133 {
8134 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8135 }
8136 function md5_gg(a, b, c, d, x, s, t)
8137 {
8138 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8139 }
8140 function md5_hh(a, b, c, d, x, s, t)
8141 {
8142 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8143 }
8144 function md5_ii(a, b, c, d, x, s, t)
8145 {
8146 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8147 }
8148
8149 /*
8150 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8151 * to work around bugs in some JS interpreters.
8152 */
8153 function safe_add(x, y)
8154 {
8155 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8156 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8157 return (msw << 16) | (lsw & 0xFFFF);
8158 }
8159
8160 /*
8161 * Bitwise rotate a 32-bit number to the left.
8162 */
8163 function bit_rol(num, cnt)
8164 {
8165 return (num << cnt) | (num >>> (32 - cnt));
8166 }
8167
8168 module.exports = function md5(buf) {
8169 return helpers.hash(buf, core_md5, 16);
8170 };
8171 },{"./helpers":33}],35:[function(require,module,exports){
8172 arguments[4][12][0].apply(exports,arguments)
8173 },{"dup":12}],36:[function(require,module,exports){
8174 (function (Buffer){
8175 /*
8176 CryptoJS v3.1.2
8177 code.google.com/p/crypto-js
8178 (c) 2009-2013 by Jeff Mott. All rights reserved.
8179 code.google.com/p/crypto-js/wiki/License
8180 */
8181 /** @preserve
8182 (c) 2012 by Cédric Mesnil. All rights reserved.
8183
8184 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8185
8186 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8187 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8188
8189 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8190 */
8191
8192 // constants table
8193 var zl = [
8194 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8195 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8196 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8197 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8198 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8199 ]
8200
8201 var zr = [
8202 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8203 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8204 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8205 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8206 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8207 ]
8208
8209 var sl = [
8210 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8211 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8212 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8213 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8214 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8215 ]
8216
8217 var sr = [
8218 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8219 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8220 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8221 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8222 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8223 ]
8224
8225 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8226 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8227
8228 function bytesToWords (bytes) {
8229 var words = []
8230 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8231 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8232 }
8233 return words
8234 }
8235
8236 function wordsToBytes (words) {
8237 var bytes = []
8238 for (var b = 0; b < words.length * 32; b += 8) {
8239 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8240 }
8241 return bytes
8242 }
8243
8244 function processBlock (H, M, offset) {
8245 // swap endian
8246 for (var i = 0; i < 16; i++) {
8247 var offset_i = offset + i
8248 var M_offset_i = M[offset_i]
8249
8250 // Swap
8251 M[offset_i] = (
8252 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8253 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8254 )
8255 }
8256
8257 // Working variables
8258 var al, bl, cl, dl, el
8259 var ar, br, cr, dr, er
8260
8261 ar = al = H[0]
8262 br = bl = H[1]
8263 cr = cl = H[2]
8264 dr = dl = H[3]
8265 er = el = H[4]
8266
8267 // computation
8268 var t
8269 for (i = 0; i < 80; i += 1) {
8270 t = (al + M[offset + zl[i]]) | 0
8271 if (i < 16) {
8272 t += f1(bl, cl, dl) + hl[0]
8273 } else if (i < 32) {
8274 t += f2(bl, cl, dl) + hl[1]
8275 } else if (i < 48) {
8276 t += f3(bl, cl, dl) + hl[2]
8277 } else if (i < 64) {
8278 t += f4(bl, cl, dl) + hl[3]
8279 } else {// if (i<80) {
8280 t += f5(bl, cl, dl) + hl[4]
8281 }
8282 t = t | 0
8283 t = rotl(t, sl[i])
8284 t = (t + el) | 0
8285 al = el
8286 el = dl
8287 dl = rotl(cl, 10)
8288 cl = bl
8289 bl = t
8290
8291 t = (ar + M[offset + zr[i]]) | 0
8292 if (i < 16) {
8293 t += f5(br, cr, dr) + hr[0]
8294 } else if (i < 32) {
8295 t += f4(br, cr, dr) + hr[1]
8296 } else if (i < 48) {
8297 t += f3(br, cr, dr) + hr[2]
8298 } else if (i < 64) {
8299 t += f2(br, cr, dr) + hr[3]
8300 } else {// if (i<80) {
8301 t += f1(br, cr, dr) + hr[4]
8302 }
8303
8304 t = t | 0
8305 t = rotl(t, sr[i])
8306 t = (t + er) | 0
8307 ar = er
8308 er = dr
8309 dr = rotl(cr, 10)
8310 cr = br
8311 br = t
8312 }
8313
8314 // intermediate hash value
8315 t = (H[1] + cl + dr) | 0
8316 H[1] = (H[2] + dl + er) | 0
8317 H[2] = (H[3] + el + ar) | 0
8318 H[3] = (H[4] + al + br) | 0
8319 H[4] = (H[0] + bl + cr) | 0
8320 H[0] = t
8321 }
8322
8323 function f1 (x, y, z) {
8324 return ((x) ^ (y) ^ (z))
8325 }
8326
8327 function f2 (x, y, z) {
8328 return (((x) & (y)) | ((~x) & (z)))
8329 }
8330
8331 function f3 (x, y, z) {
8332 return (((x) | (~(y))) ^ (z))
8333 }
8334
8335 function f4 (x, y, z) {
8336 return (((x) & (z)) | ((y) & (~(z))))
8337 }
8338
8339 function f5 (x, y, z) {
8340 return ((x) ^ ((y) | (~(z))))
8341 }
8342
8343 function rotl (x, n) {
8344 return (x << n) | (x >>> (32 - n))
8345 }
8346
8347 function ripemd160 (message) {
8348 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8349
8350 if (typeof message === 'string') {
8351 message = new Buffer(message, 'utf8')
8352 }
8353
8354 var m = bytesToWords(message)
8355
8356 var nBitsLeft = message.length * 8
8357 var nBitsTotal = message.length * 8
8358
8359 // Add padding
8360 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8361 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8362 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8363 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8364 )
8365
8366 for (var i = 0; i < m.length; i += 16) {
8367 processBlock(H, m, i)
8368 }
8369
8370 // swap endian
8371 for (i = 0; i < 5; i++) {
8372 // shortcut
8373 var H_i = H[i]
8374
8375 // Swap
8376 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8377 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8378 }
8379
8380 var digestbytes = wordsToBytes(H)
8381 return new Buffer(digestbytes)
8382 }
8383
8384 module.exports = ripemd160
8385
8386 }).call(this,require("buffer").Buffer)
8387 },{"buffer":7}],37:[function(require,module,exports){
8388 (function (Buffer){
8389 // prototype class for hash functions
8390 function Hash (blockSize, finalSize) {
8391 this._block = new Buffer(blockSize)
8392 this._finalSize = finalSize
8393 this._blockSize = blockSize
8394 this._len = 0
8395 this._s = 0
8396 }
8397
8398 Hash.prototype.update = function (data, enc) {
8399 if (typeof data === 'string') {
8400 enc = enc || 'utf8'
8401 data = new Buffer(data, enc)
8402 }
8403
8404 var l = this._len += data.length
8405 var s = this._s || 0
8406 var f = 0
8407 var buffer = this._block
8408
8409 while (s < l) {
8410 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8411 var ch = (t - f)
8412
8413 for (var i = 0; i < ch; i++) {
8414 buffer[(s % this._blockSize) + i] = data[i + f]
8415 }
8416
8417 s += ch
8418 f += ch
8419
8420 if ((s % this._blockSize) === 0) {
8421 this._update(buffer)
8422 }
8423 }
8424 this._s = s
8425
8426 return this
8427 }
8428
8429 Hash.prototype.digest = function (enc) {
8430 // Suppose the length of the message M, in bits, is l
8431 var l = this._len * 8
8432
8433 // Append the bit 1 to the end of the message
8434 this._block[this._len % this._blockSize] = 0x80
8435
8436 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8437 this._block.fill(0, this._len % this._blockSize + 1)
8438
8439 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8440 this._update(this._block)
8441 this._block.fill(0)
8442 }
8443
8444 // to this append the block which is equal to the number l written in binary
8445 // TODO: handle case where l is > Math.pow(2, 29)
8446 this._block.writeInt32BE(l, this._blockSize - 4)
8447
8448 var hash = this._update(this._block) || this._hash()
8449
8450 return enc ? hash.toString(enc) : hash
8451 }
8452
8453 Hash.prototype._update = function () {
8454 throw new Error('_update must be implemented by subclass')
8455 }
8456
8457 module.exports = Hash
8458
8459 }).call(this,require("buffer").Buffer)
8460 },{"buffer":7}],38:[function(require,module,exports){
8461 var exports = module.exports = function SHA (algorithm) {
8462 algorithm = algorithm.toLowerCase()
8463
8464 var Algorithm = exports[algorithm]
8465 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8466
8467 return new Algorithm()
8468 }
8469
8470 exports.sha = require('./sha')
8471 exports.sha1 = require('./sha1')
8472 exports.sha224 = require('./sha224')
8473 exports.sha256 = require('./sha256')
8474 exports.sha384 = require('./sha384')
8475 exports.sha512 = require('./sha512')
8476
8477 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8478 (function (Buffer){
8479 /*
8480 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8481 * in FIPS PUB 180-1
8482 * This source code is derived from sha1.js of the same repository.
8483 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8484 * operation was added.
8485 */
8486
8487 var inherits = require('inherits')
8488 var Hash = require('./hash')
8489
8490 var W = new Array(80)
8491
8492 function Sha () {
8493 this.init()
8494 this._w = W
8495
8496 Hash.call(this, 64, 56)
8497 }
8498
8499 inherits(Sha, Hash)
8500
8501 Sha.prototype.init = function () {
8502 this._a = 0x67452301 | 0
8503 this._b = 0xefcdab89 | 0
8504 this._c = 0x98badcfe | 0
8505 this._d = 0x10325476 | 0
8506 this._e = 0xc3d2e1f0 | 0
8507
8508 return this
8509 }
8510
8511 /*
8512 * Bitwise rotate a 32-bit number to the left.
8513 */
8514 function rol (num, cnt) {
8515 return (num << cnt) | (num >>> (32 - cnt))
8516 }
8517
8518 Sha.prototype._update = function (M) {
8519 var W = this._w
8520
8521 var a = this._a
8522 var b = this._b
8523 var c = this._c
8524 var d = this._d
8525 var e = this._e
8526
8527 var j = 0, k
8528
8529 /*
8530 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8531 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8532 */
8533 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8534 function loop (w, f) {
8535 W[j] = w
8536
8537 var t = rol(a, 5) + f + e + w + k
8538
8539 e = d
8540 d = c
8541 c = rol(b, 30)
8542 b = a
8543 a = t
8544 j++
8545 }
8546
8547 k = 1518500249
8548 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8549 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8550 k = 1859775393
8551 while (j < 40) loop(calcW(), b ^ c ^ d)
8552 k = -1894007588
8553 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8554 k = -899497514
8555 while (j < 80) loop(calcW(), b ^ c ^ d)
8556
8557 this._a = (a + this._a) | 0
8558 this._b = (b + this._b) | 0
8559 this._c = (c + this._c) | 0
8560 this._d = (d + this._d) | 0
8561 this._e = (e + this._e) | 0
8562 }
8563
8564 Sha.prototype._hash = function () {
8565 var H = new Buffer(20)
8566
8567 H.writeInt32BE(this._a | 0, 0)
8568 H.writeInt32BE(this._b | 0, 4)
8569 H.writeInt32BE(this._c | 0, 8)
8570 H.writeInt32BE(this._d | 0, 12)
8571 H.writeInt32BE(this._e | 0, 16)
8572
8573 return H
8574 }
8575
8576 module.exports = Sha
8577
8578
8579 }).call(this,require("buffer").Buffer)
8580 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8581 (function (Buffer){
8582 /*
8583 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8584 * in FIPS PUB 180-1
8585 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8586 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8587 * Distributed under the BSD License
8588 * See http://pajhome.org.uk/crypt/md5 for details.
8589 */
8590
8591 var inherits = require('inherits')
8592 var Hash = require('./hash')
8593
8594 var W = new Array(80)
8595
8596 function Sha1 () {
8597 this.init()
8598 this._w = W
8599
8600 Hash.call(this, 64, 56)
8601 }
8602
8603 inherits(Sha1, Hash)
8604
8605 Sha1.prototype.init = function () {
8606 this._a = 0x67452301 | 0
8607 this._b = 0xefcdab89 | 0
8608 this._c = 0x98badcfe | 0
8609 this._d = 0x10325476 | 0
8610 this._e = 0xc3d2e1f0 | 0
8611
8612 return this
8613 }
8614
8615 /*
8616 * Bitwise rotate a 32-bit number to the left.
8617 */
8618 function rol (num, cnt) {
8619 return (num << cnt) | (num >>> (32 - cnt))
8620 }
8621
8622 Sha1.prototype._update = function (M) {
8623 var W = this._w
8624
8625 var a = this._a
8626 var b = this._b
8627 var c = this._c
8628 var d = this._d
8629 var e = this._e
8630
8631 var j = 0, k
8632
8633 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8634 function loop (w, f) {
8635 W[j] = w
8636
8637 var t = rol(a, 5) + f + e + w + k
8638
8639 e = d
8640 d = c
8641 c = rol(b, 30)
8642 b = a
8643 a = t
8644 j++
8645 }
8646
8647 k = 1518500249
8648 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8649 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8650 k = 1859775393
8651 while (j < 40) loop(calcW(), b ^ c ^ d)
8652 k = -1894007588
8653 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8654 k = -899497514
8655 while (j < 80) loop(calcW(), b ^ c ^ d)
8656
8657 this._a = (a + this._a) | 0
8658 this._b = (b + this._b) | 0
8659 this._c = (c + this._c) | 0
8660 this._d = (d + this._d) | 0
8661 this._e = (e + this._e) | 0
8662 }
8663
8664 Sha1.prototype._hash = function () {
8665 var H = new Buffer(20)
8666
8667 H.writeInt32BE(this._a | 0, 0)
8668 H.writeInt32BE(this._b | 0, 4)
8669 H.writeInt32BE(this._c | 0, 8)
8670 H.writeInt32BE(this._d | 0, 12)
8671 H.writeInt32BE(this._e | 0, 16)
8672
8673 return H
8674 }
8675
8676 module.exports = Sha1
8677
8678 }).call(this,require("buffer").Buffer)
8679 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8680 (function (Buffer){
8681 /**
8682 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8683 * in FIPS 180-2
8684 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8685 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8686 *
8687 */
8688
8689 var inherits = require('inherits')
8690 var Sha256 = require('./sha256')
8691 var Hash = require('./hash')
8692
8693 var W = new Array(64)
8694
8695 function Sha224 () {
8696 this.init()
8697
8698 this._w = W // new Array(64)
8699
8700 Hash.call(this, 64, 56)
8701 }
8702
8703 inherits(Sha224, Sha256)
8704
8705 Sha224.prototype.init = function () {
8706 this._a = 0xc1059ed8 | 0
8707 this._b = 0x367cd507 | 0
8708 this._c = 0x3070dd17 | 0
8709 this._d = 0xf70e5939 | 0
8710 this._e = 0xffc00b31 | 0
8711 this._f = 0x68581511 | 0
8712 this._g = 0x64f98fa7 | 0
8713 this._h = 0xbefa4fa4 | 0
8714
8715 return this
8716 }
8717
8718 Sha224.prototype._hash = function () {
8719 var H = new Buffer(28)
8720
8721 H.writeInt32BE(this._a, 0)
8722 H.writeInt32BE(this._b, 4)
8723 H.writeInt32BE(this._c, 8)
8724 H.writeInt32BE(this._d, 12)
8725 H.writeInt32BE(this._e, 16)
8726 H.writeInt32BE(this._f, 20)
8727 H.writeInt32BE(this._g, 24)
8728
8729 return H
8730 }
8731
8732 module.exports = Sha224
8733
8734 }).call(this,require("buffer").Buffer)
8735 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8736 (function (Buffer){
8737 /**
8738 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8739 * in FIPS 180-2
8740 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8741 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8742 *
8743 */
8744
8745 var inherits = require('inherits')
8746 var Hash = require('./hash')
8747
8748 var K = [
8749 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8750 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8751 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8752 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8753 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8754 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8755 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8756 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8757 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8758 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8759 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8760 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8761 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8762 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8763 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8764 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8765 ]
8766
8767 var W = new Array(64)
8768
8769 function Sha256 () {
8770 this.init()
8771
8772 this._w = W // new Array(64)
8773
8774 Hash.call(this, 64, 56)
8775 }
8776
8777 inherits(Sha256, Hash)
8778
8779 Sha256.prototype.init = function () {
8780 this._a = 0x6a09e667 | 0
8781 this._b = 0xbb67ae85 | 0
8782 this._c = 0x3c6ef372 | 0
8783 this._d = 0xa54ff53a | 0
8784 this._e = 0x510e527f | 0
8785 this._f = 0x9b05688c | 0
8786 this._g = 0x1f83d9ab | 0
8787 this._h = 0x5be0cd19 | 0
8788
8789 return this
8790 }
8791
8792 function S (X, n) {
8793 return (X >>> n) | (X << (32 - n))
8794 }
8795
8796 function R (X, n) {
8797 return (X >>> n)
8798 }
8799
8800 function Ch (x, y, z) {
8801 return ((x & y) ^ ((~x) & z))
8802 }
8803
8804 function Maj (x, y, z) {
8805 return ((x & y) ^ (x & z) ^ (y & z))
8806 }
8807
8808 function Sigma0256 (x) {
8809 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8810 }
8811
8812 function Sigma1256 (x) {
8813 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8814 }
8815
8816 function Gamma0256 (x) {
8817 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8818 }
8819
8820 function Gamma1256 (x) {
8821 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8822 }
8823
8824 Sha256.prototype._update = function (M) {
8825 var W = this._w
8826
8827 var a = this._a | 0
8828 var b = this._b | 0
8829 var c = this._c | 0
8830 var d = this._d | 0
8831 var e = this._e | 0
8832 var f = this._f | 0
8833 var g = this._g | 0
8834 var h = this._h | 0
8835
8836 var j = 0
8837
8838 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8839 function loop (w) {
8840 W[j] = w
8841
8842 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8843 var T2 = Sigma0256(a) + Maj(a, b, c)
8844
8845 h = g
8846 g = f
8847 f = e
8848 e = d + T1
8849 d = c
8850 c = b
8851 b = a
8852 a = T1 + T2
8853
8854 j++
8855 }
8856
8857 while (j < 16) loop(M.readInt32BE(j * 4))
8858 while (j < 64) loop(calcW())
8859
8860 this._a = (a + this._a) | 0
8861 this._b = (b + this._b) | 0
8862 this._c = (c + this._c) | 0
8863 this._d = (d + this._d) | 0
8864 this._e = (e + this._e) | 0
8865 this._f = (f + this._f) | 0
8866 this._g = (g + this._g) | 0
8867 this._h = (h + this._h) | 0
8868 }
8869
8870 Sha256.prototype._hash = function () {
8871 var H = new Buffer(32)
8872
8873 H.writeInt32BE(this._a, 0)
8874 H.writeInt32BE(this._b, 4)
8875 H.writeInt32BE(this._c, 8)
8876 H.writeInt32BE(this._d, 12)
8877 H.writeInt32BE(this._e, 16)
8878 H.writeInt32BE(this._f, 20)
8879 H.writeInt32BE(this._g, 24)
8880 H.writeInt32BE(this._h, 28)
8881
8882 return H
8883 }
8884
8885 module.exports = Sha256
8886
8887 }).call(this,require("buffer").Buffer)
8888 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8889 (function (Buffer){
8890 var inherits = require('inherits')
8891 var SHA512 = require('./sha512')
8892 var Hash = require('./hash')
8893
8894 var W = new Array(160)
8895
8896 function Sha384 () {
8897 this.init()
8898 this._w = W
8899
8900 Hash.call(this, 128, 112)
8901 }
8902
8903 inherits(Sha384, SHA512)
8904
8905 Sha384.prototype.init = function () {
8906 this._a = 0xcbbb9d5d | 0
8907 this._b = 0x629a292a | 0
8908 this._c = 0x9159015a | 0
8909 this._d = 0x152fecd8 | 0
8910 this._e = 0x67332667 | 0
8911 this._f = 0x8eb44a87 | 0
8912 this._g = 0xdb0c2e0d | 0
8913 this._h = 0x47b5481d | 0
8914
8915 this._al = 0xc1059ed8 | 0
8916 this._bl = 0x367cd507 | 0
8917 this._cl = 0x3070dd17 | 0
8918 this._dl = 0xf70e5939 | 0
8919 this._el = 0xffc00b31 | 0
8920 this._fl = 0x68581511 | 0
8921 this._gl = 0x64f98fa7 | 0
8922 this._hl = 0xbefa4fa4 | 0
8923
8924 return this
8925 }
8926
8927 Sha384.prototype._hash = function () {
8928 var H = new Buffer(48)
8929
8930 function writeInt64BE (h, l, offset) {
8931 H.writeInt32BE(h, offset)
8932 H.writeInt32BE(l, offset + 4)
8933 }
8934
8935 writeInt64BE(this._a, this._al, 0)
8936 writeInt64BE(this._b, this._bl, 8)
8937 writeInt64BE(this._c, this._cl, 16)
8938 writeInt64BE(this._d, this._dl, 24)
8939 writeInt64BE(this._e, this._el, 32)
8940 writeInt64BE(this._f, this._fl, 40)
8941
8942 return H
8943 }
8944
8945 module.exports = Sha384
8946
8947 }).call(this,require("buffer").Buffer)
8948 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8949 (function (Buffer){
8950 var inherits = require('inherits')
8951 var Hash = require('./hash')
8952
8953 var K = [
8954 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8955 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8956 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8957 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8958 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8959 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8960 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8961 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8962 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8963 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8964 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8965 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8966 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8967 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8968 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8969 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8970 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8971 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8972 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8973 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8974 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8975 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8976 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8977 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8978 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8979 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8980 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8981 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8982 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8983 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8984 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8985 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8986 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8987 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8988 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8989 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8990 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8991 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8992 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8993 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8994 ]
8995
8996 var W = new Array(160)
8997
8998 function Sha512 () {
8999 this.init()
9000 this._w = W
9001
9002 Hash.call(this, 128, 112)
9003 }
9004
9005 inherits(Sha512, Hash)
9006
9007 Sha512.prototype.init = function () {
9008 this._a = 0x6a09e667 | 0
9009 this._b = 0xbb67ae85 | 0
9010 this._c = 0x3c6ef372 | 0
9011 this._d = 0xa54ff53a | 0
9012 this._e = 0x510e527f | 0
9013 this._f = 0x9b05688c | 0
9014 this._g = 0x1f83d9ab | 0
9015 this._h = 0x5be0cd19 | 0
9016
9017 this._al = 0xf3bcc908 | 0
9018 this._bl = 0x84caa73b | 0
9019 this._cl = 0xfe94f82b | 0
9020 this._dl = 0x5f1d36f1 | 0
9021 this._el = 0xade682d1 | 0
9022 this._fl = 0x2b3e6c1f | 0
9023 this._gl = 0xfb41bd6b | 0
9024 this._hl = 0x137e2179 | 0
9025
9026 return this
9027 }
9028
9029 function S (X, Xl, n) {
9030 return (X >>> n) | (Xl << (32 - n))
9031 }
9032
9033 function Ch (x, y, z) {
9034 return ((x & y) ^ ((~x) & z))
9035 }
9036
9037 function Maj (x, y, z) {
9038 return ((x & y) ^ (x & z) ^ (y & z))
9039 }
9040
9041 Sha512.prototype._update = function (M) {
9042 var W = this._w
9043
9044 var a = this._a | 0
9045 var b = this._b | 0
9046 var c = this._c | 0
9047 var d = this._d | 0
9048 var e = this._e | 0
9049 var f = this._f | 0
9050 var g = this._g | 0
9051 var h = this._h | 0
9052
9053 var al = this._al | 0
9054 var bl = this._bl | 0
9055 var cl = this._cl | 0
9056 var dl = this._dl | 0
9057 var el = this._el | 0
9058 var fl = this._fl | 0
9059 var gl = this._gl | 0
9060 var hl = this._hl | 0
9061
9062 var i = 0, j = 0
9063 var Wi, Wil
9064 function calcW () {
9065 var x = W[j - 15 * 2]
9066 var xl = W[j - 15 * 2 + 1]
9067 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9068 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9069
9070 x = W[j - 2 * 2]
9071 xl = W[j - 2 * 2 + 1]
9072 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9073 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9074
9075 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9076 var Wi7 = W[j - 7 * 2]
9077 var Wi7l = W[j - 7 * 2 + 1]
9078
9079 var Wi16 = W[j - 16 * 2]
9080 var Wi16l = W[j - 16 * 2 + 1]
9081
9082 Wil = gamma0l + Wi7l
9083 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9084 Wil = Wil + gamma1l
9085 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9086 Wil = Wil + Wi16l
9087 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9088 }
9089
9090 function loop () {
9091 W[j] = Wi
9092 W[j + 1] = Wil
9093
9094 var maj = Maj(a, b, c)
9095 var majl = Maj(al, bl, cl)
9096
9097 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9098 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9099 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9100 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9101
9102 // t1 = h + sigma1 + ch + K[i] + W[i]
9103 var Ki = K[j]
9104 var Kil = K[j + 1]
9105
9106 var ch = Ch(e, f, g)
9107 var chl = Ch(el, fl, gl)
9108
9109 var t1l = hl + sigma1l
9110 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9111 t1l = t1l + chl
9112 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9113 t1l = t1l + Kil
9114 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9115 t1l = t1l + Wil
9116 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9117
9118 // t2 = sigma0 + maj
9119 var t2l = sigma0l + majl
9120 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9121
9122 h = g
9123 hl = gl
9124 g = f
9125 gl = fl
9126 f = e
9127 fl = el
9128 el = (dl + t1l) | 0
9129 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9130 d = c
9131 dl = cl
9132 c = b
9133 cl = bl
9134 b = a
9135 bl = al
9136 al = (t1l + t2l) | 0
9137 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9138
9139 i++
9140 j += 2
9141 }
9142
9143 while (i < 16) {
9144 Wi = M.readInt32BE(j * 4)
9145 Wil = M.readInt32BE(j * 4 + 4)
9146
9147 loop()
9148 }
9149
9150 while (i < 80) {
9151 calcW()
9152 loop()
9153 }
9154
9155 this._al = (this._al + al) | 0
9156 this._bl = (this._bl + bl) | 0
9157 this._cl = (this._cl + cl) | 0
9158 this._dl = (this._dl + dl) | 0
9159 this._el = (this._el + el) | 0
9160 this._fl = (this._fl + fl) | 0
9161 this._gl = (this._gl + gl) | 0
9162 this._hl = (this._hl + hl) | 0
9163
9164 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9165 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9166 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9167 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9168 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9169 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9170 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9171 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9172 }
9173
9174 Sha512.prototype._hash = function () {
9175 var H = new Buffer(64)
9176
9177 function writeInt64BE (h, l, offset) {
9178 H.writeInt32BE(h, offset)
9179 H.writeInt32BE(l, offset + 4)
9180 }
9181
9182 writeInt64BE(this._a, this._al, 0)
9183 writeInt64BE(this._b, this._bl, 8)
9184 writeInt64BE(this._c, this._cl, 16)
9185 writeInt64BE(this._d, this._dl, 24)
9186 writeInt64BE(this._e, this._el, 32)
9187 writeInt64BE(this._f, this._fl, 40)
9188 writeInt64BE(this._g, this._gl, 48)
9189 writeInt64BE(this._h, this._hl, 56)
9190
9191 return H
9192 }
9193
9194 module.exports = Sha512
9195
9196 }).call(this,require("buffer").Buffer)
9197 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9198 (function (Buffer){
9199 'use strict';
9200 var createHash = require('create-hash/browser');
9201 var inherits = require('inherits')
9202
9203 var Transform = require('stream').Transform
9204
9205 var ZEROS = new Buffer(128)
9206 ZEROS.fill(0)
9207
9208 function Hmac(alg, key) {
9209 Transform.call(this)
9210
9211 if (typeof key === 'string') {
9212 key = new Buffer(key)
9213 }
9214
9215 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9216
9217 this._alg = alg
9218 this._key = key
9219
9220 if (key.length > blocksize) {
9221 key = createHash(alg).update(key).digest()
9222
9223 } else if (key.length < blocksize) {
9224 key = Buffer.concat([key, ZEROS], blocksize)
9225 }
9226
9227 var ipad = this._ipad = new Buffer(blocksize)
9228 var opad = this._opad = new Buffer(blocksize)
9229
9230 for (var i = 0; i < blocksize; i++) {
9231 ipad[i] = key[i] ^ 0x36
9232 opad[i] = key[i] ^ 0x5C
9233 }
9234
9235 this._hash = createHash(alg).update(ipad)
9236 }
9237
9238 inherits(Hmac, Transform)
9239
9240 Hmac.prototype.update = function (data, enc) {
9241 this._hash.update(data, enc)
9242
9243 return this
9244 }
9245
9246 Hmac.prototype._transform = function (data, _, next) {
9247 this._hash.update(data)
9248
9249 next()
9250 }
9251
9252 Hmac.prototype._flush = function (next) {
9253 this.push(this.digest())
9254
9255 next()
9256 }
9257
9258 Hmac.prototype.digest = function (enc) {
9259 var h = this._hash.digest()
9260
9261 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9262 }
9263
9264 module.exports = function createHmac(alg, key) {
9265 return new Hmac(alg, key)
9266 }
9267
9268 }).call(this,require("buffer").Buffer)
9269 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9270 arguments[4][12][0].apply(exports,arguments)
9271 },{"dup":12}],47:[function(require,module,exports){
9272 var assert = require('assert')
9273 var BigInteger = require('bigi')
9274
9275 var Point = require('./point')
9276
9277 function Curve(p, a, b, Gx, Gy, n, h) {
9278 this.p = p
9279 this.a = a
9280 this.b = b
9281 this.G = Point.fromAffine(this, Gx, Gy)
9282 this.n = n
9283 this.h = h
9284
9285 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9286
9287 // result caching
9288 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9289 }
9290
9291 Curve.prototype.pointFromX = function(isOdd, x) {
9292 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9293 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9294
9295 var y = beta
9296 if (beta.isEven() ^ !isOdd) {
9297 y = this.p.subtract(y) // -y % p
9298 }
9299
9300 return Point.fromAffine(this, x, y)
9301 }
9302
9303 Curve.prototype.isInfinity = function(Q) {
9304 if (Q === this.infinity) return true
9305
9306 return Q.z.signum() === 0 && Q.y.signum() !== 0
9307 }
9308
9309 Curve.prototype.isOnCurve = function(Q) {
9310 if (this.isInfinity(Q)) return true
9311
9312 var x = Q.affineX
9313 var y = Q.affineY
9314 var a = this.a
9315 var b = this.b
9316 var p = this.p
9317
9318 // Check that xQ and yQ are integers in the interval [0, p - 1]
9319 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9320 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9321
9322 // and check that y^2 = x^3 + ax + b (mod p)
9323 var lhs = y.square().mod(p)
9324 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9325 return lhs.equals(rhs)
9326 }
9327
9328 /**
9329 * Validate an elliptic curve point.
9330 *
9331 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9332 */
9333 Curve.prototype.validate = function(Q) {
9334 // Check Q != O
9335 assert(!this.isInfinity(Q), 'Point is at infinity')
9336 assert(this.isOnCurve(Q), 'Point is not on the curve')
9337
9338 // Check nQ = O (where Q is a scalar multiple of G)
9339 var nQ = Q.multiply(this.n)
9340 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9341
9342 return true
9343 }
9344
9345 module.exports = Curve
9346
9347 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9348 module.exports={
9349 "secp128r1": {
9350 "p": "fffffffdffffffffffffffffffffffff",
9351 "a": "fffffffdfffffffffffffffffffffffc",
9352 "b": "e87579c11079f43dd824993c2cee5ed3",
9353 "n": "fffffffe0000000075a30d1b9038a115",
9354 "h": "01",
9355 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9356 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9357 },
9358 "secp160k1": {
9359 "p": "fffffffffffffffffffffffffffffffeffffac73",
9360 "a": "00",
9361 "b": "07",
9362 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9363 "h": "01",
9364 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9365 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9366 },
9367 "secp160r1": {
9368 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9369 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9370 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9371 "n": "0100000000000000000001f4c8f927aed3ca752257",
9372 "h": "01",
9373 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9374 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9375 },
9376 "secp192k1": {
9377 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9378 "a": "00",
9379 "b": "03",
9380 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9381 "h": "01",
9382 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9383 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9384 },
9385 "secp192r1": {
9386 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9387 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9388 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9389 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9390 "h": "01",
9391 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9392 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9393 },
9394 "secp256k1": {
9395 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9396 "a": "00",
9397 "b": "07",
9398 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9399 "h": "01",
9400 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9401 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9402 },
9403 "secp256r1": {
9404 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9405 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9406 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9407 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9408 "h": "01",
9409 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9410 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9411 }
9412 }
9413
9414 },{}],49:[function(require,module,exports){
9415 var Point = require('./point')
9416 var Curve = require('./curve')
9417
9418 var getCurveByName = require('./names')
9419
9420 module.exports = {
9421 Curve: Curve,
9422 Point: Point,
9423 getCurveByName: getCurveByName
9424 }
9425
9426 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9427 var BigInteger = require('bigi')
9428
9429 var curves = require('./curves')
9430 var Curve = require('./curve')
9431
9432 function getCurveByName(name) {
9433 var curve = curves[name]
9434 if (!curve) return null
9435
9436 var p = new BigInteger(curve.p, 16)
9437 var a = new BigInteger(curve.a, 16)
9438 var b = new BigInteger(curve.b, 16)
9439 var n = new BigInteger(curve.n, 16)
9440 var h = new BigInteger(curve.h, 16)
9441 var Gx = new BigInteger(curve.Gx, 16)
9442 var Gy = new BigInteger(curve.Gy, 16)
9443
9444 return new Curve(p, a, b, Gx, Gy, n, h)
9445 }
9446
9447 module.exports = getCurveByName
9448
9449 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9450 (function (Buffer){
9451 var assert = require('assert')
9452 var BigInteger = require('bigi')
9453
9454 var THREE = BigInteger.valueOf(3)
9455
9456 function Point(curve, x, y, z) {
9457 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9458
9459 this.curve = curve
9460 this.x = x
9461 this.y = y
9462 this.z = z
9463 this._zInv = null
9464
9465 this.compressed = true
9466 }
9467
9468 Object.defineProperty(Point.prototype, 'zInv', {
9469 get: function() {
9470 if (this._zInv === null) {
9471 this._zInv = this.z.modInverse(this.curve.p)
9472 }
9473
9474 return this._zInv
9475 }
9476 })
9477
9478 Object.defineProperty(Point.prototype, 'affineX', {
9479 get: function() {
9480 return this.x.multiply(this.zInv).mod(this.curve.p)
9481 }
9482 })
9483
9484 Object.defineProperty(Point.prototype, 'affineY', {
9485 get: function() {
9486 return this.y.multiply(this.zInv).mod(this.curve.p)
9487 }
9488 })
9489
9490 Point.fromAffine = function(curve, x, y) {
9491 return new Point(curve, x, y, BigInteger.ONE)
9492 }
9493
9494 Point.prototype.equals = function(other) {
9495 if (other === this) return true
9496 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9497 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9498
9499 // u = Y2 * Z1 - Y1 * Z2
9500 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9501
9502 if (u.signum() !== 0) return false
9503
9504 // v = X2 * Z1 - X1 * Z2
9505 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9506
9507 return v.signum() === 0
9508 }
9509
9510 Point.prototype.negate = function() {
9511 var y = this.curve.p.subtract(this.y)
9512
9513 return new Point(this.curve, this.x, y, this.z)
9514 }
9515
9516 Point.prototype.add = function(b) {
9517 if (this.curve.isInfinity(this)) return b
9518 if (this.curve.isInfinity(b)) return this
9519
9520 var x1 = this.x
9521 var y1 = this.y
9522 var x2 = b.x
9523 var y2 = b.y
9524
9525 // u = Y2 * Z1 - Y1 * Z2
9526 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9527 // v = X2 * Z1 - X1 * Z2
9528 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9529
9530 if (v.signum() === 0) {
9531 if (u.signum() === 0) {
9532 return this.twice() // this == b, so double
9533 }
9534
9535 return this.curve.infinity // this = -b, so infinity
9536 }
9537
9538 var v2 = v.square()
9539 var v3 = v2.multiply(v)
9540 var x1v2 = x1.multiply(v2)
9541 var zu2 = u.square().multiply(this.z)
9542
9543 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9544 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9545 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9546 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
9547 // z3 = v^3 * z1 * z2
9548 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9549
9550 return new Point(this.curve, x3, y3, z3)
9551 }
9552
9553 Point.prototype.twice = function() {
9554 if (this.curve.isInfinity(this)) return this
9555 if (this.y.signum() === 0) return this.curve.infinity
9556
9557 var x1 = this.x
9558 var y1 = this.y
9559
9560 var y1z1 = y1.multiply(this.z)
9561 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9562 var a = this.curve.a
9563
9564 // w = 3 * x1^2 + a * z1^2
9565 var w = x1.square().multiply(THREE)
9566
9567 if (a.signum() !== 0) {
9568 w = w.add(this.z.square().multiply(a))
9569 }
9570
9571 w = w.mod(this.curve.p)
9572 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9573 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9574 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9575 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9576 // z3 = 8 * (y1 * z1)^3
9577 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9578
9579 return new Point(this.curve, x3, y3, z3)
9580 }
9581
9582 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9583 // TODO: modularize the multiplication algorithm
9584 Point.prototype.multiply = function(k) {
9585 if (this.curve.isInfinity(this)) return this
9586 if (k.signum() === 0) return this.curve.infinity
9587
9588 var e = k
9589 var h = e.multiply(THREE)
9590
9591 var neg = this.negate()
9592 var R = this
9593
9594 for (var i = h.bitLength() - 2; i > 0; --i) {
9595 R = R.twice()
9596
9597 var hBit = h.testBit(i)
9598 var eBit = e.testBit(i)
9599
9600 if (hBit != eBit) {
9601 R = R.add(hBit ? this : neg)
9602 }
9603 }
9604
9605 return R
9606 }
9607
9608 // Compute this*j + x*k (simultaneous multiplication)
9609 Point.prototype.multiplyTwo = function(j, x, k) {
9610 var i
9611
9612 if (j.bitLength() > k.bitLength())
9613 i = j.bitLength() - 1
9614 else
9615 i = k.bitLength() - 1
9616
9617 var R = this.curve.infinity
9618 var both = this.add(x)
9619
9620 while (i >= 0) {
9621 R = R.twice()
9622
9623 var jBit = j.testBit(i)
9624 var kBit = k.testBit(i)
9625
9626 if (jBit) {
9627 if (kBit) {
9628 R = R.add(both)
9629
9630 } else {
9631 R = R.add(this)
9632 }
9633
9634 } else {
9635 if (kBit) {
9636 R = R.add(x)
9637 }
9638 }
9639 --i
9640 }
9641
9642 return R
9643 }
9644
9645 Point.prototype.getEncoded = function(compressed) {
9646 if (compressed == undefined) compressed = this.compressed
9647 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9648
9649 var x = this.affineX
9650 var y = this.affineY
9651
9652 var buffer
9653
9654 // Determine size of q in bytes
9655 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9656
9657 // 0x02/0x03 | X
9658 if (compressed) {
9659 buffer = new Buffer(1 + byteLength)
9660 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9661
9662 // 0x04 | X | Y
9663 } else {
9664 buffer = new Buffer(1 + byteLength + byteLength)
9665 buffer.writeUInt8(0x04, 0)
9666
9667 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9668 }
9669
9670 x.toBuffer(byteLength).copy(buffer, 1)
9671
9672 return buffer
9673 }
9674
9675 Point.decodeFrom = function(curve, buffer) {
9676 var type = buffer.readUInt8(0)
9677 var compressed = (type !== 4)
9678
9679 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9680 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9681
9682 var Q
9683 if (compressed) {
9684 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9685 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9686
9687 var isOdd = (type === 0x03)
9688 Q = curve.pointFromX(isOdd, x)
9689
9690 } else {
9691 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9692
9693 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9694 Q = Point.fromAffine(curve, x, y)
9695 }
9696
9697 Q.compressed = compressed
9698 return Q
9699 }
9700
9701 Point.prototype.toString = function () {
9702 if (this.curve.isInfinity(this)) return '(INFINITY)'
9703
9704 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9705 }
9706
9707 module.exports = Point
9708
9709 }).call(this,require("buffer").Buffer)
9710 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9711 (function (process,global,Buffer){
9712 'use strict';
9713
9714 var crypto = global.crypto || global.msCrypto
9715 if(crypto && crypto.getRandomValues) {
9716 module.exports = randomBytes;
9717 } else {
9718 module.exports = oldBrowser;
9719 }
9720 function randomBytes(size, cb) {
9721 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9722 /* This will not work in older browsers.
9723 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9724 */
9725
9726 crypto.getRandomValues(bytes);
9727 if (typeof cb === 'function') {
9728 return process.nextTick(function () {
9729 cb(null, bytes);
9730 });
9731 }
9732 return bytes;
9733 }
9734 function oldBrowser() {
9735 throw new Error(
9736 'secure random number generation not supported by this browser\n'+
9737 'use chrome, FireFox or Internet Explorer 11'
9738 )
9739 }
9740
9741 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9742 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9743 (function (Buffer){
9744 'use strict';
9745
9746 function getFunctionName(fn) {
9747 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9748 }
9749
9750 function getTypeTypeName(type) {
9751 if (nativeTypes.Function(type)) {
9752 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9753 }
9754 if (nativeTypes.Object(type)) return JSON.stringify(type);
9755
9756 return type;
9757 }
9758
9759 function getValueTypeName(value) {
9760 if (nativeTypes.Null(value)) return '';
9761
9762 return getFunctionName(value.constructor);
9763 }
9764
9765 function tfErrorString(type, value) {
9766 var typeTypeName = getTypeTypeName(type);
9767 var valueTypeName = getValueTypeName(value);
9768
9769 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9770 }
9771
9772 function tfPropertyErrorString(type, name, value) {
9773 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9774 }
9775
9776 var nativeTypes = {
9777 Array: (function (_Array) {
9778 function Array(_x) {
9779 return _Array.apply(this, arguments);
9780 }
9781
9782 Array.toString = function () {
9783 return _Array.toString();
9784 };
9785
9786 return Array;
9787 })(function (value) {
9788 return value !== null && value !== undefined && value.constructor === Array;
9789 }),
9790 Boolean: function Boolean(value) {
9791 return typeof value === 'boolean';
9792 },
9793 Buffer: (function (_Buffer) {
9794 function Buffer(_x2) {
9795 return _Buffer.apply(this, arguments);
9796 }
9797
9798 Buffer.toString = function () {
9799 return _Buffer.toString();
9800 };
9801
9802 return Buffer;
9803 })(function (value) {
9804 return Buffer.isBuffer(value);
9805 }),
9806 Function: function Function(value) {
9807 return typeof value === 'function';
9808 },
9809 Null: function Null(value) {
9810 return value === undefined || value === null;
9811 },
9812 Number: function Number(value) {
9813 return typeof value === 'number';
9814 },
9815 Object: function Object(value) {
9816 return typeof value === 'object';
9817 },
9818 String: function String(value) {
9819 return typeof value === 'string';
9820 },
9821 '': function _() {
9822 return true;
9823 }
9824 };
9825
9826 function tJSON(type) {
9827 return type && type.toJSON ? type.toJSON() : type;
9828 }
9829
9830 function sJSON(type) {
9831 var json = tJSON(type);
9832 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9833 }
9834
9835 var otherTypes = {
9836 arrayOf: function arrayOf(type) {
9837 function arrayOf(value, strict) {
9838 try {
9839 return nativeTypes.Array(value) && value.every(function (x) {
9840 return typeforce(type, x, strict);
9841 });
9842 } catch (e) {
9843 return false;
9844 }
9845 }
9846 arrayOf.toJSON = function () {
9847 return [tJSON(type)];
9848 };
9849
9850 return arrayOf;
9851 },
9852
9853 maybe: function maybe(type) {
9854 function maybe(value, strict) {
9855 return nativeTypes.Null(value) || typeforce(type, value, strict);
9856 }
9857 maybe.toJSON = function () {
9858 return '?' + sJSON(type);
9859 };
9860
9861 return maybe;
9862 },
9863
9864 object: function object(type) {
9865 function object(value, strict) {
9866 typeforce(nativeTypes.Object, value, strict);
9867
9868 var propertyName, propertyType, propertyValue;
9869
9870 try {
9871 for (propertyName in type) {
9872 propertyType = type[propertyName];
9873 propertyValue = value[propertyName];
9874
9875 typeforce(propertyType, propertyValue, strict);
9876 }
9877 } catch (e) {
9878 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9879 }
9880
9881 if (strict) {
9882 for (propertyName in value) {
9883 if (type[propertyName]) continue;
9884
9885 throw new TypeError('Unexpected property "' + propertyName + '"');
9886 }
9887 }
9888
9889 return true;
9890 }
9891 object.toJSON = function () {
9892 return type;
9893 };
9894
9895 return object;
9896 },
9897
9898 oneOf: function oneOf() {
9899 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9900 types[_key] = arguments[_key];
9901 }
9902
9903 function oneOf(value, strict) {
9904 return types.some(function (type) {
9905 try {
9906 return typeforce(type, value, strict);
9907 } catch (e) {
9908 return false;
9909 }
9910 });
9911 }
9912 oneOf.toJSON = function () {
9913 return types.map(sJSON).join('|');
9914 };
9915
9916 return oneOf;
9917 },
9918
9919 quacksLike: function quacksLike(type) {
9920 function quacksLike(value, strict) {
9921 return type === getValueTypeName(value);
9922 }
9923 quacksLike.toJSON = function () {
9924 return type;
9925 };
9926
9927 return quacksLike;
9928 },
9929
9930 tuple: function tuple() {
9931 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9932 types[_key2] = arguments[_key2];
9933 }
9934
9935 function tuple(value, strict) {
9936 return types.every(function (type, i) {
9937 return typeforce(type, value[i], strict);
9938 });
9939 }
9940 tuple.toJSON = function () {
9941 return '(' + types.map(sJSON).join(', ') + ')';
9942 };
9943
9944 return tuple;
9945 },
9946
9947 value: function value(expected) {
9948 function value(actual) {
9949 return actual === expected;
9950 }
9951 value.toJSON = function () {
9952 return expected;
9953 };
9954
9955 return value;
9956 }
9957 };
9958
9959 function compile(type) {
9960 if (nativeTypes.String(type)) {
9961 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9962
9963 return nativeTypes[type] || otherTypes.quacksLike(type);
9964 } else if (type && nativeTypes.Object(type)) {
9965 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9966
9967 var compiled = {};
9968
9969 for (var propertyName in type) {
9970 compiled[propertyName] = compile(type[propertyName]);
9971 }
9972
9973 return otherTypes.object(compiled);
9974 } else if (nativeTypes.Function(type)) {
9975 return type;
9976 }
9977
9978 return otherTypes.value(type);
9979 }
9980
9981 function typeforce(_x3, _x4, _x5) {
9982 var _again = true;
9983
9984 _function: while (_again) {
9985 var type = _x3,
9986 value = _x4,
9987 strict = _x5;
9988 _again = false;
9989
9990 if (nativeTypes.Function(type)) {
9991 if (type(value, strict)) return true;
9992
9993 throw new TypeError(tfErrorString(type, value));
9994 }
9995
9996 // JIT
9997 _x3 = compile(type);
9998 _x4 = value;
9999 _x5 = strict;
10000 _again = true;
10001 continue _function;
10002 }
10003 }
10004
10005 // assign all types to typeforce function
10006 var typeName;
10007 Object.keys(nativeTypes).forEach(function (typeName) {
10008 var nativeType = nativeTypes[typeName];
10009 nativeType.toJSON = function () {
10010 return typeName;
10011 };
10012
10013 typeforce[typeName] = nativeType;
10014 });
10015
10016 for (typeName in otherTypes) {
10017 typeforce[typeName] = otherTypes[typeName];
10018 }
10019
10020 module.exports = typeforce;
10021 module.exports.compile = compile;
10022 }).call(this,require("buffer").Buffer)
10023 },{"buffer":7}],54:[function(require,module,exports){
10024 (function (Buffer){
10025 var assert = require('assert')
10026 var base58check = require('bs58check')
10027 var typeForce = require('typeforce')
10028 var networks = require('./networks')
10029 var scripts = require('./scripts')
10030
10031 function findScriptTypeByVersion (version) {
10032 for (var networkName in networks) {
10033 var network = networks[networkName]
10034
10035 if (version === network.pubKeyHash) return 'pubkeyhash'
10036 if (version === network.scriptHash) return 'scripthash'
10037 }
10038 }
10039
10040 function Address (hash, version) {
10041 typeForce('Buffer', hash)
10042
10043 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10044 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10045
10046 this.hash = hash
10047 this.version = version
10048 }
10049
10050 Address.fromBase58Check = function (string) {
10051 var payload = base58check.decode(string)
10052 var version = payload.readUInt8(0)
10053 var hash = payload.slice(1)
10054
10055 return new Address(hash, version)
10056 }
10057
10058 Address.fromOutputScript = function (script, network) {
10059 network = network || networks.bitcoin
10060
10061 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10062 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10063
10064 assert(false, script.toASM() + ' has no matching Address')
10065 }
10066
10067 Address.prototype.toBase58Check = function () {
10068 var payload = new Buffer(21)
10069 payload.writeUInt8(this.version, 0)
10070 this.hash.copy(payload, 1)
10071
10072 return base58check.encode(payload)
10073 }
10074
10075 Address.prototype.toOutputScript = function () {
10076 var scriptType = findScriptTypeByVersion(this.version)
10077
10078 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10079 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10080
10081 assert(false, this.toString() + ' has no matching Script')
10082 }
10083
10084 Address.prototype.toString = Address.prototype.toBase58Check
10085
10086 module.exports = Address
10087
10088 }).call(this,require("buffer").Buffer)
10089 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10090 var bs58check = require('bs58check')
10091
10092 function decode () {
10093 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10094
10095 return bs58check.decode.apply(undefined, arguments)
10096 }
10097
10098 function encode () {
10099 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10100
10101 return bs58check.encode.apply(undefined, arguments)
10102 }
10103
10104 module.exports = {
10105 decode: decode,
10106 encode: encode
10107 }
10108
10109 },{"bs58check":31}],56:[function(require,module,exports){
10110 (function (Buffer){
10111 var assert = require('assert')
10112 var bufferutils = require('./bufferutils')
10113 var crypto = require('./crypto')
10114
10115 var Transaction = require('./transaction')
10116
10117 function Block () {
10118 this.version = 1
10119 this.prevHash = null
10120 this.merkleRoot = null
10121 this.timestamp = 0
10122 this.bits = 0
10123 this.nonce = 0
10124 }
10125
10126 Block.fromBuffer = function (buffer) {
10127 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10128
10129 var offset = 0
10130 function readSlice (n) {
10131 offset += n
10132 return buffer.slice(offset - n, offset)
10133 }
10134
10135 function readUInt32 () {
10136 var i = buffer.readUInt32LE(offset)
10137 offset += 4
10138 return i
10139 }
10140
10141 var block = new Block()
10142 block.version = readUInt32()
10143 block.prevHash = readSlice(32)
10144 block.merkleRoot = readSlice(32)
10145 block.timestamp = readUInt32()
10146 block.bits = readUInt32()
10147 block.nonce = readUInt32()
10148
10149 if (buffer.length === 80) return block
10150
10151 function readVarInt () {
10152 var vi = bufferutils.readVarInt(buffer, offset)
10153 offset += vi.size
10154 return vi.number
10155 }
10156
10157 // FIXME: poor performance
10158 function readTransaction () {
10159 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10160
10161 offset += tx.toBuffer().length
10162 return tx
10163 }
10164
10165 var nTransactions = readVarInt()
10166 block.transactions = []
10167
10168 for (var i = 0; i < nTransactions; ++i) {
10169 var tx = readTransaction()
10170 block.transactions.push(tx)
10171 }
10172
10173 return block
10174 }
10175
10176 Block.fromHex = function (hex) {
10177 return Block.fromBuffer(new Buffer(hex, 'hex'))
10178 }
10179
10180 Block.prototype.getHash = function () {
10181 return crypto.hash256(this.toBuffer(true))
10182 }
10183
10184 Block.prototype.getId = function () {
10185 return bufferutils.reverse(this.getHash()).toString('hex')
10186 }
10187
10188 Block.prototype.getUTCDate = function () {
10189 var date = new Date(0) // epoch
10190 date.setUTCSeconds(this.timestamp)
10191
10192 return date
10193 }
10194
10195 Block.prototype.toBuffer = function (headersOnly) {
10196 var buffer = new Buffer(80)
10197
10198 var offset = 0
10199 function writeSlice (slice) {
10200 slice.copy(buffer, offset)
10201 offset += slice.length
10202 }
10203
10204 function writeUInt32 (i) {
10205 buffer.writeUInt32LE(i, offset)
10206 offset += 4
10207 }
10208
10209 writeUInt32(this.version)
10210 writeSlice(this.prevHash)
10211 writeSlice(this.merkleRoot)
10212 writeUInt32(this.timestamp)
10213 writeUInt32(this.bits)
10214 writeUInt32(this.nonce)
10215
10216 if (headersOnly || !this.transactions) return buffer
10217
10218 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10219 var txBuffers = this.transactions.map(function (tx) {
10220 return tx.toBuffer()
10221 })
10222
10223 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10224 }
10225
10226 Block.prototype.toHex = function (headersOnly) {
10227 return this.toBuffer(headersOnly).toString('hex')
10228 }
10229
10230 module.exports = Block
10231
10232 }).call(this,require("buffer").Buffer)
10233 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10234 (function (Buffer){
10235 var assert = require('assert')
10236 var opcodes = require('./opcodes')
10237
10238 // https://github.com/feross/buffer/blob/master/index.js#L1127
10239 function verifuint (value, max) {
10240 assert(typeof value === 'number', 'cannot write a non-number as a number')
10241 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10242 assert(value <= max, 'value is larger than maximum value for type')
10243 assert(Math.floor(value) === value, 'value has a fractional component')
10244 }
10245
10246 function pushDataSize (i) {
10247 return i < opcodes.OP_PUSHDATA1 ? 1
10248 : i < 0xff ? 2
10249 : i < 0xffff ? 3
10250 : 5
10251 }
10252
10253 function readPushDataInt (buffer, offset) {
10254 var opcode = buffer.readUInt8(offset)
10255 var number, size
10256
10257 // ~6 bit
10258 if (opcode < opcodes.OP_PUSHDATA1) {
10259 number = opcode
10260 size = 1
10261
10262 // 8 bit
10263 } else if (opcode === opcodes.OP_PUSHDATA1) {
10264 if (offset + 2 > buffer.length) return null
10265 number = buffer.readUInt8(offset + 1)
10266 size = 2
10267
10268 // 16 bit
10269 } else if (opcode === opcodes.OP_PUSHDATA2) {
10270 if (offset + 3 > buffer.length) return null
10271 number = buffer.readUInt16LE(offset + 1)
10272 size = 3
10273
10274 // 32 bit
10275 } else {
10276 if (offset + 5 > buffer.length) return null
10277 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10278
10279 number = buffer.readUInt32LE(offset + 1)
10280 size = 5
10281 }
10282
10283 return {
10284 opcode: opcode,
10285 number: number,
10286 size: size
10287 }
10288 }
10289
10290 function readUInt64LE (buffer, offset) {
10291 var a = buffer.readUInt32LE(offset)
10292 var b = buffer.readUInt32LE(offset + 4)
10293 b *= 0x100000000
10294
10295 verifuint(b + a, 0x001fffffffffffff)
10296
10297 return b + a
10298 }
10299
10300 function readVarInt (buffer, offset) {
10301 var t = buffer.readUInt8(offset)
10302 var number, size
10303
10304 // 8 bit
10305 if (t < 253) {
10306 number = t
10307 size = 1
10308
10309 // 16 bit
10310 } else if (t < 254) {
10311 number = buffer.readUInt16LE(offset + 1)
10312 size = 3
10313
10314 // 32 bit
10315 } else if (t < 255) {
10316 number = buffer.readUInt32LE(offset + 1)
10317 size = 5
10318
10319 // 64 bit
10320 } else {
10321 number = readUInt64LE(buffer, offset + 1)
10322 size = 9
10323 }
10324
10325 return {
10326 number: number,
10327 size: size
10328 }
10329 }
10330
10331 function writePushDataInt (buffer, number, offset) {
10332 var size = pushDataSize(number)
10333
10334 // ~6 bit
10335 if (size === 1) {
10336 buffer.writeUInt8(number, offset)
10337
10338 // 8 bit
10339 } else if (size === 2) {
10340 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10341 buffer.writeUInt8(number, offset + 1)
10342
10343 // 16 bit
10344 } else if (size === 3) {
10345 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10346 buffer.writeUInt16LE(number, offset + 1)
10347
10348 // 32 bit
10349 } else {
10350 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10351 buffer.writeUInt32LE(number, offset + 1)
10352 }
10353
10354 return size
10355 }
10356
10357 function writeUInt64LE (buffer, value, offset) {
10358 verifuint(value, 0x001fffffffffffff)
10359
10360 buffer.writeInt32LE(value & -1, offset)
10361 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10362 }
10363
10364 function varIntSize (i) {
10365 return i < 253 ? 1
10366 : i < 0x10000 ? 3
10367 : i < 0x100000000 ? 5
10368 : 9
10369 }
10370
10371 function writeVarInt (buffer, number, offset) {
10372 var size = varIntSize(number)
10373
10374 // 8 bit
10375 if (size === 1) {
10376 buffer.writeUInt8(number, offset)
10377
10378 // 16 bit
10379 } else if (size === 3) {
10380 buffer.writeUInt8(253, offset)
10381 buffer.writeUInt16LE(number, offset + 1)
10382
10383 // 32 bit
10384 } else if (size === 5) {
10385 buffer.writeUInt8(254, offset)
10386 buffer.writeUInt32LE(number, offset + 1)
10387
10388 // 64 bit
10389 } else {
10390 buffer.writeUInt8(255, offset)
10391 writeUInt64LE(buffer, number, offset + 1)
10392 }
10393
10394 return size
10395 }
10396
10397 function varIntBuffer (i) {
10398 var size = varIntSize(i)
10399 var buffer = new Buffer(size)
10400 writeVarInt(buffer, i, 0)
10401
10402 return buffer
10403 }
10404
10405 function reverse (buffer) {
10406 var buffer2 = new Buffer(buffer)
10407 Array.prototype.reverse.call(buffer2)
10408 return buffer2
10409 }
10410
10411 module.exports = {
10412 pushDataSize: pushDataSize,
10413 readPushDataInt: readPushDataInt,
10414 readUInt64LE: readUInt64LE,
10415 readVarInt: readVarInt,
10416 reverse: reverse,
10417 varIntBuffer: varIntBuffer,
10418 varIntSize: varIntSize,
10419 writePushDataInt: writePushDataInt,
10420 writeUInt64LE: writeUInt64LE,
10421 writeVarInt: writeVarInt
10422 }
10423
10424 }).call(this,require("buffer").Buffer)
10425 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10426 var createHash = require('create-hash')
10427
10428 function hash160 (buffer) {
10429 return ripemd160(sha256(buffer))
10430 }
10431
10432 function hash256 (buffer) {
10433 return sha256(sha256(buffer))
10434 }
10435
10436 function ripemd160 (buffer) {
10437 return createHash('rmd160').update(buffer).digest()
10438 }
10439
10440 function sha1 (buffer) {
10441 return createHash('sha1').update(buffer).digest()
10442 }
10443
10444 function sha256 (buffer) {
10445 return createHash('sha256').update(buffer).digest()
10446 }
10447
10448 // FIXME: Name not consistent with others
10449 var createHmac = require('create-hmac')
10450
10451 function HmacSHA256 (buffer, secret) {
10452 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10453 return createHmac('sha256', secret).update(buffer).digest()
10454 }
10455
10456 function HmacSHA512 (buffer, secret) {
10457 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10458 return createHmac('sha512', secret).update(buffer).digest()
10459 }
10460
10461 module.exports = {
10462 ripemd160: ripemd160,
10463 sha1: sha1,
10464 sha256: sha256,
10465 hash160: hash160,
10466 hash256: hash256,
10467 HmacSHA256: HmacSHA256,
10468 HmacSHA512: HmacSHA512
10469 }
10470
10471 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10472 (function (Buffer){
10473 var assert = require('assert')
10474 var createHmac = require('create-hmac')
10475 var typeForce = require('typeforce')
10476
10477 var BigInteger = require('bigi')
10478 var ECSignature = require('./ecsignature')
10479
10480 var ZERO = new Buffer([0])
10481 var ONE = new Buffer([1])
10482
10483 // https://tools.ietf.org/html/rfc6979#section-3.2
10484 function deterministicGenerateK (curve, hash, d, checkSig) {
10485 typeForce('Buffer', hash)
10486 typeForce('BigInteger', d)
10487
10488 // FIXME: remove/uncomment for 2.0.0
10489 // typeForce('Function', checkSig)
10490
10491 if (typeof checkSig !== 'function') {
10492 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10493
10494 checkSig = function (k) {
10495 var G = curve.G
10496 var n = curve.n
10497 var e = BigInteger.fromBuffer(hash)
10498
10499 var Q = G.multiply(k)
10500
10501 if (curve.isInfinity(Q))
10502 return false
10503
10504 var r = Q.affineX.mod(n)
10505 if (r.signum() === 0)
10506 return false
10507
10508 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10509 if (s.signum() === 0)
10510 return false
10511
10512 return true
10513 }
10514 }
10515
10516 // sanity check
10517 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10518
10519 var x = d.toBuffer(32)
10520 var k = new Buffer(32)
10521 var v = new Buffer(32)
10522
10523 // Step A, ignored as hash already provided
10524 // Step B
10525 v.fill(1)
10526
10527 // Step C
10528 k.fill(0)
10529
10530 // Step D
10531 k = createHmac('sha256', k)
10532 .update(v)
10533 .update(ZERO)
10534 .update(x)
10535 .update(hash)
10536 .digest()
10537
10538 // Step E
10539 v = createHmac('sha256', k).update(v).digest()
10540
10541 // Step F
10542 k = createHmac('sha256', k)
10543 .update(v)
10544 .update(ONE)
10545 .update(x)
10546 .update(hash)
10547 .digest()
10548
10549 // Step G
10550 v = createHmac('sha256', k).update(v).digest()
10551
10552 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10553 // Step H2b
10554 v = createHmac('sha256', k).update(v).digest()
10555
10556 var T = BigInteger.fromBuffer(v)
10557
10558 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10559 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10560 k = createHmac('sha256', k)
10561 .update(v)
10562 .update(ZERO)
10563 .digest()
10564
10565 v = createHmac('sha256', k).update(v).digest()
10566
10567 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10568 // Step H2b again
10569 v = createHmac('sha256', k).update(v).digest()
10570 T = BigInteger.fromBuffer(v)
10571 }
10572
10573 return T
10574 }
10575
10576 function sign (curve, hash, d) {
10577 var r, s
10578
10579 var e = BigInteger.fromBuffer(hash)
10580 var n = curve.n
10581 var G = curve.G
10582
10583 deterministicGenerateK(curve, hash, d, function (k) {
10584 var Q = G.multiply(k)
10585
10586 if (curve.isInfinity(Q))
10587 return false
10588
10589 r = Q.affineX.mod(n)
10590 if (r.signum() === 0)
10591 return false
10592
10593 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10594 if (s.signum() === 0)
10595 return false
10596
10597 return true
10598 })
10599
10600 var N_OVER_TWO = n.shiftRight(1)
10601
10602 // enforce low S values, see bip62: 'low s values in signatures'
10603 if (s.compareTo(N_OVER_TWO) > 0) {
10604 s = n.subtract(s)
10605 }
10606
10607 return new ECSignature(r, s)
10608 }
10609
10610 function verifyRaw (curve, e, signature, Q) {
10611 var n = curve.n
10612 var G = curve.G
10613
10614 var r = signature.r
10615 var s = signature.s
10616
10617 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10618 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10619 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10620
10621 // c = s^-1 mod n
10622 var c = s.modInverse(n)
10623
10624 // 1.4.4 Compute u1 = es^−1 mod n
10625 // u2 = rs^−1 mod n
10626 var u1 = e.multiply(c).mod(n)
10627 var u2 = r.multiply(c).mod(n)
10628
10629 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10630 var R = G.multiplyTwo(u1, Q, u2)
10631 var v = R.affineX.mod(n)
10632
10633 // 1.4.5 (cont.) Enforce R is not at infinity
10634 if (curve.isInfinity(R)) return false
10635
10636 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10637 return v.equals(r)
10638 }
10639
10640 function verify (curve, hash, signature, Q) {
10641 // 1.4.2 H = Hash(M), already done by the user
10642 // 1.4.3 e = H
10643 var e = BigInteger.fromBuffer(hash)
10644
10645 return verifyRaw(curve, e, signature, Q)
10646 }
10647
10648 /**
10649 * Recover a public key from a signature.
10650 *
10651 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10652 * Key Recovery Operation".
10653 *
10654 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10655 */
10656 function recoverPubKey (curve, e, signature, i) {
10657 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10658
10659 var n = curve.n
10660 var G = curve.G
10661
10662 var r = signature.r
10663 var s = signature.s
10664
10665 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10666 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10667
10668 // A set LSB signifies that the y-coordinate is odd
10669 var isYOdd = i & 1
10670
10671 // The more significant bit specifies whether we should use the
10672 // first or second candidate key.
10673 var isSecondKey = i >> 1
10674
10675 // 1.1 Let x = r + jn
10676 var x = isSecondKey ? r.add(n) : r
10677 var R = curve.pointFromX(isYOdd, x)
10678
10679 // 1.4 Check that nR is at infinity
10680 var nR = R.multiply(n)
10681 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10682
10683 // Compute -e from e
10684 var eNeg = e.negate().mod(n)
10685
10686 // 1.6.1 Compute Q = r^-1 (sR - eG)
10687 // Q = r^-1 (sR + -eG)
10688 var rInv = r.modInverse(n)
10689
10690 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10691 curve.validate(Q)
10692
10693 return Q
10694 }
10695
10696 /**
10697 * Calculate pubkey extraction parameter.
10698 *
10699 * When extracting a pubkey from a signature, we have to
10700 * distinguish four different cases. Rather than putting this
10701 * burden on the verifier, Bitcoin includes a 2-bit value with the
10702 * signature.
10703 *
10704 * This function simply tries all four cases and returns the value
10705 * that resulted in a successful pubkey recovery.
10706 */
10707 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10708 for (var i = 0; i < 4; i++) {
10709 var Qprime = recoverPubKey(curve, e, signature, i)
10710
10711 // 1.6.2 Verify Q
10712 if (Qprime.equals(Q)) {
10713 return i
10714 }
10715 }
10716
10717 throw new Error('Unable to find valid recovery factor')
10718 }
10719
10720 module.exports = {
10721 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10722 deterministicGenerateK: deterministicGenerateK,
10723 recoverPubKey: recoverPubKey,
10724 sign: sign,
10725 verify: verify,
10726 verifyRaw: verifyRaw
10727 }
10728
10729 }).call(this,require("buffer").Buffer)
10730 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10731 (function (Buffer){
10732 var assert = require('assert')
10733 var base58check = require('bs58check')
10734 var ecdsa = require('./ecdsa')
10735 var networks = require('./networks')
10736 var randomBytes = require('randombytes')
10737 var typeForce = require('typeforce')
10738
10739 var BigInteger = require('bigi')
10740 var ECPubKey = require('./ecpubkey')
10741
10742 var ecurve = require('ecurve')
10743 var secp256k1 = ecurve.getCurveByName('secp256k1')
10744
10745 function ECKey (d, compressed) {
10746 assert(d.signum() > 0, 'Private key must be greater than 0')
10747 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10748
10749 var Q = ECKey.curve.G.multiply(d)
10750
10751 this.d = d
10752 this.pub = new ECPubKey(Q, compressed)
10753 }
10754
10755 // Constants
10756 ECKey.curve = secp256k1
10757
10758 // Static constructors
10759 ECKey.fromWIF = function (string) {
10760 var payload = base58check.decode(string)
10761 var compressed = false
10762
10763 // Ignore the version byte
10764 payload = payload.slice(1)
10765
10766 if (payload.length === 33) {
10767 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10768
10769 // Truncate the compression flag
10770 payload = payload.slice(0, -1)
10771 compressed = true
10772 }
10773
10774 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10775
10776 var d = BigInteger.fromBuffer(payload)
10777 return new ECKey(d, compressed)
10778 }
10779
10780 ECKey.makeRandom = function (compressed, rng) {
10781 rng = rng || randomBytes
10782
10783 var buffer = rng(32)
10784 typeForce('Buffer', buffer)
10785 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10786
10787 var d = BigInteger.fromBuffer(buffer)
10788 d = d.mod(ECKey.curve.n)
10789
10790 return new ECKey(d, compressed)
10791 }
10792
10793 // Export functions
10794 ECKey.prototype.toWIF = function (network) {
10795 network = network || networks.bitcoin
10796
10797 var bufferLen = this.pub.compressed ? 34 : 33
10798 var buffer = new Buffer(bufferLen)
10799
10800 buffer.writeUInt8(network.wif, 0)
10801 this.d.toBuffer(32).copy(buffer, 1)
10802
10803 if (this.pub.compressed) {
10804 buffer.writeUInt8(0x01, 33)
10805 }
10806
10807 return base58check.encode(buffer)
10808 }
10809
10810 // Operations
10811 ECKey.prototype.sign = function (hash) {
10812 return ecdsa.sign(ECKey.curve, hash, this.d)
10813 }
10814
10815 module.exports = ECKey
10816
10817 }).call(this,require("buffer").Buffer)
10818 },{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
10819 (function (Buffer){
10820 var crypto = require('./crypto')
10821 var ecdsa = require('./ecdsa')
10822 var typeForce = require('typeforce')
10823 var networks = require('./networks')
10824
10825 var Address = require('./address')
10826
10827 var ecurve = require('ecurve')
10828 var secp256k1 = ecurve.getCurveByName('secp256k1')
10829
10830 function ECPubKey (Q, compressed) {
10831 if (compressed === undefined) {
10832 compressed = true
10833 }
10834
10835 typeForce('Point', Q)
10836 typeForce('Boolean', compressed)
10837
10838 this.compressed = compressed
10839 this.Q = Q
10840 }
10841
10842 // Constants
10843 ECPubKey.curve = secp256k1
10844
10845 // Static constructors
10846 ECPubKey.fromBuffer = function (buffer) {
10847 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10848 return new ECPubKey(Q, Q.compressed)
10849 }
10850
10851 ECPubKey.fromHex = function (hex) {
10852 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10853 }
10854
10855 // Operations
10856 ECPubKey.prototype.getAddress = function (network) {
10857 network = network || networks.bitcoin
10858
10859 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10860 }
10861
10862 ECPubKey.prototype.verify = function (hash, signature) {
10863 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10864 }
10865
10866 // Export functions
10867 ECPubKey.prototype.toBuffer = function () {
10868 return this.Q.getEncoded(this.compressed)
10869 }
10870
10871 ECPubKey.prototype.toHex = function () {
10872 return this.toBuffer().toString('hex')
10873 }
10874
10875 module.exports = ECPubKey
10876
10877 }).call(this,require("buffer").Buffer)
10878 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10879 (function (Buffer){
10880 var assert = require('assert')
10881 var typeForce = require('typeforce')
10882
10883 var BigInteger = require('bigi')
10884
10885 function ECSignature (r, s) {
10886 typeForce('BigInteger', r)
10887 typeForce('BigInteger', s)
10888
10889 this.r = r
10890 this.s = s
10891 }
10892
10893 ECSignature.parseCompact = function (buffer) {
10894 assert.equal(buffer.length, 65, 'Invalid signature length')
10895 var i = buffer.readUInt8(0) - 27
10896
10897 // At most 3 bits
10898 assert.equal(i, i & 7, 'Invalid signature parameter')
10899 var compressed = !!(i & 4)
10900
10901 // Recovery param only
10902 i = i & 3
10903
10904 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10905 var s = BigInteger.fromBuffer(buffer.slice(33))
10906
10907 return {
10908 compressed: compressed,
10909 i: i,
10910 signature: new ECSignature(r, s)
10911 }
10912 }
10913
10914 ECSignature.fromDER = function (buffer) {
10915 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10916 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10917 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10918
10919 var rLen = buffer.readUInt8(3)
10920 assert(rLen > 0, 'R length is zero')
10921
10922 var offset = 4 + rLen
10923 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10924
10925 var sLen = buffer.readUInt8(offset + 1)
10926 assert(sLen > 0, 'S length is zero')
10927
10928 var rB = buffer.slice(4, offset)
10929 var sB = buffer.slice(offset + 2)
10930 offset += 2 + sLen
10931
10932 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10933 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10934 }
10935
10936 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10937 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10938 }
10939
10940 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10941 var r = BigInteger.fromDERInteger(rB)
10942 var s = BigInteger.fromDERInteger(sB)
10943
10944 assert(r.signum() >= 0, 'R value is negative')
10945 assert(s.signum() >= 0, 'S value is negative')
10946
10947 return new ECSignature(r, s)
10948 }
10949
10950 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10951 ECSignature.parseScriptSignature = function (buffer) {
10952 var hashType = buffer.readUInt8(buffer.length - 1)
10953 var hashTypeMod = hashType & ~0x80
10954
10955 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10956
10957 return {
10958 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10959 hashType: hashType
10960 }
10961 }
10962
10963 ECSignature.prototype.toCompact = function (i, compressed) {
10964 if (compressed) {
10965 i += 4
10966 }
10967
10968 i += 27
10969
10970 var buffer = new Buffer(65)
10971 buffer.writeUInt8(i, 0)
10972
10973 this.r.toBuffer(32).copy(buffer, 1)
10974 this.s.toBuffer(32).copy(buffer, 33)
10975
10976 return buffer
10977 }
10978
10979 ECSignature.prototype.toDER = function () {
10980 var rBa = this.r.toDERInteger()
10981 var sBa = this.s.toDERInteger()
10982
10983 var sequence = []
10984
10985 // INTEGER
10986 sequence.push(0x02, rBa.length)
10987 sequence = sequence.concat(rBa)
10988
10989 // INTEGER
10990 sequence.push(0x02, sBa.length)
10991 sequence = sequence.concat(sBa)
10992
10993 // SEQUENCE
10994 sequence.unshift(0x30, sequence.length)
10995
10996 return new Buffer(sequence)
10997 }
10998
10999 ECSignature.prototype.toScriptSignature = function (hashType) {
11000 var hashTypeMod = hashType & ~0x80
11001 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11002
11003 var hashTypeBuffer = new Buffer(1)
11004 hashTypeBuffer.writeUInt8(hashType, 0)
11005
11006 return Buffer.concat([this.toDER(), hashTypeBuffer])
11007 }
11008
11009 module.exports = ECSignature
11010
11011 }).call(this,require("buffer").Buffer)
11012 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11013 (function (Buffer){
11014 var assert = require('assert')
11015 var base58check = require('bs58check')
11016 var bcrypto = require('./crypto')
11017 var createHmac = require('create-hmac')
11018 var typeForce = require('typeforce')
11019 var networks = require('./networks')
11020
11021 var BigInteger = require('bigi')
11022 var ECKey = require('./eckey')
11023 var ECPubKey = require('./ecpubkey')
11024
11025 var ecurve = require('ecurve')
11026 var curve = ecurve.getCurveByName('secp256k1')
11027
11028 function findBIP32NetworkByVersion (version) {
11029 for (var name in networks) {
11030 var network = networks[name]
11031
11032 if (version === network.bip32.private || version === network.bip32.public) {
11033 return network
11034 }
11035 }
11036
11037 assert(false, 'Could not find network for ' + version.toString(16))
11038 }
11039
11040 function HDNode (K, chainCode, network) {
11041 network = network || networks.bitcoin
11042
11043 typeForce('Buffer', chainCode)
11044
11045 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11046 assert(network.bip32, 'Unknown BIP32 constants for network')
11047
11048 this.chainCode = chainCode
11049 this.depth = 0
11050 this.index = 0
11051 this.parentFingerprint = 0x00000000
11052 this.network = network
11053
11054 if (K instanceof BigInteger) {
11055 this.privKey = new ECKey(K, true)
11056 this.pubKey = this.privKey.pub
11057 } else if (K instanceof ECKey) {
11058 assert(K.pub.compressed, 'ECKey must be compressed')
11059 this.privKey = K
11060 this.pubKey = K.pub
11061 } else if (K instanceof ECPubKey) {
11062 assert(K.compressed, 'ECPubKey must be compressed')
11063 this.pubKey = K
11064 } else {
11065 this.pubKey = new ECPubKey(K, true)
11066 }
11067 }
11068
11069 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11070 HDNode.HIGHEST_BIT = 0x80000000
11071 HDNode.LENGTH = 78
11072
11073 HDNode.fromSeedBuffer = function (seed, network) {
11074 typeForce('Buffer', seed)
11075
11076 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11077 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11078
11079 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11080 var IL = I.slice(0, 32)
11081 var IR = I.slice(32)
11082
11083 // In case IL is 0 or >= n, the master key is invalid
11084 // This is handled by `new ECKey` in the HDNode constructor
11085 var pIL = BigInteger.fromBuffer(IL)
11086
11087 return new HDNode(pIL, IR, network)
11088 }
11089
11090 HDNode.fromSeedHex = function (hex, network) {
11091 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11092 }
11093
11094 HDNode.fromBase58 = function (string, network) {
11095 return HDNode.fromBuffer(base58check.decode(string), network, true)
11096 }
11097
11098 // FIXME: remove in 2.x.y
11099 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11100 if (!__ignoreDeprecation) {
11101 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11102 }
11103
11104 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11105
11106 // 4 byte: version bytes
11107 var version = buffer.readUInt32BE(0)
11108
11109 if (network) {
11110 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11111
11112 // auto-detect
11113 } else {
11114 network = findBIP32NetworkByVersion(version)
11115 }
11116
11117 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11118 var depth = buffer.readUInt8(4)
11119
11120 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11121 var parentFingerprint = buffer.readUInt32BE(5)
11122 if (depth === 0) {
11123 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11124 }
11125
11126 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11127 // This is encoded in MSB order. (0x00000000 if master key)
11128 var index = buffer.readUInt32BE(9)
11129 assert(depth > 0 || index === 0, 'Invalid index')
11130
11131 // 32 bytes: the chain code
11132 var chainCode = buffer.slice(13, 45)
11133 var data, hd
11134
11135 // 33 bytes: private key data (0x00 + k)
11136 if (version === network.bip32.private) {
11137 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11138 data = buffer.slice(46, 78)
11139 var d = BigInteger.fromBuffer(data)
11140 hd = new HDNode(d, chainCode, network)
11141
11142 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11143 } else {
11144 data = buffer.slice(45, 78)
11145 var Q = ecurve.Point.decodeFrom(curve, data)
11146 assert.equal(Q.compressed, true, 'Invalid public key')
11147
11148 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11149 // If not, the extended public key is invalid.
11150 curve.validate(Q)
11151
11152 hd = new HDNode(Q, chainCode, network)
11153 }
11154
11155 hd.depth = depth
11156 hd.index = index
11157 hd.parentFingerprint = parentFingerprint
11158
11159 return hd
11160 }
11161
11162 // FIXME: remove in 2.x.y
11163 HDNode.fromHex = function (hex, network) {
11164 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11165 }
11166
11167 HDNode.prototype.getIdentifier = function () {
11168 return bcrypto.hash160(this.pubKey.toBuffer())
11169 }
11170
11171 HDNode.prototype.getFingerprint = function () {
11172 return this.getIdentifier().slice(0, 4)
11173 }
11174
11175 HDNode.prototype.getAddress = function () {
11176 return this.pubKey.getAddress(this.network)
11177 }
11178
11179 HDNode.prototype.neutered = function () {
11180 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11181 neutered.depth = this.depth
11182 neutered.index = this.index
11183 neutered.parentFingerprint = this.parentFingerprint
11184
11185 return neutered
11186 }
11187
11188 HDNode.prototype.toBase58 = function (isPrivate) {
11189 return base58check.encode(this.toBuffer(isPrivate, true))
11190 }
11191
11192 // FIXME: remove in 2.x.y
11193 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11194 if (isPrivate === undefined) {
11195 isPrivate = !!this.privKey
11196
11197 // FIXME: remove in 2.x.y
11198 } else {
11199 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11200 }
11201
11202 if (!__ignoreDeprecation) {
11203 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11204 }
11205
11206 // Version
11207 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11208 var buffer = new Buffer(HDNode.LENGTH)
11209
11210 // 4 bytes: version bytes
11211 buffer.writeUInt32BE(version, 0)
11212
11213 // Depth
11214 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11215 buffer.writeUInt8(this.depth, 4)
11216
11217 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11218 buffer.writeUInt32BE(this.parentFingerprint, 5)
11219
11220 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11221 // This is encoded in Big endian. (0x00000000 if master key)
11222 buffer.writeUInt32BE(this.index, 9)
11223
11224 // 32 bytes: the chain code
11225 this.chainCode.copy(buffer, 13)
11226
11227 // 33 bytes: the public key or private key data
11228 if (isPrivate) {
11229 // FIXME: remove in 2.x.y
11230 assert(this.privKey, 'Missing private key')
11231
11232 // 0x00 + k for private keys
11233 buffer.writeUInt8(0, 45)
11234 this.privKey.d.toBuffer(32).copy(buffer, 46)
11235 } else {
11236 // X9.62 encoding for public keys
11237 this.pubKey.toBuffer().copy(buffer, 45)
11238 }
11239
11240 return buffer
11241 }
11242
11243 // FIXME: remove in 2.x.y
11244 HDNode.prototype.toHex = function (isPrivate) {
11245 return this.toBuffer(isPrivate).toString('hex')
11246 }
11247
11248 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11249 HDNode.prototype.derive = function (index) {
11250 var isHardened = index >= HDNode.HIGHEST_BIT
11251 var indexBuffer = new Buffer(4)
11252 indexBuffer.writeUInt32BE(index, 0)
11253
11254 var data
11255
11256 // Hardened child
11257 if (isHardened) {
11258 assert(this.privKey, 'Could not derive hardened child key')
11259
11260 // data = 0x00 || ser256(kpar) || ser32(index)
11261 data = Buffer.concat([
11262 this.privKey.d.toBuffer(33),
11263 indexBuffer
11264 ])
11265
11266 // Normal child
11267 } else {
11268 // data = serP(point(kpar)) || ser32(index)
11269 // = serP(Kpar) || ser32(index)
11270 data = Buffer.concat([
11271 this.pubKey.toBuffer(),
11272 indexBuffer
11273 ])
11274 }
11275
11276 var I = createHmac('sha512', this.chainCode).update(data).digest()
11277 var IL = I.slice(0, 32)
11278 var IR = I.slice(32)
11279
11280 var pIL = BigInteger.fromBuffer(IL)
11281
11282 // In case parse256(IL) >= n, proceed with the next value for i
11283 if (pIL.compareTo(curve.n) >= 0) {
11284 return this.derive(index + 1)
11285 }
11286
11287 // Private parent key -> private child key
11288 var hd
11289 if (this.privKey) {
11290 // ki = parse256(IL) + kpar (mod n)
11291 var ki = pIL.add(this.privKey.d).mod(curve.n)
11292
11293 // In case ki == 0, proceed with the next value for i
11294 if (ki.signum() === 0) {
11295 return this.derive(index + 1)
11296 }
11297
11298 hd = new HDNode(ki, IR, this.network)
11299
11300 // Public parent key -> public child key
11301 } else {
11302 // Ki = point(parse256(IL)) + Kpar
11303 // = G*IL + Kpar
11304 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11305
11306 // In case Ki is the point at infinity, proceed with the next value for i
11307 if (curve.isInfinity(Ki)) {
11308 return this.derive(index + 1)
11309 }
11310
11311 hd = new HDNode(Ki, IR, this.network)
11312 }
11313
11314 hd.depth = this.depth + 1
11315 hd.index = index
11316 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11317
11318 return hd
11319 }
11320
11321 HDNode.prototype.deriveHardened = function (index) {
11322 // Only derives hardened private keys by default
11323 return this.derive(index + HDNode.HIGHEST_BIT)
11324 }
11325
11326 HDNode.prototype.toString = HDNode.prototype.toBase58
11327
11328 module.exports = HDNode
11329
11330 }).call(this,require("buffer").Buffer)
11331 },{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
11332 module.exports = {
11333 Address: require('./address'),
11334 base58check: require('./base58check'),
11335 Block: require('./block'),
11336 bufferutils: require('./bufferutils'),
11337 crypto: require('./crypto'),
11338 ecdsa: require('./ecdsa'),
11339 ECKey: require('./eckey'),
11340 ECPubKey: require('./ecpubkey'),
11341 ECSignature: require('./ecsignature'),
11342 Message: require('./message'),
11343 opcodes: require('./opcodes'),
11344 HDNode: require('./hdnode'),
11345 Script: require('./script'),
11346 scripts: require('./scripts'),
11347 Transaction: require('./transaction'),
11348 TransactionBuilder: require('./transaction_builder'),
11349 networks: require('./networks'),
11350 Wallet: require('./wallet')
11351 }
11352
11353 },{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
11354 (function (Buffer){
11355 var bufferutils = require('./bufferutils')
11356 var crypto = require('./crypto')
11357 var ecdsa = require('./ecdsa')
11358 var networks = require('./networks')
11359
11360 var BigInteger = require('bigi')
11361 var ECPubKey = require('./ecpubkey')
11362 var ECSignature = require('./ecsignature')
11363
11364 var ecurve = require('ecurve')
11365 var ecparams = ecurve.getCurveByName('secp256k1')
11366
11367 function magicHash (message, network) {
11368 var magicPrefix = new Buffer(network.magicPrefix)
11369 var messageBuffer = new Buffer(message)
11370 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11371
11372 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11373 return crypto.hash256(buffer)
11374 }
11375
11376 function sign (privKey, message, network) {
11377 network = network || networks.bitcoin
11378
11379 var hash = magicHash(message, network)
11380 var signature = privKey.sign(hash)
11381 var e = BigInteger.fromBuffer(hash)
11382 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11383
11384 return signature.toCompact(i, privKey.pub.compressed)
11385 }
11386
11387 // TODO: network could be implied from address
11388 function verify (address, signature, message, network) {
11389 if (!Buffer.isBuffer(signature)) {
11390 signature = new Buffer(signature, 'base64')
11391 }
11392
11393 network = network || networks.bitcoin
11394
11395 var hash = magicHash(message, network)
11396 var parsed = ECSignature.parseCompact(signature)
11397 var e = BigInteger.fromBuffer(hash)
11398 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11399
11400 var pubKey = new ECPubKey(Q, parsed.compressed)
11401 return pubKey.getAddress(network).toString() === address.toString()
11402 }
11403
11404 module.exports = {
11405 magicHash: magicHash,
11406 sign: sign,
11407 verify: verify
11408 }
11409
11410 }).call(this,require("buffer").Buffer)
11411 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11412 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11413 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11414
11415 var networks = {
11416 bitcoin: {
11417 magicPrefix: '\x18Bitcoin Signed Message:\n',
11418 bip32: {
11419 public: 0x0488b21e,
11420 private: 0x0488ade4
11421 },
11422 pubKeyHash: 0x00,
11423 scriptHash: 0x05,
11424 wif: 0x80,
11425 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11426 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11427 estimateFee: estimateFee('bitcoin')
11428 },
11429 testnet: {
11430 magicPrefix: '\x18Bitcoin Signed Message:\n',
11431 bip32: {
11432 public: 0x043587cf,
11433 private: 0x04358394
11434 },
11435 pubKeyHash: 0x6f,
11436 scriptHash: 0xc4,
11437 wif: 0xef,
11438 dustThreshold: 546,
11439 feePerKb: 10000,
11440 estimateFee: estimateFee('testnet')
11441 },
11442 litecoin: {
11443 magicPrefix: '\x19Litecoin Signed Message:\n',
11444 bip32: {
11445 public: 0x019da462,
11446 private: 0x019d9cfe
11447 },
11448 pubKeyHash: 0x30,
11449 scriptHash: 0x05,
11450 wif: 0xb0,
11451 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11452 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11453 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11454 estimateFee: estimateFee('litecoin')
11455 },
11456 dogecoin: {
11457 magicPrefix: '\x19Dogecoin Signed Message:\n',
11458 bip32: {
11459 public: 0x02facafd,
11460 private: 0x02fac398
11461 },
11462 pubKeyHash: 0x1e,
11463 scriptHash: 0x16,
11464 wif: 0x9e,
11465 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11466 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11467 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11468 estimateFee: estimateFee('dogecoin')
11469 },
11470 viacoin: {
11471 magicPrefix: '\x18Viacoin Signed Message:\n',
11472 bip32: {
11473 public: 0x0488b21e,
11474 private: 0x0488ade4
11475 },
11476 pubKeyHash: 0x47,
11477 scriptHash: 0x21,
11478 wif: 0xc7,
11479 dustThreshold: 560,
11480 dustSoftThreshold: 100000,
11481 feePerKb: 100000, //
11482 estimateFee: estimateFee('viacoin')
11483 },
11484 viacointestnet: {
11485 magicPrefix: '\x18Viacoin Signed Message:\n',
11486 bip32: {
11487 public: 0x043587cf,
11488 private: 0x04358394
11489 },
11490 pubKeyHash: 0x7f,
11491 scriptHash: 0xc4,
11492 wif: 0xff,
11493 dustThreshold: 560,
11494 dustSoftThreshold: 100000,
11495 feePerKb: 100000,
11496 estimateFee: estimateFee('viacointestnet')
11497 },
11498 gamerscoin: {
11499 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11500 bip32: {
11501 public: 0x019da462,
11502 private: 0x019d9cfe
11503 },
11504 pubKeyHash: 0x26,
11505 scriptHash: 0x05,
11506 wif: 0xA6,
11507 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11508 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11509 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11510 estimateFee: estimateFee('gamerscoin')
11511 },
11512 jumbucks: {
11513 magicPrefix: '\x19Jumbucks Signed Message:\n',
11514 bip32: {
11515 public: 0x037a689a,
11516 private: 0x037a6460
11517 },
11518 pubKeyHash: 0x2b,
11519 scriptHash: 0x05,
11520 wif: 0xab,
11521 dustThreshold: 0,
11522 dustSoftThreshold: 10000,
11523 feePerKb: 10000,
11524 estimateFee: estimateFee('jumbucks')
11525 },
11526 zetacoin: {
11527 magicPrefix: '\x18Zetacoin Signed Message:\n',
11528 bip32: {
11529 public: 0x0488b21e,
11530 private: 0x0488ade4
11531 },
11532 pubKeyHash: 0x50,
11533 scriptHash: 0x09,
11534 wif: 0xe0,
11535 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11536 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11537 estimateFee: estimateFee('zetacoin')
11538 }
11539 }
11540
11541 function estimateFee (type) {
11542 return function (tx) {
11543 var network = networks[type]
11544 var baseFee = network.feePerKb
11545 var byteSize = tx.toBuffer().length
11546
11547 var fee = baseFee * Math.ceil(byteSize / 1000)
11548 if (network.dustSoftThreshold === undefined) return fee
11549
11550 tx.outs.forEach(function (e) {
11551 if (e.value < network.dustSoftThreshold) {
11552 fee += baseFee
11553 }
11554 })
11555
11556 return fee
11557 }
11558 }
11559
11560 module.exports = networks
11561
11562 },{}],67:[function(require,module,exports){
11563 module.exports = {
11564 // push value
11565 OP_FALSE: 0,
11566 OP_0: 0,
11567 OP_PUSHDATA1: 76,
11568 OP_PUSHDATA2: 77,
11569 OP_PUSHDATA4: 78,
11570 OP_1NEGATE: 79,
11571 OP_RESERVED: 80,
11572 OP_1: 81,
11573 OP_TRUE: 81,
11574 OP_2: 82,
11575 OP_3: 83,
11576 OP_4: 84,
11577 OP_5: 85,
11578 OP_6: 86,
11579 OP_7: 87,
11580 OP_8: 88,
11581 OP_9: 89,
11582 OP_10: 90,
11583 OP_11: 91,
11584 OP_12: 92,
11585 OP_13: 93,
11586 OP_14: 94,
11587 OP_15: 95,
11588 OP_16: 96,
11589
11590 // control
11591 OP_NOP: 97,
11592 OP_VER: 98,
11593 OP_IF: 99,
11594 OP_NOTIF: 100,
11595 OP_VERIF: 101,
11596 OP_VERNOTIF: 102,
11597 OP_ELSE: 103,
11598 OP_ENDIF: 104,
11599 OP_VERIFY: 105,
11600 OP_RETURN: 106,
11601
11602 // stack ops
11603 OP_TOALTSTACK: 107,
11604 OP_FROMALTSTACK: 108,
11605 OP_2DROP: 109,
11606 OP_2DUP: 110,
11607 OP_3DUP: 111,
11608 OP_2OVER: 112,
11609 OP_2ROT: 113,
11610 OP_2SWAP: 114,
11611 OP_IFDUP: 115,
11612 OP_DEPTH: 116,
11613 OP_DROP: 117,
11614 OP_DUP: 118,
11615 OP_NIP: 119,
11616 OP_OVER: 120,
11617 OP_PICK: 121,
11618 OP_ROLL: 122,
11619 OP_ROT: 123,
11620 OP_SWAP: 124,
11621 OP_TUCK: 125,
11622
11623 // splice ops
11624 OP_CAT: 126,
11625 OP_SUBSTR: 127,
11626 OP_LEFT: 128,
11627 OP_RIGHT: 129,
11628 OP_SIZE: 130,
11629
11630 // bit logic
11631 OP_INVERT: 131,
11632 OP_AND: 132,
11633 OP_OR: 133,
11634 OP_XOR: 134,
11635 OP_EQUAL: 135,
11636 OP_EQUALVERIFY: 136,
11637 OP_RESERVED1: 137,
11638 OP_RESERVED2: 138,
11639
11640 // numeric
11641 OP_1ADD: 139,
11642 OP_1SUB: 140,
11643 OP_2MUL: 141,
11644 OP_2DIV: 142,
11645 OP_NEGATE: 143,
11646 OP_ABS: 144,
11647 OP_NOT: 145,
11648 OP_0NOTEQUAL: 146,
11649
11650 OP_ADD: 147,
11651 OP_SUB: 148,
11652 OP_MUL: 149,
11653 OP_DIV: 150,
11654 OP_MOD: 151,
11655 OP_LSHIFT: 152,
11656 OP_RSHIFT: 153,
11657
11658 OP_BOOLAND: 154,
11659 OP_BOOLOR: 155,
11660 OP_NUMEQUAL: 156,
11661 OP_NUMEQUALVERIFY: 157,
11662 OP_NUMNOTEQUAL: 158,
11663 OP_LESSTHAN: 159,
11664 OP_GREATERTHAN: 160,
11665 OP_LESSTHANOREQUAL: 161,
11666 OP_GREATERTHANOREQUAL: 162,
11667 OP_MIN: 163,
11668 OP_MAX: 164,
11669
11670 OP_WITHIN: 165,
11671
11672 // crypto
11673 OP_RIPEMD160: 166,
11674 OP_SHA1: 167,
11675 OP_SHA256: 168,
11676 OP_HASH160: 169,
11677 OP_HASH256: 170,
11678 OP_CODESEPARATOR: 171,
11679 OP_CHECKSIG: 172,
11680 OP_CHECKSIGVERIFY: 173,
11681 OP_CHECKMULTISIG: 174,
11682 OP_CHECKMULTISIGVERIFY: 175,
11683
11684 // expansion
11685 OP_NOP1: 176,
11686 OP_NOP2: 177,
11687 OP_NOP3: 178,
11688 OP_NOP4: 179,
11689 OP_NOP5: 180,
11690 OP_NOP6: 181,
11691 OP_NOP7: 182,
11692 OP_NOP8: 183,
11693 OP_NOP9: 184,
11694 OP_NOP10: 185,
11695
11696 // template matching params
11697 OP_PUBKEYHASH: 253,
11698 OP_PUBKEY: 254,
11699 OP_INVALIDOPCODE: 255
11700 }
11701
11702 },{}],68:[function(require,module,exports){
11703 (function (Buffer){
11704 var assert = require('assert')
11705 var bufferutils = require('./bufferutils')
11706 var crypto = require('./crypto')
11707 var typeForce = require('typeforce')
11708 var opcodes = require('./opcodes')
11709
11710 function Script (buffer, chunks) {
11711 typeForce('Buffer', buffer)
11712 typeForce('Array', chunks)
11713
11714 this.buffer = buffer
11715 this.chunks = chunks
11716 }
11717
11718 Script.fromASM = function (asm) {
11719 var strChunks = asm.split(' ')
11720 var chunks = strChunks.map(function (strChunk) {
11721 // opcode
11722 if (strChunk in opcodes) {
11723 return opcodes[strChunk]
11724
11725 // data chunk
11726 } else {
11727 return new Buffer(strChunk, 'hex')
11728 }
11729 })
11730
11731 return Script.fromChunks(chunks)
11732 }
11733
11734 Script.fromBuffer = function (buffer) {
11735 var chunks = []
11736 var i = 0
11737
11738 while (i < buffer.length) {
11739 var opcode = buffer.readUInt8(i)
11740
11741 // data chunk
11742 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11743 var d = bufferutils.readPushDataInt(buffer, i)
11744
11745 // did reading a pushDataInt fail? return non-chunked script
11746 if (d === null) return new Script(buffer, [])
11747 i += d.size
11748
11749 // attempt to read too much data?
11750 if (i + d.number > buffer.length) return new Script(buffer, [])
11751
11752 var data = buffer.slice(i, i + d.number)
11753 i += d.number
11754
11755 chunks.push(data)
11756
11757 // opcode
11758 } else {
11759 chunks.push(opcode)
11760
11761 i += 1
11762 }
11763 }
11764
11765 return new Script(buffer, chunks)
11766 }
11767
11768 Script.fromChunks = function (chunks) {
11769 typeForce('Array', chunks)
11770
11771 var bufferSize = chunks.reduce(function (accum, chunk) {
11772 // data chunk
11773 if (Buffer.isBuffer(chunk)) {
11774 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11775 }
11776
11777 // opcode
11778 return accum + 1
11779 }, 0.0)
11780
11781 var buffer = new Buffer(bufferSize)
11782 var offset = 0
11783
11784 chunks.forEach(function (chunk) {
11785 // data chunk
11786 if (Buffer.isBuffer(chunk)) {
11787 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11788
11789 chunk.copy(buffer, offset)
11790 offset += chunk.length
11791
11792 // opcode
11793 } else {
11794 buffer.writeUInt8(chunk, offset)
11795 offset += 1
11796 }
11797 })
11798
11799 assert.equal(offset, buffer.length, 'Could not decode chunks')
11800 return new Script(buffer, chunks)
11801 }
11802
11803 Script.fromHex = function (hex) {
11804 return Script.fromBuffer(new Buffer(hex, 'hex'))
11805 }
11806
11807 Script.EMPTY = Script.fromChunks([])
11808
11809 Script.prototype.getHash = function () {
11810 return crypto.hash160(this.buffer)
11811 }
11812
11813 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11814 Script.prototype.without = function (needle) {
11815 return Script.fromChunks(this.chunks.filter(function (op) {
11816 return op !== needle
11817 }))
11818 }
11819
11820 var reverseOps = []
11821 for (var op in opcodes) {
11822 var code = opcodes[op]
11823 reverseOps[code] = op
11824 }
11825
11826 Script.prototype.toASM = function () {
11827 return this.chunks.map(function (chunk) {
11828 // data chunk
11829 if (Buffer.isBuffer(chunk)) {
11830 return chunk.toString('hex')
11831
11832 // opcode
11833 } else {
11834 return reverseOps[chunk]
11835 }
11836 }).join(' ')
11837 }
11838
11839 Script.prototype.toBuffer = function () {
11840 return this.buffer
11841 }
11842
11843 Script.prototype.toHex = function () {
11844 return this.toBuffer().toString('hex')
11845 }
11846
11847 module.exports = Script
11848
11849 }).call(this,require("buffer").Buffer)
11850 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11851 (function (Buffer){
11852 var assert = require('assert')
11853 var ops = require('./opcodes')
11854 var typeForce = require('typeforce')
11855
11856 var ecurve = require('ecurve')
11857 var curve = ecurve.getCurveByName('secp256k1')
11858
11859 var ECSignature = require('./ecsignature')
11860 var Script = require('./script')
11861
11862 function isCanonicalPubKey (buffer) {
11863 if (!Buffer.isBuffer(buffer)) return false
11864
11865 try {
11866 ecurve.Point.decodeFrom(curve, buffer)
11867 } catch (e) {
11868 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11869 throw e
11870
11871 return false
11872 }
11873
11874 return true
11875 }
11876
11877 function isCanonicalSignature (buffer) {
11878 if (!Buffer.isBuffer(buffer)) return false
11879
11880 try {
11881 ECSignature.parseScriptSignature(buffer)
11882 } catch (e) {
11883 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
11884 throw e
11885 }
11886
11887 return false
11888 }
11889
11890 return true
11891 }
11892
11893 function isPubKeyHashInput (script) {
11894 return script.chunks.length === 2 &&
11895 isCanonicalSignature(script.chunks[0]) &&
11896 isCanonicalPubKey(script.chunks[1])
11897 }
11898
11899 function isPubKeyHashOutput (script) {
11900 return script.chunks.length === 5 &&
11901 script.chunks[0] === ops.OP_DUP &&
11902 script.chunks[1] === ops.OP_HASH160 &&
11903 Buffer.isBuffer(script.chunks[2]) &&
11904 script.chunks[2].length === 20 &&
11905 script.chunks[3] === ops.OP_EQUALVERIFY &&
11906 script.chunks[4] === ops.OP_CHECKSIG
11907 }
11908
11909 function isPubKeyInput (script) {
11910 return script.chunks.length === 1 &&
11911 isCanonicalSignature(script.chunks[0])
11912 }
11913
11914 function isPubKeyOutput (script) {
11915 return script.chunks.length === 2 &&
11916 isCanonicalPubKey(script.chunks[0]) &&
11917 script.chunks[1] === ops.OP_CHECKSIG
11918 }
11919
11920 function isScriptHashInput (script, allowIncomplete) {
11921 if (script.chunks.length < 2) return false
11922
11923 var lastChunk = script.chunks[script.chunks.length - 1]
11924 if (!Buffer.isBuffer(lastChunk)) return false
11925
11926 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11927 var redeemScript = Script.fromBuffer(lastChunk)
11928
11929 // is redeemScript a valid script?
11930 if (redeemScript.chunks.length === 0) return false
11931
11932 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11933 }
11934
11935 function isScriptHashOutput (script) {
11936 return script.chunks.length === 3 &&
11937 script.chunks[0] === ops.OP_HASH160 &&
11938 Buffer.isBuffer(script.chunks[1]) &&
11939 script.chunks[1].length === 20 &&
11940 script.chunks[2] === ops.OP_EQUAL
11941 }
11942
11943 // allowIncomplete is to account for combining signatures
11944 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11945 function isMultisigInput (script, allowIncomplete) {
11946 if (script.chunks.length < 2) return false
11947 if (script.chunks[0] !== ops.OP_0) return false
11948
11949 if (allowIncomplete) {
11950 return script.chunks.slice(1).every(function (chunk) {
11951 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11952 })
11953 }
11954
11955 return script.chunks.slice(1).every(isCanonicalSignature)
11956 }
11957
11958 function isMultisigOutput (script) {
11959 if (script.chunks.length < 4) return false
11960 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11961
11962 var mOp = script.chunks[0]
11963 if (mOp === ops.OP_0) return false
11964 if (mOp < ops.OP_1) return false
11965 if (mOp > ops.OP_16) return false
11966
11967 var nOp = script.chunks[script.chunks.length - 2]
11968 if (nOp === ops.OP_0) return false
11969 if (nOp < ops.OP_1) return false
11970 if (nOp > ops.OP_16) return false
11971
11972 var m = mOp - (ops.OP_1 - 1)
11973 var n = nOp - (ops.OP_1 - 1)
11974 if (n < m) return false
11975
11976 var pubKeys = script.chunks.slice(1, -2)
11977 if (n < pubKeys.length) return false
11978
11979 return pubKeys.every(isCanonicalPubKey)
11980 }
11981
11982 function isNullDataOutput (script) {
11983 return script.chunks[0] === ops.OP_RETURN
11984 }
11985
11986 function classifyOutput (script) {
11987 typeForce('Script', script)
11988
11989 if (isPubKeyHashOutput(script)) {
11990 return 'pubkeyhash'
11991 } else if (isScriptHashOutput(script)) {
11992 return 'scripthash'
11993 } else if (isMultisigOutput(script)) {
11994 return 'multisig'
11995 } else if (isPubKeyOutput(script)) {
11996 return 'pubkey'
11997 } else if (isNullDataOutput(script)) {
11998 return 'nulldata'
11999 }
12000
12001 return 'nonstandard'
12002 }
12003
12004 function classifyInput (script, allowIncomplete) {
12005 typeForce('Script', script)
12006
12007 if (isPubKeyHashInput(script)) {
12008 return 'pubkeyhash'
12009 } else if (isMultisigInput(script, allowIncomplete)) {
12010 return 'multisig'
12011 } else if (isScriptHashInput(script, allowIncomplete)) {
12012 return 'scripthash'
12013 } else if (isPubKeyInput(script)) {
12014 return 'pubkey'
12015 }
12016
12017 return 'nonstandard'
12018 }
12019
12020 // Standard Script Templates
12021 // {pubKey} OP_CHECKSIG
12022 function pubKeyOutput (pubKey) {
12023 return Script.fromChunks([
12024 pubKey.toBuffer(),
12025 ops.OP_CHECKSIG
12026 ])
12027 }
12028
12029 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12030 function pubKeyHashOutput (hash) {
12031 typeForce('Buffer', hash)
12032
12033 return Script.fromChunks([
12034 ops.OP_DUP,
12035 ops.OP_HASH160,
12036 hash,
12037 ops.OP_EQUALVERIFY,
12038 ops.OP_CHECKSIG
12039 ])
12040 }
12041
12042 // OP_HASH160 {scriptHash} OP_EQUAL
12043 function scriptHashOutput (hash) {
12044 typeForce('Buffer', hash)
12045
12046 return Script.fromChunks([
12047 ops.OP_HASH160,
12048 hash,
12049 ops.OP_EQUAL
12050 ])
12051 }
12052
12053 // m [pubKeys ...] n OP_CHECKMULTISIG
12054 function multisigOutput (m, pubKeys) {
12055 typeForce(['ECPubKey'], pubKeys)
12056
12057 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12058
12059 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12060 return pubKey.toBuffer()
12061 })
12062 var n = pubKeys.length
12063
12064 return Script.fromChunks([].concat(
12065 (ops.OP_1 - 1) + m,
12066 pubKeyBuffers,
12067 (ops.OP_1 - 1) + n,
12068 ops.OP_CHECKMULTISIG
12069 ))
12070 }
12071
12072 // {signature}
12073 function pubKeyInput (signature) {
12074 typeForce('Buffer', signature)
12075
12076 return Script.fromChunks([signature])
12077 }
12078
12079 // {signature} {pubKey}
12080 function pubKeyHashInput (signature, pubKey) {
12081 typeForce('Buffer', signature)
12082
12083 return Script.fromChunks([signature, pubKey.toBuffer()])
12084 }
12085
12086 // <scriptSig> {serialized scriptPubKey script}
12087 function scriptHashInput (scriptSig, scriptPubKey) {
12088 return Script.fromChunks([].concat(
12089 scriptSig.chunks,
12090 scriptPubKey.toBuffer()
12091 ))
12092 }
12093
12094 // OP_0 [signatures ...]
12095 function multisigInput (signatures, scriptPubKey) {
12096 if (scriptPubKey) {
12097 assert(isMultisigOutput(scriptPubKey))
12098
12099 var mOp = scriptPubKey.chunks[0]
12100 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12101 var m = mOp - (ops.OP_1 - 1)
12102 var n = nOp - (ops.OP_1 - 1)
12103
12104 assert(signatures.length >= m, 'Not enough signatures provided')
12105 assert(signatures.length <= n, 'Too many signatures provided')
12106 }
12107
12108 return Script.fromChunks([].concat(ops.OP_0, signatures))
12109 }
12110
12111 function nullDataOutput (data) {
12112 return Script.fromChunks([ops.OP_RETURN, data])
12113 }
12114
12115 module.exports = {
12116 isCanonicalPubKey: isCanonicalPubKey,
12117 isCanonicalSignature: isCanonicalSignature,
12118 isPubKeyHashInput: isPubKeyHashInput,
12119 isPubKeyHashOutput: isPubKeyHashOutput,
12120 isPubKeyInput: isPubKeyInput,
12121 isPubKeyOutput: isPubKeyOutput,
12122 isScriptHashInput: isScriptHashInput,
12123 isScriptHashOutput: isScriptHashOutput,
12124 isMultisigInput: isMultisigInput,
12125 isMultisigOutput: isMultisigOutput,
12126 isNullDataOutput: isNullDataOutput,
12127 classifyOutput: classifyOutput,
12128 classifyInput: classifyInput,
12129 pubKeyOutput: pubKeyOutput,
12130 pubKeyHashOutput: pubKeyHashOutput,
12131 scriptHashOutput: scriptHashOutput,
12132 multisigOutput: multisigOutput,
12133 pubKeyInput: pubKeyInput,
12134 pubKeyHashInput: pubKeyHashInput,
12135 scriptHashInput: scriptHashInput,
12136 multisigInput: multisigInput,
12137 dataOutput: function (data) {
12138 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12139 return nullDataOutput(data)
12140 },
12141 nullDataOutput: nullDataOutput
12142 }
12143
12144 }).call(this,require("buffer").Buffer)
12145 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12146 (function (Buffer){
12147 var assert = require('assert')
12148 var bufferutils = require('./bufferutils')
12149 var crypto = require('./crypto')
12150 var typeForce = require('typeforce')
12151 var opcodes = require('./opcodes')
12152 var scripts = require('./scripts')
12153
12154 var Address = require('./address')
12155 var ECSignature = require('./ecsignature')
12156 var Script = require('./script')
12157
12158 function Transaction () {
12159 this.version = 1
12160 this.locktime = 0
12161 this.ins = []
12162 this.outs = []
12163 }
12164
12165 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12166 Transaction.SIGHASH_ALL = 0x01
12167 Transaction.SIGHASH_NONE = 0x02
12168 Transaction.SIGHASH_SINGLE = 0x03
12169 Transaction.SIGHASH_ANYONECANPAY = 0x80
12170
12171 Transaction.fromBuffer = function (buffer, __disableAssert) {
12172 var offset = 0
12173 function readSlice (n) {
12174 offset += n
12175 return buffer.slice(offset - n, offset)
12176 }
12177
12178 function readUInt32 () {
12179 var i = buffer.readUInt32LE(offset)
12180 offset += 4
12181 return i
12182 }
12183
12184 function readUInt64 () {
12185 var i = bufferutils.readUInt64LE(buffer, offset)
12186 offset += 8
12187 return i
12188 }
12189
12190 function readVarInt () {
12191 var vi = bufferutils.readVarInt(buffer, offset)
12192 offset += vi.size
12193 return vi.number
12194 }
12195
12196 function readScript () {
12197 return Script.fromBuffer(readSlice(readVarInt()))
12198 }
12199
12200 function readGenerationScript () {
12201 return new Script(readSlice(readVarInt()), [])
12202 }
12203
12204 var tx = new Transaction()
12205 tx.version = readUInt32()
12206
12207 var vinLen = readVarInt()
12208 for (var i = 0; i < vinLen; ++i) {
12209 var hash = readSlice(32)
12210
12211 if (Transaction.isCoinbaseHash(hash)) {
12212 tx.ins.push({
12213 hash: hash,
12214 index: readUInt32(),
12215 script: readGenerationScript(),
12216 sequence: readUInt32()
12217 })
12218 } else {
12219 tx.ins.push({
12220 hash: hash,
12221 index: readUInt32(),
12222 script: readScript(),
12223 sequence: readUInt32()
12224 })
12225 }
12226 }
12227
12228 var voutLen = readVarInt()
12229 for (i = 0; i < voutLen; ++i) {
12230 tx.outs.push({
12231 value: readUInt64(),
12232 script: readScript()
12233 })
12234 }
12235
12236 tx.locktime = readUInt32()
12237
12238 if (!__disableAssert) {
12239 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12240 }
12241
12242 return tx
12243 }
12244
12245 Transaction.fromHex = function (hex) {
12246 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12247 }
12248
12249 Transaction.isCoinbaseHash = function (buffer) {
12250 return Array.prototype.every.call(buffer, function (x) {
12251 return x === 0
12252 })
12253 }
12254
12255 /**
12256 * Create a new txIn.
12257 *
12258 * Can be called with any of:
12259 *
12260 * - A transaction and an index
12261 * - A transaction hash and an index
12262 *
12263 * Note that this method does not sign the created input.
12264 */
12265 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12266 if (sequence === undefined || sequence === null) {
12267 sequence = Transaction.DEFAULT_SEQUENCE
12268 }
12269
12270 script = script || Script.EMPTY
12271
12272 if (typeof hash === 'string') {
12273 // TxId hex is big-endian, we need little-endian
12274 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12275 } else if (hash instanceof Transaction) {
12276 hash = hash.getHash()
12277 }
12278
12279 typeForce('Buffer', hash)
12280 typeForce('Number', index)
12281 typeForce('Number', sequence)
12282 typeForce('Script', script)
12283
12284 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12285
12286 // Add the input and return the input's index
12287 return (this.ins.push({
12288 hash: hash,
12289 index: index,
12290 script: script,
12291 sequence: sequence
12292 }) - 1)
12293 }
12294
12295 /**
12296 * Create a new txOut.
12297 *
12298 * Can be called with:
12299 *
12300 * - A base58 address string and a value
12301 * - An Address object and a value
12302 * - A scriptPubKey Script and a value
12303 */
12304 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12305 // Attempt to get a valid address if it's a base58 address string
12306 if (typeof scriptPubKey === 'string') {
12307 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12308 }
12309
12310 // Attempt to get a valid script if it's an Address object
12311 if (scriptPubKey instanceof Address) {
12312 scriptPubKey = scriptPubKey.toOutputScript()
12313 }
12314
12315 typeForce('Script', scriptPubKey)
12316 typeForce('Number', value)
12317
12318 // Add the output and return the output's index
12319 return (this.outs.push({
12320 script: scriptPubKey,
12321 value: value
12322 }) - 1)
12323 }
12324
12325 Transaction.prototype.clone = function () {
12326 var newTx = new Transaction()
12327 newTx.version = this.version
12328 newTx.locktime = this.locktime
12329
12330 newTx.ins = this.ins.map(function (txIn) {
12331 return {
12332 hash: txIn.hash,
12333 index: txIn.index,
12334 script: txIn.script,
12335 sequence: txIn.sequence
12336 }
12337 })
12338
12339 newTx.outs = this.outs.map(function (txOut) {
12340 return {
12341 script: txOut.script,
12342 value: txOut.value
12343 }
12344 })
12345
12346 return newTx
12347 }
12348
12349 /**
12350 * Hash transaction for signing a specific input.
12351 *
12352 * Bitcoin uses a different hash for each signed transaction input. This
12353 * method copies the transaction, makes the necessary changes based on the
12354 * hashType, serializes and finally hashes the result. This hash can then be
12355 * used to sign the transaction input in question.
12356 */
12357 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12358 // FIXME: remove in 2.x.y
12359 if (arguments[0] instanceof Script) {
12360 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12361
12362 // swap the arguments (must be stored in tmp, arguments is special)
12363 var tmp = arguments[0]
12364 inIndex = arguments[1]
12365 prevOutScript = tmp
12366 }
12367
12368 typeForce('Number', inIndex)
12369 typeForce('Script', prevOutScript)
12370 typeForce('Number', hashType)
12371
12372 assert(inIndex >= 0, 'Invalid vin index')
12373 assert(inIndex < this.ins.length, 'Invalid vin index')
12374
12375 var txTmp = this.clone()
12376 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12377
12378 // Blank out other inputs' signatures
12379 txTmp.ins.forEach(function (txIn) {
12380 txIn.script = Script.EMPTY
12381 })
12382 txTmp.ins[inIndex].script = hashScript
12383
12384 var hashTypeModifier = hashType & 0x1f
12385
12386 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12387 assert(false, 'SIGHASH_NONE not yet supported')
12388 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12389 assert(false, 'SIGHASH_SINGLE not yet supported')
12390 }
12391
12392 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12393 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12394 }
12395
12396 var hashTypeBuffer = new Buffer(4)
12397 hashTypeBuffer.writeInt32LE(hashType, 0)
12398
12399 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12400 return crypto.hash256(buffer)
12401 }
12402
12403 Transaction.prototype.getHash = function () {
12404 return crypto.hash256(this.toBuffer())
12405 }
12406
12407 Transaction.prototype.getId = function () {
12408 // TxHash is little-endian, we need big-endian
12409 return bufferutils.reverse(this.getHash()).toString('hex')
12410 }
12411
12412 Transaction.prototype.toBuffer = function () {
12413 function scriptSize (script) {
12414 var length = script.buffer.length
12415
12416 return bufferutils.varIntSize(length) + length
12417 }
12418
12419 var buffer = new Buffer(
12420 8 +
12421 bufferutils.varIntSize(this.ins.length) +
12422 bufferutils.varIntSize(this.outs.length) +
12423 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12424 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12425 )
12426
12427 var offset = 0
12428 function writeSlice (slice) {
12429 slice.copy(buffer, offset)
12430 offset += slice.length
12431 }
12432
12433 function writeUInt32 (i) {
12434 buffer.writeUInt32LE(i, offset)
12435 offset += 4
12436 }
12437
12438 function writeUInt64 (i) {
12439 bufferutils.writeUInt64LE(buffer, i, offset)
12440 offset += 8
12441 }
12442
12443 function writeVarInt (i) {
12444 var n = bufferutils.writeVarInt(buffer, i, offset)
12445 offset += n
12446 }
12447
12448 writeUInt32(this.version)
12449 writeVarInt(this.ins.length)
12450
12451 this.ins.forEach(function (txIn) {
12452 writeSlice(txIn.hash)
12453 writeUInt32(txIn.index)
12454 writeVarInt(txIn.script.buffer.length)
12455 writeSlice(txIn.script.buffer)
12456 writeUInt32(txIn.sequence)
12457 })
12458
12459 writeVarInt(this.outs.length)
12460 this.outs.forEach(function (txOut) {
12461 writeUInt64(txOut.value)
12462 writeVarInt(txOut.script.buffer.length)
12463 writeSlice(txOut.script.buffer)
12464 })
12465
12466 writeUInt32(this.locktime)
12467
12468 return buffer
12469 }
12470
12471 Transaction.prototype.toHex = function () {
12472 return this.toBuffer().toString('hex')
12473 }
12474
12475 Transaction.prototype.setInputScript = function (index, script) {
12476 typeForce('Number', index)
12477 typeForce('Script', script)
12478
12479 this.ins[index].script = script
12480 }
12481
12482 // FIXME: remove in 2.x.y
12483 Transaction.prototype.sign = function (index, privKey, hashType) {
12484 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12485
12486 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12487 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12488
12489 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12490 this.setInputScript(index, scriptSig)
12491 }
12492
12493 // FIXME: remove in 2.x.y
12494 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12495 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12496
12497 hashType = hashType || Transaction.SIGHASH_ALL
12498
12499 var hash = this.hashForSignature(index, prevOutScript, hashType)
12500 var signature = privKey.sign(hash)
12501
12502 return signature.toScriptSignature(hashType)
12503 }
12504
12505 // FIXME: remove in 2.x.y
12506 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12507 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12508
12509 var parsed = ECSignature.parseScriptSignature(buffer)
12510 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12511
12512 return pubKey.verify(hash, parsed.signature)
12513 }
12514
12515 module.exports = Transaction
12516
12517 }).call(this,require("buffer").Buffer)
12518 },{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
12519 (function (Buffer){
12520 var assert = require('assert')
12521 var ops = require('./opcodes')
12522 var scripts = require('./scripts')
12523
12524 var ECPubKey = require('./ecpubkey')
12525 var ECSignature = require('./ecsignature')
12526 var Script = require('./script')
12527 var Transaction = require('./transaction')
12528
12529 function extractInput (txIn) {
12530 var redeemScript
12531 var scriptSig = txIn.script
12532 var prevOutScript
12533 var prevOutType = scripts.classifyInput(scriptSig, true)
12534 var scriptType
12535
12536 // Re-classify if scriptHash
12537 if (prevOutType === 'scripthash') {
12538 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12539 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12540
12541 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12542 scriptType = scripts.classifyInput(scriptSig, true)
12543 } else {
12544 scriptType = prevOutType
12545 }
12546
12547 // Extract hashType, pubKeys and signatures
12548 var hashType, parsed, pubKeys, signatures
12549
12550 switch (scriptType) {
12551 case 'pubkeyhash': {
12552 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12553 hashType = parsed.hashType
12554 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12555 signatures = [parsed.signature]
12556 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12557
12558 break
12559 }
12560
12561 case 'pubkey': {
12562 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12563 hashType = parsed.hashType
12564 signatures = [parsed.signature]
12565
12566 if (redeemScript) {
12567 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12568 }
12569
12570 break
12571 }
12572
12573 case 'multisig': {
12574 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12575 if (chunk === ops.OP_0) return chunk
12576
12577 var parsed = ECSignature.parseScriptSignature(chunk)
12578 hashType = parsed.hashType
12579
12580 return parsed.signature
12581 })
12582
12583 if (redeemScript) {
12584 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12585 }
12586
12587 break
12588 }
12589 }
12590
12591 return {
12592 hashType: hashType,
12593 prevOutScript: prevOutScript,
12594 prevOutType: prevOutType,
12595 pubKeys: pubKeys,
12596 redeemScript: redeemScript,
12597 scriptType: scriptType,
12598 signatures: signatures
12599 }
12600 }
12601
12602 function TransactionBuilder () {
12603 this.prevTxMap = {}
12604 this.prevOutScripts = {}
12605 this.prevOutTypes = {}
12606
12607 this.inputs = []
12608 this.tx = new Transaction()
12609 }
12610
12611 TransactionBuilder.fromTransaction = function (transaction) {
12612 var txb = new TransactionBuilder()
12613
12614 // Copy other transaction fields
12615 txb.tx.version = transaction.version
12616 txb.tx.locktime = transaction.locktime
12617
12618 // Extract/add inputs
12619 transaction.ins.forEach(function (txIn) {
12620 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12621 })
12622
12623 // Extract/add outputs
12624 transaction.outs.forEach(function (txOut) {
12625 txb.addOutput(txOut.script, txOut.value)
12626 })
12627
12628 // Extract/add signatures
12629 txb.inputs = transaction.ins.map(function (txIn) {
12630 // TODO: remove me after testcase added
12631 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12632
12633 // Ignore empty scripts
12634 if (txIn.script.buffer.length === 0) return {}
12635
12636 return extractInput(txIn)
12637 })
12638
12639 return txb
12640 }
12641
12642 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12643 var prevOutHash
12644
12645 // txId
12646 if (typeof prevTx === 'string') {
12647 prevOutHash = new Buffer(prevTx, 'hex')
12648
12649 // TxId hex is big-endian, we want little-endian hash
12650 Array.prototype.reverse.call(prevOutHash)
12651
12652 // Transaction
12653 } else if (prevTx instanceof Transaction) {
12654 prevOutHash = prevTx.getHash()
12655 prevOutScript = prevTx.outs[index].script
12656
12657 // txHash
12658 } else {
12659 prevOutHash = prevTx
12660 }
12661
12662 var input = {}
12663 if (prevOutScript) {
12664 var prevOutType = scripts.classifyOutput(prevOutScript)
12665
12666 // if we can, extract pubKey information
12667 switch (prevOutType) {
12668 case 'multisig': {
12669 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12670 break
12671 }
12672
12673 case 'pubkey': {
12674 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12675 break
12676 }
12677 }
12678
12679 if (prevOutType !== 'scripthash') {
12680 input.scriptType = prevOutType
12681 }
12682
12683 input.prevOutScript = prevOutScript
12684 input.prevOutType = prevOutType
12685 }
12686
12687 assert(this.inputs.every(function (input2) {
12688 if (input2.hashType === undefined) return true
12689
12690 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12691 }), 'No, this would invalidate signatures')
12692
12693 var prevOut = prevOutHash.toString('hex') + ':' + index
12694 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12695
12696 var vin = this.tx.addInput(prevOutHash, index, sequence)
12697 this.inputs[vin] = input
12698 this.prevTxMap[prevOut] = vin
12699
12700 return vin
12701 }
12702
12703 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12704 assert(this.inputs.every(function (input) {
12705 if (input.hashType === undefined) return true
12706
12707 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12708 }), 'No, this would invalidate signatures')
12709
12710 return this.tx.addOutput(scriptPubKey, value)
12711 }
12712
12713 TransactionBuilder.prototype.build = function () {
12714 return this.__build(false)
12715 }
12716 TransactionBuilder.prototype.buildIncomplete = function () {
12717 return this.__build(true)
12718 }
12719
12720 var canSignTypes = {
12721 'pubkeyhash': true,
12722 'multisig': true,
12723 'pubkey': true
12724 }
12725
12726 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12727 if (!allowIncomplete) {
12728 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12729 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12730 }
12731
12732 var tx = this.tx.clone()
12733
12734 // Create script signatures from signature meta-data
12735 this.inputs.forEach(function (input, index) {
12736 var scriptType = input.scriptType
12737 var scriptSig
12738
12739 if (!allowIncomplete) {
12740 assert(!!scriptType, 'Transaction is not complete')
12741 assert(scriptType in canSignTypes, scriptType + ' not supported')
12742 assert(input.signatures, 'Transaction is missing signatures')
12743 }
12744
12745 if (input.signatures) {
12746 switch (scriptType) {
12747 case 'pubkeyhash': {
12748 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12749 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12750 break
12751 }
12752
12753 case 'multisig': {
12754 // Array.prototype.map is sparse-compatible
12755 var msSignatures = input.signatures.map(function (signature) {
12756 return signature && signature.toScriptSignature(input.hashType)
12757 })
12758
12759 // fill in blanks with OP_0
12760 if (allowIncomplete) {
12761 for (var i = 0; i < msSignatures.length; ++i) {
12762 if (msSignatures[i]) continue
12763
12764 msSignatures[i] = ops.OP_0
12765 }
12766 } else {
12767 // Array.prototype.filter returns non-sparse array
12768 msSignatures = msSignatures.filter(function (x) { return x })
12769 }
12770
12771 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12772 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12773 break
12774 }
12775
12776 case 'pubkey': {
12777 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12778 scriptSig = scripts.pubKeyInput(pkSignature)
12779 break
12780 }
12781 }
12782 }
12783
12784 // did we build a scriptSig?
12785 if (scriptSig) {
12786 // wrap as scriptHash if necessary
12787 if (input.prevOutType === 'scripthash') {
12788 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12789 }
12790
12791 tx.setInputScript(index, scriptSig)
12792 }
12793 })
12794
12795 return tx
12796 }
12797
12798 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12799 assert(index in this.inputs, 'No input at index: ' + index)
12800 hashType = hashType || Transaction.SIGHASH_ALL
12801
12802 var input = this.inputs[index]
12803 var canSign = input.hashType &&
12804 input.prevOutScript &&
12805 input.prevOutType &&
12806 input.pubKeys &&
12807 input.scriptType &&
12808 input.signatures
12809
12810 // are we almost ready to sign?
12811 if (canSign) {
12812 // if redeemScript was provided, enforce consistency
12813 if (redeemScript) {
12814 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12815 }
12816
12817 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12818
12819 // no? prepare
12820 } else {
12821 // must be pay-to-scriptHash?
12822 if (redeemScript) {
12823 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12824 if (input.prevOutScript) {
12825 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12826
12827 var scriptHash = input.prevOutScript.chunks[1]
12828 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12829 }
12830
12831 var scriptType = scripts.classifyOutput(redeemScript)
12832 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12833
12834 var pubKeys = []
12835 switch (scriptType) {
12836 case 'multisig': {
12837 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12838 break
12839 }
12840
12841 case 'pubkeyhash': {
12842 var pkh1 = redeemScript.chunks[2]
12843 var pkh2 = privKey.pub.getAddress().hash
12844
12845 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12846 pubKeys = [privKey.pub]
12847 break
12848 }
12849
12850 case 'pubkey': {
12851 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12852 break
12853 }
12854 }
12855
12856 if (!input.prevOutScript) {
12857 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12858 input.prevOutType = 'scripthash'
12859 }
12860
12861 input.pubKeys = pubKeys
12862 input.redeemScript = redeemScript
12863 input.scriptType = scriptType
12864
12865 // cannot be pay-to-scriptHash
12866 } else {
12867 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12868
12869 // can we otherwise sign this?
12870 if (input.scriptType) {
12871 assert(input.pubKeys, input.scriptType + ' not supported')
12872
12873 // we know nothin' Jon Snow, assume pubKeyHash
12874 } else {
12875 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12876 input.prevOutType = 'pubkeyhash'
12877 input.pubKeys = [privKey.pub]
12878 input.scriptType = input.prevOutType
12879 }
12880 }
12881
12882 input.hashType = hashType
12883 input.signatures = input.signatures || []
12884 }
12885
12886 var signatureScript = input.redeemScript || input.prevOutScript
12887 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12888
12889 // enforce signature order matches public keys
12890 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12891 // maintain a local copy of unmatched signatures
12892 var unmatched = input.signatures.slice()
12893
12894 input.signatures = input.pubKeys.map(function (pubKey) {
12895 var match
12896
12897 // check for any matching signatures
12898 unmatched.some(function (signature, i) {
12899 if (!pubKey.verify(signatureHash, signature)) return false
12900 match = signature
12901
12902 // remove matched signature from unmatched
12903 unmatched.splice(i, 1)
12904
12905 return true
12906 })
12907
12908 return match || undefined
12909 })
12910 }
12911
12912 // enforce in order signing of public keys
12913 assert(input.pubKeys.some(function (pubKey, i) {
12914 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12915
12916 assert(!input.signatures[i], 'Signature already exists')
12917 var signature = privKey.sign(signatureHash)
12918 input.signatures[i] = signature
12919
12920 return true
12921 }, this), 'privateKey cannot sign for this input')
12922 }
12923
12924 module.exports = TransactionBuilder
12925
12926 }).call(this,require("buffer").Buffer)
12927 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12928 (function (Buffer){
12929 var assert = require('assert')
12930 var bufferutils = require('./bufferutils')
12931 var typeForce = require('typeforce')
12932 var networks = require('./networks')
12933 var randomBytes = require('randombytes')
12934
12935 var Address = require('./address')
12936 var HDNode = require('./hdnode')
12937 var TransactionBuilder = require('./transaction_builder')
12938 var Script = require('./script')
12939
12940 function Wallet (seed, network) {
12941 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12942
12943 seed = seed || randomBytes(32)
12944 network = network || networks.bitcoin
12945
12946 // Stored in a closure to make accidental serialization less likely
12947 var masterKey = HDNode.fromSeedBuffer(seed, network)
12948
12949 // HD first-level child derivation method should be hardened
12950 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12951 var accountZero = masterKey.deriveHardened(0)
12952 var externalAccount = accountZero.derive(0)
12953 var internalAccount = accountZero.derive(1)
12954
12955 this.addresses = []
12956 this.changeAddresses = []
12957 this.network = network
12958 this.unspents = []
12959
12960 // FIXME: remove in 2.0.0
12961 this.unspentMap = {}
12962
12963 // FIXME: remove in 2.0.0
12964 var me = this
12965 this.newMasterKey = function (seed) {
12966 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12967
12968 seed = seed || randomBytes(32)
12969 masterKey = HDNode.fromSeedBuffer(seed, network)
12970
12971 accountZero = masterKey.deriveHardened(0)
12972 externalAccount = accountZero.derive(0)
12973 internalAccount = accountZero.derive(1)
12974
12975 me.addresses = []
12976 me.changeAddresses = []
12977
12978 me.unspents = []
12979 me.unspentMap = {}
12980 }
12981
12982 this.getMasterKey = function () {
12983 return masterKey
12984 }
12985 this.getAccountZero = function () {
12986 return accountZero
12987 }
12988 this.getExternalAccount = function () {
12989 return externalAccount
12990 }
12991 this.getInternalAccount = function () {
12992 return internalAccount
12993 }
12994 }
12995
12996 Wallet.prototype.createTransaction = function (to, value, options) {
12997 // FIXME: remove in 2.0.0
12998 if (typeof options !== 'object') {
12999 if (options !== undefined) {
13000 console.warn('Non options object parameters are deprecated, use options object instead')
13001
13002 options = {
13003 fixedFee: arguments[2],
13004 changeAddress: arguments[3]
13005 }
13006 }
13007 }
13008
13009 options = options || {}
13010
13011 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13012
13013 var changeAddress = options.changeAddress
13014 var fixedFee = options.fixedFee
13015 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13016
13017 // filter by minConf, then pending and sort by descending value
13018 var unspents = this.unspents.filter(function (unspent) {
13019 return unspent.confirmations >= minConf
13020 }).filter(function (unspent) {
13021 return !unspent.pending
13022 }).sort(function (o1, o2) {
13023 return o2.value - o1.value
13024 })
13025
13026 var accum = 0
13027 var addresses = []
13028 var subTotal = value
13029
13030 var txb = new TransactionBuilder()
13031 txb.addOutput(to, value)
13032
13033 for (var i = 0; i < unspents.length; ++i) {
13034 var unspent = unspents[i]
13035 addresses.push(unspent.address)
13036
13037 txb.addInput(unspent.txHash, unspent.index)
13038
13039 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13040
13041 accum += unspent.value
13042 subTotal = value + fee
13043
13044 if (accum >= subTotal) {
13045 var change = accum - subTotal
13046
13047 if (change > this.network.dustThreshold) {
13048 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13049 }
13050
13051 break
13052 }
13053 }
13054
13055 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13056
13057 return this.signWith(txb, addresses).build()
13058 }
13059
13060 // FIXME: remove in 2.0.0
13061 Wallet.prototype.processPendingTx = function (tx) {
13062 this.__processTx(tx, true)
13063 }
13064
13065 // FIXME: remove in 2.0.0
13066 Wallet.prototype.processConfirmedTx = function (tx) {
13067 this.__processTx(tx, false)
13068 }
13069
13070 // FIXME: remove in 2.0.0
13071 Wallet.prototype.__processTx = function (tx, isPending) {
13072 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13073
13074 var txId = tx.getId()
13075 var txHash = tx.getHash()
13076
13077 tx.outs.forEach(function (txOut, i) {
13078 var address
13079
13080 try {
13081 address = Address.fromOutputScript(txOut.script, this.network).toString()
13082 } catch (e) {
13083 if (!(e.message.match(/has no matching Address/)))
13084 throw e
13085 }
13086
13087 var myAddresses = this.addresses.concat(this.changeAddresses)
13088 if (myAddresses.indexOf(address) > -1) {
13089 var lookup = txId + ':' + i
13090 if (lookup in this.unspentMap) return
13091
13092 // its unique, add it
13093 var unspent = {
13094 address: address,
13095 confirmations: 0, // no way to determine this without more information
13096 index: i,
13097 txHash: txHash,
13098 txId: txId,
13099 value: txOut.value,
13100 pending: isPending
13101 }
13102
13103 this.unspentMap[lookup] = unspent
13104 this.unspents.push(unspent)
13105 }
13106 }, this)
13107
13108 tx.ins.forEach(function (txIn) {
13109 // copy and convert to big-endian hex
13110 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13111
13112 var lookup = txInId + ':' + txIn.index
13113 if (!(lookup in this.unspentMap)) return
13114
13115 var unspent = this.unspentMap[lookup]
13116
13117 if (isPending) {
13118 unspent.pending = true
13119 unspent.spent = true
13120 } else {
13121 delete this.unspentMap[lookup]
13122
13123 this.unspents = this.unspents.filter(function (unspent2) {
13124 return unspent !== unspent2
13125 })
13126 }
13127 }, this)
13128 }
13129
13130 Wallet.prototype.generateAddress = function () {
13131 var k = this.addresses.length
13132 var address = this.getExternalAccount().derive(k).getAddress()
13133
13134 this.addresses.push(address.toString())
13135
13136 return this.getReceiveAddress()
13137 }
13138
13139 Wallet.prototype.generateChangeAddress = function () {
13140 var k = this.changeAddresses.length
13141 var address = this.getInternalAccount().derive(k).getAddress()
13142
13143 this.changeAddresses.push(address.toString())
13144
13145 return this.getChangeAddress()
13146 }
13147
13148 Wallet.prototype.getAddress = function () {
13149 if (this.addresses.length === 0) {
13150 this.generateAddress()
13151 }
13152
13153 return this.addresses[this.addresses.length - 1]
13154 }
13155
13156 Wallet.prototype.getBalance = function (minConf) {
13157 minConf = minConf || 0
13158
13159 return this.unspents.filter(function (unspent) {
13160 return unspent.confirmations >= minConf
13161
13162 // FIXME: remove spent filter in 2.0.0
13163 }).filter(function (unspent) {
13164 return !unspent.spent
13165 }).reduce(function (accum, unspent) {
13166 return accum + unspent.value
13167 }, 0)
13168 }
13169
13170 Wallet.prototype.getChangeAddress = function () {
13171 if (this.changeAddresses.length === 0) {
13172 this.generateChangeAddress()
13173 }
13174
13175 return this.changeAddresses[this.changeAddresses.length - 1]
13176 }
13177
13178 Wallet.prototype.getInternalPrivateKey = function (index) {
13179 return this.getInternalAccount().derive(index).privKey
13180 }
13181
13182 Wallet.prototype.getPrivateKey = function (index) {
13183 return this.getExternalAccount().derive(index).privKey
13184 }
13185
13186 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13187 var index
13188
13189 if ((index = this.addresses.indexOf(address)) > -1) {
13190 return this.getPrivateKey(index)
13191 }
13192
13193 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13194 return this.getInternalPrivateKey(index)
13195 }
13196
13197 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13198 }
13199
13200 Wallet.prototype.getUnspentOutputs = function (minConf) {
13201 minConf = minConf || 0
13202
13203 return this.unspents.filter(function (unspent) {
13204 return unspent.confirmations >= minConf
13205
13206 // FIXME: remove spent filter in 2.0.0
13207 }).filter(function (unspent) {
13208 return !unspent.spent
13209 }).map(function (unspent) {
13210 return {
13211 address: unspent.address,
13212 confirmations: unspent.confirmations,
13213 index: unspent.index,
13214 txId: unspent.txId,
13215 value: unspent.value,
13216
13217 // FIXME: remove in 2.0.0
13218 hash: unspent.txId,
13219 pending: unspent.pending
13220 }
13221 })
13222 }
13223
13224 Wallet.prototype.setUnspentOutputs = function (unspents) {
13225 this.unspentMap = {}
13226 this.unspents = unspents.map(function (unspent) {
13227 // FIXME: remove unspent.hash in 2.0.0
13228 var txId = unspent.txId || unspent.hash
13229 var index = unspent.index
13230
13231 // FIXME: remove in 2.0.0
13232 if (unspent.hash !== undefined) {
13233 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13234 }
13235
13236 // FIXME: remove in 2.0.0
13237 if (index === undefined) {
13238 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13239 index = unspent.outputIndex
13240 }
13241
13242 typeForce('String', txId)
13243 typeForce('Number', index)
13244 typeForce('Number', unspent.value)
13245
13246 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13247 assert.doesNotThrow(function () {
13248 Address.fromBase58Check(unspent.address)
13249 }, 'Expected Base58 Address, got ' + unspent.address)
13250 assert(isFinite(index), 'Expected finite index, got ' + index)
13251
13252 // FIXME: remove branch in 2.0.0
13253 if (unspent.confirmations !== undefined) {
13254 typeForce('Number', unspent.confirmations)
13255 }
13256
13257 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13258
13259 unspent = {
13260 address: unspent.address,
13261 confirmations: unspent.confirmations || 0,
13262 index: index,
13263 txHash: txHash,
13264 txId: txId,
13265 value: unspent.value,
13266
13267 // FIXME: remove in 2.0.0
13268 pending: unspent.pending || false
13269 }
13270
13271 // FIXME: remove in 2.0.0
13272 this.unspentMap[txId + ':' + index] = unspent
13273
13274 return unspent
13275 }, this)
13276 }
13277
13278 Wallet.prototype.signWith = function (tx, addresses) {
13279 addresses.forEach(function (address, i) {
13280 var privKey = this.getPrivateKeyForAddress(address)
13281
13282 tx.sign(i, privKey)
13283 }, this)
13284
13285 return tx
13286 }
13287
13288 function estimatePaddedFee (tx, network) {
13289 var tmpTx = tx.clone()
13290 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13291
13292 return network.estimateFee(tmpTx)
13293 }
13294
13295 // FIXME: 1.0.0 shims, remove in 2.0.0
13296 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13297 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13298
13299 module.exports = Wallet
13300
13301 }).call(this,require("buffer").Buffer)
13302 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13303 });</script>
13304 <script>bitcoin.networks.shadow = {
13305 magicPrefix: '\x19ShadowCash Signed Message:\n',
13306 bip32: {
13307 public: 0xEE80286A,
13308 private: 0xEE8031E8
13309 },
13310 pubKeyHash: 0x3f,
13311 scriptHash: 0x7d,
13312 wif: 0xbf,
13313 dustThreshold: 0,
13314 feePerKb: 1000,
13315 estimateFee: function() { return "unused in this app" },
13316 };
13317
13318 bitcoin.networks.shadowtn = {
13319 magicPrefix: '\x19ShadowCash Signed Message:\n',
13320 bip32: {
13321 public: 0x76C0FDFB,
13322 private: 0x76C1077A
13323 },
13324 pubKeyHash: 0x7f,
13325 scriptHash: 0xc4,
13326 wif: 0xff,
13327 dustThreshold: 0,
13328 feePerKb: 1000,
13329 estimateFee: function() { return "unused in this app" },
13330 };
13331
13332 bitcoin.networks.clam = {
13333 bip32: {
13334 public: 0xa8c26d64,
13335 private: 0xa8c17826
13336 },
13337 pubKeyHash: 0x89,
13338 wif: 0x85,
13339 };
13340 </script>
13341 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13342
13343 //// base.js
13344
13345 /** @fileOverview Javascript cryptography implementation.
13346 *
13347 * Crush to remove comments, shorten variable names and
13348 * generally reduce transmission size.
13349 *
13350 * @author Emily Stark
13351 * @author Mike Hamburg
13352 * @author Dan Boneh
13353 */
13354
13355 "use strict";
13356 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13357 /*global document, window, escape, unescape, module, require, Uint32Array */
13358
13359 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13360 var sjcl = {
13361 /** @namespace Symmetric ciphers. */
13362 cipher: {},
13363
13364 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13365 hash: {},
13366
13367 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13368 keyexchange: {},
13369
13370 /** @namespace Block cipher modes of operation. */
13371 mode: {},
13372
13373 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13374 misc: {},
13375
13376 /**
13377 * @namespace Bit array encoders and decoders.
13378 *
13379 * @description
13380 * The members of this namespace are functions which translate between
13381 * SJCL's bitArrays and other objects (usually strings). Because it
13382 * isn't always clear which direction is encoding and which is decoding,
13383 * the method names are "fromBits" and "toBits".
13384 */
13385 codec: {},
13386
13387 /** @namespace Exceptions. */
13388 exception: {
13389 /** @constructor Ciphertext is corrupt. */
13390 corrupt: function(message) {
13391 this.toString = function() { return "CORRUPT: "+this.message; };
13392 this.message = message;
13393 },
13394
13395 /** @constructor Invalid parameter. */
13396 invalid: function(message) {
13397 this.toString = function() { return "INVALID: "+this.message; };
13398 this.message = message;
13399 },
13400
13401 /** @constructor Bug or missing feature in SJCL. @constructor */
13402 bug: function(message) {
13403 this.toString = function() { return "BUG: "+this.message; };
13404 this.message = message;
13405 },
13406
13407 /** @constructor Something isn't ready. */
13408 notReady: function(message) {
13409 this.toString = function() { return "NOT READY: "+this.message; };
13410 this.message = message;
13411 }
13412 }
13413 };
13414
13415 if(typeof module !== 'undefined' && module.exports){
13416 module.exports = sjcl;
13417 }
13418 if (typeof define === "function") {
13419 define([], function () {
13420 return sjcl;
13421 });
13422 }
13423
13424
13425 //// bitArray.js
13426
13427 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13428 *
13429 * @author Emily Stark
13430 * @author Mike Hamburg
13431 * @author Dan Boneh
13432 */
13433
13434 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13435 *
13436 * @description
13437 * <p>
13438 * These objects are the currency accepted by SJCL's crypto functions.
13439 * </p>
13440 *
13441 * <p>
13442 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13443 * but many of them can take arguments that are not a multiple of 4 bytes.
13444 * This library encodes arrays of bits (whose size need not be a multiple of 8
13445 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13446 * array of words, 32 bits at a time. Since the words are double-precision
13447 * floating point numbers, they fit some extra data. We use this (in a private,
13448 * possibly-changing manner) to encode the number of bits actually present
13449 * in the last word of the array.
13450 * </p>
13451 *
13452 * <p>
13453 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13454 * to ciphers like AES which want arrays of words.
13455 * </p>
13456 */
13457 sjcl.bitArray = {
13458 /**
13459 * Array slices in units of bits.
13460 * @param {bitArray} a The array to slice.
13461 * @param {Number} bstart The offset to the start of the slice, in bits.
13462 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13463 * slice until the end of the array.
13464 * @return {bitArray} The requested slice.
13465 */
13466 bitSlice: function (a, bstart, bend) {
13467 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13468 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13469 },
13470
13471 /**
13472 * Extract a number packed into a bit array.
13473 * @param {bitArray} a The array to slice.
13474 * @param {Number} bstart The offset to the start of the slice, in bits.
13475 * @param {Number} length The length of the number to extract.
13476 * @return {Number} The requested slice.
13477 */
13478 extract: function(a, bstart, blength) {
13479 // FIXME: this Math.floor is not necessary at all, but for some reason
13480 // seems to suppress a bug in the Chromium JIT.
13481 var x, sh = Math.floor((-bstart-blength) & 31);
13482 if ((bstart + blength - 1 ^ bstart) & -32) {
13483 // it crosses a boundary
13484 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13485 } else {
13486 // within a single word
13487 x = a[bstart/32|0] >>> sh;
13488 }
13489 return x & ((1<<blength) - 1);
13490 },
13491
13492 /**
13493 * Concatenate two bit arrays.
13494 * @param {bitArray} a1 The first array.
13495 * @param {bitArray} a2 The second array.
13496 * @return {bitArray} The concatenation of a1 and a2.
13497 */
13498 concat: function (a1, a2) {
13499 if (a1.length === 0 || a2.length === 0) {
13500 return a1.concat(a2);
13501 }
13502
13503 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13504 if (shift === 32) {
13505 return a1.concat(a2);
13506 } else {
13507 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13508 }
13509 },
13510
13511 /**
13512 * Find the length of an array of bits.
13513 * @param {bitArray} a The array.
13514 * @return {Number} The length of a, in bits.
13515 */
13516 bitLength: function (a) {
13517 var l = a.length, x;
13518 if (l === 0) { return 0; }
13519 x = a[l - 1];
13520 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13521 },
13522
13523 /**
13524 * Truncate an array.
13525 * @param {bitArray} a The array.
13526 * @param {Number} len The length to truncate to, in bits.
13527 * @return {bitArray} A new array, truncated to len bits.
13528 */
13529 clamp: function (a, len) {
13530 if (a.length * 32 < len) { return a; }
13531 a = a.slice(0, Math.ceil(len / 32));
13532 var l = a.length;
13533 len = len & 31;
13534 if (l > 0 && len) {
13535 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13536 }
13537 return a;
13538 },
13539
13540 /**
13541 * Make a partial word for a bit array.
13542 * @param {Number} len The number of bits in the word.
13543 * @param {Number} x The bits.
13544 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13545 * @return {Number} The partial word.
13546 */
13547 partial: function (len, x, _end) {
13548 if (len === 32) { return x; }
13549 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13550 },
13551
13552 /**
13553 * Get the number of bits used by a partial word.
13554 * @param {Number} x The partial word.
13555 * @return {Number} The number of bits used by the partial word.
13556 */
13557 getPartial: function (x) {
13558 return Math.round(x/0x10000000000) || 32;
13559 },
13560
13561 /**
13562 * Compare two arrays for equality in a predictable amount of time.
13563 * @param {bitArray} a The first array.
13564 * @param {bitArray} b The second array.
13565 * @return {boolean} true if a == b; false otherwise.
13566 */
13567 equal: function (a, b) {
13568 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13569 return false;
13570 }
13571 var x = 0, i;
13572 for (i=0; i<a.length; i++) {
13573 x |= a[i]^b[i];
13574 }
13575 return (x === 0);
13576 },
13577
13578 /** Shift an array right.
13579 * @param {bitArray} a The array to shift.
13580 * @param {Number} shift The number of bits to shift.
13581 * @param {Number} [carry=0] A byte to carry in
13582 * @param {bitArray} [out=[]] An array to prepend to the output.
13583 * @private
13584 */
13585 _shiftRight: function (a, shift, carry, out) {
13586 var i, last2=0, shift2;
13587 if (out === undefined) { out = []; }
13588
13589 for (; shift >= 32; shift -= 32) {
13590 out.push(carry);
13591 carry = 0;
13592 }
13593 if (shift === 0) {
13594 return out.concat(a);
13595 }
13596
13597 for (i=0; i<a.length; i++) {
13598 out.push(carry | a[i]>>>shift);
13599 carry = a[i] << (32-shift);
13600 }
13601 last2 = a.length ? a[a.length-1] : 0;
13602 shift2 = sjcl.bitArray.getPartial(last2);
13603 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13604 return out;
13605 },
13606
13607 /** xor a block of 4 words together.
13608 * @private
13609 */
13610 _xor4: function(x,y) {
13611 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13612 },
13613
13614 /** byteswap a word array inplace.
13615 * (does not handle partial words)
13616 * @param {sjcl.bitArray} a word array
13617 * @return {sjcl.bitArray} byteswapped array
13618 */
13619 byteswapM: function(a) {
13620 var i, v, m = 0xff00;
13621 for (i = 0; i < a.length; ++i) {
13622 v = a[i];
13623 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13624 }
13625 return a;
13626 }
13627 };
13628
13629
13630 //// codecString.js
13631
13632 /** @fileOverview Bit array codec implementations.
13633 *
13634 * @author Emily Stark
13635 * @author Mike Hamburg
13636 * @author Dan Boneh
13637 */
13638
13639 /** @namespace UTF-8 strings */
13640 sjcl.codec.utf8String = {
13641 /** Convert from a bitArray to a UTF-8 string. */
13642 fromBits: function (arr) {
13643 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13644 for (i=0; i<bl/8; i++) {
13645 if ((i&3) === 0) {
13646 tmp = arr[i/4];
13647 }
13648 out += String.fromCharCode(tmp >>> 24);
13649 tmp <<= 8;
13650 }
13651 return decodeURIComponent(escape(out));
13652 },
13653
13654 /** Convert from a UTF-8 string to a bitArray. */
13655 toBits: function (str) {
13656 str = unescape(encodeURIComponent(str));
13657 var out = [], i, tmp=0;
13658 for (i=0; i<str.length; i++) {
13659 tmp = tmp << 8 | str.charCodeAt(i);
13660 if ((i&3) === 3) {
13661 out.push(tmp);
13662 tmp = 0;
13663 }
13664 }
13665 if (i&3) {
13666 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13667 }
13668 return out;
13669 }
13670 };
13671
13672
13673 //// codecHex.js
13674
13675 /** @fileOverview Bit array codec implementations.
13676 *
13677 * @author Emily Stark
13678 * @author Mike Hamburg
13679 * @author Dan Boneh
13680 */
13681
13682 /** @namespace Hexadecimal */
13683 sjcl.codec.hex = {
13684 /** Convert from a bitArray to a hex string. */
13685 fromBits: function (arr) {
13686 var out = "", i;
13687 for (i=0; i<arr.length; i++) {
13688 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13689 }
13690 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13691 },
13692 /** Convert from a hex string to a bitArray. */
13693 toBits: function (str) {
13694 var i, out=[], len;
13695 str = str.replace(/\s|0x/g, "");
13696 len = str.length;
13697 str = str + "00000000";
13698 for (i=0; i<str.length; i+=8) {
13699 out.push(parseInt(str.substr(i,8),16)^0);
13700 }
13701 return sjcl.bitArray.clamp(out, len*4);
13702 }
13703 };
13704
13705
13706 //// sha512.js
13707
13708 /** @fileOverview Javascript SHA-512 implementation.
13709 *
13710 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13711 * SJCL by Stefan Thomas.
13712 *
13713 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13714 * Released with New BSD License
13715 *
13716 * @author Emily Stark
13717 * @author Mike Hamburg
13718 * @author Dan Boneh
13719 * @author Jeff Mott
13720 * @author Stefan Thomas
13721 */
13722
13723 /**
13724 * Context for a SHA-512 operation in progress.
13725 * @constructor
13726 * @class Secure Hash Algorithm, 512 bits.
13727 */
13728 sjcl.hash.sha512 = function (hash) {
13729 if (!this._key[0]) { this._precompute(); }
13730 if (hash) {
13731 this._h = hash._h.slice(0);
13732 this._buffer = hash._buffer.slice(0);
13733 this._length = hash._length;
13734 } else {
13735 this.reset();
13736 }
13737 };
13738
13739 /**
13740 * Hash a string or an array of words.
13741 * @static
13742 * @param {bitArray|String} data the data to hash.
13743 * @return {bitArray} The hash value, an array of 16 big-endian words.
13744 */
13745 sjcl.hash.sha512.hash = function (data) {
13746 return (new sjcl.hash.sha512()).update(data).finalize();
13747 };
13748
13749 sjcl.hash.sha512.prototype = {
13750 /**
13751 * The hash's block size, in bits.
13752 * @constant
13753 */
13754 blockSize: 1024,
13755
13756 /**
13757 * Reset the hash state.
13758 * @return this
13759 */
13760 reset:function () {
13761 this._h = this._init.slice(0);
13762 this._buffer = [];
13763 this._length = 0;
13764 return this;
13765 },
13766
13767 /**
13768 * Input several words to the hash.
13769 * @param {bitArray|String} data the data to hash.
13770 * @return this
13771 */
13772 update: function (data) {
13773 if (typeof data === "string") {
13774 data = sjcl.codec.utf8String.toBits(data);
13775 }
13776 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13777 ol = this._length,
13778 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13779 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13780 this._block(b.splice(0,32));
13781 }
13782 return this;
13783 },
13784
13785 /**
13786 * Complete hashing and output the hash value.
13787 * @return {bitArray} The hash value, an array of 16 big-endian words.
13788 */
13789 finalize:function () {
13790 var i, b = this._buffer, h = this._h;
13791
13792 // Round out and push the buffer
13793 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13794
13795 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13796 for (i = b.length + 4; i & 31; i++) {
13797 b.push(0);
13798 }
13799
13800 // append the length
13801 b.push(0);
13802 b.push(0);
13803 b.push(Math.floor(this._length / 0x100000000));
13804 b.push(this._length | 0);
13805
13806 while (b.length) {
13807 this._block(b.splice(0,32));
13808 }
13809
13810 this.reset();
13811 return h;
13812 },
13813
13814 /**
13815 * The SHA-512 initialization vector, to be precomputed.
13816 * @private
13817 */
13818 _init:[],
13819
13820 /**
13821 * Least significant 24 bits of SHA512 initialization values.
13822 *
13823 * Javascript only has 53 bits of precision, so we compute the 40 most
13824 * significant bits and add the remaining 24 bits as constants.
13825 *
13826 * @private
13827 */
13828 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13829
13830 /*
13831 _init:
13832 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13833 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13834 */
13835
13836 /**
13837 * The SHA-512 hash key, to be precomputed.
13838 * @private
13839 */
13840 _key:[],
13841
13842 /**
13843 * Least significant 24 bits of SHA512 key values.
13844 * @private
13845 */
13846 _keyr:
13847 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13848 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13849 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13850 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13851 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13852 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13853 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13854 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13855 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13856 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13857
13858 /*
13859 _key:
13860 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13861 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13862 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13863 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13864 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13865 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13866 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13867 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13868 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13869 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13870 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13871 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13872 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13873 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13874 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13875 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13876 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13877 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13878 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13879 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13880 */
13881
13882 /**
13883 * Function to precompute _init and _key.
13884 * @private
13885 */
13886 _precompute: function () {
13887 // XXX: This code is for precomputing the SHA256 constants, change for
13888 // SHA512 and re-enable.
13889 var i = 0, prime = 2, factor;
13890
13891 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13892 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13893
13894 outer: for (; i<80; prime++) {
13895 for (factor=2; factor*factor <= prime; factor++) {
13896 if (prime % factor === 0) {
13897 // not a prime
13898 continue outer;
13899 }
13900 }
13901
13902 if (i<8) {
13903 this._init[i*2] = frac(Math.pow(prime, 1/2));
13904 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13905 }
13906 this._key[i*2] = frac(Math.pow(prime, 1/3));
13907 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13908 i++;
13909 }
13910 },
13911
13912 /**
13913 * Perform one cycle of SHA-512.
13914 * @param {bitArray} words one block of words.
13915 * @private
13916 */
13917 _block:function (words) {
13918 var i, wrh, wrl,
13919 w = words.slice(0),
13920 h = this._h,
13921 k = this._key,
13922 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13923 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13924 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13925 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13926
13927 // Working variables
13928 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13929 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13930 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13931 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13932
13933 for (i=0; i<80; i++) {
13934 // load up the input word for this round
13935 if (i<16) {
13936 wrh = w[i * 2];
13937 wrl = w[i * 2 + 1];
13938 } else {
13939 // Gamma0
13940 var gamma0xh = w[(i-15) * 2];
13941 var gamma0xl = w[(i-15) * 2 + 1];
13942 var gamma0h =
13943 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13944 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13945 (gamma0xh >>> 7);
13946 var gamma0l =
13947 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13948 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13949 ((gamma0xh << 25) | (gamma0xl >>> 7));
13950
13951 // Gamma1
13952 var gamma1xh = w[(i-2) * 2];
13953 var gamma1xl = w[(i-2) * 2 + 1];
13954 var gamma1h =
13955 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13956 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13957 (gamma1xh >>> 6);
13958 var gamma1l =
13959 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13960 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13961 ((gamma1xh << 26) | (gamma1xl >>> 6));
13962
13963 // Shortcuts
13964 var wr7h = w[(i-7) * 2];
13965 var wr7l = w[(i-7) * 2 + 1];
13966
13967 var wr16h = w[(i-16) * 2];
13968 var wr16l = w[(i-16) * 2 + 1];
13969
13970 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13971 wrl = gamma0l + wr7l;
13972 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13973 wrl += gamma1l;
13974 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13975 wrl += wr16l;
13976 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13977 }
13978
13979 w[i*2] = wrh |= 0;
13980 w[i*2 + 1] = wrl |= 0;
13981
13982 // Ch
13983 var chh = (eh & fh) ^ (~eh & gh);
13984 var chl = (el & fl) ^ (~el & gl);
13985
13986 // Maj
13987 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13988 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13989
13990 // Sigma0
13991 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13992 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13993
13994 // Sigma1
13995 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13996 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13997
13998 // K(round)
13999 var krh = k[i*2];
14000 var krl = k[i*2+1];
14001
14002 // t1 = h + sigma1 + ch + K(round) + W(round)
14003 var t1l = hl + sigma1l;
14004 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14005 t1l += chl;
14006 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14007 t1l += krl;
14008 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14009 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14010 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14011
14012 // t2 = sigma0 + maj
14013 var t2l = sigma0l + majl;
14014 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14015
14016 // Update working variables
14017 hh = gh;
14018 hl = gl;
14019 gh = fh;
14020 gl = fl;
14021 fh = eh;
14022 fl = el;
14023 el = (dl + t1l) | 0;
14024 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14025 dh = ch;
14026 dl = cl;
14027 ch = bh;
14028 cl = bl;
14029 bh = ah;
14030 bl = al;
14031 al = (t1l + t2l) | 0;
14032 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14033 }
14034
14035 // Intermediate hash
14036 h0l = h[1] = (h0l + al) | 0;
14037 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14038 h1l = h[3] = (h1l + bl) | 0;
14039 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14040 h2l = h[5] = (h2l + cl) | 0;
14041 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14042 h3l = h[7] = (h3l + dl) | 0;
14043 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14044 h4l = h[9] = (h4l + el) | 0;
14045 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14046 h5l = h[11] = (h5l + fl) | 0;
14047 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14048 h6l = h[13] = (h6l + gl) | 0;
14049 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14050 h7l = h[15] = (h7l + hl) | 0;
14051 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14052 }
14053 };
14054
14055
14056 //// hmac.js
14057
14058 /** @fileOverview HMAC implementation.
14059 *
14060 * @author Emily Stark
14061 * @author Mike Hamburg
14062 * @author Dan Boneh
14063 */
14064
14065 /** HMAC with the specified hash function.
14066 * @constructor
14067 * @param {bitArray} key the key for HMAC.
14068 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14069 */
14070 sjcl.misc.hmac = function (key, Hash) {
14071 this._hash = Hash = Hash || sjcl.hash.sha256;
14072 var exKey = [[],[]], i,
14073 bs = Hash.prototype.blockSize / 32;
14074 this._baseHash = [new Hash(), new Hash()];
14075
14076 if (key.length > bs) {
14077 key = Hash.hash(key);
14078 }
14079
14080 for (i=0; i<bs; i++) {
14081 exKey[0][i] = key[i]^0x36363636;
14082 exKey[1][i] = key[i]^0x5C5C5C5C;
14083 }
14084
14085 this._baseHash[0].update(exKey[0]);
14086 this._baseHash[1].update(exKey[1]);
14087 this._resultHash = new Hash(this._baseHash[0]);
14088 };
14089
14090 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14091 * @param {bitArray|String} data The data to mac.
14092 */
14093 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14094 if (!this._updated) {
14095 this.update(data);
14096 return this.digest(data);
14097 } else {
14098 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14099 }
14100 };
14101
14102 sjcl.misc.hmac.prototype.reset = function () {
14103 this._resultHash = new this._hash(this._baseHash[0]);
14104 this._updated = false;
14105 };
14106
14107 sjcl.misc.hmac.prototype.update = function (data) {
14108 this._updated = true;
14109 this._resultHash.update(data);
14110 };
14111
14112 sjcl.misc.hmac.prototype.digest = function () {
14113 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14114
14115 this.reset();
14116
14117 return result;
14118 };
14119
14120
14121 //// pbkdf2.js
14122
14123
14124 /** @fileOverview Password-based key-derivation function, version 2.0.
14125 *
14126 * @author Emily Stark
14127 * @author Mike Hamburg
14128 * @author Dan Boneh
14129 */
14130
14131 /** Password-Based Key-Derivation Function, version 2.0.
14132 *
14133 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14134 *
14135 * This is the method specified by RSA's PKCS #5 standard.
14136 *
14137 * @param {bitArray|String} password The password.
14138 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14139 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14140 * @param {Number} [length] The length of the derived key. Defaults to the
14141 output size of the hash function.
14142 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14143 * @return {bitArray} the derived key.
14144 */
14145 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14146 count = count || 1000;
14147
14148 if (length < 0 || count < 0) {
14149 throw sjcl.exception.invalid("invalid params to pbkdf2");
14150 }
14151
14152 if (typeof password === "string") {
14153 password = sjcl.codec.utf8String.toBits(password);
14154 }
14155
14156 if (typeof salt === "string") {
14157 salt = sjcl.codec.utf8String.toBits(salt);
14158 }
14159
14160 Prff = Prff || sjcl.misc.hmac;
14161
14162 var prf = new Prff(password),
14163 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14164
14165 for (k = 1; 32 * out.length < (length || 1); k++) {
14166 u = ui = prf.encrypt(b.concat(salt,[k]));
14167
14168 for (i=1; i<count; i++) {
14169 ui = prf.encrypt(ui);
14170 for (j=0; j<ui.length; j++) {
14171 u[j] ^= ui[j];
14172 }
14173 }
14174
14175 out = out.concat(u);
14176 }
14177
14178 if (length) { out = b.clamp(out, length); }
14179
14180 return out;
14181 };
14182
14183
14184 //// sha256.js
14185
14186 /** @fileOverview Javascript SHA-256 implementation.
14187 *
14188 * An older version of this implementation is available in the public
14189 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14190 * Stanford University 2008-2010 and BSD-licensed for liability
14191 * reasons.
14192 *
14193 * Special thanks to Aldo Cortesi for pointing out several bugs in
14194 * this code.
14195 *
14196 * @author Emily Stark
14197 * @author Mike Hamburg
14198 * @author Dan Boneh
14199 */
14200
14201 /**
14202 * Context for a SHA-256 operation in progress.
14203 * @constructor
14204 * @class Secure Hash Algorithm, 256 bits.
14205 */
14206 sjcl.hash.sha256 = function (hash) {
14207 if (!this._key[0]) { this._precompute(); }
14208 if (hash) {
14209 this._h = hash._h.slice(0);
14210 this._buffer = hash._buffer.slice(0);
14211 this._length = hash._length;
14212 } else {
14213 this.reset();
14214 }
14215 };
14216
14217 /**
14218 * Hash a string or an array of words.
14219 * @static
14220 * @param {bitArray|String} data the data to hash.
14221 * @return {bitArray} The hash value, an array of 16 big-endian words.
14222 */
14223 sjcl.hash.sha256.hash = function (data) {
14224 return (new sjcl.hash.sha256()).update(data).finalize();
14225 };
14226
14227 sjcl.hash.sha256.prototype = {
14228 /**
14229 * The hash's block size, in bits.
14230 * @constant
14231 */
14232 blockSize: 512,
14233
14234 /**
14235 * Reset the hash state.
14236 * @return this
14237 */
14238 reset:function () {
14239 this._h = this._init.slice(0);
14240 this._buffer = [];
14241 this._length = 0;
14242 return this;
14243 },
14244
14245 /**
14246 * Input several words to the hash.
14247 * @param {bitArray|String} data the data to hash.
14248 * @return this
14249 */
14250 update: function (data) {
14251 if (typeof data === "string") {
14252 data = sjcl.codec.utf8String.toBits(data);
14253 }
14254 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14255 ol = this._length,
14256 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14257 for (i = 512+ol & -512; i <= nl; i+= 512) {
14258 this._block(b.splice(0,16));
14259 }
14260 return this;
14261 },
14262
14263 /**
14264 * Complete hashing and output the hash value.
14265 * @return {bitArray} The hash value, an array of 8 big-endian words.
14266 */
14267 finalize:function () {
14268 var i, b = this._buffer, h = this._h;
14269
14270 // Round out and push the buffer
14271 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14272
14273 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14274 for (i = b.length + 2; i & 15; i++) {
14275 b.push(0);
14276 }
14277
14278 // append the length
14279 b.push(Math.floor(this._length / 0x100000000));
14280 b.push(this._length | 0);
14281
14282 while (b.length) {
14283 this._block(b.splice(0,16));
14284 }
14285
14286 this.reset();
14287 return h;
14288 },
14289
14290 /**
14291 * The SHA-256 initialization vector, to be precomputed.
14292 * @private
14293 */
14294 _init:[],
14295 /*
14296 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14297 */
14298
14299 /**
14300 * The SHA-256 hash key, to be precomputed.
14301 * @private
14302 */
14303 _key:[],
14304 /*
14305 _key:
14306 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14307 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14308 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14309 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14310 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14311 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14312 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14313 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14314 */
14315
14316
14317 /**
14318 * Function to precompute _init and _key.
14319 * @private
14320 */
14321 _precompute: function () {
14322 var i = 0, prime = 2, factor;
14323
14324 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14325
14326 outer: for (; i<64; prime++) {
14327 for (factor=2; factor*factor <= prime; factor++) {
14328 if (prime % factor === 0) {
14329 // not a prime
14330 continue outer;
14331 }
14332 }
14333
14334 if (i<8) {
14335 this._init[i] = frac(Math.pow(prime, 1/2));
14336 }
14337 this._key[i] = frac(Math.pow(prime, 1/3));
14338 i++;
14339 }
14340 },
14341
14342 /**
14343 * Perform one cycle of SHA-256.
14344 * @param {bitArray} words one block of words.
14345 * @private
14346 */
14347 _block:function (words) {
14348 var i, tmp, a, b,
14349 w = words.slice(0),
14350 h = this._h,
14351 k = this._key,
14352 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14353 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14354
14355 /* Rationale for placement of |0 :
14356 * If a value can overflow is original 32 bits by a factor of more than a few
14357 * million (2^23 ish), there is a possibility that it might overflow the
14358 * 53-bit mantissa and lose precision.
14359 *
14360 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14361 * propagates around the loop, and on the hash state h[]. I don't believe
14362 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14363 * (for h4 anyway), and better safe than sorry.
14364 *
14365 * The clamps on h[] are necessary for the output to be correct even in the
14366 * common case and for short inputs.
14367 */
14368 for (i=0; i<64; i++) {
14369 // load up the input word for this round
14370 if (i<16) {
14371 tmp = w[i];
14372 } else {
14373 a = w[(i+1 ) & 15];
14374 b = w[(i+14) & 15];
14375 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14376 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14377 w[i&15] + w[(i+9) & 15]) | 0;
14378 }
14379
14380 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14381
14382 // shift register
14383 h7 = h6; h6 = h5; h5 = h4;
14384 h4 = h3 + tmp | 0;
14385 h3 = h2; h2 = h1; h1 = h0;
14386
14387 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14388 }
14389
14390 h[0] = h[0]+h0 | 0;
14391 h[1] = h[1]+h1 | 0;
14392 h[2] = h[2]+h2 | 0;
14393 h[3] = h[3]+h3 | 0;
14394 h[4] = h[4]+h4 | 0;
14395 h[5] = h[5]+h5 | 0;
14396 h[6] = h[6]+h6 | 0;
14397 h[7] = h[7]+h7 | 0;
14398 }
14399 };
14400 </script>
14401 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14402 WORDLISTS["english"] = [
14403 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14404 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14405 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14406 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14407 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14408 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14409 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14410 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14411 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14412 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14413 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14414 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14415 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14416 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14417 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14418 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14419 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14420 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14421 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14422 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14423 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14424 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14425 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14426 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14427 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14428 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14429 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14430 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14431 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14432 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14433 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14434 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14435 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14436 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14437 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14438 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14439 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14440 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14441 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14442 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14443 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14444 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14445 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14446 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14447 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14448 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14449 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14450 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14451 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14452 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14453 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14454 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14455 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14456 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14457 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14458 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14459 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14460 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14461 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14462 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14463 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14464 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14465 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14466 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14467 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14468 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14469 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14470 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14471 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14472 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14473 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14474 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14475 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14476 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14477 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14478 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14479 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14480 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14481 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14482 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14483 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14484 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14485 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14486 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14487 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14488 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14489 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14490 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14491 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14492 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14493 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14494 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14495 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14496 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14497 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14498 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14499 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14500 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14501 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14502 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14503 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14504 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14505 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14506 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14507 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14508 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14509 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14510 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14511 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14512 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14513 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14514 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14515 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14516 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14517 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14518 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14519 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14520 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14521 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14522 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14523 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14524 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14525 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14526 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14527 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14528 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14529 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14530 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14531 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14532 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14533 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14534 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14535 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14536 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14537 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14538 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14539 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14540 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14541 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14542 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14543 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14544 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14545 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14546 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14547 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14548 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14549 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14550 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14551 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14552 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14553 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14554 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14555 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14556 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14557 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14558 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14559 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14560 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14561 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14562 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14563 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14564 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14565 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14566 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14567 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14568 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14569 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14570 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14571 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14572 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14573 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14574 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14575 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14576 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14577 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14578 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14579 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14580 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14581 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14582 "thank","that","theme","then","theory","there","they","thing","this","thought",
14583 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14584 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14585 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14586 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14587 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14588 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14589 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14590 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14591 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14592 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14593 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14594 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14595 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14596 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14597 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14598 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14599 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14600 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14601 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14602 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14603 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14604 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14605 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14606 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14607 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14608 </script>
14609 <script>/*
14610 * Copyright (c) 2013 Pavol Rusnak
14611 *
14612 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14613 * this software and associated documentation files (the "Software"), to deal in
14614 * the Software without restriction, including without limitation the rights to
14615 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14616 * of the Software, and to permit persons to whom the Software is furnished to do
14617 * so, subject to the following conditions:
14618 *
14619 * The above copyright notice and this permission notice shall be included in all
14620 * copies or substantial portions of the Software.
14621 *
14622 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14623 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14624 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14625 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14626 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14627 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14628 */
14629
14630 /*
14631 * Javascript port from python by Ian Coleman
14632 *
14633 * Requires code from sjcl
14634 * https://github.com/bitwiseshiftleft/sjcl
14635 */
14636
14637 var Mnemonic = function(language) {
14638
14639 var PBKDF2_ROUNDS = 2048;
14640 var RADIX = 2048;
14641
14642 var self = this;
14643 var wordlist = [];
14644
14645 var hmacSHA512 = function(key) {
14646 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14647 this.encrypt = function() {
14648 return hasher.encrypt.apply(hasher, arguments);
14649 };
14650 };
14651
14652 function init() {
14653 wordlist = WORDLISTS[language];
14654 if (wordlist.length != RADIX) {
14655 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14656 throw err;
14657 }
14658 }
14659
14660 self.generate = function(strength) {
14661 strength = strength || 128;
14662 var r = strength % 32;
14663 if (r > 0) {
14664 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14665 }
14666 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14667 if (!hasStrongCrypto) {
14668 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14669 }
14670 var buffer = new Uint8Array(strength / 8);
14671 var data = crypto.getRandomValues(buffer);
14672 return self.toMnemonic(data);
14673 }
14674
14675 self.toMnemonic = function(byteArray) {
14676 if (byteArray.length % 4 > 0) {
14677 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14678 }
14679
14680 //h = hashlib.sha256(data).hexdigest()
14681 var data = byteArrayToWordArray(byteArray);
14682 var hash = sjcl.hash.sha256.hash(data);
14683 var h = sjcl.codec.hex.fromBits(hash);
14684
14685 // b is a binary string, eg '00111010101100...'
14686 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14687 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14688 //
14689 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14690 // c = bin(int(h, 16))[2:].zfill(256)
14691 // d = c[:len(data) * 8 / 32]
14692 var a = byteArrayToBinaryString(byteArray);
14693 var c = zfill(hexStringToBinaryString(h), 256);
14694 var d = c.substring(0, byteArray.length * 8 / 32);
14695 // b = line1 + line2
14696 var b = a + d;
14697
14698 var result = [];
14699 var blen = b.length / 11;
14700 for (var i=0; i<blen; i++) {
14701 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14702 result.push(wordlist[idx]);
14703 }
14704 return result.join(' ');
14705 }
14706
14707 self.check = function(mnemonic) {
14708 var mnemonic = mnemonic.split(' ')
14709 if (mnemonic.length % 3 > 0) {
14710 return false
14711 }
14712 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14713 var idx = [];
14714 for (var i=0; i<mnemonic.length; i++) {
14715 var word = mnemonic[i];
14716 var wordIndex = wordlist.indexOf(word);
14717 if (wordIndex == -1) {
14718 return false;
14719 }
14720 var binaryIndex = zfill(wordIndex.toString(2), 11);
14721 idx.push(binaryIndex);
14722 }
14723 var b = idx.join('');
14724 var l = b.length;
14725 //d = b[:l / 33 * 32]
14726 //h = b[-l / 33:]
14727 var d = b.substring(0, l / 33 * 32);
14728 var h = b.substring(l - l / 33, l);
14729 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14730 var nd = binaryStringToWordArray(d);
14731 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14732 var ndHash = sjcl.hash.sha256.hash(nd);
14733 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14734 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14735 var nh = ndBstr.substring(0,l/33);
14736 return h == nh;
14737 }
14738
14739 self.toSeed = function(mnemonic, passphrase) {
14740 passphrase = passphrase || '';
14741 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14742 passphrase = self.normalizeString(passphrase)
14743 passphrase = "mnemonic" + passphrase;
14744 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14745 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14746 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14747 var hashHex = sjcl.codec.hex.fromBits(result);
14748 return hashHex;
14749 }
14750
14751 self.normalizeString = function(str) {
14752 if (typeof str.normalize == "function") {
14753 return str.normalize("NFKD");
14754 }
14755 else {
14756 // TODO decide how to handle this in the future.
14757 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14758 return str;
14759 }
14760 }
14761
14762 function byteArrayToWordArray(data) {
14763 var a = [];
14764 for (var i=0; i<data.length/4; i++) {
14765 v = 0;
14766 v += data[i*4 + 0] << 8 * 3;
14767 v += data[i*4 + 1] << 8 * 2;
14768 v += data[i*4 + 2] << 8 * 1;
14769 v += data[i*4 + 3] << 8 * 0;
14770 a.push(v);
14771 }
14772 return a;
14773 }
14774
14775 function byteArrayToBinaryString(data) {
14776 var bin = "";
14777 for (var i=0; i<data.length; i++) {
14778 bin += zfill(data[i].toString(2), 8);
14779 }
14780 return bin;
14781 }
14782
14783 function hexStringToBinaryString(hexString) {
14784 binaryString = "";
14785 for (var i=0; i<hexString.length; i++) {
14786 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14787 }
14788 return binaryString;
14789 }
14790
14791 function binaryStringToWordArray(binary) {
14792 var aLen = binary.length / 32;
14793 var a = [];
14794 for (var i=0; i<aLen; i++) {
14795 var valueStr = binary.substring(0,32);
14796 var value = parseInt(valueStr, 2);
14797 a.push(value);
14798 binary = binary.slice(32);
14799 }
14800 return a;
14801 }
14802
14803 // Pad a numeric string on the left with zero digits until the given width
14804 // is reached.
14805 // Note this differs to the python implementation because it does not
14806 // handle numbers starting with a sign.
14807 function zfill(source, length) {
14808 source = source.toString();
14809 while (source.length < length) {
14810 source = '0' + source;
14811 }
14812 return source;
14813 }
14814
14815 init();
14816
14817 }
14818 </script>
14819 <script>(function() {
14820
14821 var mnemonic = new Mnemonic("english");
14822 var seed = null
14823 var bip32RootKey = null;
14824 var bip32ExtendedKey = null;
14825 var network = bitcoin.networks.bitcoin;
14826 var addressRowTemplate = $("#address-row-template");
14827
14828 var showIndex = true;
14829 var showAddress = true;
14830 var showPrivKey = true;
14831
14832 var phraseChangeTimeoutEvent = null;
14833 var rootKeyChangedTimeoutEvent = null;
14834
14835 var DOM = {};
14836 DOM.network = $(".network");
14837 DOM.phraseNetwork = $("#network-phrase");
14838 DOM.phrase = $(".phrase");
14839 DOM.passphrase = $(".passphrase");
14840 DOM.generate = $(".generate");
14841 DOM.seed = $(".seed");
14842 DOM.rootKey = $(".root-key");
14843 DOM.extendedPrivKey = $(".extended-priv-key");
14844 DOM.extendedPubKey = $(".extended-pub-key");
14845 DOM.bip32tab = $("#bip32-tab");
14846 DOM.bip44tab = $("#bip44-tab");
14847 DOM.bip32panel = $("#bip32");
14848 DOM.bip44panel = $("#bip44");
14849 DOM.bip32path = $("#bip32-path");
14850 DOM.bip44path = $("#bip44-path");
14851 DOM.bip44purpose = $("#bip44 .purpose");
14852 DOM.bip44coin = $("#bip44 .coin");
14853 DOM.bip44account = $("#bip44 .account");
14854 DOM.bip44change = $("#bip44 .change");
14855 DOM.strength = $(".strength");
14856 DOM.addresses = $(".addresses");
14857 DOM.rowsToAdd = $(".rows-to-add");
14858 DOM.more = $(".more");
14859 DOM.feedback = $(".feedback");
14860 DOM.tab = $(".derivation-type a");
14861 DOM.indexToggle = $(".index-toggle");
14862 DOM.addressToggle = $(".address-toggle");
14863 DOM.privateKeyToggle = $(".private-key-toggle");
14864
14865 function init() {
14866 // Events
14867 DOM.network.on("change", networkChanged);
14868 DOM.phrase.on("input", delayedPhraseChanged);
14869 DOM.passphrase.on("input", delayedPhraseChanged);
14870 DOM.generate.on("click", generateClicked);
14871 DOM.more.on("click", showMore);
14872 DOM.rootKey.on("input", delayedRootKeyChanged);
14873 DOM.bip32path.on("input", calcForDerivationPath);
14874 DOM.bip44purpose.on("input", calcForDerivationPath);
14875 DOM.bip44coin.on("input", calcForDerivationPath);
14876 DOM.bip44account.on("input", calcForDerivationPath);
14877 DOM.bip44change.on("input", calcForDerivationPath);
14878 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14879 DOM.indexToggle.on("click", toggleIndexes);
14880 DOM.addressToggle.on("click", toggleAddresses);
14881 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14882 disableForms();
14883 hidePending();
14884 hideValidationError();
14885 populateNetworkSelect();
14886 }
14887
14888 // Event handlers
14889
14890 function networkChanged(e) {
14891 var network = e.target.value;
14892 networks[network].onSelect();
14893 displayBip32Info();
14894 }
14895
14896 function delayedPhraseChanged() {
14897 hideValidationError();
14898 showPending();
14899 if (phraseChangeTimeoutEvent != null) {
14900 clearTimeout(phraseChangeTimeoutEvent);
14901 }
14902 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14903 }
14904
14905 function phraseChanged() {
14906 showPending();
14907 hideValidationError();
14908 // Get the mnemonic phrase
14909 var phrase = DOM.phrase.val();
14910 var errorText = findPhraseErrors(phrase);
14911 if (errorText) {
14912 showValidationError(errorText);
14913 return;
14914 }
14915 // Calculate and display
14916 var passphrase = DOM.passphrase.val();
14917 calcBip32RootKeyFromSeed(phrase, passphrase);
14918 calcForDerivationPath();
14919 hidePending();
14920 }
14921
14922 function delayedRootKeyChanged() {
14923 // Warn if there is an existing mnemonic or passphrase.
14924 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14925 if (!confirm("This will clear existing mnemonic and passphrase")) {
14926 DOM.rootKey.val(bip32RootKey);
14927 return
14928 }
14929 }
14930 hideValidationError();
14931 showPending();
14932 // Clear existing mnemonic and passphrase
14933 DOM.phrase.val("");
14934 DOM.passphrase.val("");
14935 seed = null;
14936 if (rootKeyChangedTimeoutEvent != null) {
14937 clearTimeout(rootKeyChangedTimeoutEvent);
14938 }
14939 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
14940 }
14941
14942 function rootKeyChanged() {
14943 showPending();
14944 hideValidationError();
14945 // Validate the root key TODO
14946 var rootKeyBase58 = DOM.rootKey.val();
14947 var errorText = validateRootKey(rootKeyBase58);
14948 if (errorText) {
14949 showValidationError(errorText);
14950 return;
14951 }
14952 // Calculate and display
14953 calcBip32RootKeyFromBase58(rootKeyBase58);
14954 calcForDerivationPath();
14955 hidePending();
14956 }
14957
14958 function calcForDerivationPath() {
14959 showPending();
14960 hideValidationError();
14961 // Get the derivation path
14962 var derivationPath = getDerivationPath();
14963 var errorText = findDerivationPathErrors(derivationPath);
14964 if (errorText) {
14965 showValidationError(errorText);
14966 return;
14967 }
14968 calcBip32ExtendedKey(derivationPath);
14969 displayBip32Info();
14970 hidePending();
14971 }
14972
14973 function generateClicked() {
14974 clearDisplay();
14975 showPending();
14976 setTimeout(function() {
14977 var phrase = generateRandomPhrase();
14978 if (!phrase) {
14979 return;
14980 }
14981 phraseChanged();
14982 }, 50);
14983 }
14984
14985 function toggleIndexes() {
14986 showIndex = !showIndex;
14987 $("td.index span").toggleClass("invisible");
14988 }
14989
14990 function toggleAddresses() {
14991 showAddress = !showAddress;
14992 $("td.address span").toggleClass("invisible");
14993 }
14994
14995 function togglePrivateKeys() {
14996 showPrivKey = !showPrivKey;
14997 $("td.privkey span").toggleClass("invisible");
14998 }
14999
15000 // Private methods
15001
15002 function generateRandomPhrase() {
15003 if (!hasStrongRandom()) {
15004 var errorText = "This browser does not support strong randomness";
15005 showValidationError(errorText);
15006 return;
15007 }
15008 var numWords = parseInt(DOM.strength.val());
15009 var strength = numWords / 3 * 32;
15010 var words = mnemonic.generate(strength);
15011 DOM.phrase.val(words);
15012 return words;
15013 }
15014
15015 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15016 seed = mnemonic.toSeed(phrase, passphrase);
15017 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15018 }
15019
15020 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15021 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58);
15022 }
15023
15024 function calcBip32ExtendedKey(path) {
15025 bip32ExtendedKey = bip32RootKey;
15026 // Derive the key from the path
15027 var pathBits = path.split("/");
15028 for (var i=0; i<pathBits.length; i++) {
15029 var bit = pathBits[i];
15030 var index = parseInt(bit);
15031 if (isNaN(index)) {
15032 continue;
15033 }
15034 var hardened = bit[bit.length-1] == "'";
15035 if (hardened) {
15036 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15037 }
15038 else {
15039 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15040 }
15041 }
15042 }
15043
15044 function showValidationError(errorText) {
15045 DOM.feedback
15046 .text(errorText)
15047 .show();
15048 }
15049
15050 function hideValidationError() {
15051 DOM.feedback
15052 .text("")
15053 .hide();
15054 }
15055
15056 function findPhraseErrors(phrase) {
15057 // TODO make this right
15058 // Preprocess the words
15059 phrase = mnemonic.normalizeString(phrase);
15060 var parts = phrase.split(" ");
15061 var proper = [];
15062 for (var i=0; i<parts.length; i++) {
15063 var part = parts[i];
15064 if (part.length > 0) {
15065 // TODO check that lowercasing is always valid to do
15066 proper.push(part.toLowerCase());
15067 }
15068 }
15069 var properPhrase = proper.join(' ');
15070 // Check each word
15071 for (var i=0; i<proper.length; i++) {
15072 var word = proper[i];
15073 if (WORDLISTS["english"].indexOf(word) == -1) {
15074 console.log("Finding closest match to " + word);
15075 var nearestWord = findNearestWord(word);
15076 return word + " not in wordlist, did you mean " + nearestWord + "?";
15077 }
15078 }
15079 // Check the words are valid
15080 var isValid = mnemonic.check(properPhrase);
15081 if (!isValid) {
15082 return "Invalid mnemonic";
15083 }
15084 return false;
15085 }
15086
15087 function validateRootKey(rootKeyBase58) {
15088 try {
15089 bitcoin.HDNode.fromBase58(rootKeyBase58);
15090 }
15091 catch (e) {
15092 return "Invalid root key";
15093 }
15094 return "";
15095 }
15096
15097 function getDerivationPath() {
15098 if (DOM.bip44tab.hasClass("active")) {
15099 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15100 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15101 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15102 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15103 var path = "m/";
15104 path += purpose + "'/";
15105 path += coin + "'/";
15106 path += account + "'/";
15107 path += change;
15108 DOM.bip44path.val(path);
15109 var derivationPath = DOM.bip44path.val();
15110 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15111 return derivationPath;
15112 }
15113 else if (DOM.bip32tab.hasClass("active")) {
15114 var derivationPath = DOM.bip32path.val();
15115 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15116 return derivationPath;
15117 }
15118 else {
15119 console.log("Unknown derivation path");
15120 }
15121 }
15122
15123 function findDerivationPathErrors(path) {
15124 // TODO is not perfect but is better than nothing
15125 // Inspired by
15126 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15127 // and
15128 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15129 var maxDepth = 255; // TODO verify this!!
15130 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15131 if (path[0] != "m") {
15132 return "First character must be 'm'";
15133 }
15134 if (path.length > 1) {
15135 if (path[1] != "/") {
15136 return "Separator must be '/'";
15137 }
15138 var indexes = path.split("/");
15139 if (indexes.length > maxDepth) {
15140 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15141 }
15142 for (var depth = 1; depth<indexes.length; depth++) {
15143 var index = indexes[depth];
15144 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15145 if (invalidChars.length > 0) {
15146 return "Invalid characters " + invalidChars + " found at depth " + depth;
15147 }
15148 var indexValue = parseInt(index.replace("'", ""));
15149 if (isNaN(depth)) {
15150 return "Invalid number at depth " + depth;
15151 }
15152 if (indexValue > maxIndexValue) {
15153 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15154 }
15155 }
15156 }
15157 return false;
15158 }
15159
15160 function displayBip32Info() {
15161 // Display the key
15162 DOM.seed.val(seed);
15163 var rootKey = bip32RootKey.toBase58();
15164 DOM.rootKey.val(rootKey);
15165 var extendedPrivKey = bip32ExtendedKey.toBase58();
15166 DOM.extendedPrivKey.val(extendedPrivKey);
15167 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15168 DOM.extendedPubKey.val(extendedPubKey);
15169 // Display the addresses and privkeys
15170 clearAddressesList();
15171 displayAddresses(0, 20);
15172 }
15173
15174 function displayAddresses(start, total) {
15175 for (var i=0; i<total; i++) {
15176 var index = i + start;
15177 new TableRow(index);
15178 }
15179 }
15180
15181 function TableRow(index) {
15182
15183 function init() {
15184 calculateValues();
15185 }
15186
15187 function calculateValues() {
15188 setTimeout(function() {
15189 var key = bip32ExtendedKey.derive(index);
15190 var address = key.getAddress().toString();
15191 var privkey = key.privKey.toWIF(network);
15192 var indexText = getDerivationPath() + "/" + index;
15193 addAddressToList(indexText, address, privkey);
15194 }, 50)
15195 }
15196
15197 init();
15198
15199 }
15200
15201 function showMore() {
15202 var start = DOM.addresses.children().length;
15203 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15204 if (isNaN(rowsToAdd)) {
15205 rowsToAdd = 20;
15206 DOM.rowsToAdd.val("20");
15207 }
15208 if (rowsToAdd > 200) {
15209 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15210 msg += "Do you want to continue?";
15211 if (!confirm(msg)) {
15212 return;
15213 }
15214 }
15215 displayAddresses(start, rowsToAdd);
15216 }
15217
15218 function clearDisplay() {
15219 clearAddressesList();
15220 clearKey();
15221 hideValidationError();
15222 }
15223
15224 function clearAddressesList() {
15225 DOM.addresses.empty();
15226 }
15227
15228 function clearKey() {
15229 DOM.rootKey.val("");
15230 DOM.extendedPrivKey.val("");
15231 DOM.extendedPubKey.val("");
15232 }
15233
15234 function addAddressToList(indexText, address, privkey) {
15235 var row = $(addressRowTemplate.html());
15236 // Elements
15237 var indexCell = row.find(".index span");
15238 var addressCell = row.find(".address span");
15239 var privkeyCell = row.find(".privkey span");
15240 // Content
15241 indexCell.text(indexText);
15242 addressCell.text(address);
15243 privkeyCell.text(privkey);
15244 // Visibility
15245 if (!showIndex) {
15246 indexCell.addClass("invisible");
15247 }
15248 if (!showAddress) {
15249 addressCell.addClass("invisible");
15250 }
15251 if (!showPrivKey) {
15252 privkeyCell.addClass("invisible");
15253 }
15254 DOM.addresses.append(row);
15255 }
15256
15257 function hasStrongRandom() {
15258 return 'crypto' in window && window['crypto'] !== null;
15259 }
15260
15261 function disableForms() {
15262 $("form").on("submit", function(e) {
15263 e.preventDefault();
15264 });
15265 }
15266
15267 function parseIntNoNaN(val, defaultVal) {
15268 var v = parseInt(val);
15269 if (isNaN(v)) {
15270 return defaultVal;
15271 }
15272 return v;
15273 }
15274
15275 function showPending() {
15276 DOM.feedback
15277 .text("Calculating...")
15278 .show();
15279 }
15280
15281 function findNearestWord(word) {
15282 var words = WORDLISTS["english"];
15283 var minDistance = 99;
15284 var closestWord = words[0];
15285 for (var i=0; i<words.length; i++) {
15286 var comparedTo = words[i];
15287 var distance = Levenshtein.get(word, comparedTo);
15288 if (distance < minDistance) {
15289 closestWord = comparedTo;
15290 minDistance = distance;
15291 }
15292 }
15293 return closestWord;
15294 }
15295
15296 function hidePending() {
15297 DOM.feedback
15298 .text("")
15299 .hide();
15300 }
15301
15302 function populateNetworkSelect() {
15303 for (var i=0; i<networks.length; i++) {
15304 var network = networks[i];
15305 var option = $("<option>");
15306 option.attr("value", i);
15307 option.text(network.name);
15308 DOM.phraseNetwork.append(option);
15309 }
15310 }
15311
15312 var networks = [
15313 {
15314 name: "Bitcoin",
15315 onSelect: function() {
15316 network = bitcoin.networks.bitcoin;
15317 DOM.bip44coin.val(0);
15318 },
15319 },
15320 {
15321 name: "Bitcoin Testnet",
15322 onSelect: function() {
15323 network = bitcoin.networks.testnet;
15324 DOM.bip44coin.val(1);
15325 },
15326 },
15327 {
15328 name: "Litecoin",
15329 onSelect: function() {
15330 network = bitcoin.networks.litecoin;
15331 DOM.bip44coin.val(2);
15332 },
15333 },
15334 {
15335 name: "Dogecoin",
15336 onSelect: function() {
15337 network = bitcoin.networks.dogecoin;
15338 DOM.bip44coin.val(3);
15339 },
15340 },
15341 {
15342 name: "ShadowCash",
15343 onSelect: function() {
15344 network = bitcoin.networks.shadow;
15345 DOM.bip44coin.val(35);
15346 },
15347 },
15348 {
15349 name: "ShadowCash Testnet",
15350 onSelect: function() {
15351 network = bitcoin.networks.shadowtn;
15352 DOM.bip44coin.val(1);
15353 },
15354 },
15355 {
15356 name: "Viacoin",
15357 onSelect: function() {
15358 network = bitcoin.networks.viacoin;
15359 DOM.bip44coin.val(14);
15360 },
15361 },
15362 {
15363 name: "Viacoin Testnet",
15364 onSelect: function() {
15365 network = bitcoin.networks.viacointestnet;
15366 DOM.bip44coin.val(1);
15367 },
15368 },
15369 {
15370 name: "Jumbucks",
15371 onSelect: function() {
15372 network = bitcoin.networks.jumbucks;
15373 DOM.bip44coin.val(26);
15374 },
15375 },
15376 {
15377 name: "CLAM",
15378 onSelect: function() {
15379 network = bitcoin.networks.clam;
15380 DOM.bip44coin.val(23);
15381 },
15382 },
15383 ]
15384
15385 init();
15386
15387 })();
15388 </script>
15389 </body>
15390 </html>