]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Languages no longer experimental.
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
3af2954a 15
ab78acc6
IC
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
d5dc92fd
IC
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
0515eeec
IC
47 .phrase {
48 word-break: keep-all;
49 }
b0818b31
IC
50 .strength {
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
54 }
0515eeec
IC
55 .languages * {
56 padding-left: 10px;
57 }
ab78acc6
IC
58 </style>
59 </head>
60 <body>
61 <div class="container">
3af2954a 62
ab78acc6
IC
63 <h1 class="text-center">Mnemonic Code Converter</h1>
64 <hr>
65 <div class="row">
66 <div class="col-md-12">
67 <h2>Mnemonic</h2>
68 <form class="form-horizontal" role="form">
69 <div class="col-sm-2"></div>
70 <div class="col-sm-10">
71 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
72 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
73 </div>
74 <div class="form-group">
b0818b31 75 <label class="col-sm-2 control-label"></label>
ab78acc6 76 <div class="col-sm-10">
b0818b31
IC
77 <div class="form-inline">
78 <div class="input-group-inline">
79 <button class="btn generate">Generate</button>
80 <span>a random</span>
81 <select id="strength" class="strength form-control">
82 <option value="3">3</option>
83 <option value="6">6</option>
84 <option value="9">9</option>
85 <option value="12">12</option>
86 <option value="15" selected>15</option>
87 <option value="18">18</option>
88 <option value="21">21</option>
89 <option value="24">24</option>
90 </select>
91 word mnemonic, or enter your own below.
92 </div>
93 </div>
ab78acc6 94 </div>
0515eeec
IC
95 </div>
96 <div class="form-group">
97 <label class="col-sm-2 control-label"></label>
98 <div class="col-sm-10 languages">
99 <a href="#english">English</a>
100 <a href="#japanese" title="Japanese">日本語</a>
0515eeec
IC
101 <a href="#spanish" title="Spanish">Español</a>
102 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
103 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
104 <a href="#french" title="French">Français</a>
105 <a href="#italian" title="Italian">Italiano</a>
106 </div>
ab78acc6
IC
107 </div>
108 <div class="form-group">
b0818b31 109 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 110 <div class="col-sm-10">
b0818b31 111 <textarea id="phrase" class="phrase form-control"></textarea>
ab78acc6
IC
112 </div>
113 </div>
114 <div class="form-group">
115 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
116 <div class="col-sm-10">
117 <textarea id="passphrase" class="passphrase form-control"></textarea>
118 </div>
119 </div>
73161a92
IC
120 <div class="form-group">
121 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
122 <div class="col-sm-10">
123 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
124 </div>
125 </div>
ab78acc6
IC
126 <div class="form-group">
127 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
128 <div class="col-sm-10">
129 <select id="network-phrase" class="network form-control">
130 <!-- populated by javascript -->
131 </select>
132 </div>
133 </div>
134 <div class="form-group">
135 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
136 <div class="col-sm-10">
efe41586 137 <textarea id="root-key" class="root-key form-control"></textarea>
ab78acc6
IC
138 </div>
139 </div>
140 </form>
141 </div>
142 </div>
3af2954a 143
ab78acc6 144 <hr>
3af2954a 145
ab78acc6
IC
146 <div class="row">
147 <div class="col-md-12">
148 <h2>Derivation Path</h2>
149 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 150 <li id="bip44-tab" class="active">
ab78acc6
IC
151 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
152 </li>
153 <li id="bip32-tab">
154 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
155 </li>
156 </ul>
157 <div class="derivation-type tab-content">
d5dc92fd 158 <div id="bip44" class="tab-pane active">
ab78acc6
IC
159 <form class="form-horizontal" role="form">
160 <br>
161 <div class="col-sm-2"></div>
162 <div class="col-sm-10">
163 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
164 </div>
165 <div class="form-group">
166 <label for="purpose" class="col-sm-2 control-label">
167 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
168 </label>
169 <div class="col-sm-10">
170 <input id="purpose" type="text" class="purpose form-control" value="44">
171 </div>
172 </div>
173 <div class="form-group">
174 <label for="coin" class="col-sm-2 control-label">
175 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
176 </label>
177 <div class="col-sm-10">
178 <input id="coin" type="text" class="coin form-control" value="0">
179 </div>
180 </div>
181 <div class="form-group">
182 <label for="account" class="col-sm-2 control-label">
183 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
184 </label>
185 <div class="col-sm-10">
186 <input id="account" type="text" class="account form-control" value="0">
187 </div>
188 </div>
189 <div class="form-group">
190 <label for="change" class="col-sm-2 control-label">
191 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
192 </label>
193 <div class="col-sm-10">
194 <input id="change" type="text" class="change form-control" value="0">
195 </div>
196 </div>
197 <div class="form-group">
198 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
199 <div class="col-sm-10">
200 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
201 </div>
202 </div>
203 </form>
204 </div>
205 <div id="bip32" class="tab-pane">
206 <form class="form-horizontal" role="form">
207 <br>
208 <div class="col-sm-2"></div>
209 <div class="col-sm-10">
210 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
211 </div>
212 <div class="form-group">
213 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
214 <div class="col-sm-10">
215 <input id="bip32-path" type="text" class="path form-control" value="m/0">
216 </div>
217 </div>
1975bfbc
IC
218 <div class="form-group">
219 <div class="col-sm-2"></div>
220 <label class="col-sm-10">
221 <input class="hardened-addresses" type="checkbox">
222 Use hardened addresses
223 </label>
224 </div>
d5dc92fd
IC
225 <div class="form-group">
226 <label class="col-sm-2 control-label">Hive Wallet</label>
227 <div class="col-sm-10">
228 <p class="form-control no-border">
229 Use path <code>m/0'/0</code>.
230 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
231 </p>
232 </div>
233 </div>
234 <div class="form-group">
235 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
236 <div class="col-sm-10">
237 <p class="form-control no-border">
238 Use path <code>m/44'/0'/0'/0</code>.
239 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
240 </p>
241 </div>
242 </div>
1975bfbc
IC
243 <div class="form-group">
244 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
245 <div class="col-sm-10">
246 <p class="form-control no-border">
247 Use path <code>m/0'/0'</code> with hardened addresses.
248 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
249 </p>
250 </div>
251 </div>
aa51da11
IC
252 <div class="form-group">
253 <label class="col-sm-2 control-label">Block Explorers</label>
254 <div class="col-sm-10">
255 <p class="form-control no-border">
256 Use path <code>m/44'/0'/0'</code>.
257 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
258 </p>
259 </div>
260 </div>
ab78acc6
IC
261 </form>
262 </div>
263 </div>
264 <form class="form-horizontal" role="form">
265 <div class="form-group">
266 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
267 <div class="col-sm-10">
268 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
269 </div>
270 </div>
271 <div class="form-group">
272 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
273 <div class="col-sm-10">
274 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
275 </div>
276 </div>
277 </form>
278 </div>
279 </div>
3af2954a 280
ab78acc6 281 <hr>
3af2954a 282
ab78acc6
IC
283 <div class="row">
284 <div class="col-md-12">
285 <h2>Derived Addresses</h2>
286 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
287 <table class="table table-striped">
288 <thead>
289 <th>
290 <div class="input-group">
ae30fed8 291 Path&nbsp;&nbsp;
ab78acc6
IC
292 <button class="index-toggle">Toggle</button>
293 </div>
294 </th>
295 <th>
296 <div class="input-group">
297 Address&nbsp;&nbsp;
298 <button class="address-toggle">Toggle</button>
299 </div>
300 </th>
301 <th>
302 <div class="input-group">
303 Private Key&nbsp;&nbsp;
304 <button class="private-key-toggle">Toggle</button>
305 </div>
306 </th>
307 </thead>
308 <tbody class="addresses">
309 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
310 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
311 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
312 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
313 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
314 </tbody>
315 </table>
316 </div>
317 </div>
318 <span>Show next </button>
319 <input type="number" class="rows-to-add" value="20">
320 <button class="more">Show</button>
3af2954a 321
ab78acc6 322 <hr>
3af2954a 323
ab78acc6
IC
324 <div class="row">
325 <div class="col-md-12">
326 <h2>More info</h2>
327 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
328 <p>
329 Read more at the
330 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
331 </p>
332 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
333 <p>
334 Read more at the
335 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
336 and see the demo at
337 <a href="http://bip32.org/" target="_blank">bip32.org</a>
338 </p>
339 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
340 <p>
341 Read more at the
342 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
343 </p>
344 <h3>Private Keys</h3>
345 <p>
346 Use private keys at
347 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
348 but be careful - it can be easy to make mistakes if you
349 don't know what you're doing
350 </p>
351 </div>
352 </div>
3af2954a 353
ab78acc6 354 <hr>
3af2954a 355
ab78acc6
IC
356 <div class="row">
357 <div class="col-md-12">
3af2954a 358
ab78acc6 359 <h2>Offline Usage</h2>
3af2954a 360
ab78acc6
IC
361 <p>
362 You can use this tool without having to be online.
363 </p>
364 <p>
365 In your browser, select file save-as, and save this page
366 as a file.
367 </p>
368 <p>
369 Double-click that file to open it in a browser
370 on any offline computer.
371 </p>
372 <p>
373 Alternatively, download it from
b630f83d
IC
374 <a href="https://github.com/iancoleman/bip39">
375 https://github.com/iancoleman/bip39
ab78acc6 376 </a>
3af2954a 377
ab78acc6
IC
378 </div>
379 </div>
3af2954a 380
ab78acc6 381 <hr>
3af2954a 382
ab78acc6
IC
383 <div class="row">
384 <div class="col-md-12">
3af2954a 385
ab78acc6 386 <h2>This project is 100% open-source code</h2>
3af2954a 387
ab78acc6
IC
388 <p>
389 <span>Get the source code at - </span>
b630f83d
IC
390 <a href="https://github.com/iancoleman/bip39" target="_blank">
391 https://github.com/iancoleman/bip39
ab78acc6
IC
392 </a>
393 </p>
3af2954a 394
ab78acc6 395 <h3>Libraries</h3>
3af2954a 396
ab78acc6
IC
397 <p>
398 <span>BitcoinJS - </span>
399 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
400 https://github.com/bitcoinjs/bitcoinjs-lib
401 </a>
402 </p>
3af2954a 403
ab78acc6
IC
404 <p>
405 <span>jsBIP39 - </span>
406 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
407 https://github.com/iancoleman/jsbip39
408 </a>
409 </p>
3af2954a 410
ab78acc6
IC
411 <p>
412 <span>sjcl - </span>
413 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
414 https://github.com/bitwiseshiftleft/sjcl
415 </a>
416 </p>
3af2954a 417
ab78acc6
IC
418 <p>
419 <span>jQuery - </span>
420 <a href="https://jquery.com/" target="_blank">
421 https://jquery.com/
422 </a>
423 </p>
3af2954a 424
ab78acc6
IC
425 <p>
426 <span>Twitter Bootstrap - </span>
427 <a href="http://getbootstrap.com/" target="_blank">
428 http://getbootstrap.com/
429 </a>
430 </p>
3af2954a 431
ab78acc6
IC
432 </div>
433 </div>
3af2954a 434
ab78acc6 435 </div>
3af2954a 436
ab78acc6
IC
437 <div class="feedback-container">
438 <div class="feedback">Loading...</div>
439 </div>
3af2954a 440
ab78acc6
IC
441 <script type="text/template" id="address-row-template">
442 <tr>
443 <td class="index"><span></span></td>
444 <td class="address"><span></span></td>
445 <td class="privkey"><span></span></td>
446 </tr>
447 </script>
448 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
449!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)
450},_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))
451},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});
452</script>
453 <script>/*!
454 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
455 * Copyright 2011-2014 Twitter, Inc.
456 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
457 */
458if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
563e401a
IC
459 <script>(function() {
460 'use strict';
461
462 /**
463 * Extend an Object with another Object's properties.
464 *
465 * The source objects are specified as additional arguments.
466 *
467 * @param dst Object the object to extend.
468 *
469 * @return Object the final object.
470 */
471 var _extend = function(dst) {
472 var sources = Array.prototype.slice.call(arguments, 1);
473 for (var i=0; i<sources.length; ++i) {
474 var src = sources[i];
475 for (var p in src) {
476 if (src.hasOwnProperty(p)) dst[p] = src[p];
477 }
478 }
479 return dst;
480 };
481
482
483 /**
484 * Defer execution of given function.
485 * @param {Function} func
486 */
487 var _defer = function(func) {
488 if (typeof setImmediate === 'function') {
489 return setImmediate(func);
490 } else {
491 return setTimeout(func, 0);
492 }
493 };
494
495 /**
496 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
497 */
498 var Levenshtein = {
499 /**
500 * Calculate levenshtein distance of the two strings.
501 *
502 * @param str1 String the first string.
503 * @param str2 String the second string.
504 * @return Integer the levenshtein distance (0 and above).
505 */
506 get: function(str1, str2) {
507 // base cases
508 if (str1 === str2) return 0;
509 if (str1.length === 0) return str2.length;
510 if (str2.length === 0) return str1.length;
511
512 // two rows
513 var prevRow = new Array(str2.length + 1),
514 curCol, nextCol, i, j, tmp;
515
516 // initialise previous row
517 for (i=0; i<prevRow.length; ++i) {
518 prevRow[i] = i;
519 }
520
521 // calculate current row distance from previous row
522 for (i=0; i<str1.length; ++i) {
523 nextCol = i + 1;
524
525 for (j=0; j<str2.length; ++j) {
526 curCol = nextCol;
527
528 // substution
529 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
530 // insertion
531 tmp = curCol + 1;
532 if (nextCol > tmp) {
533 nextCol = tmp;
534 }
535 // deletion
536 tmp = prevRow[j + 1] + 1;
537 if (nextCol > tmp) {
538 nextCol = tmp;
539 }
540
541 // copy current col value into previous (in preparation for next iteration)
542 prevRow[j] = curCol;
543 }
544
545 // copy last col value into previous (in preparation for next iteration)
546 prevRow[j] = nextCol;
547 }
548
549 return nextCol;
550 },
551
552 /**
553 * Asynchronously calculate levenshtein distance of the two strings.
554 *
555 * @param str1 String the first string.
556 * @param str2 String the second string.
557 * @param cb Function callback function with signature: function(Error err, int distance)
558 * @param [options] Object additional options.
559 * @param [options.progress] Function progress callback with signature: function(percentComplete)
560 */
561 getAsync: function(str1, str2, cb, options) {
562 options = _extend({}, {
563 progress: null
564 }, options);
565
566 // base cases
567 if (str1 === str2) return cb(null, 0);
568 if (str1.length === 0) return cb(null, str2.length);
569 if (str2.length === 0) return cb(null, str1.length);
570
571 // two rows
572 var prevRow = new Array(str2.length + 1),
573 curCol, nextCol,
574 i, j, tmp,
575 startTime, currentTime;
576
577 // initialise previous row
578 for (i=0; i<prevRow.length; ++i) {
579 prevRow[i] = i;
580 }
581
582 nextCol = 1;
583 i = 0;
584 j = -1;
585
586 var __calculate = function() {
587 // reset timer
588 startTime = new Date().valueOf();
589 currentTime = startTime;
590
591 // keep going until one second has elapsed
592 while (currentTime - startTime < 1000) {
593 // reached end of current row?
594 if (str2.length <= (++j)) {
595 // copy current into previous (in preparation for next iteration)
596 prevRow[j] = nextCol;
597
598 // if already done all chars
599 if (str1.length <= (++i)) {
600 return cb(null, nextCol);
601 }
602 // else if we have more left to do
603 else {
604 nextCol = i + 1;
605 j = 0;
606 }
607 }
608
609 // calculation
610 curCol = nextCol;
611
612 // substution
613 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
614 // insertion
615 tmp = curCol + 1;
616 if (nextCol > tmp) {
617 nextCol = tmp;
618 }
619 // deletion
620 tmp = prevRow[j + 1] + 1;
621 if (nextCol > tmp) {
622 nextCol = tmp;
623 }
624
625 // copy current into previous (in preparation for next iteration)
626 prevRow[j] = curCol;
627
628 // get current time
629 currentTime = new Date().valueOf();
630 }
631
632 // send a progress update?
633 if (null !== options.progress) {
634 try {
635 options.progress.call(null, (i * 100.0/ str1.length));
636 } catch (err) {
637 return cb('Progress callback: ' + err.toString());
638 }
639 }
640
641 // next iteration
642 _defer(__calculate);
643 };
644
645 __calculate();
646 }
647
648 };
649
650 // amd
651 if (typeof define !== "undefined" && define !== null && define.amd) {
652 define(function() {
653 return Levenshtein;
654 });
655 }
656 // commonjs
657 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
658 module.exports = Levenshtein;
659 }
660 // web worker
661 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
662 self.Levenshtein = Levenshtein;
663 }
664 // browser main thread
665 else if (typeof window !== "undefined" && window !== null) {
666 window.Levenshtein = Levenshtein;
667 }
668}());
669
670</script>
ab78acc6
IC
671 <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){
672// (public) Constructor
673function BigInteger(a, b, c) {
674 if (!(this instanceof BigInteger))
675 return new BigInteger(a, b, c)
3af2954a 676
ab78acc6
IC
677 if (a != null) {
678 if ("number" == typeof a) this.fromNumber(a, b, c)
679 else if (b == null && "string" != typeof a) this.fromString(a, 256)
680 else this.fromString(a, b)
681 }
682}
3af2954a 683
ab78acc6 684var proto = BigInteger.prototype
3af2954a 685
ab78acc6
IC
686// duck-typed isBigInteger
687proto.__bigi = require('../package.json').version
688BigInteger.isBigInteger = function (obj, check_ver) {
689 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
690}
3af2954a 691
ab78acc6
IC
692// Bits per digit
693var dbits
3af2954a 694
ab78acc6
IC
695// am: Compute w_j += (x*this_i), propagate carries,
696// c is initial carry, returns final carry.
697// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
698// We need to select the fastest one that works in this environment.
3af2954a 699
ab78acc6
IC
700// am1: use a single mult and divide to get the high bits,
701// max digit bits should be 26 because
702// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
703function am1(i, x, w, j, c, n) {
704 while (--n >= 0) {
705 var v = x * this[i++] + w[j] + c
706 c = Math.floor(v / 0x4000000)
707 w[j++] = v & 0x3ffffff
3af2954a 708 }
ab78acc6
IC
709 return c
710}
711// am2 avoids a big mult-and-extract completely.
712// Max digit bits should be <= 30 because we do bitwise ops
713// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
714function am2(i, x, w, j, c, n) {
715 var xl = x & 0x7fff,
716 xh = x >> 15
717 while (--n >= 0) {
718 var l = this[i] & 0x7fff
719 var h = this[i++] >> 15
720 var m = xh * l + h * xl
721 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
722 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
723 w[j++] = l & 0x3fffffff
724 }
725 return c
726}
727// Alternately, set max digit bits to 28 since some
728// browsers slow down when dealing with 32-bit numbers.
729function am3(i, x, w, j, c, n) {
730 var xl = x & 0x3fff,
731 xh = x >> 14
732 while (--n >= 0) {
733 var l = this[i] & 0x3fff
734 var h = this[i++] >> 14
735 var m = xh * l + h * xl
736 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
737 c = (l >> 28) + (m >> 14) + xh * h
738 w[j++] = l & 0xfffffff
3af2954a 739 }
ab78acc6
IC
740 return c
741}
3af2954a 742
ab78acc6
IC
743// wtf?
744BigInteger.prototype.am = am1
745dbits = 26
3af2954a 746
ab78acc6
IC
747BigInteger.prototype.DB = dbits
748BigInteger.prototype.DM = ((1 << dbits) - 1)
749var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 750
ab78acc6
IC
751var BI_FP = 52
752BigInteger.prototype.FV = Math.pow(2, BI_FP)
753BigInteger.prototype.F1 = BI_FP - dbits
754BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 755
ab78acc6
IC
756// Digit conversions
757var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
758var BI_RC = new Array()
759var rr, vv
760rr = "0".charCodeAt(0)
761for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
762rr = "a".charCodeAt(0)
763for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
764rr = "A".charCodeAt(0)
765for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 766
ab78acc6
IC
767function int2char(n) {
768 return BI_RM.charAt(n)
769}
3af2954a 770
ab78acc6
IC
771function intAt(s, i) {
772 var c = BI_RC[s.charCodeAt(i)]
773 return (c == null) ? -1 : c
774}
3af2954a 775
ab78acc6
IC
776// (protected) copy this to r
777function bnpCopyTo(r) {
778 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
779 r.t = this.t
780 r.s = this.s
781}
3af2954a 782
ab78acc6
IC
783// (protected) set from integer value x, -DV <= x < DV
784function bnpFromInt(x) {
785 this.t = 1
786 this.s = (x < 0) ? -1 : 0
787 if (x > 0) this[0] = x
788 else if (x < -1) this[0] = x + DV
789 else this.t = 0
790}
3af2954a 791
ab78acc6
IC
792// return bigint initialized to value
793function nbv(i) {
794 var r = new BigInteger()
795 r.fromInt(i)
796 return r
797}
3af2954a 798
ab78acc6
IC
799// (protected) set from string and radix
800function bnpFromString(s, b) {
801 var self = this
3af2954a 802
ab78acc6
IC
803 var k
804 if (b == 16) k = 4
805 else if (b == 8) k = 3
806 else if (b == 256) k = 8; // byte array
807 else if (b == 2) k = 1
808 else if (b == 32) k = 5
809 else if (b == 4) k = 2
810 else {
811 self.fromRadix(s, b)
812 return
813 }
814 self.t = 0
815 self.s = 0
816 var i = s.length,
817 mi = false,
818 sh = 0
819 while (--i >= 0) {
820 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
821 if (x < 0) {
822 if (s.charAt(i) == "-") mi = true
823 continue
824 }
825 mi = false
826 if (sh == 0)
827 self[self.t++] = x
828 else if (sh + k > self.DB) {
829 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
830 self[self.t++] = (x >> (self.DB - sh))
831 } else
832 self[self.t - 1] |= x << sh
833 sh += k
834 if (sh >= self.DB) sh -= self.DB
835 }
836 if (k == 8 && (s[0] & 0x80) != 0) {
837 self.s = -1
838 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
839 }
840 self.clamp()
841 if (mi) BigInteger.ZERO.subTo(self, self)
842}
3af2954a 843
ab78acc6
IC
844// (protected) clamp off excess high words
845function bnpClamp() {
846 var c = this.s & this.DM
847 while (this.t > 0 && this[this.t - 1] == c)--this.t
848}
3af2954a 849
ab78acc6
IC
850// (public) return string representation in given radix
851function bnToString(b) {
852 var self = this
853 if (self.s < 0) return "-" + self.negate()
854 .toString(b)
855 var k
856 if (b == 16) k = 4
857 else if (b == 8) k = 3
858 else if (b == 2) k = 1
859 else if (b == 32) k = 5
860 else if (b == 4) k = 2
861 else return self.toRadix(b)
862 var km = (1 << k) - 1,
863 d, m = false,
864 r = "",
865 i = self.t
866 var p = self.DB - (i * self.DB) % k
867 if (i-- > 0) {
868 if (p < self.DB && (d = self[i] >> p) > 0) {
869 m = true
870 r = int2char(d)
871 }
872 while (i >= 0) {
873 if (p < k) {
874 d = (self[i] & ((1 << p) - 1)) << (k - p)
875 d |= self[--i] >> (p += self.DB - k)
876 } else {
877 d = (self[i] >> (p -= k)) & km
878 if (p <= 0) {
879 p += self.DB
880 --i
881 }
882 }
883 if (d > 0) m = true
884 if (m) r += int2char(d)
3af2954a 885 }
3af2954a 886 }
ab78acc6
IC
887 return m ? r : "0"
888}
3af2954a 889
ab78acc6
IC
890// (public) -this
891function bnNegate() {
892 var r = new BigInteger()
893 BigInteger.ZERO.subTo(this, r)
894 return r
895}
3af2954a 896
ab78acc6
IC
897// (public) |this|
898function bnAbs() {
899 return (this.s < 0) ? this.negate() : this
900}
3af2954a 901
ab78acc6
IC
902// (public) return + if this > a, - if this < a, 0 if equal
903function bnCompareTo(a) {
904 var r = this.s - a.s
905 if (r != 0) return r
906 var i = this.t
907 r = i - a.t
908 if (r != 0) return (this.s < 0) ? -r : r
909 while (--i >= 0)
910 if ((r = this[i] - a[i]) != 0) return r
911 return 0
912}
3af2954a 913
ab78acc6
IC
914// returns bit length of the integer x
915function nbits(x) {
916 var r = 1,
917 t
918 if ((t = x >>> 16) != 0) {
919 x = t
920 r += 16
921 }
922 if ((t = x >> 8) != 0) {
923 x = t
924 r += 8
925 }
926 if ((t = x >> 4) != 0) {
927 x = t
928 r += 4
929 }
930 if ((t = x >> 2) != 0) {
931 x = t
932 r += 2
3af2954a 933 }
ab78acc6
IC
934 if ((t = x >> 1) != 0) {
935 x = t
936 r += 1
937 }
938 return r
939}
940
941// (public) return the number of bits in "this"
942function bnBitLength() {
943 if (this.t <= 0) return 0
944 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
945}
3af2954a 946
ab78acc6
IC
947// (public) return the number of bytes in "this"
948function bnByteLength() {
949 return this.bitLength() >> 3
950}
3af2954a 951
ab78acc6
IC
952// (protected) r = this << n*DB
953function bnpDLShiftTo(n, r) {
954 var i
955 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
956 for (i = n - 1; i >= 0; --i) r[i] = 0
957 r.t = this.t + n
958 r.s = this.s
959}
3af2954a 960
ab78acc6
IC
961// (protected) r = this >> n*DB
962function bnpDRShiftTo(n, r) {
963 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
964 r.t = Math.max(this.t - n, 0)
965 r.s = this.s
966}
3af2954a 967
ab78acc6
IC
968// (protected) r = this << n
969function bnpLShiftTo(n, r) {
970 var self = this
971 var bs = n % self.DB
972 var cbs = self.DB - bs
973 var bm = (1 << cbs) - 1
974 var ds = Math.floor(n / self.DB),
975 c = (self.s << bs) & self.DM,
976 i
977 for (i = self.t - 1; i >= 0; --i) {
978 r[i + ds + 1] = (self[i] >> cbs) | c
979 c = (self[i] & bm) << bs
980 }
981 for (i = ds - 1; i >= 0; --i) r[i] = 0
982 r[ds] = c
983 r.t = self.t + ds + 1
984 r.s = self.s
985 r.clamp()
986}
3af2954a 987
ab78acc6
IC
988// (protected) r = this >> n
989function bnpRShiftTo(n, r) {
990 var self = this
991 r.s = self.s
992 var ds = Math.floor(n / self.DB)
993 if (ds >= self.t) {
994 r.t = 0
995 return
3af2954a 996 }
ab78acc6
IC
997 var bs = n % self.DB
998 var cbs = self.DB - bs
999 var bm = (1 << bs) - 1
1000 r[0] = self[ds] >> bs
1001 for (var i = ds + 1; i < self.t; ++i) {
1002 r[i - ds - 1] |= (self[i] & bm) << cbs
1003 r[i - ds] = self[i] >> bs
1004 }
1005 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1006 r.t = self.t - ds
1007 r.clamp()
1008}
3af2954a 1009
ab78acc6
IC
1010// (protected) r = this - a
1011function bnpSubTo(a, r) {
1012 var self = this
1013 var i = 0,
1014 c = 0,
1015 m = Math.min(a.t, self.t)
1016 while (i < m) {
1017 c += self[i] - a[i]
1018 r[i++] = c & self.DM
1019 c >>= self.DB
1020 }
1021 if (a.t < self.t) {
1022 c -= a.s
1023 while (i < self.t) {
1024 c += self[i]
1025 r[i++] = c & self.DM
1026 c >>= self.DB
1027 }
1028 c += self.s
1029 } else {
1030 c += self.s
1031 while (i < a.t) {
1032 c -= a[i]
1033 r[i++] = c & self.DM
1034 c >>= self.DB
1035 }
1036 c -= a.s
1037 }
1038 r.s = (c < 0) ? -1 : 0
1039 if (c < -1) r[i++] = self.DV + c
1040 else if (c > 0) r[i++] = c
1041 r.t = i
1042 r.clamp()
1043}
3af2954a 1044
ab78acc6
IC
1045// (protected) r = this * a, r != this,a (HAC 14.12)
1046// "this" should be the larger one if appropriate.
1047function bnpMultiplyTo(a, r) {
1048 var x = this.abs(),
1049 y = a.abs()
1050 var i = x.t
1051 r.t = i + y.t
1052 while (--i >= 0) r[i] = 0
1053 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1054 r.s = 0
1055 r.clamp()
1056 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1057}
3af2954a 1058
ab78acc6
IC
1059// (protected) r = this^2, r != this (HAC 14.16)
1060function bnpSquareTo(r) {
1061 var x = this.abs()
1062 var i = r.t = 2 * x.t
1063 while (--i >= 0) r[i] = 0
1064 for (i = 0; i < x.t - 1; ++i) {
1065 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1066 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1067 r[i + x.t] -= x.DV
1068 r[i + x.t + 1] = 1
1069 }
1070 }
1071 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1072 r.s = 0
1073 r.clamp()
1074}
3af2954a 1075
ab78acc6
IC
1076// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1077// r != q, this != m. q or r may be null.
1078function bnpDivRemTo(m, q, r) {
1079 var self = this
1080 var pm = m.abs()
1081 if (pm.t <= 0) return
1082 var pt = self.abs()
1083 if (pt.t < pm.t) {
1084 if (q != null) q.fromInt(0)
1085 if (r != null) self.copyTo(r)
1086 return
1087 }
1088 if (r == null) r = new BigInteger()
1089 var y = new BigInteger(),
1090 ts = self.s,
1091 ms = m.s
1092 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1093 if (nsh > 0) {
1094 pm.lShiftTo(nsh, y)
1095 pt.lShiftTo(nsh, r)
1096 } else {
1097 pm.copyTo(y)
1098 pt.copyTo(r)
1099 }
1100 var ys = y.t
1101 var y0 = y[ys - 1]
1102 if (y0 == 0) return
1103 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1104 var d1 = self.FV / yt,
1105 d2 = (1 << self.F1) / yt,
1106 e = 1 << self.F2
1107 var i = r.t,
1108 j = i - ys,
1109 t = (q == null) ? new BigInteger() : q
1110 y.dlShiftTo(j, t)
1111 if (r.compareTo(t) >= 0) {
1112 r[r.t++] = 1
1113 r.subTo(t, r)
1114 }
1115 BigInteger.ONE.dlShiftTo(ys, t)
1116 t.subTo(y, y); // "negative" y so we can replace sub with am later
1117 while (y.t < ys) y[y.t++] = 0
1118 while (--j >= 0) {
1119 // Estimate quotient digit
1120 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1121 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1122 y.dlShiftTo(j, t)
1123 r.subTo(t, r)
1124 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1125 }
ab78acc6
IC
1126 }
1127 if (q != null) {
1128 r.drShiftTo(ys, q)
1129 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1130 }
1131 r.t = ys
1132 r.clamp()
1133 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1134 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1135}
3af2954a 1136
ab78acc6
IC
1137// (public) this mod a
1138function bnMod(a) {
1139 var r = new BigInteger()
1140 this.abs()
1141 .divRemTo(a, null, r)
1142 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1143 return r
1144}
3af2954a 1145
ab78acc6
IC
1146// Modular reduction using "classic" algorithm
1147function Classic(m) {
1148 this.m = m
1149}
3af2954a 1150
ab78acc6
IC
1151function cConvert(x) {
1152 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1153 else return x
1154}
1155
1156function cRevert(x) {
1157 return x
1158}
3af2954a 1159
ab78acc6
IC
1160function cReduce(x) {
1161 x.divRemTo(this.m, null, x)
1162}
3af2954a 1163
ab78acc6
IC
1164function cMulTo(x, y, r) {
1165 x.multiplyTo(y, r)
1166 this.reduce(r)
1167}
3af2954a 1168
ab78acc6
IC
1169function cSqrTo(x, r) {
1170 x.squareTo(r)
1171 this.reduce(r)
1172}
3af2954a 1173
ab78acc6
IC
1174Classic.prototype.convert = cConvert
1175Classic.prototype.revert = cRevert
1176Classic.prototype.reduce = cReduce
1177Classic.prototype.mulTo = cMulTo
1178Classic.prototype.sqrTo = cSqrTo
3af2954a 1179
ab78acc6
IC
1180// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1181// justification:
1182// xy == 1 (mod m)
1183// xy = 1+km
1184// xy(2-xy) = (1+km)(1-km)
1185// x[y(2-xy)] = 1-k^2m^2
1186// x[y(2-xy)] == 1 (mod m^2)
1187// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1188// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1189// JS multiply "overflows" differently from C/C++, so care is needed here.
1190function bnpInvDigit() {
1191 if (this.t < 1) return 0
1192 var x = this[0]
1193 if ((x & 1) == 0) return 0
1194 var y = x & 3; // y == 1/x mod 2^2
1195 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1196 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1197 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1198 // last step - calculate inverse mod DV directly
1199 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1200 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1201 // we really want the negative inverse, and -DV < y < DV
1202 return (y > 0) ? this.DV - y : -y
1203}
3af2954a 1204
ab78acc6
IC
1205// Montgomery reduction
1206function Montgomery(m) {
1207 this.m = m
1208 this.mp = m.invDigit()
1209 this.mpl = this.mp & 0x7fff
1210 this.mph = this.mp >> 15
1211 this.um = (1 << (m.DB - 15)) - 1
1212 this.mt2 = 2 * m.t
1213}
3af2954a 1214
ab78acc6
IC
1215// xR mod m
1216function montConvert(x) {
1217 var r = new BigInteger()
1218 x.abs()
1219 .dlShiftTo(this.m.t, r)
1220 r.divRemTo(this.m, null, r)
1221 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1222 return r
1223}
3af2954a 1224
ab78acc6
IC
1225// x/R mod m
1226function montRevert(x) {
1227 var r = new BigInteger()
1228 x.copyTo(r)
1229 this.reduce(r)
1230 return r
1231}
3af2954a 1232
ab78acc6
IC
1233// x = x/R mod m (HAC 14.32)
1234function montReduce(x) {
1235 while (x.t <= this.mt2) // pad x so am has enough room later
1236 x[x.t++] = 0
1237 for (var i = 0; i < this.m.t; ++i) {
1238 // faster way of calculating u0 = x[i]*mp mod DV
1239 var j = x[i] & 0x7fff
1240 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1241 // use am to combine the multiply-shift-add into one call
1242 j = i + this.m.t
1243 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1244 // propagate carry
1245 while (x[j] >= x.DV) {
1246 x[j] -= x.DV
1247 x[++j]++
1248 }
1249 }
1250 x.clamp()
1251 x.drShiftTo(this.m.t, x)
1252 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1253}
3af2954a 1254
ab78acc6
IC
1255// r = "x^2/R mod m"; x != r
1256function montSqrTo(x, r) {
1257 x.squareTo(r)
1258 this.reduce(r)
1259}
3af2954a 1260
ab78acc6
IC
1261// r = "xy/R mod m"; x,y != r
1262function montMulTo(x, y, r) {
1263 x.multiplyTo(y, r)
1264 this.reduce(r)
1265}
3af2954a 1266
ab78acc6
IC
1267Montgomery.prototype.convert = montConvert
1268Montgomery.prototype.revert = montRevert
1269Montgomery.prototype.reduce = montReduce
1270Montgomery.prototype.mulTo = montMulTo
1271Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1272
ab78acc6
IC
1273// (protected) true iff this is even
1274function bnpIsEven() {
1275 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1276}
3af2954a 1277
ab78acc6
IC
1278// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1279function bnpExp(e, z) {
1280 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1281 var r = new BigInteger(),
1282 r2 = new BigInteger(),
1283 g = z.convert(this),
1284 i = nbits(e) - 1
1285 g.copyTo(r)
1286 while (--i >= 0) {
1287 z.sqrTo(r, r2)
1288 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1289 else {
1290 var t = r
1291 r = r2
1292 r2 = t
3af2954a 1293 }
3af2954a 1294 }
ab78acc6
IC
1295 return z.revert(r)
1296}
3af2954a 1297
ab78acc6
IC
1298// (public) this^e % m, 0 <= e < 2^32
1299function bnModPowInt(e, m) {
1300 var z
1301 if (e < 256 || m.isEven()) z = new Classic(m)
1302 else z = new Montgomery(m)
1303 return this.exp(e, z)
1304}
3af2954a 1305
ab78acc6
IC
1306// protected
1307proto.copyTo = bnpCopyTo
1308proto.fromInt = bnpFromInt
1309proto.fromString = bnpFromString
1310proto.clamp = bnpClamp
1311proto.dlShiftTo = bnpDLShiftTo
1312proto.drShiftTo = bnpDRShiftTo
1313proto.lShiftTo = bnpLShiftTo
1314proto.rShiftTo = bnpRShiftTo
1315proto.subTo = bnpSubTo
1316proto.multiplyTo = bnpMultiplyTo
1317proto.squareTo = bnpSquareTo
1318proto.divRemTo = bnpDivRemTo
1319proto.invDigit = bnpInvDigit
1320proto.isEven = bnpIsEven
1321proto.exp = bnpExp
3af2954a 1322
ab78acc6
IC
1323// public
1324proto.toString = bnToString
1325proto.negate = bnNegate
1326proto.abs = bnAbs
1327proto.compareTo = bnCompareTo
1328proto.bitLength = bnBitLength
1329proto.byteLength = bnByteLength
1330proto.mod = bnMod
1331proto.modPowInt = bnModPowInt
3af2954a 1332
ab78acc6
IC
1333// (public)
1334function bnClone() {
1335 var r = new BigInteger()
1336 this.copyTo(r)
1337 return r
1338}
3af2954a 1339
ab78acc6
IC
1340// (public) return value as integer
1341function bnIntValue() {
1342 if (this.s < 0) {
1343 if (this.t == 1) return this[0] - this.DV
1344 else if (this.t == 0) return -1
1345 } else if (this.t == 1) return this[0]
1346 else if (this.t == 0) return 0
1347 // assumes 16 < DB < 32
1348 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1349}
3af2954a 1350
ab78acc6
IC
1351// (public) return value as byte
1352function bnByteValue() {
1353 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1354}
3af2954a 1355
ab78acc6
IC
1356// (public) return value as short (assumes DB>=16)
1357function bnShortValue() {
1358 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1359}
3af2954a 1360
ab78acc6
IC
1361// (protected) return x s.t. r^x < DV
1362function bnpChunkSize(r) {
1363 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1364}
3af2954a 1365
ab78acc6
IC
1366// (public) 0 if this == 0, 1 if this > 0
1367function bnSigNum() {
1368 if (this.s < 0) return -1
1369 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1370 else return 1
1371}
3af2954a 1372
ab78acc6
IC
1373// (protected) convert to radix string
1374function bnpToRadix(b) {
1375 if (b == null) b = 10
1376 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1377 var cs = this.chunkSize(b)
1378 var a = Math.pow(b, cs)
1379 var d = nbv(a),
1380 y = new BigInteger(),
1381 z = new BigInteger(),
1382 r = ""
1383 this.divRemTo(d, y, z)
1384 while (y.signum() > 0) {
1385 r = (a + z.intValue())
1386 .toString(b)
1387 .substr(1) + r
1388 y.divRemTo(d, y, z)
1389 }
1390 return z.intValue()
1391 .toString(b) + r
1392}
3af2954a 1393
ab78acc6
IC
1394// (protected) convert from radix string
1395function bnpFromRadix(s, b) {
1396 var self = this
1397 self.fromInt(0)
1398 if (b == null) b = 10
1399 var cs = self.chunkSize(b)
1400 var d = Math.pow(b, cs),
1401 mi = false,
1402 j = 0,
1403 w = 0
1404 for (var i = 0; i < s.length; ++i) {
1405 var x = intAt(s, i)
1406 if (x < 0) {
1407 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1408 continue
1409 }
1410 w = b * w + x
1411 if (++j >= cs) {
1412 self.dMultiply(d)
1413 self.dAddOffset(w, 0)
1414 j = 0
1415 w = 0
1416 }
1417 }
1418 if (j > 0) {
1419 self.dMultiply(Math.pow(b, j))
1420 self.dAddOffset(w, 0)
1421 }
1422 if (mi) BigInteger.ZERO.subTo(self, self)
1423}
3af2954a 1424
ab78acc6
IC
1425// (protected) alternate constructor
1426function bnpFromNumber(a, b, c) {
1427 var self = this
1428 if ("number" == typeof b) {
1429 // new BigInteger(int,int,RNG)
1430 if (a < 2) self.fromInt(1)
1431 else {
1432 self.fromNumber(a, c)
1433 if (!self.testBit(a - 1)) // force MSB set
1434 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1435 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1436 while (!self.isProbablePrime(b)) {
1437 self.dAddOffset(2, 0)
1438 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1439 }
1440 }
1441 } else {
1442 // new BigInteger(int,RNG)
1443 var x = new Array(),
1444 t = a & 7
1445 x.length = (a >> 3) + 1
1446 b.nextBytes(x)
1447 if (t > 0) x[0] &= ((1 << t) - 1)
1448 else x[0] = 0
1449 self.fromString(x, 256)
3af2954a 1450 }
ab78acc6 1451}
3af2954a 1452
ab78acc6
IC
1453// (public) convert to bigendian byte array
1454function bnToByteArray() {
1455 var self = this
1456 var i = self.t,
1457 r = new Array()
1458 r[0] = self.s
1459 var p = self.DB - (i * self.DB) % 8,
1460 d, k = 0
1461 if (i-- > 0) {
1462 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1463 r[k++] = d | (self.s << (self.DB - p))
1464 while (i >= 0) {
1465 if (p < 8) {
1466 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1467 d |= self[--i] >> (p += self.DB - 8)
1468 } else {
1469 d = (self[i] >> (p -= 8)) & 0xff
1470 if (p <= 0) {
1471 p += self.DB
1472 --i
1473 }
1474 }
1475 if ((d & 0x80) != 0) d |= -256
1476 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1477 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1478 }
3af2954a 1479 }
ab78acc6
IC
1480 return r
1481}
3af2954a 1482
ab78acc6
IC
1483function bnEquals(a) {
1484 return (this.compareTo(a) == 0)
1485}
3af2954a 1486
ab78acc6
IC
1487function bnMin(a) {
1488 return (this.compareTo(a) < 0) ? this : a
1489}
3af2954a 1490
ab78acc6
IC
1491function bnMax(a) {
1492 return (this.compareTo(a) > 0) ? this : a
1493}
3af2954a 1494
ab78acc6
IC
1495// (protected) r = this op a (bitwise)
1496function bnpBitwiseTo(a, op, r) {
1497 var self = this
1498 var i, f, m = Math.min(a.t, self.t)
1499 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1500 if (a.t < self.t) {
1501 f = a.s & self.DM
1502 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1503 r.t = self.t
1504 } else {
1505 f = self.s & self.DM
1506 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1507 r.t = a.t
3af2954a 1508 }
ab78acc6
IC
1509 r.s = op(self.s, a.s)
1510 r.clamp()
1511}
3af2954a 1512
ab78acc6
IC
1513// (public) this & a
1514function op_and(x, y) {
1515 return x & y
1516}
3af2954a 1517
ab78acc6
IC
1518function bnAnd(a) {
1519 var r = new BigInteger()
1520 this.bitwiseTo(a, op_and, r)
1521 return r
1522}
3af2954a 1523
ab78acc6
IC
1524// (public) this | a
1525function op_or(x, y) {
1526 return x | y
1527}
3af2954a 1528
ab78acc6
IC
1529function bnOr(a) {
1530 var r = new BigInteger()
1531 this.bitwiseTo(a, op_or, r)
1532 return r
1533}
3af2954a 1534
ab78acc6
IC
1535// (public) this ^ a
1536function op_xor(x, y) {
1537 return x ^ y
1538}
3af2954a 1539
ab78acc6
IC
1540function bnXor(a) {
1541 var r = new BigInteger()
1542 this.bitwiseTo(a, op_xor, r)
1543 return r
1544}
3af2954a 1545
ab78acc6
IC
1546// (public) this & ~a
1547function op_andnot(x, y) {
1548 return x & ~y
1549}
3af2954a 1550
ab78acc6
IC
1551function bnAndNot(a) {
1552 var r = new BigInteger()
1553 this.bitwiseTo(a, op_andnot, r)
1554 return r
1555}
3af2954a 1556
ab78acc6
IC
1557// (public) ~this
1558function bnNot() {
1559 var r = new BigInteger()
1560 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1561 r.t = this.t
1562 r.s = ~this.s
1563 return r
1564}
3af2954a 1565
ab78acc6
IC
1566// (public) this << n
1567function bnShiftLeft(n) {
1568 var r = new BigInteger()
1569 if (n < 0) this.rShiftTo(-n, r)
1570 else this.lShiftTo(n, r)
1571 return r
1572}
3af2954a 1573
ab78acc6
IC
1574// (public) this >> n
1575function bnShiftRight(n) {
1576 var r = new BigInteger()
1577 if (n < 0) this.lShiftTo(-n, r)
1578 else this.rShiftTo(n, r)
1579 return r
1580}
3af2954a 1581
ab78acc6
IC
1582// return index of lowest 1-bit in x, x < 2^31
1583function lbit(x) {
1584 if (x == 0) return -1
1585 var r = 0
1586 if ((x & 0xffff) == 0) {
1587 x >>= 16
1588 r += 16
3af2954a 1589 }
ab78acc6
IC
1590 if ((x & 0xff) == 0) {
1591 x >>= 8
1592 r += 8
1593 }
1594 if ((x & 0xf) == 0) {
1595 x >>= 4
1596 r += 4
1597 }
1598 if ((x & 3) == 0) {
1599 x >>= 2
1600 r += 2
1601 }
1602 if ((x & 1) == 0)++r
1603 return r
1604}
3af2954a 1605
ab78acc6
IC
1606// (public) returns index of lowest 1-bit (or -1 if none)
1607function bnGetLowestSetBit() {
1608 for (var i = 0; i < this.t; ++i)
1609 if (this[i] != 0) return i * this.DB + lbit(this[i])
1610 if (this.s < 0) return this.t * this.DB
1611 return -1
1612}
3af2954a 1613
ab78acc6
IC
1614// return number of 1 bits in x
1615function cbit(x) {
1616 var r = 0
1617 while (x != 0) {
1618 x &= x - 1
1619 ++r
3af2954a 1620 }
ab78acc6
IC
1621 return r
1622}
3af2954a 1623
ab78acc6
IC
1624// (public) return number of set bits
1625function bnBitCount() {
1626 var r = 0,
1627 x = this.s & this.DM
1628 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1629 return r
1630}
1631
1632// (public) true iff nth bit is set
1633function bnTestBit(n) {
1634 var j = Math.floor(n / this.DB)
1635 if (j >= this.t) return (this.s != 0)
1636 return ((this[j] & (1 << (n % this.DB))) != 0)
1637}
3af2954a 1638
ab78acc6
IC
1639// (protected) this op (1<<n)
1640function bnpChangeBit(n, op) {
1641 var r = BigInteger.ONE.shiftLeft(n)
1642 this.bitwiseTo(r, op, r)
1643 return r
1644}
3af2954a 1645
ab78acc6
IC
1646// (public) this | (1<<n)
1647function bnSetBit(n) {
1648 return this.changeBit(n, op_or)
1649}
3af2954a 1650
ab78acc6
IC
1651// (public) this & ~(1<<n)
1652function bnClearBit(n) {
1653 return this.changeBit(n, op_andnot)
1654}
3af2954a 1655
ab78acc6
IC
1656// (public) this ^ (1<<n)
1657function bnFlipBit(n) {
1658 return this.changeBit(n, op_xor)
1659}
3af2954a 1660
ab78acc6
IC
1661// (protected) r = this + a
1662function bnpAddTo(a, r) {
1663 var self = this
3af2954a 1664
ab78acc6
IC
1665 var i = 0,
1666 c = 0,
1667 m = Math.min(a.t, self.t)
1668 while (i < m) {
1669 c += self[i] + a[i]
1670 r[i++] = c & self.DM
1671 c >>= self.DB
1672 }
1673 if (a.t < self.t) {
1674 c += a.s
1675 while (i < self.t) {
1676 c += self[i]
1677 r[i++] = c & self.DM
1678 c >>= self.DB
1679 }
1680 c += self.s
1681 } else {
1682 c += self.s
1683 while (i < a.t) {
1684 c += a[i]
1685 r[i++] = c & self.DM
1686 c >>= self.DB
1687 }
1688 c += a.s
1689 }
1690 r.s = (c < 0) ? -1 : 0
1691 if (c > 0) r[i++] = c
1692 else if (c < -1) r[i++] = self.DV + c
1693 r.t = i
1694 r.clamp()
1695}
3af2954a 1696
ab78acc6
IC
1697// (public) this + a
1698function bnAdd(a) {
1699 var r = new BigInteger()
1700 this.addTo(a, r)
1701 return r
1702}
3af2954a 1703
ab78acc6
IC
1704// (public) this - a
1705function bnSubtract(a) {
1706 var r = new BigInteger()
1707 this.subTo(a, r)
1708 return r
1709}
3af2954a 1710
ab78acc6
IC
1711// (public) this * a
1712function bnMultiply(a) {
1713 var r = new BigInteger()
1714 this.multiplyTo(a, r)
1715 return r
1716}
3af2954a 1717
ab78acc6
IC
1718// (public) this^2
1719function bnSquare() {
1720 var r = new BigInteger()
1721 this.squareTo(r)
1722 return r
1723}
3af2954a 1724
ab78acc6
IC
1725// (public) this / a
1726function bnDivide(a) {
1727 var r = new BigInteger()
1728 this.divRemTo(a, r, null)
1729 return r
1730}
3af2954a 1731
ab78acc6
IC
1732// (public) this % a
1733function bnRemainder(a) {
1734 var r = new BigInteger()
1735 this.divRemTo(a, null, r)
1736 return r
1737}
3af2954a 1738
ab78acc6
IC
1739// (public) [this/a,this%a]
1740function bnDivideAndRemainder(a) {
1741 var q = new BigInteger(),
1742 r = new BigInteger()
1743 this.divRemTo(a, q, r)
1744 return new Array(q, r)
1745}
3af2954a 1746
ab78acc6
IC
1747// (protected) this *= n, this >= 0, 1 < n < DV
1748function bnpDMultiply(n) {
1749 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1750 ++this.t
1751 this.clamp()
1752}
3af2954a 1753
ab78acc6
IC
1754// (protected) this += n << w words, this >= 0
1755function bnpDAddOffset(n, w) {
1756 if (n == 0) return
1757 while (this.t <= w) this[this.t++] = 0
1758 this[w] += n
1759 while (this[w] >= this.DV) {
1760 this[w] -= this.DV
1761 if (++w >= this.t) this[this.t++] = 0
1762 ++this[w]
3af2954a 1763 }
ab78acc6 1764}
3af2954a 1765
ab78acc6
IC
1766// A "null" reducer
1767function NullExp() {}
3af2954a 1768
ab78acc6
IC
1769function nNop(x) {
1770 return x
1771}
3af2954a 1772
ab78acc6
IC
1773function nMulTo(x, y, r) {
1774 x.multiplyTo(y, r)
1775}
3af2954a 1776
ab78acc6
IC
1777function nSqrTo(x, r) {
1778 x.squareTo(r)
1779}
3af2954a 1780
ab78acc6
IC
1781NullExp.prototype.convert = nNop
1782NullExp.prototype.revert = nNop
1783NullExp.prototype.mulTo = nMulTo
1784NullExp.prototype.sqrTo = nSqrTo
3af2954a 1785
ab78acc6
IC
1786// (public) this^e
1787function bnPow(e) {
1788 return this.exp(e, new NullExp())
1789}
3af2954a 1790
ab78acc6
IC
1791// (protected) r = lower n words of "this * a", a.t <= n
1792// "this" should be the larger one if appropriate.
1793function bnpMultiplyLowerTo(a, n, r) {
1794 var i = Math.min(this.t + a.t, n)
1795 r.s = 0; // assumes a,this >= 0
1796 r.t = i
1797 while (i > 0) r[--i] = 0
1798 var j
1799 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1800 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1801 r.clamp()
1802}
3af2954a 1803
ab78acc6
IC
1804// (protected) r = "this * a" without lower n words, n > 0
1805// "this" should be the larger one if appropriate.
1806function bnpMultiplyUpperTo(a, n, r) {
1807 --n
1808 var i = r.t = this.t + a.t - n
1809 r.s = 0; // assumes a,this >= 0
1810 while (--i >= 0) r[i] = 0
1811 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1812 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1813 r.clamp()
1814 r.drShiftTo(1, r)
1815}
3af2954a 1816
ab78acc6
IC
1817// Barrett modular reduction
1818function Barrett(m) {
1819 // setup Barrett
1820 this.r2 = new BigInteger()
1821 this.q3 = new BigInteger()
1822 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1823 this.mu = this.r2.divide(m)
1824 this.m = m
1825}
3af2954a 1826
ab78acc6
IC
1827function barrettConvert(x) {
1828 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1829 else if (x.compareTo(this.m) < 0) return x
1830 else {
1831 var r = new BigInteger()
1832 x.copyTo(r)
1833 this.reduce(r)
1834 return r
3af2954a 1835 }
ab78acc6 1836}
3af2954a 1837
ab78acc6
IC
1838function barrettRevert(x) {
1839 return x
1840}
3af2954a 1841
ab78acc6
IC
1842// x = x mod m (HAC 14.42)
1843function barrettReduce(x) {
1844 var self = this
1845 x.drShiftTo(self.m.t - 1, self.r2)
1846 if (x.t > self.m.t + 1) {
1847 x.t = self.m.t + 1
1848 x.clamp()
3af2954a 1849 }
ab78acc6
IC
1850 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1851 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1852 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1853 x.subTo(self.r2, x)
1854 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1855}
3af2954a 1856
ab78acc6
IC
1857// r = x^2 mod m; x != r
1858function barrettSqrTo(x, r) {
1859 x.squareTo(r)
1860 this.reduce(r)
1861}
3af2954a 1862
ab78acc6
IC
1863// r = x*y mod m; x,y != r
1864function barrettMulTo(x, y, r) {
1865 x.multiplyTo(y, r)
1866 this.reduce(r)
1867}
3af2954a 1868
ab78acc6
IC
1869Barrett.prototype.convert = barrettConvert
1870Barrett.prototype.revert = barrettRevert
1871Barrett.prototype.reduce = barrettReduce
1872Barrett.prototype.mulTo = barrettMulTo
1873Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1874
ab78acc6
IC
1875// (public) this^e % m (HAC 14.85)
1876function bnModPow(e, m) {
1877 var i = e.bitLength(),
1878 k, r = nbv(1),
1879 z
1880 if (i <= 0) return r
1881 else if (i < 18) k = 1
1882 else if (i < 48) k = 3
1883 else if (i < 144) k = 4
1884 else if (i < 768) k = 5
1885 else k = 6
1886 if (i < 8)
1887 z = new Classic(m)
1888 else if (m.isEven())
1889 z = new Barrett(m)
1890 else
1891 z = new Montgomery(m)
3af2954a 1892
ab78acc6
IC
1893 // precomputation
1894 var g = new Array(),
1895 n = 3,
1896 k1 = k - 1,
1897 km = (1 << k) - 1
1898 g[1] = z.convert(this)
1899 if (k > 1) {
1900 var g2 = new BigInteger()
1901 z.sqrTo(g[1], g2)
1902 while (n <= km) {
1903 g[n] = new BigInteger()
1904 z.mulTo(g2, g[n - 2], g[n])
1905 n += 2
1906 }
1907 }
1908
1909 var j = e.t - 1,
1910 w, is1 = true,
1911 r2 = new BigInteger(),
1912 t
1913 i = nbits(e[j]) - 1
1914 while (j >= 0) {
1915 if (i >= k1) w = (e[j] >> (i - k1)) & km
1916 else {
1917 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1918 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1919 }
3af2954a 1920
ab78acc6
IC
1921 n = k
1922 while ((w & 1) == 0) {
1923 w >>= 1
1924 --n
1925 }
1926 if ((i -= n) < 0) {
1927 i += this.DB
1928 --j
1929 }
1930 if (is1) { // ret == 1, don't bother squaring or multiplying it
1931 g[w].copyTo(r)
1932 is1 = false
1933 } else {
1934 while (n > 1) {
1935 z.sqrTo(r, r2)
1936 z.sqrTo(r2, r)
1937 n -= 2
1938 }
1939 if (n > 0) z.sqrTo(r, r2)
1940 else {
1941 t = r
1942 r = r2
1943 r2 = t
1944 }
1945 z.mulTo(r2, g[w], r)
1946 }
3af2954a 1947
ab78acc6
IC
1948 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1949 z.sqrTo(r, r2)
1950 t = r
1951 r = r2
1952 r2 = t
1953 if (--i < 0) {
1954 i = this.DB - 1
1955 --j
3af2954a 1956 }
3af2954a
IC
1957 }
1958 }
ab78acc6
IC
1959 return z.revert(r)
1960}
3af2954a 1961
ab78acc6
IC
1962// (public) gcd(this,a) (HAC 14.54)
1963function bnGCD(a) {
1964 var x = (this.s < 0) ? this.negate() : this.clone()
1965 var y = (a.s < 0) ? a.negate() : a.clone()
1966 if (x.compareTo(y) < 0) {
1967 var t = x
1968 x = y
1969 y = t
1970 }
1971 var i = x.getLowestSetBit(),
1972 g = y.getLowestSetBit()
1973 if (g < 0) return x
1974 if (i < g) g = i
1975 if (g > 0) {
1976 x.rShiftTo(g, x)
1977 y.rShiftTo(g, y)
1978 }
1979 while (x.signum() > 0) {
1980 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1981 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1982 if (x.compareTo(y) >= 0) {
1983 x.subTo(y, x)
1984 x.rShiftTo(1, x)
1985 } else {
1986 y.subTo(x, y)
1987 y.rShiftTo(1, y)
1988 }
3af2954a 1989 }
ab78acc6
IC
1990 if (g > 0) y.lShiftTo(g, y)
1991 return y
1992}
3af2954a 1993
ab78acc6
IC
1994// (protected) this % n, n < 2^26
1995function bnpModInt(n) {
1996 if (n <= 0) return 0
1997 var d = this.DV % n,
1998 r = (this.s < 0) ? n - 1 : 0
1999 if (this.t > 0)
2000 if (d == 0) r = this[0] % n
2001 else
2002 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2003 return r
2004}
3af2954a 2005
ab78acc6
IC
2006// (public) 1/this % m (HAC 14.61)
2007function bnModInverse(m) {
2008 var ac = m.isEven()
2009 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2010 var u = m.clone(),
2011 v = this.clone()
2012 var a = nbv(1),
2013 b = nbv(0),
2014 c = nbv(0),
2015 d = nbv(1)
2016 while (u.signum() != 0) {
2017 while (u.isEven()) {
2018 u.rShiftTo(1, u)
2019 if (ac) {
2020 if (!a.isEven() || !b.isEven()) {
2021 a.addTo(this, a)
2022 b.subTo(m, b)
2023 }
2024 a.rShiftTo(1, a)
2025 } else if (!b.isEven()) b.subTo(m, b)
2026 b.rShiftTo(1, b)
2027 }
2028 while (v.isEven()) {
2029 v.rShiftTo(1, v)
2030 if (ac) {
2031 if (!c.isEven() || !d.isEven()) {
2032 c.addTo(this, c)
2033 d.subTo(m, d)
2034 }
2035 c.rShiftTo(1, c)
2036 } else if (!d.isEven()) d.subTo(m, d)
2037 d.rShiftTo(1, d)
2038 }
2039 if (u.compareTo(v) >= 0) {
2040 u.subTo(v, u)
2041 if (ac) a.subTo(c, a)
2042 b.subTo(d, b)
2043 } else {
2044 v.subTo(u, v)
2045 if (ac) c.subTo(a, c)
2046 d.subTo(b, d)
2047 }
2048 }
2049 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2050 if (d.compareTo(m) >= 0) return d.subtract(m)
2051 if (d.signum() < 0) d.addTo(m, d)
2052 else return d
2053 if (d.signum() < 0) return d.add(m)
2054 else return d
2055}
2056
2057var lowprimes = [
2058 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2059 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2060 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2061 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2062 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2063 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2064 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2065 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2066 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2067 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2068 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2069]
2070
2071var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2072
2073// (public) test primality with certainty >= 1-.5^t
2074function bnIsProbablePrime(t) {
2075 var i, x = this.abs()
2076 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2077 for (i = 0; i < lowprimes.length; ++i)
2078 if (x[0] == lowprimes[i]) return true
2079 return false
3af2954a 2080 }
ab78acc6
IC
2081 if (x.isEven()) return false
2082 i = 1
2083 while (i < lowprimes.length) {
2084 var m = lowprimes[i],
2085 j = i + 1
2086 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2087 m = x.modInt(m)
2088 while (i < j) if (m % lowprimes[i++] == 0) return false
2089 }
2090 return x.millerRabin(t)
2091}
2092
2093// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2094function bnpMillerRabin(t) {
2095 var n1 = this.subtract(BigInteger.ONE)
2096 var k = n1.getLowestSetBit()
2097 if (k <= 0) return false
2098 var r = n1.shiftRight(k)
2099 t = (t + 1) >> 1
2100 if (t > lowprimes.length) t = lowprimes.length
2101 var a = new BigInteger(null)
2102 var j, bases = []
2103 for (var i = 0; i < t; ++i) {
2104 for (;;) {
2105 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2106 if (bases.indexOf(j) == -1) break
2107 }
2108 bases.push(j)
2109 a.fromInt(j)
2110 var y = a.modPow(r, this)
2111 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2112 var j = 1
2113 while (j++ < k && y.compareTo(n1) != 0) {
2114 y = y.modPowInt(2, this)
2115 if (y.compareTo(BigInteger.ONE) == 0) return false
2116 }
2117 if (y.compareTo(n1) != 0) return false
2118 }
3af2954a 2119 }
ab78acc6
IC
2120 return true
2121}
3af2954a 2122
ab78acc6
IC
2123// protected
2124proto.chunkSize = bnpChunkSize
2125proto.toRadix = bnpToRadix
2126proto.fromRadix = bnpFromRadix
2127proto.fromNumber = bnpFromNumber
2128proto.bitwiseTo = bnpBitwiseTo
2129proto.changeBit = bnpChangeBit
2130proto.addTo = bnpAddTo
2131proto.dMultiply = bnpDMultiply
2132proto.dAddOffset = bnpDAddOffset
2133proto.multiplyLowerTo = bnpMultiplyLowerTo
2134proto.multiplyUpperTo = bnpMultiplyUpperTo
2135proto.modInt = bnpModInt
2136proto.millerRabin = bnpMillerRabin
3af2954a 2137
ab78acc6
IC
2138// public
2139proto.clone = bnClone
2140proto.intValue = bnIntValue
2141proto.byteValue = bnByteValue
2142proto.shortValue = bnShortValue
2143proto.signum = bnSigNum
2144proto.toByteArray = bnToByteArray
2145proto.equals = bnEquals
2146proto.min = bnMin
2147proto.max = bnMax
2148proto.and = bnAnd
2149proto.or = bnOr
2150proto.xor = bnXor
2151proto.andNot = bnAndNot
2152proto.not = bnNot
2153proto.shiftLeft = bnShiftLeft
2154proto.shiftRight = bnShiftRight
2155proto.getLowestSetBit = bnGetLowestSetBit
2156proto.bitCount = bnBitCount
2157proto.testBit = bnTestBit
2158proto.setBit = bnSetBit
2159proto.clearBit = bnClearBit
2160proto.flipBit = bnFlipBit
2161proto.add = bnAdd
2162proto.subtract = bnSubtract
2163proto.multiply = bnMultiply
2164proto.divide = bnDivide
2165proto.remainder = bnRemainder
2166proto.divideAndRemainder = bnDivideAndRemainder
2167proto.modPow = bnModPow
2168proto.modInverse = bnModInverse
2169proto.pow = bnPow
2170proto.gcd = bnGCD
2171proto.isProbablePrime = bnIsProbablePrime
3af2954a 2172
ab78acc6
IC
2173// JSBN-specific extension
2174proto.square = bnSquare
3af2954a 2175
ab78acc6
IC
2176// constants
2177BigInteger.ZERO = nbv(0)
2178BigInteger.ONE = nbv(1)
2179BigInteger.valueOf = nbv
3af2954a 2180
ab78acc6 2181module.exports = BigInteger
3af2954a 2182
ab78acc6
IC
2183},{"../package.json":4}],2:[function(require,module,exports){
2184(function (Buffer){
2185// FIXME: Kind of a weird way to throw exceptions, consider removing
2186var assert = require('assert')
2187var BigInteger = require('./bigi')
3af2954a 2188
ab78acc6
IC
2189/**
2190 * Turns a byte array into a big integer.
2191 *
2192 * This function will interpret a byte array as a big integer in big
2193 * endian notation.
2194 */
2195BigInteger.fromByteArrayUnsigned = function(byteArray) {
2196 // BigInteger expects a DER integer conformant byte array
2197 if (byteArray[0] & 0x80) {
2198 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2199 }
2200
ab78acc6
IC
2201 return new BigInteger(byteArray)
2202}
3af2954a 2203
ab78acc6
IC
2204/**
2205 * Returns a byte array representation of the big integer.
2206 *
2207 * This returns the absolute of the contained value in big endian
2208 * form. A value of zero results in an empty array.
2209 */
2210BigInteger.prototype.toByteArrayUnsigned = function() {
2211 var byteArray = this.toByteArray()
2212 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2213}
3af2954a 2214
ab78acc6
IC
2215BigInteger.fromDERInteger = function(byteArray) {
2216 return new BigInteger(byteArray)
2217}
3af2954a 2218
ab78acc6
IC
2219/*
2220 * Converts BigInteger to a DER integer representation.
2221 *
2222 * The format for this value uses the most significant bit as a sign
2223 * bit. If the most significant bit is already set and the integer is
2224 * positive, a 0x00 is prepended.
2225 *
2226 * Examples:
2227 *
2228 * 0 => 0x00
2229 * 1 => 0x01
2230 * -1 => 0xff
2231 * 127 => 0x7f
2232 * -127 => 0x81
2233 * 128 => 0x0080
2234 * -128 => 0x80
2235 * 255 => 0x00ff
2236 * -255 => 0xff01
2237 * 16300 => 0x3fac
2238 * -16300 => 0xc054
2239 * 62300 => 0x00f35c
2240 * -62300 => 0xff0ca4
2241*/
2242BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2243
ab78acc6
IC
2244BigInteger.fromBuffer = function(buffer) {
2245 // BigInteger expects a DER integer conformant byte array
2246 if (buffer[0] & 0x80) {
2247 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2248
ab78acc6 2249 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2250 }
2251
ab78acc6
IC
2252 return new BigInteger(buffer)
2253}
3af2954a 2254
ab78acc6
IC
2255BigInteger.fromHex = function(hex) {
2256 if (hex === '') return BigInteger.ZERO
3af2954a 2257
ab78acc6
IC
2258 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2259 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2260 return new BigInteger(hex, 16)
2261}
3af2954a 2262
ab78acc6
IC
2263BigInteger.prototype.toBuffer = function(size) {
2264 var byteArray = this.toByteArrayUnsigned()
2265 var zeros = []
3af2954a 2266
ab78acc6
IC
2267 var padding = size - byteArray.length
2268 while (zeros.length < padding) zeros.push(0)
3af2954a 2269
ab78acc6
IC
2270 return new Buffer(zeros.concat(byteArray))
2271}
3af2954a 2272
ab78acc6
IC
2273BigInteger.prototype.toHex = function(size) {
2274 return this.toBuffer(size).toString('hex')
2275}
3af2954a 2276
ab78acc6
IC
2277}).call(this,require("buffer").Buffer)
2278},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2279var BigInteger = require('./bigi')
3af2954a 2280
ab78acc6
IC
2281//addons
2282require('./convert')
3af2954a 2283
ab78acc6
IC
2284module.exports = BigInteger
2285},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2286module.exports={
2287 "name": "bigi",
2288 "version": "1.4.0",
2289 "description": "Big integers.",
2290 "keywords": [
2291 "cryptography",
2292 "math",
2293 "bitcoin",
2294 "arbitrary",
2295 "precision",
2296 "arithmetic",
2297 "big",
2298 "integer",
2299 "int",
2300 "number",
2301 "biginteger",
2302 "bigint",
2303 "bignumber",
2304 "decimal",
2305 "float"
2306 ],
2307 "devDependencies": {
2308 "mocha": "^1.20.1",
2309 "jshint": "^2.5.1",
2310 "coveralls": "^2.10.0",
2311 "istanbul": "^0.2.11"
2312 },
2313 "repository": {
2314 "url": "https://github.com/cryptocoinjs/bigi",
2315 "type": "git"
2316 },
2317 "main": "./lib/index.js",
2318 "scripts": {
2319 "test": "_mocha -- test/*.js",
2320 "jshint": "jshint --config jshint.json lib/*.js ; true",
2321 "unit": "mocha",
2322 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2323 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2324 },
2325 "dependencies": {},
2326 "testling": {
2327 "files": "test/*.js",
2328 "harness": "mocha",
2329 "browsers": [
2330 "ie/9..latest",
2331 "firefox/latest",
2332 "chrome/latest",
2333 "safari/6.0..latest",
2334 "iphone/6.0..latest",
2335 "android-browser/4.2..latest"
2336 ]
2337 },
2338 "bugs": {
2339 "url": "https://github.com/cryptocoinjs/bigi/issues"
2340 },
2341 "homepage": "https://github.com/cryptocoinjs/bigi",
2342 "_id": "bigi@1.4.0",
2343 "dist": {
2344 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2345 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2346 },
2347 "_from": "bigi@^1.4.0",
2348 "_npmVersion": "1.4.3",
2349 "_npmUser": {
2350 "name": "jp",
2351 "email": "jprichardson@gmail.com"
2352 },
2353 "maintainers": [
2354 {
2355 "name": "jp",
2356 "email": "jprichardson@gmail.com"
2357 },
2358 {
2359 "name": "midnightlightning",
2360 "email": "boydb@midnightdesign.ws"
2361 },
2362 {
2363 "name": "sidazhang",
2364 "email": "sidazhang89@gmail.com"
2365 },
2366 {
2367 "name": "nadav",
2368 "email": "npm@shesek.info"
3af2954a 2369 }
ab78acc6
IC
2370 ],
2371 "directories": {},
2372 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2373 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2374}
3af2954a 2375
ab78acc6
IC
2376},{}],5:[function(require,module,exports){
2377// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2378//
2379// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2380//
2381// Originally from narwhal.js (http://narwhaljs.org)
2382// Copyright (c) 2009 Thomas Robinson <280north.com>
2383//
2384// Permission is hereby granted, free of charge, to any person obtaining a copy
2385// of this software and associated documentation files (the 'Software'), to
2386// deal in the Software without restriction, including without limitation the
2387// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2388// sell copies of the Software, and to permit persons to whom the Software is
2389// furnished to do so, subject to the following conditions:
2390//
2391// The above copyright notice and this permission notice shall be included in
2392// all copies or substantial portions of the Software.
2393//
2394// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2395// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2396// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2397// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2398// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2399// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2400
ab78acc6
IC
2401// when used in node, this will actually load the util module we depend on
2402// versus loading the builtin util module as happens otherwise
2403// this is a bug in node module loading as far as I am concerned
2404var util = require('util/');
3af2954a 2405
ab78acc6
IC
2406var pSlice = Array.prototype.slice;
2407var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2408
ab78acc6
IC
2409// 1. The assert module provides functions that throw
2410// AssertionError's when particular conditions are not met. The
2411// assert module must conform to the following interface.
3af2954a 2412
ab78acc6 2413var assert = module.exports = ok;
3af2954a 2414
ab78acc6
IC
2415// 2. The AssertionError is defined in assert.
2416// new assert.AssertionError({ message: message,
2417// actual: actual,
2418// expected: expected })
3af2954a 2419
ab78acc6
IC
2420assert.AssertionError = function AssertionError(options) {
2421 this.name = 'AssertionError';
2422 this.actual = options.actual;
2423 this.expected = options.expected;
2424 this.operator = options.operator;
2425 if (options.message) {
2426 this.message = options.message;
2427 this.generatedMessage = false;
2428 } else {
2429 this.message = getMessage(this);
2430 this.generatedMessage = true;
2431 }
2432 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2433
ab78acc6
IC
2434 if (Error.captureStackTrace) {
2435 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2436 }
ab78acc6
IC
2437 else {
2438 // non v8 browsers so we can have a stacktrace
2439 var err = new Error();
2440 if (err.stack) {
2441 var out = err.stack;
3af2954a 2442
ab78acc6
IC
2443 // try to strip useless frames
2444 var fn_name = stackStartFunction.name;
2445 var idx = out.indexOf('\n' + fn_name);
2446 if (idx >= 0) {
2447 // once we have located the function frame
2448 // we need to strip out everything before it (and its line)
2449 var next_line = out.indexOf('\n', idx + 1);
2450 out = out.substring(next_line + 1);
2451 }
3af2954a 2452
ab78acc6 2453 this.stack = out;
3af2954a 2454 }
3af2954a 2455 }
ab78acc6 2456};
3af2954a 2457
ab78acc6
IC
2458// assert.AssertionError instanceof Error
2459util.inherits(assert.AssertionError, Error);
3af2954a 2460
ab78acc6
IC
2461function replacer(key, value) {
2462 if (util.isUndefined(value)) {
2463 return '' + value;
2464 }
2465 if (util.isNumber(value) && !isFinite(value)) {
2466 return value.toString();
2467 }
2468 if (util.isFunction(value) || util.isRegExp(value)) {
2469 return value.toString();
2470 }
2471 return value;
2472}
3af2954a 2473
ab78acc6
IC
2474function truncate(s, n) {
2475 if (util.isString(s)) {
2476 return s.length < n ? s : s.slice(0, n);
2477 } else {
2478 return s;
2479 }
2480}
3af2954a 2481
ab78acc6
IC
2482function getMessage(self) {
2483 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2484 self.operator + ' ' +
2485 truncate(JSON.stringify(self.expected, replacer), 128);
2486}
3af2954a 2487
ab78acc6
IC
2488// At present only the three keys mentioned above are used and
2489// understood by the spec. Implementations or sub modules can pass
2490// other keys to the AssertionError's constructor - they will be
2491// ignored.
3af2954a 2492
ab78acc6
IC
2493// 3. All of the following functions must throw an AssertionError
2494// when a corresponding condition is not met, with a message that
2495// may be undefined if not provided. All assertion methods provide
2496// both the actual and expected values to the assertion error for
2497// display purposes.
3af2954a 2498
ab78acc6
IC
2499function fail(actual, expected, message, operator, stackStartFunction) {
2500 throw new assert.AssertionError({
2501 message: message,
2502 actual: actual,
2503 expected: expected,
2504 operator: operator,
2505 stackStartFunction: stackStartFunction
2506 });
2507}
3af2954a 2508
ab78acc6
IC
2509// EXTENSION! allows for well behaved errors defined elsewhere.
2510assert.fail = fail;
ebd8d4e8 2511
ab78acc6
IC
2512// 4. Pure assertion tests whether a value is truthy, as determined
2513// by !!guard.
2514// assert.ok(guard, message_opt);
2515// This statement is equivalent to assert.equal(true, !!guard,
2516// message_opt);. To test strictly for the value true, use
2517// assert.strictEqual(true, guard, message_opt);.
3af2954a 2518
ab78acc6
IC
2519function ok(value, message) {
2520 if (!value) fail(value, true, message, '==', assert.ok);
2521}
2522assert.ok = ok;
3af2954a 2523
ab78acc6
IC
2524// 5. The equality assertion tests shallow, coercive equality with
2525// ==.
2526// assert.equal(actual, expected, message_opt);
3af2954a 2527
ab78acc6
IC
2528assert.equal = function equal(actual, expected, message) {
2529 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2530};
3af2954a 2531
ab78acc6
IC
2532// 6. The non-equality assertion tests for whether two objects are not equal
2533// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2534
ab78acc6
IC
2535assert.notEqual = function notEqual(actual, expected, message) {
2536 if (actual == expected) {
2537 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2538 }
ab78acc6 2539};
3af2954a 2540
ab78acc6
IC
2541// 7. The equivalence assertion tests a deep equality relation.
2542// assert.deepEqual(actual, expected, message_opt);
3af2954a 2543
ab78acc6
IC
2544assert.deepEqual = function deepEqual(actual, expected, message) {
2545 if (!_deepEqual(actual, expected)) {
2546 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2547 }
2548};
3af2954a 2549
ab78acc6
IC
2550function _deepEqual(actual, expected) {
2551 // 7.1. All identical values are equivalent, as determined by ===.
2552 if (actual === expected) {
2553 return true;
3af2954a 2554
ab78acc6
IC
2555 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2556 if (actual.length != expected.length) return false;
3af2954a 2557
ab78acc6
IC
2558 for (var i = 0; i < actual.length; i++) {
2559 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2560 }
2561
ab78acc6 2562 return true;
3af2954a 2563
ab78acc6
IC
2564 // 7.2. If the expected value is a Date object, the actual value is
2565 // equivalent if it is also a Date object that refers to the same time.
2566 } else if (util.isDate(actual) && util.isDate(expected)) {
2567 return actual.getTime() === expected.getTime();
3af2954a 2568
ab78acc6
IC
2569 // 7.3 If the expected value is a RegExp object, the actual value is
2570 // equivalent if it is also a RegExp object with the same source and
2571 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2572 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2573 return actual.source === expected.source &&
2574 actual.global === expected.global &&
2575 actual.multiline === expected.multiline &&
2576 actual.lastIndex === expected.lastIndex &&
2577 actual.ignoreCase === expected.ignoreCase;
3af2954a 2578
ab78acc6
IC
2579 // 7.4. Other pairs that do not both pass typeof value == 'object',
2580 // equivalence is determined by ==.
2581 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2582 return actual == expected;
3af2954a 2583
ab78acc6
IC
2584 // 7.5 For all other Object pairs, including Array objects, equivalence is
2585 // determined by having the same number of owned properties (as verified
2586 // with Object.prototype.hasOwnProperty.call), the same set of keys
2587 // (although not necessarily the same order), equivalent values for every
2588 // corresponding key, and an identical 'prototype' property. Note: this
2589 // accounts for both named and indexed properties on Arrays.
2590 } else {
2591 return objEquiv(actual, expected);
3af2954a 2592 }
ab78acc6 2593}
3af2954a 2594
ab78acc6
IC
2595function isArguments(object) {
2596 return Object.prototype.toString.call(object) == '[object Arguments]';
2597}
3af2954a 2598
ab78acc6
IC
2599function objEquiv(a, b) {
2600 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2601 return false;
2602 // an identical 'prototype' property.
2603 if (a.prototype !== b.prototype) return false;
2604 // if one is a primitive, the other must be same
2605 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2606 return a === b;
3af2954a 2607 }
ab78acc6
IC
2608 var aIsArgs = isArguments(a),
2609 bIsArgs = isArguments(b);
2610 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2611 return false;
2612 if (aIsArgs) {
2613 a = pSlice.call(a);
2614 b = pSlice.call(b);
2615 return _deepEqual(a, b);
3af2954a 2616 }
ab78acc6
IC
2617 var ka = objectKeys(a),
2618 kb = objectKeys(b),
2619 key, i;
2620 // having the same number of owned properties (keys incorporates
2621 // hasOwnProperty)
2622 if (ka.length != kb.length)
2623 return false;
2624 //the same set of keys (although not necessarily the same order),
2625 ka.sort();
2626 kb.sort();
2627 //~~~cheap key test
2628 for (i = ka.length - 1; i >= 0; i--) {
2629 if (ka[i] != kb[i])
2630 return false;
3af2954a 2631 }
ab78acc6
IC
2632 //equivalent values for every corresponding key, and
2633 //~~~possibly expensive deep test
2634 for (i = ka.length - 1; i >= 0; i--) {
2635 key = ka[i];
2636 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2637 }
ab78acc6
IC
2638 return true;
2639}
2640
2641// 8. The non-equivalence assertion tests for any deep inequality.
2642// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2643
ab78acc6
IC
2644assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2645 if (_deepEqual(actual, expected)) {
2646 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2647 }
ab78acc6 2648};
3af2954a 2649
ab78acc6
IC
2650// 9. The strict equality assertion tests strict equality, as determined by ===.
2651// assert.strictEqual(actual, expected, message_opt);
3af2954a 2652
ab78acc6
IC
2653assert.strictEqual = function strictEqual(actual, expected, message) {
2654 if (actual !== expected) {
2655 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2656 }
ab78acc6 2657};
3af2954a 2658
ab78acc6
IC
2659// 10. The strict non-equality assertion tests for strict inequality, as
2660// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2661
ab78acc6
IC
2662assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2663 if (actual === expected) {
2664 fail(actual, expected, message, '!==', assert.notStrictEqual);
2665 }
2666};
3af2954a 2667
ab78acc6
IC
2668function expectedException(actual, expected) {
2669 if (!actual || !expected) {
2670 return false;
2671 }
3af2954a 2672
ab78acc6
IC
2673 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2674 return expected.test(actual);
2675 } else if (actual instanceof expected) {
2676 return true;
2677 } else if (expected.call({}, actual) === true) {
2678 return true;
3af2954a
IC
2679 }
2680
ab78acc6
IC
2681 return false;
2682}
3af2954a 2683
ab78acc6
IC
2684function _throws(shouldThrow, block, expected, message) {
2685 var actual;
3af2954a 2686
ab78acc6
IC
2687 if (util.isString(expected)) {
2688 message = expected;
2689 expected = null;
3af2954a
IC
2690 }
2691
ab78acc6
IC
2692 try {
2693 block();
2694 } catch (e) {
2695 actual = e;
3af2954a
IC
2696 }
2697
ab78acc6
IC
2698 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2699 (message ? ' ' + message : '.');
3af2954a 2700
ab78acc6
IC
2701 if (shouldThrow && !actual) {
2702 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2703 }
2704
ab78acc6
IC
2705 if (!shouldThrow && expectedException(actual, expected)) {
2706 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2707 }
2708
ab78acc6
IC
2709 if ((shouldThrow && actual && expected &&
2710 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2711 throw actual;
3af2954a 2712 }
ab78acc6 2713}
3af2954a 2714
ab78acc6
IC
2715// 11. Expected to throw an error:
2716// assert.throws(block, Error_opt, message_opt);
3af2954a 2717
ab78acc6
IC
2718assert.throws = function(block, /*optional*/error, /*optional*/message) {
2719 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2720};
3af2954a 2721
ab78acc6
IC
2722// EXTENSION! This is annoying to write outside this module.
2723assert.doesNotThrow = function(block, /*optional*/message) {
2724 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2725};
3af2954a 2726
ab78acc6 2727assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2728
ab78acc6
IC
2729var objectKeys = Object.keys || function (obj) {
2730 var keys = [];
2731 for (var key in obj) {
2732 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2733 }
ab78acc6
IC
2734 return keys;
2735};
3af2954a 2736
ab78acc6 2737},{"util/":29}],6:[function(require,module,exports){
3af2954a 2738
ab78acc6
IC
2739},{}],7:[function(require,module,exports){
2740/*!
2741 * The buffer module from node.js, for the browser.
2742 *
2743 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2744 * @license MIT
2745 */
3af2954a 2746
ab78acc6
IC
2747var base64 = require('base64-js')
2748var ieee754 = require('ieee754')
2749var isArray = require('is-array')
3af2954a 2750
ab78acc6
IC
2751exports.Buffer = Buffer
2752exports.SlowBuffer = SlowBuffer
2753exports.INSPECT_MAX_BYTES = 50
2754Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2755
ab78acc6 2756var rootParent = {}
3af2954a 2757
ab78acc6
IC
2758/**
2759 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2760 * === true Use Uint8Array implementation (fastest)
2761 * === false Use Object implementation (most compatible, even IE6)
2762 *
2763 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2764 * Opera 11.6+, iOS 4.2+.
2765 *
2766 * Due to various browser bugs, sometimes the Object implementation will be used even
2767 * when the browser supports typed arrays.
2768 *
2769 * Note:
2770 *
2771 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2772 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2773 *
2774 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2775 * on objects.
2776 *
2777 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2778 *
2779 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2780 * incorrect length in some situations.
3af2954a 2781
ab78acc6
IC
2782 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2783 * get the Object implementation, which is slower but behaves correctly.
2784 */
2785Buffer.TYPED_ARRAY_SUPPORT = (function () {
2786 function Bar () {}
2787 try {
2788 var arr = new Uint8Array(1)
2789 arr.foo = function () { return 42 }
2790 arr.constructor = Bar
2791 return arr.foo() === 42 && // typed array instances can be augmented
2792 arr.constructor === Bar && // constructor can be set
2793 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2794 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2795 } catch (e) {
2796 return false
2797 }
2798})()
3af2954a 2799
ab78acc6
IC
2800function kMaxLength () {
2801 return Buffer.TYPED_ARRAY_SUPPORT
2802 ? 0x7fffffff
2803 : 0x3fffffff
2804}
3af2954a 2805
ab78acc6
IC
2806/**
2807 * Class: Buffer
2808 * =============
2809 *
2810 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2811 * with function properties for all the node `Buffer` API functions. We use
2812 * `Uint8Array` so that square bracket notation works as expected -- it returns
2813 * a single octet.
2814 *
2815 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2816 * prototype.
2817 */
2818function Buffer (arg) {
2819 if (!(this instanceof Buffer)) {
2820 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2821 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2822 return new Buffer(arg)
3af2954a
IC
2823 }
2824
ab78acc6
IC
2825 this.length = 0
2826 this.parent = undefined
3af2954a 2827
ab78acc6
IC
2828 // Common case.
2829 if (typeof arg === 'number') {
2830 return fromNumber(this, arg)
2831 }
3af2954a 2832
ab78acc6
IC
2833 // Slightly less common case.
2834 if (typeof arg === 'string') {
2835 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2836 }
3af2954a 2837
ab78acc6
IC
2838 // Unusual.
2839 return fromObject(this, arg)
2840}
3af2954a 2841
ab78acc6
IC
2842function fromNumber (that, length) {
2843 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2844 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2845 for (var i = 0; i < length; i++) {
2846 that[i] = 0
2847 }
3af2954a 2848 }
ab78acc6
IC
2849 return that
2850}
3af2954a 2851
ab78acc6
IC
2852function fromString (that, string, encoding) {
2853 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2854
ab78acc6
IC
2855 // Assumption: byteLength() return value is always < kMaxLength.
2856 var length = byteLength(string, encoding) | 0
2857 that = allocate(that, length)
3af2954a 2858
ab78acc6
IC
2859 that.write(string, encoding)
2860 return that
2861}
3af2954a 2862
ab78acc6
IC
2863function fromObject (that, object) {
2864 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2865
ab78acc6 2866 if (isArray(object)) return fromArray(that, object)
3af2954a 2867
ab78acc6
IC
2868 if (object == null) {
2869 throw new TypeError('must start with number, buffer, array or string')
2870 }
3af2954a 2871
ab78acc6
IC
2872 if (typeof ArrayBuffer !== 'undefined') {
2873 if (object.buffer instanceof ArrayBuffer) {
2874 return fromTypedArray(that, object)
2875 }
2876 if (object instanceof ArrayBuffer) {
2877 return fromArrayBuffer(that, object)
2878 }
3af2954a
IC
2879 }
2880
ab78acc6 2881 if (object.length) return fromArrayLike(that, object)
3af2954a 2882
ab78acc6
IC
2883 return fromJsonObject(that, object)
2884}
3af2954a 2885
ab78acc6
IC
2886function fromBuffer (that, buffer) {
2887 var length = checked(buffer.length) | 0
2888 that = allocate(that, length)
2889 buffer.copy(that, 0, 0, length)
2890 return that
2891}
3af2954a 2892
ab78acc6
IC
2893function fromArray (that, array) {
2894 var length = checked(array.length) | 0
2895 that = allocate(that, length)
2896 for (var i = 0; i < length; i += 1) {
2897 that[i] = array[i] & 255
3af2954a 2898 }
ab78acc6
IC
2899 return that
2900}
3af2954a 2901
ab78acc6
IC
2902// Duplicate of fromArray() to keep fromArray() monomorphic.
2903function fromTypedArray (that, array) {
2904 var length = checked(array.length) | 0
2905 that = allocate(that, length)
2906 // Truncating the elements is probably not what people expect from typed
2907 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2908 // of the old Buffer constructor.
2909 for (var i = 0; i < length; i += 1) {
2910 that[i] = array[i] & 255
3af2954a 2911 }
ab78acc6
IC
2912 return that
2913}
3af2954a 2914
ab78acc6
IC
2915function fromArrayBuffer (that, array) {
2916 if (Buffer.TYPED_ARRAY_SUPPORT) {
2917 // Return an augmented `Uint8Array` instance, for best performance
2918 array.byteLength
2919 that = Buffer._augment(new Uint8Array(array))
2920 } else {
2921 // Fallback: Return an object instance of the Buffer class
2922 that = fromTypedArray(that, new Uint8Array(array))
2923 }
2924 return that
2925}
3af2954a 2926
ab78acc6
IC
2927function fromArrayLike (that, array) {
2928 var length = checked(array.length) | 0
2929 that = allocate(that, length)
2930 for (var i = 0; i < length; i += 1) {
2931 that[i] = array[i] & 255
3af2954a 2932 }
ab78acc6
IC
2933 return that
2934}
3af2954a 2935
ab78acc6
IC
2936// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2937// Returns a zero-length buffer for inputs that don't conform to the spec.
2938function fromJsonObject (that, object) {
2939 var array
2940 var length = 0
2941
2942 if (object.type === 'Buffer' && isArray(object.data)) {
2943 array = object.data
2944 length = checked(array.length) | 0
3af2954a 2945 }
ab78acc6 2946 that = allocate(that, length)
3af2954a 2947
ab78acc6
IC
2948 for (var i = 0; i < length; i += 1) {
2949 that[i] = array[i] & 255
3af2954a 2950 }
ab78acc6
IC
2951 return that
2952}
3af2954a 2953
ab78acc6
IC
2954function allocate (that, length) {
2955 if (Buffer.TYPED_ARRAY_SUPPORT) {
2956 // Return an augmented `Uint8Array` instance, for best performance
2957 that = Buffer._augment(new Uint8Array(length))
2958 } else {
2959 // Fallback: Return an object instance of the Buffer class
2960 that.length = length
2961 that._isBuffer = true
2962 }
3af2954a 2963
ab78acc6
IC
2964 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2965 if (fromPool) that.parent = rootParent
3af2954a 2966
ab78acc6
IC
2967 return that
2968}
3af2954a 2969
ab78acc6
IC
2970function checked (length) {
2971 // Note: cannot use `length < kMaxLength` here because that fails when
2972 // length is NaN (which is otherwise coerced to zero.)
2973 if (length >= kMaxLength()) {
2974 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2975 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2976 }
ab78acc6
IC
2977 return length | 0
2978}
3af2954a 2979
ab78acc6
IC
2980function SlowBuffer (subject, encoding) {
2981 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2982
ab78acc6
IC
2983 var buf = new Buffer(subject, encoding)
2984 delete buf.parent
2985 return buf
2986}
3af2954a 2987
ab78acc6
IC
2988Buffer.isBuffer = function isBuffer (b) {
2989 return !!(b != null && b._isBuffer)
2990}
3af2954a 2991
ab78acc6
IC
2992Buffer.compare = function compare (a, b) {
2993 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2994 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2995 }
2996
ab78acc6 2997 if (a === b) return 0
3af2954a 2998
ab78acc6
IC
2999 var x = a.length
3000 var y = b.length
3af2954a 3001
ab78acc6
IC
3002 var i = 0
3003 var len = Math.min(x, y)
3004 while (i < len) {
3005 if (a[i] !== b[i]) break
3af2954a 3006
ab78acc6
IC
3007 ++i
3008 }
3af2954a 3009
ab78acc6
IC
3010 if (i !== len) {
3011 x = a[i]
3012 y = b[i]
3013 }
3af2954a 3014
ab78acc6
IC
3015 if (x < y) return -1
3016 if (y < x) return 1
3017 return 0
3018}
3af2954a 3019
ab78acc6
IC
3020Buffer.isEncoding = function isEncoding (encoding) {
3021 switch (String(encoding).toLowerCase()) {
3022 case 'hex':
3023 case 'utf8':
3024 case 'utf-8':
3025 case 'ascii':
3026 case 'binary':
3027 case 'base64':
3028 case 'raw':
3029 case 'ucs2':
3030 case 'ucs-2':
3031 case 'utf16le':
3032 case 'utf-16le':
3033 return true
3034 default:
3035 return false
3af2954a 3036 }
ab78acc6 3037}
3af2954a 3038
ab78acc6
IC
3039Buffer.concat = function concat (list, length) {
3040 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 3041
ab78acc6
IC
3042 if (list.length === 0) {
3043 return new Buffer(0)
3af2954a
IC
3044 }
3045
ab78acc6
IC
3046 var i
3047 if (length === undefined) {
3048 length = 0
3049 for (i = 0; i < list.length; i++) {
3050 length += list[i].length
3051 }
3af2954a
IC
3052 }
3053
ab78acc6
IC
3054 var buf = new Buffer(length)
3055 var pos = 0
3056 for (i = 0; i < list.length; i++) {
3057 var item = list[i]
3058 item.copy(buf, pos)
3059 pos += item.length
3060 }
3061 return buf
3062}
3af2954a 3063
ab78acc6
IC
3064function byteLength (string, encoding) {
3065 if (typeof string !== 'string') string = '' + string
3066
3067 var len = string.length
3068 if (len === 0) return 0
3069
3070 // Use a for loop to avoid recursion
3071 var loweredCase = false
3072 for (;;) {
3073 switch (encoding) {
3074 case 'ascii':
3075 case 'binary':
3076 // Deprecated
3077 case 'raw':
3078 case 'raws':
3079 return len
3080 case 'utf8':
3081 case 'utf-8':
3082 return utf8ToBytes(string).length
3083 case 'ucs2':
3084 case 'ucs-2':
3085 case 'utf16le':
3086 case 'utf-16le':
3087 return len * 2
3088 case 'hex':
3089 return len >>> 1
3090 case 'base64':
3091 return base64ToBytes(string).length
3092 default:
3093 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3094 encoding = ('' + encoding).toLowerCase()
3095 loweredCase = true
3af2954a 3096 }
3af2954a 3097 }
ab78acc6
IC
3098}
3099Buffer.byteLength = byteLength
3af2954a 3100
ab78acc6
IC
3101// pre-set for values that may exist in the future
3102Buffer.prototype.length = undefined
3103Buffer.prototype.parent = undefined
3af2954a 3104
ab78acc6
IC
3105function slowToString (encoding, start, end) {
3106 var loweredCase = false
3af2954a 3107
ab78acc6
IC
3108 start = start | 0
3109 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3110
ab78acc6
IC
3111 if (!encoding) encoding = 'utf8'
3112 if (start < 0) start = 0
3113 if (end > this.length) end = this.length
3114 if (end <= start) return ''
3af2954a 3115
ab78acc6
IC
3116 while (true) {
3117 switch (encoding) {
3118 case 'hex':
3119 return hexSlice(this, start, end)
3af2954a 3120
ab78acc6
IC
3121 case 'utf8':
3122 case 'utf-8':
3123 return utf8Slice(this, start, end)
3af2954a 3124
ab78acc6
IC
3125 case 'ascii':
3126 return asciiSlice(this, start, end)
3af2954a 3127
ab78acc6
IC
3128 case 'binary':
3129 return binarySlice(this, start, end)
3af2954a 3130
ab78acc6
IC
3131 case 'base64':
3132 return base64Slice(this, start, end)
3af2954a 3133
ab78acc6
IC
3134 case 'ucs2':
3135 case 'ucs-2':
3136 case 'utf16le':
3137 case 'utf-16le':
3138 return utf16leSlice(this, start, end)
3af2954a 3139
ab78acc6
IC
3140 default:
3141 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3142 encoding = (encoding + '').toLowerCase()
3143 loweredCase = true
3144 }
3af2954a 3145 }
ab78acc6 3146}
3af2954a 3147
ab78acc6
IC
3148Buffer.prototype.toString = function toString () {
3149 var length = this.length | 0
3150 if (length === 0) return ''
3151 if (arguments.length === 0) return utf8Slice(this, 0, length)
3152 return slowToString.apply(this, arguments)
3153}
3af2954a 3154
ab78acc6
IC
3155Buffer.prototype.equals = function equals (b) {
3156 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3157 if (this === b) return true
3158 return Buffer.compare(this, b) === 0
3159}
3af2954a 3160
ab78acc6
IC
3161Buffer.prototype.inspect = function inspect () {
3162 var str = ''
3163 var max = exports.INSPECT_MAX_BYTES
3164 if (this.length > 0) {
3165 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3166 if (this.length > max) str += ' ... '
3af2954a 3167 }
ab78acc6
IC
3168 return '<Buffer ' + str + '>'
3169}
3af2954a 3170
ab78acc6
IC
3171Buffer.prototype.compare = function compare (b) {
3172 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3173 if (this === b) return 0
3174 return Buffer.compare(this, b)
3175}
3af2954a 3176
ab78acc6
IC
3177Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3178 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3179 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3180 byteOffset >>= 0
3af2954a 3181
ab78acc6
IC
3182 if (this.length === 0) return -1
3183 if (byteOffset >= this.length) return -1
3af2954a 3184
ab78acc6
IC
3185 // Negative offsets start from the end of the buffer
3186 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3187
ab78acc6
IC
3188 if (typeof val === 'string') {
3189 if (val.length === 0) return -1 // special case: looking for empty string always fails
3190 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3191 }
ab78acc6
IC
3192 if (Buffer.isBuffer(val)) {
3193 return arrayIndexOf(this, val, byteOffset)
3af2954a 3194 }
ab78acc6
IC
3195 if (typeof val === 'number') {
3196 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3197 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3198 }
ab78acc6 3199 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3200 }
3201
ab78acc6
IC
3202 function arrayIndexOf (arr, val, byteOffset) {
3203 var foundIndex = -1
3204 for (var i = 0; byteOffset + i < arr.length; i++) {
3205 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3206 if (foundIndex === -1) foundIndex = i
3207 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3208 } else {
ab78acc6 3209 foundIndex = -1
3af2954a 3210 }
3af2954a 3211 }
ab78acc6
IC
3212 return -1
3213 }
3af2954a 3214
ab78acc6
IC
3215 throw new TypeError('val must be string, number or Buffer')
3216}
3af2954a 3217
ab78acc6
IC
3218// `get` is deprecated
3219Buffer.prototype.get = function get (offset) {
3220 console.log('.get() is deprecated. Access using array indexes instead.')
3221 return this.readUInt8(offset)
3222}
3af2954a 3223
ab78acc6
IC
3224// `set` is deprecated
3225Buffer.prototype.set = function set (v, offset) {
3226 console.log('.set() is deprecated. Access using array indexes instead.')
3227 return this.writeUInt8(v, offset)
3228}
3af2954a 3229
ab78acc6
IC
3230function hexWrite (buf, string, offset, length) {
3231 offset = Number(offset) || 0
3232 var remaining = buf.length - offset
3233 if (!length) {
3234 length = remaining
3235 } else {
3236 length = Number(length)
3237 if (length > remaining) {
3238 length = remaining
3239 }
3240 }
3af2954a 3241
ab78acc6
IC
3242 // must be an even number of digits
3243 var strLen = string.length
3244 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3245
ab78acc6
IC
3246 if (length > strLen / 2) {
3247 length = strLen / 2
3248 }
3249 for (var i = 0; i < length; i++) {
3250 var parsed = parseInt(string.substr(i * 2, 2), 16)
3251 if (isNaN(parsed)) throw new Error('Invalid hex string')
3252 buf[offset + i] = parsed
3af2954a 3253 }
ab78acc6
IC
3254 return i
3255}
3256
3257function utf8Write (buf, string, offset, length) {
3258 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3259}
3af2954a 3260
ab78acc6
IC
3261function asciiWrite (buf, string, offset, length) {
3262 return blitBuffer(asciiToBytes(string), buf, offset, length)
3263}
3af2954a 3264
ab78acc6
IC
3265function binaryWrite (buf, string, offset, length) {
3266 return asciiWrite(buf, string, offset, length)
3267}
3af2954a 3268
ab78acc6
IC
3269function base64Write (buf, string, offset, length) {
3270 return blitBuffer(base64ToBytes(string), buf, offset, length)
3271}
3af2954a 3272
ab78acc6
IC
3273function ucs2Write (buf, string, offset, length) {
3274 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3275}
3af2954a 3276
ab78acc6
IC
3277Buffer.prototype.write = function write (string, offset, length, encoding) {
3278 // Buffer#write(string)
3279 if (offset === undefined) {
3280 encoding = 'utf8'
3281 length = this.length
3282 offset = 0
3283 // Buffer#write(string, encoding)
3284 } else if (length === undefined && typeof offset === 'string') {
3285 encoding = offset
3286 length = this.length
3287 offset = 0
3288 // Buffer#write(string, offset[, length][, encoding])
3289 } else if (isFinite(offset)) {
3290 offset = offset | 0
3291 if (isFinite(length)) {
3292 length = length | 0
3293 if (encoding === undefined) encoding = 'utf8'
3294 } else {
3295 encoding = length
3296 length = undefined
3297 }
3298 // legacy write(string, encoding, offset, length) - remove in v0.13
3299 } else {
3300 var swap = encoding
3301 encoding = offset
3302 offset = length | 0
3303 length = swap
3af2954a
IC
3304 }
3305
ab78acc6
IC
3306 var remaining = this.length - offset
3307 if (length === undefined || length > remaining) length = remaining
3af2954a 3308
ab78acc6
IC
3309 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3310 throw new RangeError('attempt to write outside buffer bounds')
3311 }
3af2954a 3312
ab78acc6 3313 if (!encoding) encoding = 'utf8'
3af2954a 3314
ab78acc6
IC
3315 var loweredCase = false
3316 for (;;) {
3317 switch (encoding) {
3318 case 'hex':
3319 return hexWrite(this, string, offset, length)
ebd8d4e8 3320
ab78acc6
IC
3321 case 'utf8':
3322 case 'utf-8':
3323 return utf8Write(this, string, offset, length)
ebd8d4e8 3324
ab78acc6
IC
3325 case 'ascii':
3326 return asciiWrite(this, string, offset, length)
ebd8d4e8 3327
ab78acc6
IC
3328 case 'binary':
3329 return binaryWrite(this, string, offset, length)
ebd8d4e8 3330
ab78acc6
IC
3331 case 'base64':
3332 // Warning: maxLength not taken into account in base64Write
3333 return base64Write(this, string, offset, length)
ebd8d4e8 3334
ab78acc6
IC
3335 case 'ucs2':
3336 case 'ucs-2':
3337 case 'utf16le':
3338 case 'utf-16le':
3339 return ucs2Write(this, string, offset, length)
ebd8d4e8 3340
ab78acc6
IC
3341 default:
3342 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3343 encoding = ('' + encoding).toLowerCase()
3344 loweredCase = true
3345 }
3346 }
3347}
212b1b46 3348
ab78acc6
IC
3349Buffer.prototype.toJSON = function toJSON () {
3350 return {
3351 type: 'Buffer',
3352 data: Array.prototype.slice.call(this._arr || this, 0)
3353 }
3354}
212b1b46 3355
ab78acc6
IC
3356function base64Slice (buf, start, end) {
3357 if (start === 0 && end === buf.length) {
3358 return base64.fromByteArray(buf)
3359 } else {
3360 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3361 }
ab78acc6
IC
3362}
3363
3364function utf8Slice (buf, start, end) {
3365 end = Math.min(buf.length, end)
3366 var firstByte
3367 var secondByte
3368 var thirdByte
3369 var fourthByte
3370 var bytesPerSequence
3371 var tempCodePoint
3372 var codePoint
3373 var res = []
3374 var i = start
3375
3376 for (; i < end; i += bytesPerSequence) {
3377 firstByte = buf[i]
3378 codePoint = 0xFFFD
3379
3380 if (firstByte > 0xEF) {
3381 bytesPerSequence = 4
3382 } else if (firstByte > 0xDF) {
3383 bytesPerSequence = 3
3384 } else if (firstByte > 0xBF) {
3385 bytesPerSequence = 2
3386 } else {
3387 bytesPerSequence = 1
3388 }
212b1b46 3389
ab78acc6
IC
3390 if (i + bytesPerSequence <= end) {
3391 switch (bytesPerSequence) {
3392 case 1:
3393 if (firstByte < 0x80) {
3394 codePoint = firstByte
3395 }
3396 break
3397 case 2:
3398 secondByte = buf[i + 1]
3399 if ((secondByte & 0xC0) === 0x80) {
3400 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3401 if (tempCodePoint > 0x7F) {
3402 codePoint = tempCodePoint
3403 }
3404 }
3405 break
3406 case 3:
3407 secondByte = buf[i + 1]
3408 thirdByte = buf[i + 2]
3409 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3410 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3411 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3412 codePoint = tempCodePoint
3413 }
3414 }
3415 break
3416 case 4:
3417 secondByte = buf[i + 1]
3418 thirdByte = buf[i + 2]
3419 fourthByte = buf[i + 3]
3420 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3421 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3422 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3423 codePoint = tempCodePoint
3424 }
3425 }
3426 }
3427 }
212b1b46 3428
ab78acc6
IC
3429 if (codePoint === 0xFFFD) {
3430 // we generated an invalid codePoint so make sure to only advance by 1 byte
3431 bytesPerSequence = 1
3432 } else if (codePoint > 0xFFFF) {
3433 // encode to utf16 (surrogate pair dance)
3434 codePoint -= 0x10000
3435 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3436 codePoint = 0xDC00 | codePoint & 0x3FF
3437 }
212b1b46 3438
ab78acc6 3439 res.push(codePoint)
3af2954a 3440 }
212b1b46 3441
ab78acc6
IC
3442 return String.fromCharCode.apply(String, res)
3443}
212b1b46 3444
ab78acc6
IC
3445function asciiSlice (buf, start, end) {
3446 var ret = ''
3447 end = Math.min(buf.length, end)
3448
3449 for (var i = start; i < end; i++) {
3450 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3451 }
ab78acc6
IC
3452 return ret
3453}
212b1b46 3454
ab78acc6
IC
3455function binarySlice (buf, start, end) {
3456 var ret = ''
3457 end = Math.min(buf.length, end)
212b1b46 3458
ab78acc6
IC
3459 for (var i = start; i < end; i++) {
3460 ret += String.fromCharCode(buf[i])
3461 }
3462 return ret
3463}
212b1b46 3464
ab78acc6
IC
3465function hexSlice (buf, start, end) {
3466 var len = buf.length
212b1b46 3467
ab78acc6
IC
3468 if (!start || start < 0) start = 0
3469 if (!end || end < 0 || end > len) end = len
212b1b46 3470
ab78acc6
IC
3471 var out = ''
3472 for (var i = start; i < end; i++) {
3473 out += toHex(buf[i])
3474 }
3475 return out
3476}
212b1b46 3477
ab78acc6
IC
3478function utf16leSlice (buf, start, end) {
3479 var bytes = buf.slice(start, end)
3480 var res = ''
3481 for (var i = 0; i < bytes.length; i += 2) {
3482 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3483 }
3484 return res
3485}
212b1b46 3486
ab78acc6
IC
3487Buffer.prototype.slice = function slice (start, end) {
3488 var len = this.length
3489 start = ~~start
3490 end = end === undefined ? len : ~~end
212b1b46 3491
ab78acc6
IC
3492 if (start < 0) {
3493 start += len
3494 if (start < 0) start = 0
3495 } else if (start > len) {
3496 start = len
3497 }
212b1b46 3498
ab78acc6
IC
3499 if (end < 0) {
3500 end += len
3501 if (end < 0) end = 0
3502 } else if (end > len) {
3503 end = len
3504 }
212b1b46 3505
ab78acc6 3506 if (end < start) end = start
212b1b46 3507
ab78acc6
IC
3508 var newBuf
3509 if (Buffer.TYPED_ARRAY_SUPPORT) {
3510 newBuf = Buffer._augment(this.subarray(start, end))
3511 } else {
3512 var sliceLen = end - start
3513 newBuf = new Buffer(sliceLen, undefined)
3514 for (var i = 0; i < sliceLen; i++) {
3515 newBuf[i] = this[i + start]
3af2954a
IC
3516 }
3517 }
212b1b46 3518
ab78acc6 3519 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3520
ab78acc6
IC
3521 return newBuf
3522}
ebd8d4e8 3523
ab78acc6
IC
3524/*
3525 * Need to make sure that buffer isn't trying to write out of bounds.
3526 */
3527function checkOffset (offset, ext, length) {
3528 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3529 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3530}
ebd8d4e8 3531
ab78acc6
IC
3532Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3533 offset = offset | 0
3534 byteLength = byteLength | 0
3535 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3536
ab78acc6
IC
3537 var val = this[offset]
3538 var mul = 1
3539 var i = 0
3540 while (++i < byteLength && (mul *= 0x100)) {
3541 val += this[offset + i] * mul
3542 }
3af2954a 3543
ab78acc6
IC
3544 return val
3545}
3af2954a 3546
ab78acc6
IC
3547Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3548 offset = offset | 0
3549 byteLength = byteLength | 0
3550 if (!noAssert) {
3551 checkOffset(offset, byteLength, this.length)
3552 }
3af2954a 3553
ab78acc6
IC
3554 var val = this[offset + --byteLength]
3555 var mul = 1
3556 while (byteLength > 0 && (mul *= 0x100)) {
3557 val += this[offset + --byteLength] * mul
3af2954a
IC
3558 }
3559
ab78acc6
IC
3560 return val
3561}
3af2954a 3562
ab78acc6
IC
3563Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3564 if (!noAssert) checkOffset(offset, 1, this.length)
3565 return this[offset]
3566}
3af2954a 3567
ab78acc6
IC
3568Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3569 if (!noAssert) checkOffset(offset, 2, this.length)
3570 return this[offset] | (this[offset + 1] << 8)
3571}
3af2954a 3572
ab78acc6
IC
3573Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3574 if (!noAssert) checkOffset(offset, 2, this.length)
3575 return (this[offset] << 8) | this[offset + 1]
3576}
ebd8d4e8 3577
ab78acc6
IC
3578Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3579 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3580
ab78acc6
IC
3581 return ((this[offset]) |
3582 (this[offset + 1] << 8) |
3583 (this[offset + 2] << 16)) +
3584 (this[offset + 3] * 0x1000000)
3585}
3af2954a 3586
ab78acc6
IC
3587Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3588 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3589
ab78acc6
IC
3590 return (this[offset] * 0x1000000) +
3591 ((this[offset + 1] << 16) |
3592 (this[offset + 2] << 8) |
3593 this[offset + 3])
3594}
ebd8d4e8 3595
ab78acc6
IC
3596Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3597 offset = offset | 0
3598 byteLength = byteLength | 0
3599 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3600
ab78acc6
IC
3601 var val = this[offset]
3602 var mul = 1
3603 var i = 0
3604 while (++i < byteLength && (mul *= 0x100)) {
3605 val += this[offset + i] * mul
ebd8d4e8 3606 }
ab78acc6 3607 mul *= 0x80
ebd8d4e8 3608
ab78acc6
IC
3609 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3610
3611 return val
ebd8d4e8
IC
3612}
3613
ab78acc6
IC
3614Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3615 offset = offset | 0
3616 byteLength = byteLength | 0
3617 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3618
ab78acc6
IC
3619 var i = byteLength
3620 var mul = 1
3621 var val = this[offset + --i]
3622 while (i > 0 && (mul *= 0x100)) {
3623 val += this[offset + --i] * mul
3624 }
3625 mul *= 0x80
ebd8d4e8 3626
ab78acc6 3627 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3628
ab78acc6
IC
3629 return val
3630}
ebd8d4e8 3631
ab78acc6
IC
3632Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3633 if (!noAssert) checkOffset(offset, 1, this.length)
3634 if (!(this[offset] & 0x80)) return (this[offset])
3635 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3636}
ab78acc6
IC
3637
3638Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3639 if (!noAssert) checkOffset(offset, 2, this.length)
3640 var val = this[offset] | (this[offset + 1] << 8)
3641 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3642}
ab78acc6
IC
3643
3644Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3645 if (!noAssert) checkOffset(offset, 2, this.length)
3646 var val = this[offset + 1] | (this[offset] << 8)
3647 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3648}
3649
ab78acc6
IC
3650Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3651 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3652
ab78acc6
IC
3653 return (this[offset]) |
3654 (this[offset + 1] << 8) |
3655 (this[offset + 2] << 16) |
3656 (this[offset + 3] << 24)
ebd8d4e8 3657}
ebd8d4e8 3658
ab78acc6
IC
3659Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3660 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3661
ab78acc6
IC
3662 return (this[offset] << 24) |
3663 (this[offset + 1] << 16) |
3664 (this[offset + 2] << 8) |
3665 (this[offset + 3])
ebd8d4e8
IC
3666}
3667
ab78acc6
IC
3668Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3669 if (!noAssert) checkOffset(offset, 4, this.length)
3670 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3671}
3672
ab78acc6
IC
3673Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3674 if (!noAssert) checkOffset(offset, 4, this.length)
3675 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3676}
3677
ab78acc6
IC
3678Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3679 if (!noAssert) checkOffset(offset, 8, this.length)
3680 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3681}
3682
ab78acc6
IC
3683Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3684 if (!noAssert) checkOffset(offset, 8, this.length)
3685 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3686}
3687
ab78acc6
IC
3688function checkInt (buf, value, offset, ext, max, min) {
3689 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3690 if (value > max || value < min) throw new RangeError('value is out of bounds')
3691 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3692}
3693
ab78acc6
IC
3694Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3695 value = +value
3696 offset = offset | 0
3697 byteLength = byteLength | 0
3698 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3699
ab78acc6
IC
3700 var mul = 1
3701 var i = 0
3702 this[offset] = value & 0xFF
3703 while (++i < byteLength && (mul *= 0x100)) {
3704 this[offset + i] = (value / mul) & 0xFF
3705 }
ebd8d4e8 3706
ab78acc6 3707 return offset + byteLength
ebd8d4e8
IC
3708}
3709
ab78acc6
IC
3710Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3711 value = +value
3712 offset = offset | 0
3713 byteLength = byteLength | 0
3714 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3715
ab78acc6
IC
3716 var i = byteLength - 1
3717 var mul = 1
3718 this[offset + i] = value & 0xFF
3719 while (--i >= 0 && (mul *= 0x100)) {
3720 this[offset + i] = (value / mul) & 0xFF
3721 }
ebd8d4e8 3722
ab78acc6 3723 return offset + byteLength
ebd8d4e8
IC
3724}
3725
ab78acc6
IC
3726Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3727 value = +value
3728 offset = offset | 0
3729 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3730 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3731 this[offset] = value
3732 return offset + 1
ebd8d4e8
IC
3733}
3734
ab78acc6
IC
3735function objectWriteUInt16 (buf, value, offset, littleEndian) {
3736 if (value < 0) value = 0xffff + value + 1
3737 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3738 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3739 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3740 }
ebd8d4e8
IC
3741}
3742
ab78acc6
IC
3743Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3744 value = +value
3745 offset = offset | 0
3746 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3747 if (Buffer.TYPED_ARRAY_SUPPORT) {
3748 this[offset] = value
3749 this[offset + 1] = (value >>> 8)
3750 } else {
3751 objectWriteUInt16(this, value, offset, true)
3752 }
3753 return offset + 2
ebd8d4e8
IC
3754}
3755
ab78acc6
IC
3756Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3757 value = +value
3758 offset = offset | 0
3759 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3760 if (Buffer.TYPED_ARRAY_SUPPORT) {
3761 this[offset] = (value >>> 8)
3762 this[offset + 1] = value
3763 } else {
3764 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3765 }
ab78acc6 3766 return offset + 2
ebd8d4e8
IC
3767}
3768
ab78acc6
IC
3769function objectWriteUInt32 (buf, value, offset, littleEndian) {
3770 if (value < 0) value = 0xffffffff + value + 1
3771 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3772 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3773 }
ebd8d4e8
IC
3774}
3775
ab78acc6
IC
3776Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3777 value = +value
3778 offset = offset | 0
3779 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3780 if (Buffer.TYPED_ARRAY_SUPPORT) {
3781 this[offset + 3] = (value >>> 24)
3782 this[offset + 2] = (value >>> 16)
3783 this[offset + 1] = (value >>> 8)
3784 this[offset] = value
3785 } else {
3786 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3787 }
ab78acc6 3788 return offset + 4
ebd8d4e8
IC
3789}
3790
ab78acc6
IC
3791Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3792 value = +value
3793 offset = offset | 0
3794 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3795 if (Buffer.TYPED_ARRAY_SUPPORT) {
3796 this[offset] = (value >>> 24)
3797 this[offset + 1] = (value >>> 16)
3798 this[offset + 2] = (value >>> 8)
3799 this[offset + 3] = value
3800 } else {
3801 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3802 }
ab78acc6
IC
3803 return offset + 4
3804}
3805
3806Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3807 value = +value
3808 offset = offset | 0
3809 if (!noAssert) {
3810 var limit = Math.pow(2, 8 * byteLength - 1)
3811
3812 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3813 }
ab78acc6
IC
3814
3815 var i = 0
3816 var mul = 1
3817 var sub = value < 0 ? 1 : 0
3818 this[offset] = value & 0xFF
3819 while (++i < byteLength && (mul *= 0x100)) {
3820 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3821 }
ebd8d4e8 3822
ab78acc6 3823 return offset + byteLength
ebd8d4e8
IC
3824}
3825
ab78acc6
IC
3826Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3827 value = +value
3828 offset = offset | 0
3829 if (!noAssert) {
3830 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3831
ab78acc6
IC
3832 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3833 }
ebd8d4e8 3834
ab78acc6
IC
3835 var i = byteLength - 1
3836 var mul = 1
3837 var sub = value < 0 ? 1 : 0
3838 this[offset + i] = value & 0xFF
3839 while (--i >= 0 && (mul *= 0x100)) {
3840 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3841 }
3842
3843 return offset + byteLength
ebd8d4e8
IC
3844}
3845
ab78acc6
IC
3846Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3847 value = +value
3848 offset = offset | 0
3849 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3850 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3851 if (value < 0) value = 0xff + value + 1
3852 this[offset] = value
3853 return offset + 1
ebd8d4e8
IC
3854}
3855
ab78acc6
IC
3856Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3857 value = +value
3858 offset = offset | 0
3859 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3860 if (Buffer.TYPED_ARRAY_SUPPORT) {
3861 this[offset] = value
3862 this[offset + 1] = (value >>> 8)
3863 } else {
3864 objectWriteUInt16(this, value, offset, true)
3865 }
3866 return offset + 2
ebd8d4e8
IC
3867}
3868
ab78acc6
IC
3869Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3870 value = +value
3871 offset = offset | 0
3872 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3873 if (Buffer.TYPED_ARRAY_SUPPORT) {
3874 this[offset] = (value >>> 8)
3875 this[offset + 1] = value
3876 } else {
3877 objectWriteUInt16(this, value, offset, false)
3878 }
3879 return offset + 2
ebd8d4e8
IC
3880}
3881
ab78acc6
IC
3882Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3883 value = +value
3884 offset = offset | 0
3885 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3886 if (Buffer.TYPED_ARRAY_SUPPORT) {
3887 this[offset] = value
3888 this[offset + 1] = (value >>> 8)
3889 this[offset + 2] = (value >>> 16)
3890 this[offset + 3] = (value >>> 24)
3891 } else {
3892 objectWriteUInt32(this, value, offset, true)
3893 }
3894 return offset + 4
3895}
3896
3897Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3898 value = +value
3899 offset = offset | 0
3900 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3901 if (value < 0) value = 0xffffffff + value + 1
3902 if (Buffer.TYPED_ARRAY_SUPPORT) {
3903 this[offset] = (value >>> 24)
3904 this[offset + 1] = (value >>> 16)
3905 this[offset + 2] = (value >>> 8)
3906 this[offset + 3] = value
3907 } else {
3908 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3909 }
ab78acc6 3910 return offset + 4
ebd8d4e8
IC
3911}
3912
ab78acc6
IC
3913function checkIEEE754 (buf, value, offset, ext, max, min) {
3914 if (value > max || value < min) throw new RangeError('value is out of bounds')
3915 if (offset + ext > buf.length) throw new RangeError('index out of range')
3916 if (offset < 0) throw new RangeError('index out of range')
3917}
ebd8d4e8 3918
ab78acc6
IC
3919function writeFloat (buf, value, offset, littleEndian, noAssert) {
3920 if (!noAssert) {
3921 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3922 }
3923 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3924 return offset + 4
3925}
ebd8d4e8 3926
ab78acc6
IC
3927Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3928 return writeFloat(this, value, offset, true, noAssert)
3929}
ebd8d4e8 3930
ab78acc6
IC
3931Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3932 return writeFloat(this, value, offset, false, noAssert)
3933}
ebd8d4e8 3934
ab78acc6
IC
3935function writeDouble (buf, value, offset, littleEndian, noAssert) {
3936 if (!noAssert) {
3937 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3938 }
ab78acc6
IC
3939 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3940 return offset + 8
ebd8d4e8
IC
3941}
3942
ab78acc6
IC
3943Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3944 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3945}
3946
ab78acc6
IC
3947Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3948 return writeDouble(this, value, offset, false, noAssert)
3949}
ebd8d4e8 3950
ab78acc6
IC
3951// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3952Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3953 if (!start) start = 0
3954 if (!end && end !== 0) end = this.length
3955 if (targetStart >= target.length) targetStart = target.length
3956 if (!targetStart) targetStart = 0
3957 if (end > 0 && end < start) end = start
3958
3959 // Copy 0 bytes; we're done
3960 if (end === start) return 0
3961 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3962
ab78acc6
IC
3963 // Fatal error conditions
3964 if (targetStart < 0) {
3965 throw new RangeError('targetStart out of bounds')
3966 }
3967 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3968 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3969
ab78acc6
IC
3970 // Are we oob?
3971 if (end > this.length) end = this.length
3972 if (target.length - targetStart < end - start) {
3973 end = target.length - targetStart + start
3974 }
ebd8d4e8 3975
ab78acc6
IC
3976 var len = end - start
3977 var i
ebd8d4e8 3978
ab78acc6
IC
3979 if (this === target && start < targetStart && targetStart < end) {
3980 // descending copy from end
3981 for (i = len - 1; i >= 0; i--) {
3982 target[i + targetStart] = this[i + start]
3983 }
3984 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3985 // ascending copy from start
3986 for (i = 0; i < len; i++) {
3987 target[i + targetStart] = this[i + start]
3988 }
3989 } else {
3990 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3991 }
ebd8d4e8 3992
ab78acc6
IC
3993 return len
3994}
ebd8d4e8 3995
ab78acc6
IC
3996// fill(value, start=0, end=buffer.length)
3997Buffer.prototype.fill = function fill (value, start, end) {
3998 if (!value) value = 0
3999 if (!start) start = 0
4000 if (!end) end = this.length
ebd8d4e8 4001
ab78acc6 4002 if (end < start) throw new RangeError('end < start')
ebd8d4e8 4003
ab78acc6
IC
4004 // Fill 0 bytes; we're done
4005 if (end === start) return
4006 if (this.length === 0) return
ebd8d4e8 4007
ab78acc6
IC
4008 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4009 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 4010
ab78acc6
IC
4011 var i
4012 if (typeof value === 'number') {
4013 for (i = start; i < end; i++) {
4014 this[i] = value
ebd8d4e8 4015 }
ab78acc6
IC
4016 } else {
4017 var bytes = utf8ToBytes(value.toString())
4018 var len = bytes.length
4019 for (i = start; i < end; i++) {
4020 this[i] = bytes[i % len]
ebd8d4e8
IC
4021 }
4022 }
ebd8d4e8 4023
ab78acc6 4024 return this
ebd8d4e8
IC
4025}
4026
ab78acc6
IC
4027/**
4028 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4029 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4030 */
4031Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4032 if (typeof Uint8Array !== 'undefined') {
4033 if (Buffer.TYPED_ARRAY_SUPPORT) {
4034 return (new Buffer(this)).buffer
4035 } else {
4036 var buf = new Uint8Array(this.length)
4037 for (var i = 0, len = buf.length; i < len; i += 1) {
4038 buf[i] = this[i]
ebd8d4e8 4039 }
ab78acc6 4040 return buf.buffer
ebd8d4e8 4041 }
ab78acc6
IC
4042 } else {
4043 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 4044 }
ebd8d4e8
IC
4045}
4046
ab78acc6
IC
4047// HELPER FUNCTIONS
4048// ================
ebd8d4e8 4049
ab78acc6 4050var BP = Buffer.prototype
ebd8d4e8 4051
ab78acc6
IC
4052/**
4053 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4054 */
4055Buffer._augment = function _augment (arr) {
4056 arr.constructor = Buffer
4057 arr._isBuffer = true
ebd8d4e8 4058
ab78acc6
IC
4059 // save reference to original Uint8Array set method before overwriting
4060 arr._set = arr.set
ebd8d4e8 4061
ab78acc6
IC
4062 // deprecated
4063 arr.get = BP.get
4064 arr.set = BP.set
ebd8d4e8 4065
ab78acc6
IC
4066 arr.write = BP.write
4067 arr.toString = BP.toString
4068 arr.toLocaleString = BP.toString
4069 arr.toJSON = BP.toJSON
4070 arr.equals = BP.equals
4071 arr.compare = BP.compare
4072 arr.indexOf = BP.indexOf
4073 arr.copy = BP.copy
4074 arr.slice = BP.slice
4075 arr.readUIntLE = BP.readUIntLE
4076 arr.readUIntBE = BP.readUIntBE
4077 arr.readUInt8 = BP.readUInt8
4078 arr.readUInt16LE = BP.readUInt16LE
4079 arr.readUInt16BE = BP.readUInt16BE
4080 arr.readUInt32LE = BP.readUInt32LE
4081 arr.readUInt32BE = BP.readUInt32BE
4082 arr.readIntLE = BP.readIntLE
4083 arr.readIntBE = BP.readIntBE
4084 arr.readInt8 = BP.readInt8
4085 arr.readInt16LE = BP.readInt16LE
4086 arr.readInt16BE = BP.readInt16BE
4087 arr.readInt32LE = BP.readInt32LE
4088 arr.readInt32BE = BP.readInt32BE
4089 arr.readFloatLE = BP.readFloatLE
4090 arr.readFloatBE = BP.readFloatBE
4091 arr.readDoubleLE = BP.readDoubleLE
4092 arr.readDoubleBE = BP.readDoubleBE
4093 arr.writeUInt8 = BP.writeUInt8
4094 arr.writeUIntLE = BP.writeUIntLE
4095 arr.writeUIntBE = BP.writeUIntBE
4096 arr.writeUInt16LE = BP.writeUInt16LE
4097 arr.writeUInt16BE = BP.writeUInt16BE
4098 arr.writeUInt32LE = BP.writeUInt32LE
4099 arr.writeUInt32BE = BP.writeUInt32BE
4100 arr.writeIntLE = BP.writeIntLE
4101 arr.writeIntBE = BP.writeIntBE
4102 arr.writeInt8 = BP.writeInt8
4103 arr.writeInt16LE = BP.writeInt16LE
4104 arr.writeInt16BE = BP.writeInt16BE
4105 arr.writeInt32LE = BP.writeInt32LE
4106 arr.writeInt32BE = BP.writeInt32BE
4107 arr.writeFloatLE = BP.writeFloatLE
4108 arr.writeFloatBE = BP.writeFloatBE
4109 arr.writeDoubleLE = BP.writeDoubleLE
4110 arr.writeDoubleBE = BP.writeDoubleBE
4111 arr.fill = BP.fill
4112 arr.inspect = BP.inspect
4113 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4114
ab78acc6 4115 return arr
ebd8d4e8
IC
4116}
4117
ab78acc6 4118var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4119
ab78acc6
IC
4120function base64clean (str) {
4121 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4122 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4123 // Node converts strings with length < 2 to ''
4124 if (str.length < 2) return ''
4125 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4126 while (str.length % 4 !== 0) {
4127 str = str + '='
4128 }
4129 return str
ebd8d4e8
IC
4130}
4131
ab78acc6
IC
4132function stringtrim (str) {
4133 if (str.trim) return str.trim()
4134 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4135}
4136
ab78acc6
IC
4137function toHex (n) {
4138 if (n < 16) return '0' + n.toString(16)
4139 return n.toString(16)
ebd8d4e8
IC
4140}
4141
ab78acc6
IC
4142function utf8ToBytes (string, units) {
4143 units = units || Infinity
4144 var codePoint
4145 var length = string.length
4146 var leadSurrogate = null
4147 var bytes = []
ebd8d4e8 4148
ab78acc6
IC
4149 for (var i = 0; i < length; i++) {
4150 codePoint = string.charCodeAt(i)
ebd8d4e8 4151
ab78acc6
IC
4152 // is surrogate component
4153 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4154 // last char was a lead
4155 if (!leadSurrogate) {
4156 // no lead yet
4157 if (codePoint > 0xDBFF) {
4158 // unexpected trail
4159 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4160 continue
ebd8d4e8 4161
ab78acc6
IC
4162 } else if (i + 1 === length) {
4163 // unpaired lead
4164 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4165 continue
4166 }
ebd8d4e8 4167
ab78acc6
IC
4168 // valid lead
4169 leadSurrogate = codePoint
ebd8d4e8 4170
ab78acc6
IC
4171 continue
4172 }
ebd8d4e8 4173
ab78acc6
IC
4174 // 2 leads in a row
4175 if (codePoint < 0xDC00) {
4176 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4177 leadSurrogate = codePoint
4178 continue
4179 }
ebd8d4e8 4180
ab78acc6
IC
4181 // valid surrogate pair
4182 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4183
4184 } else if (leadSurrogate) {
4185 // valid bmp char, but last char was a lead
4186 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4187 }
4188
4189 leadSurrogate = null
4190
4191 // encode utf8
4192 if (codePoint < 0x80) {
4193 if ((units -= 1) < 0) break
4194 bytes.push(codePoint)
4195 } else if (codePoint < 0x800) {
4196 if ((units -= 2) < 0) break
4197 bytes.push(
4198 codePoint >> 0x6 | 0xC0,
4199 codePoint & 0x3F | 0x80
4200 )
4201 } else if (codePoint < 0x10000) {
4202 if ((units -= 3) < 0) break
4203 bytes.push(
4204 codePoint >> 0xC | 0xE0,
4205 codePoint >> 0x6 & 0x3F | 0x80,
4206 codePoint & 0x3F | 0x80
4207 )
4208 } else if (codePoint < 0x110000) {
4209 if ((units -= 4) < 0) break
4210 bytes.push(
4211 codePoint >> 0x12 | 0xF0,
4212 codePoint >> 0xC & 0x3F | 0x80,
4213 codePoint >> 0x6 & 0x3F | 0x80,
4214 codePoint & 0x3F | 0x80
4215 )
4216 } else {
4217 throw new Error('Invalid code point')
ebd8d4e8 4218 }
ebd8d4e8 4219 }
ab78acc6
IC
4220
4221 return bytes
4222}
4223
4224function asciiToBytes (str) {
4225 var byteArray = []
4226 for (var i = 0; i < str.length; i++) {
4227 // Node's code seems to be doing this and not & 0x7F..
4228 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4229 }
ab78acc6 4230 return byteArray
ebd8d4e8
IC
4231}
4232
ab78acc6
IC
4233function utf16leToBytes (str, units) {
4234 var c, hi, lo
4235 var byteArray = []
4236 for (var i = 0; i < str.length; i++) {
4237 if ((units -= 2) < 0) break
ebd8d4e8 4238
ab78acc6
IC
4239 c = str.charCodeAt(i)
4240 hi = c >> 8
4241 lo = c % 256
4242 byteArray.push(lo)
4243 byteArray.push(hi)
4244 }
ebd8d4e8 4245
ab78acc6
IC
4246 return byteArray
4247}
ebd8d4e8 4248
ab78acc6
IC
4249function base64ToBytes (str) {
4250 return base64.toByteArray(base64clean(str))
4251}
ebd8d4e8 4252
ab78acc6
IC
4253function blitBuffer (src, dst, offset, length) {
4254 for (var i = 0; i < length; i++) {
4255 if ((i + offset >= dst.length) || (i >= src.length)) break
4256 dst[i + offset] = src[i]
4257 }
4258 return i
4259}
4260
4261},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4262var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4263
4264;(function (exports) {
4265 'use strict';
4266
4267 var Arr = (typeof Uint8Array !== 'undefined')
4268 ? Uint8Array
4269 : Array
ebd8d4e8 4270
ab78acc6
IC
4271 var PLUS = '+'.charCodeAt(0)
4272 var SLASH = '/'.charCodeAt(0)
4273 var NUMBER = '0'.charCodeAt(0)
4274 var LOWER = 'a'.charCodeAt(0)
4275 var UPPER = 'A'.charCodeAt(0)
4276 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4277 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4278
ab78acc6
IC
4279 function decode (elt) {
4280 var code = elt.charCodeAt(0)
4281 if (code === PLUS ||
4282 code === PLUS_URL_SAFE)
4283 return 62 // '+'
4284 if (code === SLASH ||
4285 code === SLASH_URL_SAFE)
4286 return 63 // '/'
4287 if (code < NUMBER)
4288 return -1 //no match
4289 if (code < NUMBER + 10)
4290 return code - NUMBER + 26 + 26
4291 if (code < UPPER + 26)
4292 return code - UPPER
4293 if (code < LOWER + 26)
4294 return code - LOWER + 26
4295 }
ebd8d4e8 4296
ab78acc6
IC
4297 function b64ToByteArray (b64) {
4298 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4299
ab78acc6
IC
4300 if (b64.length % 4 > 0) {
4301 throw new Error('Invalid string. Length must be a multiple of 4')
4302 }
ebd8d4e8 4303
ab78acc6
IC
4304 // the number of equal signs (place holders)
4305 // if there are two placeholders, than the two characters before it
4306 // represent one byte
4307 // if there is only one, then the three characters before it represent 2 bytes
4308 // this is just a cheap hack to not do indexOf twice
4309 var len = b64.length
4310 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4311
ab78acc6
IC
4312 // base64 is 4/3 + up to two characters of the original data
4313 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4314
ab78acc6
IC
4315 // if there are placeholders, only get up to the last complete 4 chars
4316 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4317
ab78acc6 4318 var L = 0
ebd8d4e8 4319
ab78acc6
IC
4320 function push (v) {
4321 arr[L++] = v
4322 }
ebd8d4e8 4323
ab78acc6
IC
4324 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4325 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4326 push((tmp & 0xFF0000) >> 16)
4327 push((tmp & 0xFF00) >> 8)
4328 push(tmp & 0xFF)
4329 }
ebd8d4e8 4330
ab78acc6
IC
4331 if (placeHolders === 2) {
4332 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4333 push(tmp & 0xFF)
4334 } else if (placeHolders === 1) {
4335 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4336 push((tmp >> 8) & 0xFF)
4337 push(tmp & 0xFF)
4338 }
ebd8d4e8 4339
ab78acc6
IC
4340 return arr
4341 }
ebd8d4e8 4342
ab78acc6
IC
4343 function uint8ToBase64 (uint8) {
4344 var i,
4345 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4346 output = "",
4347 temp, length
ebd8d4e8 4348
ab78acc6
IC
4349 function encode (num) {
4350 return lookup.charAt(num)
4351 }
ebd8d4e8 4352
ab78acc6
IC
4353 function tripletToBase64 (num) {
4354 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4355 }
ebd8d4e8 4356
ab78acc6
IC
4357 // go through the array every three bytes, we'll deal with trailing stuff later
4358 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4359 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4360 output += tripletToBase64(temp)
4361 }
ebd8d4e8 4362
ab78acc6
IC
4363 // pad the end with zeros, but make sure to not forget the extra bytes
4364 switch (extraBytes) {
4365 case 1:
4366 temp = uint8[uint8.length - 1]
4367 output += encode(temp >> 2)
4368 output += encode((temp << 4) & 0x3F)
4369 output += '=='
4370 break
4371 case 2:
4372 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4373 output += encode(temp >> 10)
4374 output += encode((temp >> 4) & 0x3F)
4375 output += encode((temp << 2) & 0x3F)
4376 output += '='
4377 break
4378 }
ebd8d4e8 4379
ab78acc6
IC
4380 return output
4381 }
ebd8d4e8 4382
ab78acc6
IC
4383 exports.toByteArray = b64ToByteArray
4384 exports.fromByteArray = uint8ToBase64
4385}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4386
ab78acc6
IC
4387},{}],9:[function(require,module,exports){
4388exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4389 var e, m
4390 var eLen = nBytes * 8 - mLen - 1
4391 var eMax = (1 << eLen) - 1
4392 var eBias = eMax >> 1
4393 var nBits = -7
4394 var i = isLE ? (nBytes - 1) : 0
4395 var d = isLE ? -1 : 1
4396 var s = buffer[offset + i]
4397
4398 i += d
4399
4400 e = s & ((1 << (-nBits)) - 1)
4401 s >>= (-nBits)
4402 nBits += eLen
4403 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4404
4405 m = e & ((1 << (-nBits)) - 1)
4406 e >>= (-nBits)
4407 nBits += mLen
4408 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4409
ab78acc6
IC
4410 if (e === 0) {
4411 e = 1 - eBias
4412 } else if (e === eMax) {
4413 return m ? NaN : ((s ? -1 : 1) * Infinity)
4414 } else {
4415 m = m + Math.pow(2, mLen)
4416 e = e - eBias
ebd8d4e8 4417 }
ab78acc6 4418 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4419}
4420
ab78acc6
IC
4421exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4422 var e, m, c
4423 var eLen = nBytes * 8 - mLen - 1
4424 var eMax = (1 << eLen) - 1
4425 var eBias = eMax >> 1
4426 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4427 var i = isLE ? 0 : (nBytes - 1)
4428 var d = isLE ? 1 : -1
4429 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4430
ab78acc6 4431 value = Math.abs(value)
ebd8d4e8 4432
ab78acc6
IC
4433 if (isNaN(value) || value === Infinity) {
4434 m = isNaN(value) ? 1 : 0
4435 e = eMax
4436 } else {
4437 e = Math.floor(Math.log(value) / Math.LN2)
4438 if (value * (c = Math.pow(2, -e)) < 1) {
4439 e--
4440 c *= 2
ebd8d4e8 4441 }
ab78acc6
IC
4442 if (e + eBias >= 1) {
4443 value += rt / c
4444 } else {
4445 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4446 }
ab78acc6
IC
4447 if (value * c >= 2) {
4448 e++
4449 c /= 2
ebd8d4e8 4450 }
ab78acc6
IC
4451
4452 if (e + eBias >= eMax) {
4453 m = 0
4454 e = eMax
4455 } else if (e + eBias >= 1) {
4456 m = (value * c - 1) * Math.pow(2, mLen)
4457 e = e + eBias
4458 } else {
4459 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4460 e = 0
ebd8d4e8
IC
4461 }
4462 }
ebd8d4e8 4463
ab78acc6 4464 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4465
ab78acc6
IC
4466 e = (e << mLen) | m
4467 eLen += mLen
4468 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4469
ab78acc6
IC
4470 buffer[offset + i - d] |= s * 128
4471}
ebd8d4e8 4472
ab78acc6 4473},{}],10:[function(require,module,exports){
ebd8d4e8 4474
ab78acc6
IC
4475/**
4476 * isArray
4477 */
ebd8d4e8 4478
ab78acc6 4479var isArray = Array.isArray;
ebd8d4e8
IC
4480
4481/**
ab78acc6 4482 * toString
ebd8d4e8 4483 */
ebd8d4e8 4484
ab78acc6 4485var str = Object.prototype.toString;
ebd8d4e8
IC
4486
4487/**
ab78acc6
IC
4488 * Whether or not the given `val`
4489 * is an array.
ebd8d4e8 4490 *
ab78acc6
IC
4491 * example:
4492 *
4493 * isArray([]);
4494 * // > true
4495 * isArray(arguments);
4496 * // > false
4497 * isArray('');
4498 * // > false
4499 *
4500 * @param {mixed} val
4501 * @return {bool}
ebd8d4e8 4502 */
ebd8d4e8 4503
ab78acc6
IC
4504module.exports = isArray || function (val) {
4505 return !! val && '[object Array]' == str.call(val);
4506};
4507
4508},{}],11:[function(require,module,exports){
4509// Copyright Joyent, Inc. and other Node contributors.
4510//
4511// Permission is hereby granted, free of charge, to any person obtaining a
4512// copy of this software and associated documentation files (the
4513// "Software"), to deal in the Software without restriction, including
4514// without limitation the rights to use, copy, modify, merge, publish,
4515// distribute, sublicense, and/or sell copies of the Software, and to permit
4516// persons to whom the Software is furnished to do so, subject to the
4517// following conditions:
4518//
4519// The above copyright notice and this permission notice shall be included
4520// in all copies or substantial portions of the Software.
4521//
4522// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4523// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4524// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4525// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4526// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4527// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4528// USE OR OTHER DEALINGS IN THE SOFTWARE.
4529
4530function EventEmitter() {
4531 this._events = this._events || {};
4532 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4533}
ab78acc6 4534module.exports = EventEmitter;
ebd8d4e8 4535
ab78acc6
IC
4536// Backwards-compat with node 0.10.x
4537EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4538
ab78acc6
IC
4539EventEmitter.prototype._events = undefined;
4540EventEmitter.prototype._maxListeners = undefined;
4541
4542// By default EventEmitters will print a warning if more than 10 listeners are
4543// added to it. This is a useful default which helps finding memory leaks.
4544EventEmitter.defaultMaxListeners = 10;
4545
4546// Obviously not all Emitters should be limited to 10. This function allows
4547// that to be increased. Set to zero for unlimited.
4548EventEmitter.prototype.setMaxListeners = function(n) {
4549 if (!isNumber(n) || n < 0 || isNaN(n))
4550 throw TypeError('n must be a positive number');
4551 this._maxListeners = n;
4552 return this;
4553};
4554
4555EventEmitter.prototype.emit = function(type) {
4556 var er, handler, len, args, i, listeners;
4557
4558 if (!this._events)
4559 this._events = {};
4560
4561 // If there is no 'error' event listener then throw.
4562 if (type === 'error') {
4563 if (!this._events.error ||
4564 (isObject(this._events.error) && !this._events.error.length)) {
4565 er = arguments[1];
4566 if (er instanceof Error) {
4567 throw er; // Unhandled 'error' event
4568 }
4569 throw TypeError('Uncaught, unspecified "error" event.');
4570 }
4571 }
4572
4573 handler = this._events[type];
4574
4575 if (isUndefined(handler))
4576 return false;
4577
4578 if (isFunction(handler)) {
4579 switch (arguments.length) {
4580 // fast cases
4581 case 1:
4582 handler.call(this);
4583 break;
4584 case 2:
4585 handler.call(this, arguments[1]);
4586 break;
4587 case 3:
4588 handler.call(this, arguments[1], arguments[2]);
4589 break;
4590 // slower
4591 default:
4592 len = arguments.length;
4593 args = new Array(len - 1);
4594 for (i = 1; i < len; i++)
4595 args[i - 1] = arguments[i];
4596 handler.apply(this, args);
4597 }
4598 } else if (isObject(handler)) {
4599 len = arguments.length;
4600 args = new Array(len - 1);
4601 for (i = 1; i < len; i++)
4602 args[i - 1] = arguments[i];
ebd8d4e8 4603
ab78acc6
IC
4604 listeners = handler.slice();
4605 len = listeners.length;
4606 for (i = 0; i < len; i++)
4607 listeners[i].apply(this, args);
ebd8d4e8
IC
4608 }
4609
ab78acc6
IC
4610 return true;
4611};
ebd8d4e8 4612
ab78acc6
IC
4613EventEmitter.prototype.addListener = function(type, listener) {
4614 var m;
ebd8d4e8 4615
ab78acc6
IC
4616 if (!isFunction(listener))
4617 throw TypeError('listener must be a function');
ebd8d4e8 4618
ab78acc6
IC
4619 if (!this._events)
4620 this._events = {};
ebd8d4e8 4621
ab78acc6
IC
4622 // To avoid recursion in the case that type === "newListener"! Before
4623 // adding it to the listeners, first emit "newListener".
4624 if (this._events.newListener)
4625 this.emit('newListener', type,
4626 isFunction(listener.listener) ?
4627 listener.listener : listener);
ebd8d4e8 4628
ab78acc6
IC
4629 if (!this._events[type])
4630 // Optimize the case of one listener. Don't need the extra array object.
4631 this._events[type] = listener;
4632 else if (isObject(this._events[type]))
4633 // If we've already got an array, just append.
4634 this._events[type].push(listener);
4635 else
4636 // Adding the second element, need to change to array.
4637 this._events[type] = [this._events[type], listener];
4638
4639 // Check for listener leak
4640 if (isObject(this._events[type]) && !this._events[type].warned) {
4641 var m;
4642 if (!isUndefined(this._maxListeners)) {
4643 m = this._maxListeners;
4644 } else {
4645 m = EventEmitter.defaultMaxListeners;
4646 }
4647
4648 if (m && m > 0 && this._events[type].length > m) {
4649 this._events[type].warned = true;
4650 console.error('(node) warning: possible EventEmitter memory ' +
4651 'leak detected. %d listeners added. ' +
4652 'Use emitter.setMaxListeners() to increase limit.',
4653 this._events[type].length);
4654 if (typeof console.trace === 'function') {
4655 // not supported in IE 10
4656 console.trace();
4657 }
4658 }
4659 }
ebd8d4e8 4660
ab78acc6
IC
4661 return this;
4662};
ebd8d4e8 4663
ab78acc6 4664EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4665
ab78acc6
IC
4666EventEmitter.prototype.once = function(type, listener) {
4667 if (!isFunction(listener))
4668 throw TypeError('listener must be a function');
ebd8d4e8 4669
ab78acc6 4670 var fired = false;
ebd8d4e8 4671
ab78acc6
IC
4672 function g() {
4673 this.removeListener(type, g);
ebd8d4e8 4674
ab78acc6
IC
4675 if (!fired) {
4676 fired = true;
4677 listener.apply(this, arguments);
4678 }
4679 }
ebd8d4e8 4680
ab78acc6
IC
4681 g.listener = listener;
4682 this.on(type, g);
ebd8d4e8 4683
ab78acc6
IC
4684 return this;
4685};
ebd8d4e8 4686
ab78acc6
IC
4687// emits a 'removeListener' event iff the listener was removed
4688EventEmitter.prototype.removeListener = function(type, listener) {
4689 var list, position, length, i;
ebd8d4e8 4690
ab78acc6
IC
4691 if (!isFunction(listener))
4692 throw TypeError('listener must be a function');
ebd8d4e8 4693
ab78acc6
IC
4694 if (!this._events || !this._events[type])
4695 return this;
ebd8d4e8 4696
ab78acc6
IC
4697 list = this._events[type];
4698 length = list.length;
4699 position = -1;
4700
4701 if (list === listener ||
4702 (isFunction(list.listener) && list.listener === listener)) {
4703 delete this._events[type];
4704 if (this._events.removeListener)
4705 this.emit('removeListener', type, listener);
4706
4707 } else if (isObject(list)) {
4708 for (i = length; i-- > 0;) {
4709 if (list[i] === listener ||
4710 (list[i].listener && list[i].listener === listener)) {
4711 position = i;
4712 break;
ebd8d4e8 4713 }
ab78acc6 4714 }
ebd8d4e8 4715
ab78acc6
IC
4716 if (position < 0)
4717 return this;
4718
4719 if (list.length === 1) {
4720 list.length = 0;
4721 delete this._events[type];
4722 } else {
4723 list.splice(position, 1);
ebd8d4e8 4724 }
ab78acc6
IC
4725
4726 if (this._events.removeListener)
4727 this.emit('removeListener', type, listener);
ebd8d4e8 4728 }
ab78acc6
IC
4729
4730 return this;
ebd8d4e8
IC
4731};
4732
ab78acc6
IC
4733EventEmitter.prototype.removeAllListeners = function(type) {
4734 var key, listeners;
ebd8d4e8 4735
ab78acc6
IC
4736 if (!this._events)
4737 return this;
4738
4739 // not listening for removeListener, no need to emit
4740 if (!this._events.removeListener) {
4741 if (arguments.length === 0)
4742 this._events = {};
4743 else if (this._events[type])
4744 delete this._events[type];
4745 return this;
ebd8d4e8 4746 }
ab78acc6
IC
4747
4748 // emit removeListener for all listeners on all events
4749 if (arguments.length === 0) {
4750 for (key in this._events) {
4751 if (key === 'removeListener') continue;
4752 this.removeAllListeners(key);
4753 }
4754 this.removeAllListeners('removeListener');
4755 this._events = {};
4756 return this;
ebd8d4e8 4757 }
ebd8d4e8 4758
ab78acc6
IC
4759 listeners = this._events[type];
4760
4761 if (isFunction(listeners)) {
4762 this.removeListener(type, listeners);
ebd8d4e8 4763 } else {
ab78acc6
IC
4764 // LIFO order
4765 while (listeners.length)
4766 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4767 }
ab78acc6 4768 delete this._events[type];
ebd8d4e8 4769
ab78acc6
IC
4770 return this;
4771};
ebd8d4e8 4772
ab78acc6
IC
4773EventEmitter.prototype.listeners = function(type) {
4774 var ret;
4775 if (!this._events || !this._events[type])
4776 ret = [];
4777 else if (isFunction(this._events[type]))
4778 ret = [this._events[type]];
4779 else
4780 ret = this._events[type].slice();
4781 return ret;
4782};
ebd8d4e8 4783
ab78acc6
IC
4784EventEmitter.listenerCount = function(emitter, type) {
4785 var ret;
4786 if (!emitter._events || !emitter._events[type])
4787 ret = 0;
4788 else if (isFunction(emitter._events[type]))
4789 ret = 1;
4790 else
4791 ret = emitter._events[type].length;
4792 return ret;
4793};
ebd8d4e8 4794
ab78acc6
IC
4795function isFunction(arg) {
4796 return typeof arg === 'function';
ebd8d4e8
IC
4797}
4798
ab78acc6
IC
4799function isNumber(arg) {
4800 return typeof arg === 'number';
4801}
ebd8d4e8 4802
ab78acc6
IC
4803function isObject(arg) {
4804 return typeof arg === 'object' && arg !== null;
4805}
ebd8d4e8 4806
ab78acc6
IC
4807function isUndefined(arg) {
4808 return arg === void 0;
ebd8d4e8 4809}
ebd8d4e8 4810
ab78acc6
IC
4811},{}],12:[function(require,module,exports){
4812if (typeof Object.create === 'function') {
4813 // implementation from standard node.js 'util' module
4814 module.exports = function inherits(ctor, superCtor) {
4815 ctor.super_ = superCtor
4816 ctor.prototype = Object.create(superCtor.prototype, {
4817 constructor: {
4818 value: ctor,
4819 enumerable: false,
4820 writable: true,
4821 configurable: true
4822 }
4823 });
4824 };
4825} else {
4826 // old school shim for old browsers
4827 module.exports = function inherits(ctor, superCtor) {
4828 ctor.super_ = superCtor
4829 var TempCtor = function () {}
4830 TempCtor.prototype = superCtor.prototype
4831 ctor.prototype = new TempCtor()
4832 ctor.prototype.constructor = ctor
4833 }
4834}
ebd8d4e8 4835
ab78acc6
IC
4836},{}],13:[function(require,module,exports){
4837module.exports = Array.isArray || function (arr) {
4838 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4839};
4840
ab78acc6
IC
4841},{}],14:[function(require,module,exports){
4842// shim for using process in browser
ebd8d4e8 4843
ab78acc6
IC
4844var process = module.exports = {};
4845var queue = [];
4846var draining = false;
4847var currentQueue;
4848var queueIndex = -1;
4849
4850function cleanUpNextTick() {
4851 draining = false;
4852 if (currentQueue.length) {
4853 queue = currentQueue.concat(queue);
4854 } else {
4855 queueIndex = -1;
4856 }
4857 if (queue.length) {
4858 drainQueue();
4859 }
4860}
ebd8d4e8 4861
ab78acc6
IC
4862function drainQueue() {
4863 if (draining) {
4864 return;
4865 }
4866 var timeout = setTimeout(cleanUpNextTick);
4867 draining = true;
ebd8d4e8 4868
ab78acc6
IC
4869 var len = queue.length;
4870 while(len) {
4871 currentQueue = queue;
4872 queue = [];
4873 while (++queueIndex < len) {
4874 currentQueue[queueIndex].run();
4875 }
4876 queueIndex = -1;
4877 len = queue.length;
4878 }
4879 currentQueue = null;
4880 draining = false;
4881 clearTimeout(timeout);
4882}
4883
4884process.nextTick = function (fun) {
4885 var args = new Array(arguments.length - 1);
4886 if (arguments.length > 1) {
4887 for (var i = 1; i < arguments.length; i++) {
4888 args[i - 1] = arguments[i];
4889 }
4890 }
4891 queue.push(new Item(fun, args));
4892 if (queue.length === 1 && !draining) {
4893 setTimeout(drainQueue, 0);
4894 }
ebd8d4e8
IC
4895};
4896
ab78acc6
IC
4897// v8 likes predictible objects
4898function Item(fun, array) {
4899 this.fun = fun;
4900 this.array = array;
4901}
4902Item.prototype.run = function () {
4903 this.fun.apply(null, this.array);
4904};
4905process.title = 'browser';
4906process.browser = true;
4907process.env = {};
4908process.argv = [];
4909process.version = ''; // empty string to avoid regexp issues
4910process.versions = {};
ebd8d4e8 4911
ab78acc6
IC
4912function noop() {}
4913
4914process.on = noop;
4915process.addListener = noop;
4916process.once = noop;
4917process.off = noop;
4918process.removeListener = noop;
4919process.removeAllListeners = noop;
4920process.emit = noop;
4921
4922process.binding = function (name) {
4923 throw new Error('process.binding is not supported');
4924};
ebd8d4e8 4925
ab78acc6
IC
4926// TODO(shtylman)
4927process.cwd = function () { return '/' };
4928process.chdir = function (dir) {
4929 throw new Error('process.chdir is not supported');
4930};
4931process.umask = function() { return 0; };
ebd8d4e8 4932
ab78acc6
IC
4933},{}],15:[function(require,module,exports){
4934module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4935
ab78acc6
IC
4936},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4937(function (process){
4938// Copyright Joyent, Inc. and other Node contributors.
4939//
4940// Permission is hereby granted, free of charge, to any person obtaining a
4941// copy of this software and associated documentation files (the
4942// "Software"), to deal in the Software without restriction, including
4943// without limitation the rights to use, copy, modify, merge, publish,
4944// distribute, sublicense, and/or sell copies of the Software, and to permit
4945// persons to whom the Software is furnished to do so, subject to the
4946// following conditions:
4947//
4948// The above copyright notice and this permission notice shall be included
4949// in all copies or substantial portions of the Software.
4950//
4951// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4952// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4953// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4954// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4955// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4956// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4957// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4958
ab78acc6
IC
4959// a duplex stream is just a stream that is both readable and writable.
4960// Since JS doesn't have multiple prototypal inheritance, this class
4961// prototypally inherits from Readable, and then parasitically from
4962// Writable.
ebd8d4e8 4963
ab78acc6 4964module.exports = Duplex;
ebd8d4e8 4965
ab78acc6
IC
4966/*<replacement>*/
4967var objectKeys = Object.keys || function (obj) {
4968 var keys = [];
4969 for (var key in obj) keys.push(key);
4970 return keys;
ebd8d4e8 4971}
ab78acc6 4972/*</replacement>*/
ebd8d4e8 4973
ebd8d4e8 4974
ab78acc6
IC
4975/*<replacement>*/
4976var util = require('core-util-is');
4977util.inherits = require('inherits');
4978/*</replacement>*/
ebd8d4e8 4979
ab78acc6
IC
4980var Readable = require('./_stream_readable');
4981var Writable = require('./_stream_writable');
ebd8d4e8 4982
ab78acc6 4983util.inherits(Duplex, Readable);
ebd8d4e8 4984
ab78acc6
IC
4985forEach(objectKeys(Writable.prototype), function(method) {
4986 if (!Duplex.prototype[method])
4987 Duplex.prototype[method] = Writable.prototype[method];
4988});
ebd8d4e8 4989
ab78acc6
IC
4990function Duplex(options) {
4991 if (!(this instanceof Duplex))
4992 return new Duplex(options);
ebd8d4e8 4993
ab78acc6
IC
4994 Readable.call(this, options);
4995 Writable.call(this, options);
ebd8d4e8 4996
ab78acc6
IC
4997 if (options && options.readable === false)
4998 this.readable = false;
ebd8d4e8 4999
ab78acc6
IC
5000 if (options && options.writable === false)
5001 this.writable = false;
ebd8d4e8 5002
ab78acc6
IC
5003 this.allowHalfOpen = true;
5004 if (options && options.allowHalfOpen === false)
5005 this.allowHalfOpen = false;
ebd8d4e8 5006
ab78acc6 5007 this.once('end', onend);
ebd8d4e8
IC
5008}
5009
ab78acc6
IC
5010// the no-half-open enforcer
5011function onend() {
5012 // if we allow half-open state, or if the writable side ended,
5013 // then we're ok.
5014 if (this.allowHalfOpen || this._writableState.ended)
5015 return;
ebd8d4e8 5016
ab78acc6
IC
5017 // no more data can be written.
5018 // But allow more writes to happen in this tick.
5019 process.nextTick(this.end.bind(this));
5020}
ebd8d4e8 5021
ab78acc6
IC
5022function forEach (xs, f) {
5023 for (var i = 0, l = xs.length; i < l; i++) {
5024 f(xs[i], i);
ebd8d4e8 5025 }
ab78acc6 5026}
ebd8d4e8 5027
ab78acc6
IC
5028}).call(this,require('_process'))
5029},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5030// Copyright Joyent, Inc. and other Node contributors.
5031//
5032// Permission is hereby granted, free of charge, to any person obtaining a
5033// copy of this software and associated documentation files (the
5034// "Software"), to deal in the Software without restriction, including
5035// without limitation the rights to use, copy, modify, merge, publish,
5036// distribute, sublicense, and/or sell copies of the Software, and to permit
5037// persons to whom the Software is furnished to do so, subject to the
5038// following conditions:
5039//
5040// The above copyright notice and this permission notice shall be included
5041// in all copies or substantial portions of the Software.
5042//
5043// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5044// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5045// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5046// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5047// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5048// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5049// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5050
ab78acc6
IC
5051// a passthrough stream.
5052// basically just the most minimal sort of Transform stream.
5053// Every written chunk gets output as-is.
ebd8d4e8 5054
ab78acc6 5055module.exports = PassThrough;
ebd8d4e8 5056
ab78acc6 5057var Transform = require('./_stream_transform');
ebd8d4e8 5058
ab78acc6
IC
5059/*<replacement>*/
5060var util = require('core-util-is');
5061util.inherits = require('inherits');
5062/*</replacement>*/
ebd8d4e8 5063
ab78acc6 5064util.inherits(PassThrough, Transform);
ebd8d4e8 5065
ab78acc6
IC
5066function PassThrough(options) {
5067 if (!(this instanceof PassThrough))
5068 return new PassThrough(options);
ebd8d4e8 5069
ab78acc6
IC
5070 Transform.call(this, options);
5071}
ebd8d4e8 5072
ab78acc6
IC
5073PassThrough.prototype._transform = function(chunk, encoding, cb) {
5074 cb(null, chunk);
ebd8d4e8
IC
5075};
5076
ab78acc6
IC
5077},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5078(function (process){
ebd8d4e8
IC
5079// Copyright Joyent, Inc. and other Node contributors.
5080//
5081// Permission is hereby granted, free of charge, to any person obtaining a
5082// copy of this software and associated documentation files (the
5083// "Software"), to deal in the Software without restriction, including
5084// without limitation the rights to use, copy, modify, merge, publish,
5085// distribute, sublicense, and/or sell copies of the Software, and to permit
5086// persons to whom the Software is furnished to do so, subject to the
5087// following conditions:
5088//
5089// The above copyright notice and this permission notice shall be included
5090// in all copies or substantial portions of the Software.
5091//
5092// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5093// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5094// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5095// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5096// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5097// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5098// USE OR OTHER DEALINGS IN THE SOFTWARE.
5099
ab78acc6 5100module.exports = Readable;
ebd8d4e8 5101
ab78acc6
IC
5102/*<replacement>*/
5103var isArray = require('isarray');
5104/*</replacement>*/
5105
5106
5107/*<replacement>*/
5108var Buffer = require('buffer').Buffer;
5109/*</replacement>*/
5110
5111Readable.ReadableState = ReadableState;
5112
5113var EE = require('events').EventEmitter;
5114
5115/*<replacement>*/
5116if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5117 return emitter.listeners(type).length;
ebd8d4e8 5118};
ab78acc6
IC
5119/*</replacement>*/
5120
5121var Stream = require('stream');
5122
5123/*<replacement>*/
5124var util = require('core-util-is');
5125util.inherits = require('inherits');
5126/*</replacement>*/
5127
5128var StringDecoder;
5129
5130
5131/*<replacement>*/
5132var debug = require('util');
5133if (debug && debug.debuglog) {
5134 debug = debug.debuglog('stream');
5135} else {
5136 debug = function () {};
5137}
5138/*</replacement>*/
5139
5140
5141util.inherits(Readable, Stream);
5142
5143function ReadableState(options, stream) {
5144 var Duplex = require('./_stream_duplex');
5145
5146 options = options || {};
5147
5148 // the point at which it stops calling _read() to fill the buffer
5149 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5150 var hwm = options.highWaterMark;
5151 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5152 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5153
5154 // cast to ints.
5155 this.highWaterMark = ~~this.highWaterMark;
5156
5157 this.buffer = [];
5158 this.length = 0;
5159 this.pipes = null;
5160 this.pipesCount = 0;
5161 this.flowing = null;
5162 this.ended = false;
5163 this.endEmitted = false;
5164 this.reading = false;
ebd8d4e8 5165
ab78acc6
IC
5166 // a flag to be able to tell if the onwrite cb is called immediately,
5167 // or on a later tick. We set this to true at first, because any
5168 // actions that shouldn't happen until "later" should generally also
5169 // not happen before the first write call.
5170 this.sync = true;
ebd8d4e8 5171
ab78acc6
IC
5172 // whenever we return null, then we set a flag to say
5173 // that we're awaiting a 'readable' event emission.
5174 this.needReadable = false;
5175 this.emittedReadable = false;
5176 this.readableListening = false;
ebd8d4e8 5177
ab78acc6
IC
5178
5179 // object stream flag. Used to make read(n) ignore n and to
5180 // make all the buffer merging and length checks go away
5181 this.objectMode = !!options.objectMode;
5182
5183 if (stream instanceof Duplex)
5184 this.objectMode = this.objectMode || !!options.readableObjectMode;
5185
5186 // Crypto is kind of old and crusty. Historically, its default string
5187 // encoding is 'binary' so we have to make this configurable.
5188 // Everything else in the universe uses 'utf8', though.
5189 this.defaultEncoding = options.defaultEncoding || 'utf8';
5190
5191 // when piping, we only care about 'readable' events that happen
5192 // after read()ing all the bytes and not getting any pushback.
5193 this.ranOut = false;
5194
5195 // the number of writers that are awaiting a drain event in .pipe()s
5196 this.awaitDrain = 0;
5197
5198 // if true, a maybeReadMore has been scheduled
5199 this.readingMore = false;
5200
5201 this.decoder = null;
5202 this.encoding = null;
5203 if (options.encoding) {
5204 if (!StringDecoder)
5205 StringDecoder = require('string_decoder/').StringDecoder;
5206 this.decoder = new StringDecoder(options.encoding);
5207 this.encoding = options.encoding;
ebd8d4e8 5208 }
ab78acc6 5209}
ebd8d4e8 5210
ab78acc6
IC
5211function Readable(options) {
5212 var Duplex = require('./_stream_duplex');
5213
5214 if (!(this instanceof Readable))
5215 return new Readable(options);
5216
5217 this._readableState = new ReadableState(options, this);
5218
5219 // legacy
5220 this.readable = true;
5221
5222 Stream.call(this);
5223}
5224
5225// Manually shove something into the read() buffer.
5226// This returns true if the highWaterMark has not been hit yet,
5227// similar to how Writable.write() returns true if you should
5228// write() some more.
5229Readable.prototype.push = function(chunk, encoding) {
5230 var state = this._readableState;
5231
5232 if (util.isString(chunk) && !state.objectMode) {
5233 encoding = encoding || state.defaultEncoding;
5234 if (encoding !== state.encoding) {
5235 chunk = new Buffer(chunk, encoding);
5236 encoding = '';
ebd8d4e8 5237 }
ebd8d4e8
IC
5238 }
5239
ab78acc6 5240 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5241};
5242
ab78acc6
IC
5243// Unshift should *always* be something directly out of read()
5244Readable.prototype.unshift = function(chunk) {
5245 var state = this._readableState;
5246 return readableAddChunk(this, state, chunk, '', true);
5247};
ebd8d4e8 5248
ab78acc6
IC
5249function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5250 var er = chunkInvalid(state, chunk);
5251 if (er) {
5252 stream.emit('error', er);
5253 } else if (util.isNullOrUndefined(chunk)) {
5254 state.reading = false;
5255 if (!state.ended)
5256 onEofChunk(stream, state);
5257 } else if (state.objectMode || chunk && chunk.length > 0) {
5258 if (state.ended && !addToFront) {
5259 var e = new Error('stream.push() after EOF');
5260 stream.emit('error', e);
5261 } else if (state.endEmitted && addToFront) {
5262 var e = new Error('stream.unshift() after end event');
5263 stream.emit('error', e);
ebd8d4e8 5264 } else {
ab78acc6
IC
5265 if (state.decoder && !addToFront && !encoding)
5266 chunk = state.decoder.write(chunk);
5267
5268 if (!addToFront)
5269 state.reading = false;
5270
5271 // if we want the data now, just emit it.
5272 if (state.flowing && state.length === 0 && !state.sync) {
5273 stream.emit('data', chunk);
5274 stream.read(0);
5275 } else {
5276 // update the buffer info.
5277 state.length += state.objectMode ? 1 : chunk.length;
5278 if (addToFront)
5279 state.buffer.unshift(chunk);
5280 else
5281 state.buffer.push(chunk);
5282
5283 if (state.needReadable)
5284 emitReadable(stream);
5285 }
5286
5287 maybeReadMore(stream, state);
ebd8d4e8 5288 }
ab78acc6
IC
5289 } else if (!addToFront) {
5290 state.reading = false;
ebd8d4e8 5291 }
ebd8d4e8 5292
ab78acc6
IC
5293 return needMoreData(state);
5294}
ebd8d4e8 5295
ab78acc6
IC
5296
5297
5298// if it's past the high water mark, we can push in some more.
5299// Also, if we have no data yet, we can stand some
5300// more bytes. This is to work around cases where hwm=0,
5301// such as the repl. Also, if the push() triggered a
5302// readable event, and the user called read(largeNumber) such that
5303// needReadable was set, then we ought to push more, so that another
5304// 'readable' event will be triggered.
5305function needMoreData(state) {
5306 return !state.ended &&
5307 (state.needReadable ||
5308 state.length < state.highWaterMark ||
5309 state.length === 0);
5310}
5311
5312// backwards compatibility.
5313Readable.prototype.setEncoding = function(enc) {
5314 if (!StringDecoder)
5315 StringDecoder = require('string_decoder/').StringDecoder;
5316 this._readableState.decoder = new StringDecoder(enc);
5317 this._readableState.encoding = enc;
5318 return this;
5319};
5320
5321// Don't raise the hwm > 128MB
5322var MAX_HWM = 0x800000;
5323function roundUpToNextPowerOf2(n) {
5324 if (n >= MAX_HWM) {
5325 n = MAX_HWM;
5326 } else {
5327 // Get the next highest power of 2
5328 n--;
5329 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5330 n++;
ebd8d4e8 5331 }
ab78acc6 5332 return n;
ebd8d4e8 5333}
ebd8d4e8 5334
ab78acc6
IC
5335function howMuchToRead(n, state) {
5336 if (state.length === 0 && state.ended)
5337 return 0;
ebd8d4e8 5338
ab78acc6
IC
5339 if (state.objectMode)
5340 return n === 0 ? 0 : 1;
ebd8d4e8 5341
ab78acc6
IC
5342 if (isNaN(n) || util.isNull(n)) {
5343 // only flow one buffer at a time
5344 if (state.flowing && state.buffer.length)
5345 return state.buffer[0].length;
5346 else
5347 return state.length;
5348 }
ebd8d4e8 5349
ab78acc6
IC
5350 if (n <= 0)
5351 return 0;
ebd8d4e8 5352
ab78acc6
IC
5353 // If we're asking for more than the target buffer level,
5354 // then raise the water mark. Bump up to the next highest
5355 // power of 2, to prevent increasing it excessively in tiny
5356 // amounts.
5357 if (n > state.highWaterMark)
5358 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5359
ab78acc6
IC
5360 // don't have that much. return null, unless we've ended.
5361 if (n > state.length) {
5362 if (!state.ended) {
5363 state.needReadable = true;
5364 return 0;
5365 } else
5366 return state.length;
ebd8d4e8 5367 }
ab78acc6
IC
5368
5369 return n;
ebd8d4e8
IC
5370}
5371
ab78acc6
IC
5372// you can override either this method, or the async _read(n) below.
5373Readable.prototype.read = function(n) {
5374 debug('read', n);
5375 var state = this._readableState;
5376 var nOrig = n;
ebd8d4e8 5377
ab78acc6
IC
5378 if (!util.isNumber(n) || n > 0)
5379 state.emittedReadable = false;
5380
5381 // if we're doing read(0) to trigger a readable event, but we
5382 // already have a bunch of data in the buffer, then just trigger
5383 // the 'readable' event and move on.
5384 if (n === 0 &&
5385 state.needReadable &&
5386 (state.length >= state.highWaterMark || state.ended)) {
5387 debug('read: emitReadable', state.length, state.ended);
5388 if (state.length === 0 && state.ended)
5389 endReadable(this);
5390 else
5391 emitReadable(this);
5392 return null;
5393 }
5394
5395 n = howMuchToRead(n, state);
5396
5397 // if we've ended, and we're now clear, then finish it up.
5398 if (n === 0 && state.ended) {
5399 if (state.length === 0)
5400 endReadable(this);
5401 return null;
5402 }
5403
5404 // All the actual chunk generation logic needs to be
5405 // *below* the call to _read. The reason is that in certain
5406 // synthetic stream cases, such as passthrough streams, _read
5407 // may be a completely synchronous operation which may change
5408 // the state of the read buffer, providing enough data when
5409 // before there was *not* enough.
5410 //
5411 // So, the steps are:
5412 // 1. Figure out what the state of things will be after we do
5413 // a read from the buffer.
5414 //
5415 // 2. If that resulting state will trigger a _read, then call _read.
5416 // Note that this may be asynchronous, or synchronous. Yes, it is
5417 // deeply ugly to write APIs this way, but that still doesn't mean
5418 // that the Readable class should behave improperly, as streams are
5419 // designed to be sync/async agnostic.
5420 // Take note if the _read call is sync or async (ie, if the read call
5421 // has returned yet), so that we know whether or not it's safe to emit
5422 // 'readable' etc.
5423 //
5424 // 3. Actually pull the requested chunks out of the buffer and return.
5425
5426 // if we need a readable event, then we need to do some reading.
5427 var doRead = state.needReadable;
5428 debug('need readable', doRead);
5429
5430 // if we currently have less than the highWaterMark, then also read some
5431 if (state.length === 0 || state.length - n < state.highWaterMark) {
5432 doRead = true;
5433 debug('length less than watermark', doRead);
5434 }
5435
5436 // however, if we've ended, then there's no point, and if we're already
5437 // reading, then it's unnecessary.
5438 if (state.ended || state.reading) {
5439 doRead = false;
5440 debug('reading or ended', doRead);
5441 }
5442
5443 if (doRead) {
5444 debug('do read');
5445 state.reading = true;
5446 state.sync = true;
5447 // if the length is currently zero, then we *need* a readable event.
5448 if (state.length === 0)
5449 state.needReadable = true;
5450 // call internal read method
5451 this._read(state.highWaterMark);
5452 state.sync = false;
5453 }
5454
5455 // If _read pushed data synchronously, then `reading` will be false,
5456 // and we need to re-evaluate how much data we can return to the user.
5457 if (doRead && !state.reading)
5458 n = howMuchToRead(nOrig, state);
5459
5460 var ret;
5461 if (n > 0)
5462 ret = fromList(n, state);
5463 else
5464 ret = null;
ebd8d4e8 5465
ab78acc6
IC
5466 if (util.isNull(ret)) {
5467 state.needReadable = true;
5468 n = 0;
5469 }
ebd8d4e8 5470
ab78acc6 5471 state.length -= n;
ebd8d4e8 5472
ab78acc6
IC
5473 // If we have nothing in the buffer, then we want to know
5474 // as soon as we *do* get something into the buffer.
5475 if (state.length === 0 && !state.ended)
5476 state.needReadable = true;
ebd8d4e8 5477
ab78acc6
IC
5478 // If we tried to read() past the EOF, then emit end on the next tick.
5479 if (nOrig !== n && state.ended && state.length === 0)
5480 endReadable(this);
5481
5482 if (!util.isNull(ret))
5483 this.emit('data', ret);
5484
5485 return ret;
5486};
5487
5488function chunkInvalid(state, chunk) {
5489 var er = null;
5490 if (!util.isBuffer(chunk) &&
5491 !util.isString(chunk) &&
5492 !util.isNullOrUndefined(chunk) &&
5493 !state.objectMode) {
5494 er = new TypeError('Invalid non-string/buffer chunk');
5495 }
5496 return er;
ebd8d4e8
IC
5497}
5498
5499
ab78acc6
IC
5500function onEofChunk(stream, state) {
5501 if (state.decoder && !state.ended) {
5502 var chunk = state.decoder.end();
5503 if (chunk && chunk.length) {
5504 state.buffer.push(chunk);
5505 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5506 }
ebd8d4e8 5507 }
ab78acc6 5508 state.ended = true;
ebd8d4e8 5509
ab78acc6
IC
5510 // emit 'readable' now to make sure it gets picked up.
5511 emitReadable(stream);
5512}
5513
5514// Don't emit readable right away in sync mode, because this can trigger
5515// another read() call => stack overflow. This way, it might trigger
5516// a nextTick recursion warning, but that's not so bad.
5517function emitReadable(stream) {
5518 var state = stream._readableState;
5519 state.needReadable = false;
5520 if (!state.emittedReadable) {
5521 debug('emitReadable', state.flowing);
5522 state.emittedReadable = true;
5523 if (state.sync)
5524 process.nextTick(function() {
5525 emitReadable_(stream);
5526 });
5527 else
5528 emitReadable_(stream);
ebd8d4e8 5529 }
ab78acc6 5530}
ebd8d4e8 5531
ab78acc6
IC
5532function emitReadable_(stream) {
5533 debug('emit readable');
5534 stream.emit('readable');
5535 flow(stream);
5536}
ebd8d4e8 5537
ab78acc6
IC
5538
5539// at this point, the user has presumably seen the 'readable' event,
5540// and called read() to consume some data. that may have triggered
5541// in turn another _read(n) call, in which case reading = true if
5542// it's in progress.
5543// However, if we're not ended, or reading, and the length < hwm,
5544// then go ahead and try to read some more preemptively.
5545function maybeReadMore(stream, state) {
5546 if (!state.readingMore) {
5547 state.readingMore = true;
5548 process.nextTick(function() {
5549 maybeReadMore_(stream, state);
5550 });
ebd8d4e8 5551 }
ab78acc6 5552}
ebd8d4e8 5553
ab78acc6
IC
5554function maybeReadMore_(stream, state) {
5555 var len = state.length;
5556 while (!state.reading && !state.flowing && !state.ended &&
5557 state.length < state.highWaterMark) {
5558 debug('maybeReadMore read 0');
5559 stream.read(0);
5560 if (len === state.length)
5561 // didn't get any data, stop spinning.
5562 break;
5563 else
5564 len = state.length;
ebd8d4e8 5565 }
ab78acc6
IC
5566 state.readingMore = false;
5567}
ebd8d4e8 5568
ab78acc6
IC
5569// abstract method. to be overridden in specific implementation classes.
5570// call cb(er, data) where data is <= n in length.
5571// for virtual (non-string, non-buffer) streams, "length" is somewhat
5572// arbitrary, and perhaps not very meaningful.
5573Readable.prototype._read = function(n) {
5574 this.emit('error', new Error('not implemented'));
5575};
5576
5577Readable.prototype.pipe = function(dest, pipeOpts) {
5578 var src = this;
5579 var state = this._readableState;
5580
5581 switch (state.pipesCount) {
5582 case 0:
5583 state.pipes = dest;
5584 break;
5585 case 1:
5586 state.pipes = [state.pipes, dest];
5587 break;
5588 default:
5589 state.pipes.push(dest);
5590 break;
ebd8d4e8 5591 }
ab78acc6
IC
5592 state.pipesCount += 1;
5593 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5594
ab78acc6
IC
5595 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5596 dest !== process.stdout &&
5597 dest !== process.stderr;
ebd8d4e8 5598
ab78acc6
IC
5599 var endFn = doEnd ? onend : cleanup;
5600 if (state.endEmitted)
5601 process.nextTick(endFn);
5602 else
5603 src.once('end', endFn);
5604
5605 dest.on('unpipe', onunpipe);
5606 function onunpipe(readable) {
5607 debug('onunpipe');
5608 if (readable === src) {
5609 cleanup();
5610 }
5611 }
5612
5613 function onend() {
5614 debug('onend');
5615 dest.end();
5616 }
5617
5618 // when the dest drains, it reduces the awaitDrain counter
5619 // on the source. This would be more elegant with a .once()
5620 // handler in flow(), but adding and removing repeatedly is
5621 // too slow.
5622 var ondrain = pipeOnDrain(src);
5623 dest.on('drain', ondrain);
5624
5625 function cleanup() {
5626 debug('cleanup');
5627 // cleanup event handlers once the pipe is broken
5628 dest.removeListener('close', onclose);
5629 dest.removeListener('finish', onfinish);
5630 dest.removeListener('drain', ondrain);
5631 dest.removeListener('error', onerror);
5632 dest.removeListener('unpipe', onunpipe);
5633 src.removeListener('end', onend);
5634 src.removeListener('end', cleanup);
5635 src.removeListener('data', ondata);
5636
5637 // if the reader is waiting for a drain event from this
5638 // specific writer, then it would cause it to never start
5639 // flowing again.
5640 // So, if this is awaiting a drain, then we just call it now.
5641 // If we don't know, then assume that we are waiting for one.
5642 if (state.awaitDrain &&
5643 (!dest._writableState || dest._writableState.needDrain))
5644 ondrain();
5645 }
5646
5647 src.on('data', ondata);
5648 function ondata(chunk) {
5649 debug('ondata');
5650 var ret = dest.write(chunk);
5651 if (false === ret) {
5652 debug('false write response, pause',
5653 src._readableState.awaitDrain);
5654 src._readableState.awaitDrain++;
5655 src.pause();
5656 }
5657 }
5658
5659 // if the dest has an error, then stop piping into it.
5660 // however, don't suppress the throwing behavior for this.
5661 function onerror(er) {
5662 debug('onerror', er);
5663 unpipe();
5664 dest.removeListener('error', onerror);
5665 if (EE.listenerCount(dest, 'error') === 0)
5666 dest.emit('error', er);
5667 }
5668 // This is a brutally ugly hack to make sure that our error handler
5669 // is attached before any userland ones. NEVER DO THIS.
5670 if (!dest._events || !dest._events.error)
5671 dest.on('error', onerror);
5672 else if (isArray(dest._events.error))
5673 dest._events.error.unshift(onerror);
5674 else
5675 dest._events.error = [onerror, dest._events.error];
5676
5677
5678
5679 // Both close and finish should trigger unpipe, but only once.
5680 function onclose() {
5681 dest.removeListener('finish', onfinish);
5682 unpipe();
ebd8d4e8 5683 }
ab78acc6
IC
5684 dest.once('close', onclose);
5685 function onfinish() {
5686 debug('onfinish');
5687 dest.removeListener('close', onclose);
5688 unpipe();
5689 }
5690 dest.once('finish', onfinish);
ebd8d4e8 5691
ab78acc6
IC
5692 function unpipe() {
5693 debug('unpipe');
5694 src.unpipe(dest);
ebd8d4e8
IC
5695 }
5696
ab78acc6
IC
5697 // tell the dest that it's being piped to
5698 dest.emit('pipe', src);
5699
5700 // start the flow if it hasn't been started already.
5701 if (!state.flowing) {
5702 debug('pipe resume');
5703 src.resume();
ebd8d4e8
IC
5704 }
5705
ab78acc6
IC
5706 return dest;
5707};
5708
5709function pipeOnDrain(src) {
5710 return function() {
5711 var state = src._readableState;
5712 debug('pipeOnDrain', state.awaitDrain);
5713 if (state.awaitDrain)
5714 state.awaitDrain--;
5715 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5716 state.flowing = true;
5717 flow(src);
5718 }
5719 };
5720}
5721
5722
5723Readable.prototype.unpipe = function(dest) {
5724 var state = this._readableState;
5725
5726 // if we're not piping anywhere, then do nothing.
5727 if (state.pipesCount === 0)
5728 return this;
5729
5730 // just one destination. most common case.
5731 if (state.pipesCount === 1) {
5732 // passed in one, but it's not the right one.
5733 if (dest && dest !== state.pipes)
5734 return this;
5735
5736 if (!dest)
5737 dest = state.pipes;
5738
5739 // got a match.
5740 state.pipes = null;
5741 state.pipesCount = 0;
5742 state.flowing = false;
5743 if (dest)
5744 dest.emit('unpipe', this);
5745 return this;
ebd8d4e8
IC
5746 }
5747
ab78acc6
IC
5748 // slow case. multiple pipe destinations.
5749
5750 if (!dest) {
5751 // remove all.
5752 var dests = state.pipes;
5753 var len = state.pipesCount;
5754 state.pipes = null;
5755 state.pipesCount = 0;
5756 state.flowing = false;
5757
5758 for (var i = 0; i < len; i++)
5759 dests[i].emit('unpipe', this);
5760 return this;
ebd8d4e8
IC
5761 }
5762
ab78acc6
IC
5763 // try to find the right one.
5764 var i = indexOf(state.pipes, dest);
5765 if (i === -1)
5766 return this;
5767
5768 state.pipes.splice(i, 1);
5769 state.pipesCount -= 1;
5770 if (state.pipesCount === 1)
5771 state.pipes = state.pipes[0];
5772
5773 dest.emit('unpipe', this);
ebd8d4e8 5774
ab78acc6
IC
5775 return this;
5776};
5777
5778// set up data events if they are asked for
5779// Ensure readable listeners eventually get something
5780Readable.prototype.on = function(ev, fn) {
5781 var res = Stream.prototype.on.call(this, ev, fn);
5782
5783 // If listening to data, and it has not explicitly been paused,
5784 // then call resume to start the flow of data on the next tick.
5785 if (ev === 'data' && false !== this._readableState.flowing) {
5786 this.resume();
5787 }
5788
5789 if (ev === 'readable' && this.readable) {
5790 var state = this._readableState;
5791 if (!state.readableListening) {
5792 state.readableListening = true;
5793 state.emittedReadable = false;
5794 state.needReadable = true;
5795 if (!state.reading) {
5796 var self = this;
5797 process.nextTick(function() {
5798 debug('readable nexttick read 0');
5799 self.read(0);
5800 });
5801 } else if (state.length) {
5802 emitReadable(this, state);
5803 }
ebd8d4e8
IC
5804 }
5805 }
5806
ab78acc6
IC
5807 return res;
5808};
5809Readable.prototype.addListener = Readable.prototype.on;
5810
5811// pause() and resume() are remnants of the legacy readable stream API
5812// If the user uses them, then switch into old mode.
5813Readable.prototype.resume = function() {
5814 var state = this._readableState;
5815 if (!state.flowing) {
5816 debug('resume');
5817 state.flowing = true;
5818 if (!state.reading) {
5819 debug('resume read 0');
5820 this.read(0);
5821 }
5822 resume(this, state);
5823 }
5824 return this;
5825};
ebd8d4e8 5826
ab78acc6
IC
5827function resume(stream, state) {
5828 if (!state.resumeScheduled) {
5829 state.resumeScheduled = true;
5830 process.nextTick(function() {
5831 resume_(stream, state);
ebd8d4e8
IC
5832 });
5833 }
ebd8d4e8
IC
5834}
5835
ab78acc6
IC
5836function resume_(stream, state) {
5837 state.resumeScheduled = false;
5838 stream.emit('resume');
5839 flow(stream);
5840 if (state.flowing && !state.reading)
5841 stream.read(0);
ebd8d4e8
IC
5842}
5843
ab78acc6
IC
5844Readable.prototype.pause = function() {
5845 debug('call pause flowing=%j', this._readableState.flowing);
5846 if (false !== this._readableState.flowing) {
5847 debug('pause');
5848 this._readableState.flowing = false;
5849 this.emit('pause');
5850 }
5851 return this;
5852};
ebd8d4e8 5853
ab78acc6
IC
5854function flow(stream) {
5855 var state = stream._readableState;
5856 debug('flow', state.flowing);
5857 if (state.flowing) {
5858 do {
5859 var chunk = stream.read();
5860 } while (null !== chunk && state.flowing);
5861 }
ebd8d4e8
IC
5862}
5863
ab78acc6
IC
5864// wrap an old-style stream as the async data source.
5865// This is *not* part of the readable stream interface.
5866// It is an ugly unfortunate mess of history.
5867Readable.prototype.wrap = function(stream) {
5868 var state = this._readableState;
5869 var paused = false;
ebd8d4e8 5870
ab78acc6
IC
5871 var self = this;
5872 stream.on('end', function() {
5873 debug('wrapped end');
5874 if (state.decoder && !state.ended) {
5875 var chunk = state.decoder.end();
5876 if (chunk && chunk.length)
5877 self.push(chunk);
ebd8d4e8 5878 }
ab78acc6
IC
5879
5880 self.push(null);
ebd8d4e8 5881 });
ebd8d4e8 5882
ab78acc6
IC
5883 stream.on('data', function(chunk) {
5884 debug('wrapped data');
5885 if (state.decoder)
5886 chunk = state.decoder.write(chunk);
5887 if (!chunk || !state.objectMode && !chunk.length)
5888 return;
ebd8d4e8 5889
ab78acc6
IC
5890 var ret = self.push(chunk);
5891 if (!ret) {
5892 paused = true;
5893 stream.pause();
ebd8d4e8 5894 }
ab78acc6
IC
5895 });
5896
5897 // proxy all the other methods.
5898 // important when wrapping filters and duplexes.
5899 for (var i in stream) {
5900 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5901 this[i] = function(method) { return function() {
5902 return stream[method].apply(stream, arguments);
5903 }}(i);
ebd8d4e8
IC
5904 }
5905 }
ab78acc6
IC
5906
5907 // proxy certain important events.
5908 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5909 forEach(events, function(ev) {
5910 stream.on(ev, self.emit.bind(self, ev));
5911 });
5912
5913 // when we try to consume some more bytes, simply unpause the
5914 // underlying stream.
5915 self._read = function(n) {
5916 debug('wrapped _read', n);
5917 if (paused) {
5918 paused = false;
5919 stream.resume();
ebd8d4e8 5920 }
ab78acc6
IC
5921 };
5922
5923 return self;
5924};
5925
5926
5927
5928// exposed for testing purposes only.
5929Readable._fromList = fromList;
5930
5931// Pluck off n bytes from an array of buffers.
5932// Length is the combined lengths of all the buffers in the list.
5933function fromList(n, state) {
5934 var list = state.buffer;
5935 var length = state.length;
5936 var stringMode = !!state.decoder;
5937 var objectMode = !!state.objectMode;
5938 var ret;
5939
5940 // nothing in the list, definitely empty.
5941 if (list.length === 0)
5942 return null;
5943
5944 if (length === 0)
5945 ret = null;
5946 else if (objectMode)
5947 ret = list.shift();
5948 else if (!n || n >= length) {
5949 // read it all, truncate the array.
5950 if (stringMode)
5951 ret = list.join('');
5952 else
5953 ret = Buffer.concat(list, length);
5954 list.length = 0;
5955 } else {
5956 // read just some of it.
5957 if (n < list[0].length) {
5958 // just take a part of the first list item.
5959 // slice is the same for buffers and strings.
5960 var buf = list[0];
5961 ret = buf.slice(0, n);
5962 list[0] = buf.slice(n);
5963 } else if (n === list[0].length) {
5964 // first list is a perfect match
5965 ret = list.shift();
ebd8d4e8 5966 } else {
ab78acc6
IC
5967 // complex case.
5968 // we have enough to cover it, but it spans past the first buffer.
5969 if (stringMode)
5970 ret = '';
5971 else
5972 ret = new Buffer(n);
ebd8d4e8 5973
ab78acc6
IC
5974 var c = 0;
5975 for (var i = 0, l = list.length; i < l && c < n; i++) {
5976 var buf = list[0];
5977 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5978
ab78acc6
IC
5979 if (stringMode)
5980 ret += buf.slice(0, cpy);
5981 else
5982 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5983
ab78acc6
IC
5984 if (cpy < buf.length)
5985 list[0] = buf.slice(cpy);
5986 else
5987 list.shift();
ebd8d4e8 5988
ab78acc6
IC
5989 c += cpy;
5990 }
5991 }
ebd8d4e8
IC
5992 }
5993
ab78acc6 5994 return ret;
ebd8d4e8
IC
5995}
5996
ab78acc6
IC
5997function endReadable(stream) {
5998 var state = stream._readableState;
ebd8d4e8 5999
ab78acc6
IC
6000 // If we get here before consuming all the bytes, then that is a
6001 // bug in node. Should never happen.
6002 if (state.length > 0)
6003 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 6004
ab78acc6
IC
6005 if (!state.endEmitted) {
6006 state.ended = true;
6007 process.nextTick(function() {
6008 // Check that we didn't get one last unshift.
6009 if (!state.endEmitted && state.length === 0) {
6010 state.endEmitted = true;
6011 stream.readable = false;
6012 stream.emit('end');
6013 }
6014 });
6015 }
ebd8d4e8 6016}
ebd8d4e8 6017
ab78acc6
IC
6018function forEach (xs, f) {
6019 for (var i = 0, l = xs.length; i < l; i++) {
6020 f(xs[i], i);
6021 }
ebd8d4e8 6022}
ebd8d4e8 6023
ab78acc6
IC
6024function indexOf (xs, x) {
6025 for (var i = 0, l = xs.length; i < l; i++) {
6026 if (xs[i] === x) return i;
6027 }
6028 return -1;
ebd8d4e8 6029}
ebd8d4e8 6030
ab78acc6
IC
6031}).call(this,require('_process'))
6032},{"./_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){
6033// Copyright Joyent, Inc. and other Node contributors.
6034//
6035// Permission is hereby granted, free of charge, to any person obtaining a
6036// copy of this software and associated documentation files (the
6037// "Software"), to deal in the Software without restriction, including
6038// without limitation the rights to use, copy, modify, merge, publish,
6039// distribute, sublicense, and/or sell copies of the Software, and to permit
6040// persons to whom the Software is furnished to do so, subject to the
6041// following conditions:
6042//
6043// The above copyright notice and this permission notice shall be included
6044// in all copies or substantial portions of the Software.
6045//
6046// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6047// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6048// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6049// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6050// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6051// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6052// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6053
ebd8d4e8 6054
ab78acc6
IC
6055// a transform stream is a readable/writable stream where you do
6056// something with the data. Sometimes it's called a "filter",
6057// but that's not a great name for it, since that implies a thing where
6058// some bits pass through, and others are simply ignored. (That would
6059// be a valid example of a transform, of course.)
6060//
6061// While the output is causally related to the input, it's not a
6062// necessarily symmetric or synchronous transformation. For example,
6063// a zlib stream might take multiple plain-text writes(), and then
6064// emit a single compressed chunk some time in the future.
6065//
6066// Here's how this works:
6067//
6068// The Transform stream has all the aspects of the readable and writable
6069// stream classes. When you write(chunk), that calls _write(chunk,cb)
6070// internally, and returns false if there's a lot of pending writes
6071// buffered up. When you call read(), that calls _read(n) until
6072// there's enough pending readable data buffered up.
6073//
6074// In a transform stream, the written data is placed in a buffer. When
6075// _read(n) is called, it transforms the queued up data, calling the
6076// buffered _write cb's as it consumes chunks. If consuming a single
6077// written chunk would result in multiple output chunks, then the first
6078// outputted bit calls the readcb, and subsequent chunks just go into
6079// the read buffer, and will cause it to emit 'readable' if necessary.
6080//
6081// This way, back-pressure is actually determined by the reading side,
6082// since _read has to be called to start processing a new chunk. However,
6083// a pathological inflate type of transform can cause excessive buffering
6084// here. For example, imagine a stream where every byte of input is
6085// interpreted as an integer from 0-255, and then results in that many
6086// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6087// 1kb of data being output. In this case, you could write a very small
6088// amount of input, and end up with a very large amount of output. In
6089// such a pathological inflating mechanism, there'd be no way to tell
6090// the system to stop doing the transform. A single 4MB write could
6091// cause the system to run out of memory.
6092//
6093// However, even in such a pathological case, only a single written chunk
6094// would be consumed, and then the rest would wait (un-transformed) until
6095// the results of the previous transformed chunk were consumed.
ebd8d4e8 6096
ab78acc6 6097module.exports = Transform;
ebd8d4e8 6098
ab78acc6 6099var Duplex = require('./_stream_duplex');
ebd8d4e8 6100
ab78acc6
IC
6101/*<replacement>*/
6102var util = require('core-util-is');
6103util.inherits = require('inherits');
6104/*</replacement>*/
6105
6106util.inherits(Transform, Duplex);
6107
6108
6109function TransformState(options, stream) {
6110 this.afterTransform = function(er, data) {
6111 return afterTransform(stream, er, data);
6112 };
6113
6114 this.needTransform = false;
6115 this.transforming = false;
6116 this.writecb = null;
6117 this.writechunk = null;
ebd8d4e8 6118}
ebd8d4e8 6119
ab78acc6
IC
6120function afterTransform(stream, er, data) {
6121 var ts = stream._transformState;
6122 ts.transforming = false;
6123
6124 var cb = ts.writecb;
6125
6126 if (!cb)
6127 return stream.emit('error', new Error('no writecb in Transform class'));
6128
6129 ts.writechunk = null;
6130 ts.writecb = null;
6131
6132 if (!util.isNullOrUndefined(data))
6133 stream.push(data);
6134
6135 if (cb)
6136 cb(er);
6137
6138 var rs = stream._readableState;
6139 rs.reading = false;
6140 if (rs.needReadable || rs.length < rs.highWaterMark) {
6141 stream._read(rs.highWaterMark);
6142 }
ebd8d4e8 6143}
ebd8d4e8 6144
ab78acc6
IC
6145
6146function Transform(options) {
6147 if (!(this instanceof Transform))
6148 return new Transform(options);
6149
6150 Duplex.call(this, options);
6151
6152 this._transformState = new TransformState(options, this);
6153
6154 // when the writable side finishes, then flush out anything remaining.
6155 var stream = this;
6156
6157 // start out asking for a readable event once data is transformed.
6158 this._readableState.needReadable = true;
6159
6160 // we have implemented the _read method, and done the other things
6161 // that Readable wants before the first _read call, so unset the
6162 // sync guard flag.
6163 this._readableState.sync = false;
6164
6165 this.once('prefinish', function() {
6166 if (util.isFunction(this._flush))
6167 this._flush(function(er) {
6168 done(stream, er);
6169 });
6170 else
6171 done(stream);
6172 });
ebd8d4e8 6173}
ebd8d4e8 6174
ab78acc6
IC
6175Transform.prototype.push = function(chunk, encoding) {
6176 this._transformState.needTransform = false;
6177 return Duplex.prototype.push.call(this, chunk, encoding);
6178};
6179
6180// This is the part where you do stuff!
6181// override this function in implementation classes.
6182// 'chunk' is an input chunk.
6183//
6184// Call `push(newChunk)` to pass along transformed output
6185// to the readable side. You may call 'push' zero or more times.
6186//
6187// Call `cb(err)` when you are done with this chunk. If you pass
6188// an error, then that'll put the hurt on the whole operation. If you
6189// never call cb(), then you'll never get another chunk.
6190Transform.prototype._transform = function(chunk, encoding, cb) {
6191 throw new Error('not implemented');
6192};
6193
6194Transform.prototype._write = function(chunk, encoding, cb) {
6195 var ts = this._transformState;
6196 ts.writecb = cb;
6197 ts.writechunk = chunk;
6198 ts.writeencoding = encoding;
6199 if (!ts.transforming) {
6200 var rs = this._readableState;
6201 if (ts.needTransform ||
6202 rs.needReadable ||
6203 rs.length < rs.highWaterMark)
6204 this._read(rs.highWaterMark);
6205 }
6206};
6207
6208// Doesn't matter what the args are here.
6209// _transform does all the work.
6210// That we got here means that the readable side wants more data.
6211Transform.prototype._read = function(n) {
6212 var ts = this._transformState;
ebd8d4e8 6213
ab78acc6
IC
6214 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6215 ts.transforming = true;
6216 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6217 } else {
6218 // mark that we need a transform, so that any data that comes in
6219 // will get processed, now that we've asked for it.
6220 ts.needTransform = true;
6221 }
6222};
ebd8d4e8 6223
ebd8d4e8 6224
ab78acc6
IC
6225function done(stream, er) {
6226 if (er)
6227 return stream.emit('error', er);
ebd8d4e8 6228
ab78acc6
IC
6229 // if there's nothing in the write buffer, then that means
6230 // that nothing more will ever be provided
6231 var ws = stream._writableState;
6232 var ts = stream._transformState;
ebd8d4e8 6233
ab78acc6
IC
6234 if (ws.length)
6235 throw new Error('calling transform done when ws.length != 0');
6236
6237 if (ts.transforming)
6238 throw new Error('calling transform done when still transforming');
6239
6240 return stream.push(null);
ebd8d4e8
IC
6241}
6242
ab78acc6
IC
6243},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6244(function (process){
6245// Copyright Joyent, Inc. and other Node contributors.
6246//
6247// Permission is hereby granted, free of charge, to any person obtaining a
6248// copy of this software and associated documentation files (the
6249// "Software"), to deal in the Software without restriction, including
6250// without limitation the rights to use, copy, modify, merge, publish,
6251// distribute, sublicense, and/or sell copies of the Software, and to permit
6252// persons to whom the Software is furnished to do so, subject to the
6253// following conditions:
6254//
6255// The above copyright notice and this permission notice shall be included
6256// in all copies or substantial portions of the Software.
6257//
6258// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6259// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6260// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6261// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6262// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6263// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6264// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6265
ab78acc6
IC
6266// A bit simpler than readable streams.
6267// Implement an async ._write(chunk, cb), and it'll handle all
6268// the drain event emission and buffering.
ebd8d4e8 6269
ab78acc6 6270module.exports = Writable;
ebd8d4e8 6271
ab78acc6
IC
6272/*<replacement>*/
6273var Buffer = require('buffer').Buffer;
6274/*</replacement>*/
ebd8d4e8 6275
ab78acc6 6276Writable.WritableState = WritableState;
ebd8d4e8
IC
6277
6278
ab78acc6
IC
6279/*<replacement>*/
6280var util = require('core-util-is');
6281util.inherits = require('inherits');
6282/*</replacement>*/
ebd8d4e8 6283
ab78acc6 6284var Stream = require('stream');
ebd8d4e8 6285
ab78acc6 6286util.inherits(Writable, Stream);
ebd8d4e8 6287
ab78acc6
IC
6288function WriteReq(chunk, encoding, cb) {
6289 this.chunk = chunk;
6290 this.encoding = encoding;
6291 this.callback = cb;
ebd8d4e8
IC
6292}
6293
ab78acc6
IC
6294function WritableState(options, stream) {
6295 var Duplex = require('./_stream_duplex');
ebd8d4e8 6296
ab78acc6 6297 options = options || {};
ebd8d4e8 6298
ab78acc6
IC
6299 // the point at which write() starts returning false
6300 // Note: 0 is a valid value, means that we always return false if
6301 // the entire buffer is not flushed immediately on write()
6302 var hwm = options.highWaterMark;
6303 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6304 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6305
ab78acc6
IC
6306 // object stream flag to indicate whether or not this stream
6307 // contains buffers or objects.
6308 this.objectMode = !!options.objectMode;
ebd8d4e8 6309
ab78acc6
IC
6310 if (stream instanceof Duplex)
6311 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6312
ab78acc6
IC
6313 // cast to ints.
6314 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6315
ab78acc6
IC
6316 this.needDrain = false;
6317 // at the start of calling end()
6318 this.ending = false;
6319 // when end() has been called, and returned
6320 this.ended = false;
6321 // when 'finish' is emitted
6322 this.finished = false;
ebd8d4e8 6323
ab78acc6
IC
6324 // should we decode strings into buffers before passing to _write?
6325 // this is here so that some node-core streams can optimize string
6326 // handling at a lower level.
6327 var noDecode = options.decodeStrings === false;
6328 this.decodeStrings = !noDecode;
ebd8d4e8 6329
ab78acc6
IC
6330 // Crypto is kind of old and crusty. Historically, its default string
6331 // encoding is 'binary' so we have to make this configurable.
6332 // Everything else in the universe uses 'utf8', though.
6333 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6334
ab78acc6
IC
6335 // not an actual buffer we keep track of, but a measurement
6336 // of how much we're waiting to get pushed to some underlying
6337 // socket or file.
6338 this.length = 0;
ebd8d4e8 6339
ab78acc6
IC
6340 // a flag to see when we're in the middle of a write.
6341 this.writing = false;
ebd8d4e8 6342
ab78acc6
IC
6343 // when true all writes will be buffered until .uncork() call
6344 this.corked = 0;
ebd8d4e8 6345
ab78acc6
IC
6346 // a flag to be able to tell if the onwrite cb is called immediately,
6347 // or on a later tick. We set this to true at first, because any
6348 // actions that shouldn't happen until "later" should generally also
6349 // not happen before the first write call.
6350 this.sync = true;
ebd8d4e8 6351
ab78acc6
IC
6352 // a flag to know if we're processing previously buffered items, which
6353 // may call the _write() callback in the same tick, so that we don't
6354 // end up in an overlapped onwrite situation.
6355 this.bufferProcessing = false;
ebd8d4e8 6356
ab78acc6
IC
6357 // the callback that's passed to _write(chunk,cb)
6358 this.onwrite = function(er) {
6359 onwrite(stream, er);
6360 };
ebd8d4e8 6361
ab78acc6
IC
6362 // the callback that the user supplies to write(chunk,encoding,cb)
6363 this.writecb = null;
ebd8d4e8 6364
ab78acc6
IC
6365 // the amount that is being written when _write is called.
6366 this.writelen = 0;
ebd8d4e8 6367
ab78acc6 6368 this.buffer = [];
ebd8d4e8 6369
ab78acc6
IC
6370 // number of pending user-supplied write callbacks
6371 // this must be 0 before 'finish' can be emitted
6372 this.pendingcb = 0;
ebd8d4e8 6373
ab78acc6
IC
6374 // emit prefinish if the only thing we're waiting for is _write cbs
6375 // This is relevant for synchronous Transform streams
6376 this.prefinished = false;
ebd8d4e8 6377
ab78acc6
IC
6378 // True if the error was already emitted and should not be thrown again
6379 this.errorEmitted = false;
ebd8d4e8
IC
6380}
6381
ab78acc6
IC
6382function Writable(options) {
6383 var Duplex = require('./_stream_duplex');
ebd8d4e8 6384
ab78acc6
IC
6385 // Writable ctor is applied to Duplexes, though they're not
6386 // instanceof Writable, they're instanceof Readable.
6387 if (!(this instanceof Writable) && !(this instanceof Duplex))
6388 return new Writable(options);
ebd8d4e8 6389
ab78acc6 6390 this._writableState = new WritableState(options, this);
ebd8d4e8 6391
ab78acc6
IC
6392 // legacy.
6393 this.writable = true;
ebd8d4e8 6394
ab78acc6 6395 Stream.call(this);
ebd8d4e8
IC
6396}
6397
ab78acc6
IC
6398// Otherwise people can pipe Writable streams, which is just wrong.
6399Writable.prototype.pipe = function() {
6400 this.emit('error', new Error('Cannot pipe. Not readable.'));
6401};
ebd8d4e8 6402
ebd8d4e8 6403
ab78acc6
IC
6404function writeAfterEnd(stream, state, cb) {
6405 var er = new Error('write after end');
6406 // TODO: defer error events consistently everywhere, not just the cb
6407 stream.emit('error', er);
6408 process.nextTick(function() {
6409 cb(er);
6410 });
ebd8d4e8
IC
6411}
6412
ab78acc6
IC
6413// If we get something that is not a buffer, string, null, or undefined,
6414// and we're not in objectMode, then that's an error.
6415// Otherwise stream chunks are all considered to be of length=1, and the
6416// watermarks determine how many objects to keep in the buffer, rather than
6417// how many bytes or characters.
6418function validChunk(stream, state, chunk, cb) {
6419 var valid = true;
6420 if (!util.isBuffer(chunk) &&
6421 !util.isString(chunk) &&
6422 !util.isNullOrUndefined(chunk) &&
6423 !state.objectMode) {
6424 var er = new TypeError('Invalid non-string/buffer chunk');
6425 stream.emit('error', er);
6426 process.nextTick(function() {
6427 cb(er);
6428 });
6429 valid = false;
6430 }
6431 return valid;
ebd8d4e8
IC
6432}
6433
ab78acc6
IC
6434Writable.prototype.write = function(chunk, encoding, cb) {
6435 var state = this._writableState;
6436 var ret = false;
ebd8d4e8 6437
ab78acc6
IC
6438 if (util.isFunction(encoding)) {
6439 cb = encoding;
6440 encoding = null;
ebd8d4e8 6441 }
ebd8d4e8 6442
ab78acc6
IC
6443 if (util.isBuffer(chunk))
6444 encoding = 'buffer';
6445 else if (!encoding)
6446 encoding = state.defaultEncoding;
6447
6448 if (!util.isFunction(cb))
6449 cb = function() {};
6450
6451 if (state.ended)
6452 writeAfterEnd(this, state, cb);
6453 else if (validChunk(this, state, chunk, cb)) {
6454 state.pendingcb++;
6455 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6456 }
ebd8d4e8 6457
ab78acc6
IC
6458 return ret;
6459};
6460
6461Writable.prototype.cork = function() {
6462 var state = this._writableState;
6463
6464 state.corked++;
6465};
ebd8d4e8 6466
ab78acc6
IC
6467Writable.prototype.uncork = function() {
6468 var state = this._writableState;
ebd8d4e8 6469
ab78acc6
IC
6470 if (state.corked) {
6471 state.corked--;
ebd8d4e8 6472
ab78acc6
IC
6473 if (!state.writing &&
6474 !state.corked &&
6475 !state.finished &&
6476 !state.bufferProcessing &&
6477 state.buffer.length)
6478 clearBuffer(this, state);
ebd8d4e8 6479 }
ab78acc6 6480};
ebd8d4e8 6481
ab78acc6
IC
6482function decodeChunk(state, chunk, encoding) {
6483 if (!state.objectMode &&
6484 state.decodeStrings !== false &&
6485 util.isString(chunk)) {
6486 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6487 }
ab78acc6 6488 return chunk;
ebd8d4e8
IC
6489}
6490
ab78acc6
IC
6491// if we're already writing something, then just put this
6492// in the queue, and wait our turn. Otherwise, call _write
6493// If we return false, then we need a drain event, so set that flag.
6494function writeOrBuffer(stream, state, chunk, encoding, cb) {
6495 chunk = decodeChunk(state, chunk, encoding);
6496 if (util.isBuffer(chunk))
6497 encoding = 'buffer';
6498 var len = state.objectMode ? 1 : chunk.length;
6499
6500 state.length += len;
6501
6502 var ret = state.length < state.highWaterMark;
6503 // we must ensure that previous needDrain will not be reset to false.
6504 if (!ret)
6505 state.needDrain = true;
6506
6507 if (state.writing || state.corked)
6508 state.buffer.push(new WriteReq(chunk, encoding, cb));
6509 else
6510 doWrite(stream, state, false, len, chunk, encoding, cb);
6511
6512 return ret;
ebd8d4e8
IC
6513}
6514
ab78acc6
IC
6515function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6516 state.writelen = len;
6517 state.writecb = cb;
6518 state.writing = true;
6519 state.sync = true;
6520 if (writev)
6521 stream._writev(chunk, state.onwrite);
6522 else
6523 stream._write(chunk, encoding, state.onwrite);
6524 state.sync = false;
ebd8d4e8
IC
6525}
6526
ab78acc6
IC
6527function onwriteError(stream, state, sync, er, cb) {
6528 if (sync)
6529 process.nextTick(function() {
6530 state.pendingcb--;
6531 cb(er);
6532 });
6533 else {
6534 state.pendingcb--;
6535 cb(er);
6536 }
ebd8d4e8 6537
ab78acc6
IC
6538 stream._writableState.errorEmitted = true;
6539 stream.emit('error', er);
6540}
ebd8d4e8 6541
ab78acc6
IC
6542function onwriteStateUpdate(state) {
6543 state.writing = false;
6544 state.writecb = null;
6545 state.length -= state.writelen;
6546 state.writelen = 0;
6547}
ebd8d4e8 6548
ab78acc6
IC
6549function onwrite(stream, er) {
6550 var state = stream._writableState;
6551 var sync = state.sync;
6552 var cb = state.writecb;
ebd8d4e8 6553
ab78acc6 6554 onwriteStateUpdate(state);
ebd8d4e8 6555
ab78acc6
IC
6556 if (er)
6557 onwriteError(stream, state, sync, er, cb);
6558 else {
6559 // Check if we're actually ready to finish, but don't emit yet
6560 var finished = needFinish(stream, state);
ebd8d4e8 6561
ab78acc6
IC
6562 if (!finished &&
6563 !state.corked &&
6564 !state.bufferProcessing &&
6565 state.buffer.length) {
6566 clearBuffer(stream, state);
6567 }
6568
6569 if (sync) {
6570 process.nextTick(function() {
6571 afterWrite(stream, state, finished, cb);
6572 });
6573 } else {
6574 afterWrite(stream, state, finished, cb);
ebd8d4e8 6575 }
ebd8d4e8
IC
6576 }
6577}
6578
ab78acc6
IC
6579function afterWrite(stream, state, finished, cb) {
6580 if (!finished)
6581 onwriteDrain(stream, state);
6582 state.pendingcb--;
6583 cb();
6584 finishMaybe(stream, state);
6585}
6586
6587// Must force callback to be called on nextTick, so that we don't
6588// emit 'drain' before the write() consumer gets the 'false' return
6589// value, and has a chance to attach a 'drain' listener.
6590function onwriteDrain(stream, state) {
6591 if (state.length === 0 && state.needDrain) {
6592 state.needDrain = false;
6593 stream.emit('drain');
ebd8d4e8
IC
6594 }
6595}
6596
ebd8d4e8 6597
ab78acc6
IC
6598// if there's something in the buffer waiting, then process it
6599function clearBuffer(stream, state) {
6600 state.bufferProcessing = true;
6601
6602 if (stream._writev && state.buffer.length > 1) {
6603 // Fast case, write everything using _writev()
6604 var cbs = [];
6605 for (var c = 0; c < state.buffer.length; c++)
6606 cbs.push(state.buffer[c].callback);
6607
6608 // count the one we are adding, as well.
6609 // TODO(isaacs) clean this up
6610 state.pendingcb++;
6611 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6612 for (var i = 0; i < cbs.length; i++) {
6613 state.pendingcb--;
6614 cbs[i](err);
6615 }
6616 });
6617
6618 // Clear buffer
6619 state.buffer = [];
6620 } else {
6621 // Slow case, write chunks one-by-one
6622 for (var c = 0; c < state.buffer.length; c++) {
6623 var entry = state.buffer[c];
6624 var chunk = entry.chunk;
6625 var encoding = entry.encoding;
6626 var cb = entry.callback;
6627 var len = state.objectMode ? 1 : chunk.length;
6628
6629 doWrite(stream, state, false, len, chunk, encoding, cb);
6630
6631 // if we didn't call the onwrite immediately, then
6632 // it means that we need to wait until it does.
6633 // also, that means that the chunk and cb are currently
6634 // being processed, so move the buffer counter past them.
6635 if (state.writing) {
6636 c++;
6637 break;
6638 }
ebd8d4e8 6639 }
ab78acc6
IC
6640
6641 if (c < state.buffer.length)
6642 state.buffer = state.buffer.slice(c);
6643 else
6644 state.buffer.length = 0;
ebd8d4e8
IC
6645 }
6646
ab78acc6 6647 state.bufferProcessing = false;
ebd8d4e8
IC
6648}
6649
ab78acc6
IC
6650Writable.prototype._write = function(chunk, encoding, cb) {
6651 cb(new Error('not implemented'));
ebd8d4e8 6652
ab78acc6 6653};
ebd8d4e8 6654
ab78acc6 6655Writable.prototype._writev = null;
ebd8d4e8 6656
ab78acc6
IC
6657Writable.prototype.end = function(chunk, encoding, cb) {
6658 var state = this._writableState;
ebd8d4e8 6659
ab78acc6
IC
6660 if (util.isFunction(chunk)) {
6661 cb = chunk;
6662 chunk = null;
6663 encoding = null;
6664 } else if (util.isFunction(encoding)) {
6665 cb = encoding;
6666 encoding = null;
6667 }
ebd8d4e8 6668
ab78acc6
IC
6669 if (!util.isNullOrUndefined(chunk))
6670 this.write(chunk, encoding);
6671
6672 // .end() fully uncorks
6673 if (state.corked) {
6674 state.corked = 1;
6675 this.uncork();
ebd8d4e8 6676 }
ab78acc6
IC
6677
6678 // ignore unnecessary end() calls.
6679 if (!state.ending && !state.finished)
6680 endWritable(this, state, cb);
6681};
6682
6683
6684function needFinish(stream, state) {
6685 return (state.ending &&
6686 state.length === 0 &&
6687 !state.finished &&
6688 !state.writing);
ebd8d4e8
IC
6689}
6690
ab78acc6
IC
6691function prefinish(stream, state) {
6692 if (!state.prefinished) {
6693 state.prefinished = true;
6694 stream.emit('prefinish');
ebd8d4e8 6695 }
ebd8d4e8
IC
6696}
6697
ab78acc6
IC
6698function finishMaybe(stream, state) {
6699 var need = needFinish(stream, state);
6700 if (need) {
6701 if (state.pendingcb === 0) {
6702 prefinish(stream, state);
6703 state.finished = true;
6704 stream.emit('finish');
6705 } else
6706 prefinish(stream, state);
6707 }
6708 return need;
6709}
ebd8d4e8 6710
ab78acc6
IC
6711function endWritable(stream, state, cb) {
6712 state.ending = true;
6713 finishMaybe(stream, state);
6714 if (cb) {
6715 if (state.finished)
6716 process.nextTick(cb);
6717 else
6718 stream.once('finish', cb);
ebd8d4e8 6719 }
ab78acc6 6720 state.ended = true;
ebd8d4e8
IC
6721}
6722
ab78acc6
IC
6723}).call(this,require('_process'))
6724},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6725(function (Buffer){
6726// Copyright Joyent, Inc. and other Node contributors.
6727//
6728// Permission is hereby granted, free of charge, to any person obtaining a
6729// copy of this software and associated documentation files (the
6730// "Software"), to deal in the Software without restriction, including
6731// without limitation the rights to use, copy, modify, merge, publish,
6732// distribute, sublicense, and/or sell copies of the Software, and to permit
6733// persons to whom the Software is furnished to do so, subject to the
6734// following conditions:
6735//
6736// The above copyright notice and this permission notice shall be included
6737// in all copies or substantial portions of the Software.
6738//
6739// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6740// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6741// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6742// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6743// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6744// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6745// USE OR OTHER DEALINGS IN THE SOFTWARE.
6746
6747// NOTE: These type checking functions intentionally don't use `instanceof`
6748// because it is fragile and can be easily faked with `Object.create()`.
6749function isArray(ar) {
6750 return Array.isArray(ar);
ebd8d4e8 6751}
ab78acc6 6752exports.isArray = isArray;
ebd8d4e8 6753
ab78acc6
IC
6754function isBoolean(arg) {
6755 return typeof arg === 'boolean';
ebd8d4e8 6756}
ab78acc6 6757exports.isBoolean = isBoolean;
ebd8d4e8 6758
ab78acc6
IC
6759function isNull(arg) {
6760 return arg === null;
6761}
6762exports.isNull = isNull;
ebd8d4e8 6763
ab78acc6
IC
6764function isNullOrUndefined(arg) {
6765 return arg == null;
6766}
6767exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6768
ab78acc6
IC
6769function isNumber(arg) {
6770 return typeof arg === 'number';
ebd8d4e8 6771}
ab78acc6 6772exports.isNumber = isNumber;
ebd8d4e8 6773
ab78acc6
IC
6774function isString(arg) {
6775 return typeof arg === 'string';
6776}
6777exports.isString = isString;
ebd8d4e8 6778
ab78acc6
IC
6779function isSymbol(arg) {
6780 return typeof arg === 'symbol';
6781}
6782exports.isSymbol = isSymbol;
ebd8d4e8 6783
ab78acc6
IC
6784function isUndefined(arg) {
6785 return arg === void 0;
ebd8d4e8 6786}
ab78acc6 6787exports.isUndefined = isUndefined;
ebd8d4e8 6788
ab78acc6
IC
6789function isRegExp(re) {
6790 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6791}
ab78acc6 6792exports.isRegExp = isRegExp;
ebd8d4e8 6793
ab78acc6
IC
6794function isObject(arg) {
6795 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6796}
ab78acc6 6797exports.isObject = isObject;
ebd8d4e8 6798
ab78acc6
IC
6799function isDate(d) {
6800 return isObject(d) && objectToString(d) === '[object Date]';
6801}
6802exports.isDate = isDate;
ebd8d4e8 6803
ab78acc6
IC
6804function isError(e) {
6805 return isObject(e) &&
6806 (objectToString(e) === '[object Error]' || e instanceof Error);
6807}
6808exports.isError = isError;
ebd8d4e8 6809
ab78acc6
IC
6810function isFunction(arg) {
6811 return typeof arg === 'function';
6812}
6813exports.isFunction = isFunction;
6814
6815function isPrimitive(arg) {
6816 return arg === null ||
6817 typeof arg === 'boolean' ||
6818 typeof arg === 'number' ||
6819 typeof arg === 'string' ||
6820 typeof arg === 'symbol' || // ES6 symbol
6821 typeof arg === 'undefined';
ebd8d4e8 6822}
ab78acc6 6823exports.isPrimitive = isPrimitive;
ebd8d4e8 6824
ab78acc6
IC
6825function isBuffer(arg) {
6826 return Buffer.isBuffer(arg);
ebd8d4e8 6827}
ab78acc6 6828exports.isBuffer = isBuffer;
ebd8d4e8 6829
ab78acc6
IC
6830function objectToString(o) {
6831 return Object.prototype.toString.call(o);
ebd8d4e8 6832}
ab78acc6
IC
6833}).call(this,require("buffer").Buffer)
6834},{"buffer":7}],22:[function(require,module,exports){
6835module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6836
ab78acc6
IC
6837},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6838exports = module.exports = require('./lib/_stream_readable.js');
6839exports.Stream = require('stream');
6840exports.Readable = exports;
6841exports.Writable = require('./lib/_stream_writable.js');
6842exports.Duplex = require('./lib/_stream_duplex.js');
6843exports.Transform = require('./lib/_stream_transform.js');
6844exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6845
ab78acc6
IC
6846},{"./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){
6847module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6848
ab78acc6
IC
6849},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6850module.exports = require("./lib/_stream_writable.js")
6851
6852},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6853// Copyright Joyent, Inc. and other Node contributors.
6854//
6855// Permission is hereby granted, free of charge, to any person obtaining a
6856// copy of this software and associated documentation files (the
6857// "Software"), to deal in the Software without restriction, including
6858// without limitation the rights to use, copy, modify, merge, publish,
6859// distribute, sublicense, and/or sell copies of the Software, and to permit
6860// persons to whom the Software is furnished to do so, subject to the
6861// following conditions:
6862//
6863// The above copyright notice and this permission notice shall be included
6864// in all copies or substantial portions of the Software.
6865//
6866// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6867// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6868// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6869// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6870// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6871// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6872// USE OR OTHER DEALINGS IN THE SOFTWARE.
6873
6874module.exports = Stream;
6875
6876var EE = require('events').EventEmitter;
6877var inherits = require('inherits');
6878
6879inherits(Stream, EE);
6880Stream.Readable = require('readable-stream/readable.js');
6881Stream.Writable = require('readable-stream/writable.js');
6882Stream.Duplex = require('readable-stream/duplex.js');
6883Stream.Transform = require('readable-stream/transform.js');
6884Stream.PassThrough = require('readable-stream/passthrough.js');
6885
6886// Backwards-compat with node 0.4.x
6887Stream.Stream = Stream;
6888
6889
6890
6891// old-style streams. Note that the pipe method (the only relevant
6892// part of this class) is overridden in the Readable class.
6893
6894function Stream() {
6895 EE.call(this);
ebd8d4e8
IC
6896}
6897
ab78acc6
IC
6898Stream.prototype.pipe = function(dest, options) {
6899 var source = this;
ebd8d4e8 6900
ab78acc6
IC
6901 function ondata(chunk) {
6902 if (dest.writable) {
6903 if (false === dest.write(chunk) && source.pause) {
6904 source.pause();
6905 }
6906 }
6907 }
ebd8d4e8 6908
ab78acc6 6909 source.on('data', ondata);
ebd8d4e8 6910
ab78acc6
IC
6911 function ondrain() {
6912 if (source.readable && source.resume) {
6913 source.resume();
6914 }
6915 }
ebd8d4e8 6916
ab78acc6 6917 dest.on('drain', ondrain);
ebd8d4e8 6918
ab78acc6
IC
6919 // If the 'end' option is not supplied, dest.end() will be called when
6920 // source gets the 'end' or 'close' events. Only dest.end() once.
6921 if (!dest._isStdio && (!options || options.end !== false)) {
6922 source.on('end', onend);
6923 source.on('close', onclose);
ebd8d4e8
IC
6924 }
6925
ab78acc6
IC
6926 var didOnEnd = false;
6927 function onend() {
6928 if (didOnEnd) return;
6929 didOnEnd = true;
ebd8d4e8 6930
ab78acc6
IC
6931 dest.end();
6932 }
ebd8d4e8 6933
ebd8d4e8 6934
ab78acc6
IC
6935 function onclose() {
6936 if (didOnEnd) return;
6937 didOnEnd = true;
ebd8d4e8 6938
ab78acc6 6939 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6940 }
6941
ab78acc6
IC
6942 // don't leave dangling pipes when there are errors.
6943 function onerror(er) {
6944 cleanup();
6945 if (EE.listenerCount(this, 'error') === 0) {
6946 throw er; // Unhandled stream error in pipe.
6947 }
6948 }
ebd8d4e8 6949
ab78acc6
IC
6950 source.on('error', onerror);
6951 dest.on('error', onerror);
ebd8d4e8 6952
ab78acc6
IC
6953 // remove all the event listeners that were added.
6954 function cleanup() {
6955 source.removeListener('data', ondata);
6956 dest.removeListener('drain', ondrain);
ebd8d4e8 6957
ab78acc6
IC
6958 source.removeListener('end', onend);
6959 source.removeListener('close', onclose);
6960
6961 source.removeListener('error', onerror);
6962 dest.removeListener('error', onerror);
6963
6964 source.removeListener('end', cleanup);
6965 source.removeListener('close', cleanup);
6966
6967 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6968 }
6969
ab78acc6
IC
6970 source.on('end', cleanup);
6971 source.on('close', cleanup);
ebd8d4e8 6972
ab78acc6 6973 dest.on('close', cleanup);
ebd8d4e8 6974
ab78acc6 6975 dest.emit('pipe', source);
ebd8d4e8 6976
ab78acc6
IC
6977 // Allow for unix-like usage: A.pipe(B).pipe(C)
6978 return dest;
6979};
ebd8d4e8 6980
ab78acc6
IC
6981},{"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){
6982// Copyright Joyent, Inc. and other Node contributors.
6983//
6984// Permission is hereby granted, free of charge, to any person obtaining a
6985// copy of this software and associated documentation files (the
6986// "Software"), to deal in the Software without restriction, including
6987// without limitation the rights to use, copy, modify, merge, publish,
6988// distribute, sublicense, and/or sell copies of the Software, and to permit
6989// persons to whom the Software is furnished to do so, subject to the
6990// following conditions:
6991//
6992// The above copyright notice and this permission notice shall be included
6993// in all copies or substantial portions of the Software.
6994//
6995// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6996// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6997// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6998// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6999// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7000// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7001// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7002
ab78acc6 7003var Buffer = require('buffer').Buffer;
ebd8d4e8 7004
ab78acc6
IC
7005var isBufferEncoding = Buffer.isEncoding
7006 || function(encoding) {
7007 switch (encoding && encoding.toLowerCase()) {
7008 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;
7009 default: return false;
7010 }
7011 }
ebd8d4e8 7012
ebd8d4e8 7013
ab78acc6
IC
7014function assertEncoding(encoding) {
7015 if (encoding && !isBufferEncoding(encoding)) {
7016 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 7017 }
ebd8d4e8
IC
7018}
7019
ab78acc6
IC
7020// StringDecoder provides an interface for efficiently splitting a series of
7021// buffers into a series of JS strings without breaking apart multi-byte
7022// characters. CESU-8 is handled as part of the UTF-8 encoding.
7023//
7024// @TODO Handling all encodings inside a single object makes it very difficult
7025// to reason about this code, so it should be split up in the future.
7026// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7027// points as used by CESU-8.
7028var StringDecoder = exports.StringDecoder = function(encoding) {
7029 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7030 assertEncoding(encoding);
7031 switch (this.encoding) {
7032 case 'utf8':
7033 // CESU-8 represents each of Surrogate Pair by 3-bytes
7034 this.surrogateSize = 3;
7035 break;
7036 case 'ucs2':
7037 case 'utf16le':
7038 // UTF-16 represents each of Surrogate Pair by 2-bytes
7039 this.surrogateSize = 2;
7040 this.detectIncompleteChar = utf16DetectIncompleteChar;
7041 break;
7042 case 'base64':
7043 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7044 this.surrogateSize = 3;
7045 this.detectIncompleteChar = base64DetectIncompleteChar;
7046 break;
7047 default:
7048 this.write = passThroughWrite;
7049 return;
7050 }
ebd8d4e8 7051
ab78acc6
IC
7052 // Enough space to store all bytes of a single character. UTF-8 needs 4
7053 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7054 this.charBuffer = new Buffer(6);
7055 // Number of bytes received for the current incomplete multi-byte character.
7056 this.charReceived = 0;
7057 // Number of bytes expected for the current incomplete multi-byte character.
7058 this.charLength = 0;
7059};
ebd8d4e8 7060
ebd8d4e8 7061
ab78acc6
IC
7062// write decodes the given buffer and returns it as JS string that is
7063// guaranteed to not contain any partial multi-byte characters. Any partial
7064// character found at the end of the buffer is buffered up, and will be
7065// returned when calling write again with the remaining bytes.
7066//
7067// Note: Converting a Buffer containing an orphan surrogate to a String
7068// currently works, but converting a String to a Buffer (via `new Buffer`, or
7069// Buffer#write) will replace incomplete surrogates with the unicode
7070// replacement character. See https://codereview.chromium.org/121173009/ .
7071StringDecoder.prototype.write = function(buffer) {
7072 var charStr = '';
7073 // if our last write ended with an incomplete multibyte character
7074 while (this.charLength) {
7075 // determine how many remaining bytes this buffer has to offer for this char
7076 var available = (buffer.length >= this.charLength - this.charReceived) ?
7077 this.charLength - this.charReceived :
7078 buffer.length;
7079
7080 // add the new bytes to the char buffer
7081 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7082 this.charReceived += available;
7083
7084 if (this.charReceived < this.charLength) {
7085 // still not enough chars in this buffer? wait for more ...
7086 return '';
7087 }
7088
7089 // remove bytes belonging to the current character from the buffer
7090 buffer = buffer.slice(available, buffer.length);
7091
7092 // get the character that was split
7093 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7094
7095 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7096 var charCode = charStr.charCodeAt(charStr.length - 1);
7097 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7098 this.charLength += this.surrogateSize;
7099 charStr = '';
7100 continue;
7101 }
7102 this.charReceived = this.charLength = 0;
ebd8d4e8 7103
ab78acc6
IC
7104 // if there are no more bytes in this buffer, just emit our char
7105 if (buffer.length === 0) {
7106 return charStr;
7107 }
7108 break;
ebd8d4e8 7109 }
ebd8d4e8 7110
ab78acc6
IC
7111 // determine and set charLength / charReceived
7112 this.detectIncompleteChar(buffer);
ebd8d4e8 7113
ab78acc6
IC
7114 var end = buffer.length;
7115 if (this.charLength) {
7116 // buffer the incomplete character bytes we got
7117 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7118 end -= this.charReceived;
ebd8d4e8
IC
7119 }
7120
ab78acc6 7121 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7122
ab78acc6
IC
7123 var end = charStr.length - 1;
7124 var charCode = charStr.charCodeAt(end);
7125 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7126 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7127 var size = this.surrogateSize;
7128 this.charLength += size;
7129 this.charReceived += size;
7130 this.charBuffer.copy(this.charBuffer, size, 0, size);
7131 buffer.copy(this.charBuffer, 0, 0, size);
7132 return charStr.substring(0, end);
ebd8d4e8
IC
7133 }
7134
ab78acc6
IC
7135 // or just emit the charStr
7136 return charStr;
7137};
ebd8d4e8 7138
ab78acc6
IC
7139// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7140// the end of the given buffer. If so, it sets this.charLength to the byte
7141// length that character, and sets this.charReceived to the number of bytes
7142// that are available for this character.
7143StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7144 // determine how many bytes we have to check at the end of this buffer
7145 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7146
ab78acc6
IC
7147 // Figure out if one of the last i bytes of our buffer announces an
7148 // incomplete char.
7149 for (; i > 0; i--) {
7150 var c = buffer[buffer.length - i];
ebd8d4e8 7151
ab78acc6 7152 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7153
ab78acc6
IC
7154 // 110XXXXX
7155 if (i == 1 && c >> 5 == 0x06) {
7156 this.charLength = 2;
7157 break;
7158 }
ebd8d4e8 7159
ab78acc6
IC
7160 // 1110XXXX
7161 if (i <= 2 && c >> 4 == 0x0E) {
7162 this.charLength = 3;
7163 break;
7164 }
ebd8d4e8 7165
ab78acc6
IC
7166 // 11110XXX
7167 if (i <= 3 && c >> 3 == 0x1E) {
7168 this.charLength = 4;
7169 break;
7170 }
7171 }
7172 this.charReceived = i;
7173};
ebd8d4e8 7174
ab78acc6
IC
7175StringDecoder.prototype.end = function(buffer) {
7176 var res = '';
7177 if (buffer && buffer.length)
7178 res = this.write(buffer);
ebd8d4e8 7179
ab78acc6
IC
7180 if (this.charReceived) {
7181 var cr = this.charReceived;
7182 var buf = this.charBuffer;
7183 var enc = this.encoding;
7184 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7185 }
7186
ab78acc6
IC
7187 return res;
7188};
ebd8d4e8 7189
ab78acc6
IC
7190function passThroughWrite(buffer) {
7191 return buffer.toString(this.encoding);
ebd8d4e8
IC
7192}
7193
ab78acc6
IC
7194function utf16DetectIncompleteChar(buffer) {
7195 this.charReceived = buffer.length % 2;
7196 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7197}
7198
ab78acc6
IC
7199function base64DetectIncompleteChar(buffer) {
7200 this.charReceived = buffer.length % 3;
7201 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7202}
7203
ab78acc6
IC
7204},{"buffer":7}],28:[function(require,module,exports){
7205module.exports = function isBuffer(arg) {
7206 return arg && typeof arg === 'object'
7207 && typeof arg.copy === 'function'
7208 && typeof arg.fill === 'function'
7209 && typeof arg.readUInt8 === 'function';
7210}
7211},{}],29:[function(require,module,exports){
7212(function (process,global){
7213// Copyright Joyent, Inc. and other Node contributors.
7214//
7215// Permission is hereby granted, free of charge, to any person obtaining a
7216// copy of this software and associated documentation files (the
7217// "Software"), to deal in the Software without restriction, including
7218// without limitation the rights to use, copy, modify, merge, publish,
7219// distribute, sublicense, and/or sell copies of the Software, and to permit
7220// persons to whom the Software is furnished to do so, subject to the
7221// following conditions:
7222//
7223// The above copyright notice and this permission notice shall be included
7224// in all copies or substantial portions of the Software.
7225//
7226// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7227// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7228// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7229// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7230// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7231// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7232// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7233
ab78acc6
IC
7234var formatRegExp = /%[sdj%]/g;
7235exports.format = function(f) {
7236 if (!isString(f)) {
7237 var objects = [];
7238 for (var i = 0; i < arguments.length; i++) {
7239 objects.push(inspect(arguments[i]));
7240 }
7241 return objects.join(' ');
7242 }
ebd8d4e8 7243
ab78acc6
IC
7244 var i = 1;
7245 var args = arguments;
7246 var len = args.length;
7247 var str = String(f).replace(formatRegExp, function(x) {
7248 if (x === '%%') return '%';
7249 if (i >= len) return x;
7250 switch (x) {
7251 case '%s': return String(args[i++]);
7252 case '%d': return Number(args[i++]);
7253 case '%j':
7254 try {
7255 return JSON.stringify(args[i++]);
7256 } catch (_) {
7257 return '[Circular]';
7258 }
7259 default:
7260 return x;
7261 }
7262 });
7263 for (var x = args[i]; i < len; x = args[++i]) {
7264 if (isNull(x) || !isObject(x)) {
7265 str += ' ' + x;
7266 } else {
7267 str += ' ' + inspect(x);
7268 }
7269 }
7270 return str;
7271};
ebd8d4e8 7272
ebd8d4e8 7273
ab78acc6
IC
7274// Mark that a method should not be used.
7275// Returns a modified function which warns once by default.
7276// If --no-deprecation is set, then it is a no-op.
7277exports.deprecate = function(fn, msg) {
7278 // Allow for deprecating things in the process of starting up.
7279 if (isUndefined(global.process)) {
7280 return function() {
7281 return exports.deprecate(fn, msg).apply(this, arguments);
7282 };
7283 }
ebd8d4e8 7284
ab78acc6
IC
7285 if (process.noDeprecation === true) {
7286 return fn;
7287 }
ebd8d4e8 7288
ab78acc6
IC
7289 var warned = false;
7290 function deprecated() {
7291 if (!warned) {
7292 if (process.throwDeprecation) {
7293 throw new Error(msg);
7294 } else if (process.traceDeprecation) {
7295 console.trace(msg);
7296 } else {
7297 console.error(msg);
7298 }
7299 warned = true;
7300 }
7301 return fn.apply(this, arguments);
7302 }
ebd8d4e8 7303
ab78acc6
IC
7304 return deprecated;
7305};
ebd8d4e8 7306
ebd8d4e8 7307
ab78acc6
IC
7308var debugs = {};
7309var debugEnviron;
7310exports.debuglog = function(set) {
7311 if (isUndefined(debugEnviron))
7312 debugEnviron = process.env.NODE_DEBUG || '';
7313 set = set.toUpperCase();
7314 if (!debugs[set]) {
7315 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7316 var pid = process.pid;
7317 debugs[set] = function() {
7318 var msg = exports.format.apply(exports, arguments);
7319 console.error('%s %d: %s', set, pid, msg);
7320 };
7321 } else {
7322 debugs[set] = function() {};
ebd8d4e8
IC
7323 }
7324 }
ab78acc6
IC
7325 return debugs[set];
7326};
ebd8d4e8 7327
ebd8d4e8
IC
7328
7329/**
ab78acc6
IC
7330 * Echos the value of a value. Trys to print the value out
7331 * in the best way possible given the different types.
7332 *
7333 * @param {Object} obj The object to print out.
7334 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7335 */
ab78acc6
IC
7336/* legacy: obj, showHidden, depth, colors*/
7337function inspect(obj, opts) {
7338 // default options
7339 var ctx = {
7340 seen: [],
7341 stylize: stylizeNoColor
7342 };
7343 // legacy...
7344 if (arguments.length >= 3) ctx.depth = arguments[2];
7345 if (arguments.length >= 4) ctx.colors = arguments[3];
7346 if (isBoolean(opts)) {
7347 // legacy...
7348 ctx.showHidden = opts;
7349 } else if (opts) {
7350 // got an "options" object
7351 exports._extend(ctx, opts);
ebd8d4e8 7352 }
ab78acc6
IC
7353 // set default options
7354 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7355 if (isUndefined(ctx.depth)) ctx.depth = 2;
7356 if (isUndefined(ctx.colors)) ctx.colors = false;
7357 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7358 if (ctx.colors) ctx.stylize = stylizeWithColor;
7359 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7360}
ab78acc6 7361exports.inspect = inspect;
ebd8d4e8 7362
ebd8d4e8 7363
ab78acc6
IC
7364// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7365inspect.colors = {
7366 'bold' : [1, 22],
7367 'italic' : [3, 23],
7368 'underline' : [4, 24],
7369 'inverse' : [7, 27],
7370 'white' : [37, 39],
7371 'grey' : [90, 39],
7372 'black' : [30, 39],
7373 'blue' : [34, 39],
7374 'cyan' : [36, 39],
7375 'green' : [32, 39],
7376 'magenta' : [35, 39],
7377 'red' : [31, 39],
7378 'yellow' : [33, 39]
7379};
ebd8d4e8 7380
ab78acc6
IC
7381// Don't use 'blue' not visible on cmd.exe
7382inspect.styles = {
7383 'special': 'cyan',
7384 'number': 'yellow',
7385 'boolean': 'yellow',
7386 'undefined': 'grey',
7387 'null': 'bold',
7388 'string': 'green',
7389 'date': 'magenta',
7390 // "name": intentionally not styling
7391 'regexp': 'red'
7392};
ebd8d4e8 7393
ebd8d4e8 7394
ab78acc6
IC
7395function stylizeWithColor(str, styleType) {
7396 var style = inspect.styles[styleType];
ebd8d4e8 7397
ab78acc6
IC
7398 if (style) {
7399 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7400 '\u001b[' + inspect.colors[style][1] + 'm';
7401 } else {
7402 return str;
ebd8d4e8 7403 }
ebd8d4e8
IC
7404}
7405
ebd8d4e8 7406
ab78acc6
IC
7407function stylizeNoColor(str, styleType) {
7408 return str;
ebd8d4e8
IC
7409}
7410
ebd8d4e8 7411
ab78acc6
IC
7412function arrayToHash(array) {
7413 var hash = {};
ebd8d4e8 7414
ab78acc6
IC
7415 array.forEach(function(val, idx) {
7416 hash[val] = true;
7417 });
ebd8d4e8 7418
ab78acc6 7419 return hash;
ebd8d4e8
IC
7420}
7421
ebd8d4e8 7422
ab78acc6
IC
7423function formatValue(ctx, value, recurseTimes) {
7424 // Provide a hook for user-specified inspect functions.
7425 // Check that value is an object with an inspect function on it
7426 if (ctx.customInspect &&
7427 value &&
7428 isFunction(value.inspect) &&
7429 // Filter out the util module, it's inspect function is special
7430 value.inspect !== exports.inspect &&
7431 // Also filter out any prototype objects using the circular check.
7432 !(value.constructor && value.constructor.prototype === value)) {
7433 var ret = value.inspect(recurseTimes, ctx);
7434 if (!isString(ret)) {
7435 ret = formatValue(ctx, ret, recurseTimes);
7436 }
7437 return ret;
ebd8d4e8 7438 }
ebd8d4e8 7439
ab78acc6
IC
7440 // Primitive types cannot have properties
7441 var primitive = formatPrimitive(ctx, value);
7442 if (primitive) {
7443 return primitive;
ebd8d4e8
IC
7444 }
7445
ab78acc6
IC
7446 // Look up the keys of the object.
7447 var keys = Object.keys(value);
7448 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7449
ab78acc6
IC
7450 if (ctx.showHidden) {
7451 keys = Object.getOwnPropertyNames(value);
7452 }
ebd8d4e8 7453
ab78acc6
IC
7454 // IE doesn't make error fields non-enumerable
7455 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7456 if (isError(value)
7457 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7458 return formatError(value);
ebd8d4e8 7459 }
ebd8d4e8 7460
ab78acc6
IC
7461 // Some type of object without properties can be shortcutted.
7462 if (keys.length === 0) {
7463 if (isFunction(value)) {
7464 var name = value.name ? ': ' + value.name : '';
7465 return ctx.stylize('[Function' + name + ']', 'special');
7466 }
7467 if (isRegExp(value)) {
7468 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7469 }
7470 if (isDate(value)) {
7471 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7472 }
7473 if (isError(value)) {
7474 return formatError(value);
7475 }
ebd8d4e8 7476 }
ebd8d4e8 7477
ab78acc6 7478 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7479
ab78acc6
IC
7480 // Make Array say that they are Array
7481 if (isArray(value)) {
7482 array = true;
7483 braces = ['[', ']'];
7484 }
ebd8d4e8 7485
ab78acc6
IC
7486 // Make functions say that they are functions
7487 if (isFunction(value)) {
7488 var n = value.name ? ': ' + value.name : '';
7489 base = ' [Function' + n + ']';
7490 }
ebd8d4e8 7491
ab78acc6
IC
7492 // Make RegExps say that they are RegExps
7493 if (isRegExp(value)) {
7494 base = ' ' + RegExp.prototype.toString.call(value);
7495 }
ebd8d4e8 7496
ab78acc6
IC
7497 // Make dates with properties first say the date
7498 if (isDate(value)) {
7499 base = ' ' + Date.prototype.toUTCString.call(value);
7500 }
ebd8d4e8 7501
ab78acc6
IC
7502 // Make error with message first say the error
7503 if (isError(value)) {
7504 base = ' ' + formatError(value);
7505 }
ebd8d4e8 7506
ab78acc6
IC
7507 if (keys.length === 0 && (!array || value.length == 0)) {
7508 return braces[0] + base + braces[1];
7509 }
ebd8d4e8 7510
ab78acc6
IC
7511 if (recurseTimes < 0) {
7512 if (isRegExp(value)) {
7513 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7514 } else {
7515 return ctx.stylize('[Object]', 'special');
7516 }
7517 }
ebd8d4e8 7518
ab78acc6 7519 ctx.seen.push(value);
ebd8d4e8 7520
ab78acc6
IC
7521 var output;
7522 if (array) {
7523 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7524 } else {
7525 output = keys.map(function(key) {
7526 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7527 });
7528 }
ebd8d4e8 7529
ab78acc6 7530 ctx.seen.pop();
ebd8d4e8 7531
ab78acc6
IC
7532 return reduceToSingleString(output, base, braces);
7533}
ebd8d4e8 7534
ebd8d4e8 7535
ab78acc6
IC
7536function formatPrimitive(ctx, value) {
7537 if (isUndefined(value))
7538 return ctx.stylize('undefined', 'undefined');
7539 if (isString(value)) {
7540 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7541 .replace(/'/g, "\\'")
7542 .replace(/\\"/g, '"') + '\'';
7543 return ctx.stylize(simple, 'string');
7544 }
7545 if (isNumber(value))
7546 return ctx.stylize('' + value, 'number');
7547 if (isBoolean(value))
7548 return ctx.stylize('' + value, 'boolean');
7549 // For some reason typeof null is "object", so special case here.
7550 if (isNull(value))
7551 return ctx.stylize('null', 'null');
7552}
ebd8d4e8 7553
ebd8d4e8 7554
ab78acc6
IC
7555function formatError(value) {
7556 return '[' + Error.prototype.toString.call(value) + ']';
7557}
ebd8d4e8 7558
ebd8d4e8 7559
ab78acc6
IC
7560function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7561 var output = [];
7562 for (var i = 0, l = value.length; i < l; ++i) {
7563 if (hasOwnProperty(value, String(i))) {
7564 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7565 String(i), true));
7566 } else {
7567 output.push('');
7568 }
7569 }
7570 keys.forEach(function(key) {
7571 if (!key.match(/^\d+$/)) {
7572 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7573 key, true));
7574 }
7575 });
7576 return output;
7577}
ebd8d4e8 7578
ebd8d4e8 7579
ab78acc6
IC
7580function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7581 var name, str, desc;
7582 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7583 if (desc.get) {
7584 if (desc.set) {
7585 str = ctx.stylize('[Getter/Setter]', 'special');
7586 } else {
7587 str = ctx.stylize('[Getter]', 'special');
7588 }
7589 } else {
7590 if (desc.set) {
7591 str = ctx.stylize('[Setter]', 'special');
7592 }
7593 }
7594 if (!hasOwnProperty(visibleKeys, key)) {
7595 name = '[' + key + ']';
7596 }
7597 if (!str) {
7598 if (ctx.seen.indexOf(desc.value) < 0) {
7599 if (isNull(recurseTimes)) {
7600 str = formatValue(ctx, desc.value, null);
7601 } else {
7602 str = formatValue(ctx, desc.value, recurseTimes - 1);
7603 }
7604 if (str.indexOf('\n') > -1) {
7605 if (array) {
7606 str = str.split('\n').map(function(line) {
7607 return ' ' + line;
7608 }).join('\n').substr(2);
7609 } else {
7610 str = '\n' + str.split('\n').map(function(line) {
7611 return ' ' + line;
7612 }).join('\n');
7613 }
7614 }
7615 } else {
7616 str = ctx.stylize('[Circular]', 'special');
7617 }
7618 }
7619 if (isUndefined(name)) {
7620 if (array && key.match(/^\d+$/)) {
7621 return str;
7622 }
7623 name = JSON.stringify('' + key);
7624 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7625 name = name.substr(1, name.length - 2);
7626 name = ctx.stylize(name, 'name');
7627 } else {
7628 name = name.replace(/'/g, "\\'")
7629 .replace(/\\"/g, '"')
7630 .replace(/(^"|"$)/g, "'");
7631 name = ctx.stylize(name, 'string');
7632 }
7633 }
ebd8d4e8 7634
ab78acc6
IC
7635 return name + ': ' + str;
7636}
ebd8d4e8 7637
ebd8d4e8 7638
ab78acc6
IC
7639function reduceToSingleString(output, base, braces) {
7640 var numLinesEst = 0;
7641 var length = output.reduce(function(prev, cur) {
7642 numLinesEst++;
7643 if (cur.indexOf('\n') >= 0) numLinesEst++;
7644 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7645 }, 0);
ebd8d4e8 7646
ab78acc6
IC
7647 if (length > 60) {
7648 return braces[0] +
7649 (base === '' ? '' : base + '\n ') +
7650 ' ' +
7651 output.join(',\n ') +
7652 ' ' +
7653 braces[1];
7654 }
ebd8d4e8 7655
ab78acc6
IC
7656 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7657}
ebd8d4e8 7658
ebd8d4e8 7659
ab78acc6
IC
7660// NOTE: These type checking functions intentionally don't use `instanceof`
7661// because it is fragile and can be easily faked with `Object.create()`.
7662function isArray(ar) {
7663 return Array.isArray(ar);
7664}
7665exports.isArray = isArray;
ebd8d4e8 7666
ab78acc6
IC
7667function isBoolean(arg) {
7668 return typeof arg === 'boolean';
7669}
7670exports.isBoolean = isBoolean;
ebd8d4e8 7671
ab78acc6
IC
7672function isNull(arg) {
7673 return arg === null;
7674}
7675exports.isNull = isNull;
ebd8d4e8 7676
ab78acc6
IC
7677function isNullOrUndefined(arg) {
7678 return arg == null;
7679}
7680exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7681
ab78acc6
IC
7682function isNumber(arg) {
7683 return typeof arg === 'number';
7684}
7685exports.isNumber = isNumber;
ebd8d4e8 7686
ab78acc6
IC
7687function isString(arg) {
7688 return typeof arg === 'string';
7689}
7690exports.isString = isString;
ebd8d4e8 7691
ab78acc6
IC
7692function isSymbol(arg) {
7693 return typeof arg === 'symbol';
7694}
7695exports.isSymbol = isSymbol;
ebd8d4e8 7696
ab78acc6
IC
7697function isUndefined(arg) {
7698 return arg === void 0;
7699}
7700exports.isUndefined = isUndefined;
ebd8d4e8 7701
ab78acc6
IC
7702function isRegExp(re) {
7703 return isObject(re) && objectToString(re) === '[object RegExp]';
7704}
7705exports.isRegExp = isRegExp;
ebd8d4e8 7706
ab78acc6
IC
7707function isObject(arg) {
7708 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7709}
ab78acc6 7710exports.isObject = isObject;
ebd8d4e8 7711
ab78acc6
IC
7712function isDate(d) {
7713 return isObject(d) && objectToString(d) === '[object Date]';
7714}
7715exports.isDate = isDate;
ebd8d4e8 7716
ab78acc6
IC
7717function isError(e) {
7718 return isObject(e) &&
7719 (objectToString(e) === '[object Error]' || e instanceof Error);
7720}
7721exports.isError = isError;
ebd8d4e8 7722
ab78acc6
IC
7723function isFunction(arg) {
7724 return typeof arg === 'function';
7725}
7726exports.isFunction = isFunction;
ebd8d4e8 7727
ab78acc6
IC
7728function isPrimitive(arg) {
7729 return arg === null ||
7730 typeof arg === 'boolean' ||
7731 typeof arg === 'number' ||
7732 typeof arg === 'string' ||
7733 typeof arg === 'symbol' || // ES6 symbol
7734 typeof arg === 'undefined';
7735}
7736exports.isPrimitive = isPrimitive;
ebd8d4e8 7737
ab78acc6 7738exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7739
ab78acc6
IC
7740function objectToString(o) {
7741 return Object.prototype.toString.call(o);
7742}
ebd8d4e8 7743
ebd8d4e8 7744
ab78acc6
IC
7745function pad(n) {
7746 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7747}
ebd8d4e8 7748
ebd8d4e8 7749
ab78acc6
IC
7750var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7751 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7752
ab78acc6
IC
7753// 26 Feb 16:19:34
7754function timestamp() {
7755 var d = new Date();
7756 var time = [pad(d.getHours()),
7757 pad(d.getMinutes()),
7758 pad(d.getSeconds())].join(':');
7759 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7760}
7761
ab78acc6
IC
7762
7763// log is just a thin wrapper to console.log that prepends a timestamp
7764exports.log = function() {
7765 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7766};
7767
ab78acc6
IC
7768
7769/**
7770 * Inherit the prototype methods from one constructor into another.
7771 *
7772 * The Function.prototype.inherits from lang.js rewritten as a standalone
7773 * function (not on Function.prototype). NOTE: If this file is to be loaded
7774 * during bootstrapping this function needs to be rewritten using some native
7775 * functions as prototype setup using normal JavaScript does not work as
7776 * expected during bootstrapping (see mirror.js in r114903).
7777 *
7778 * @param {function} ctor Constructor function which needs to inherit the
7779 * prototype.
7780 * @param {function} superCtor Constructor function to inherit prototype from.
7781 */
7782exports.inherits = require('inherits');
7783
7784exports._extend = function(origin, add) {
7785 // Don't do anything if add isn't an object
7786 if (!add || !isObject(add)) return origin;
7787
7788 var keys = Object.keys(add);
7789 var i = keys.length;
7790 while (i--) {
7791 origin[keys[i]] = add[keys[i]];
7792 }
7793 return origin;
7794};
7795
7796function hasOwnProperty(obj, prop) {
7797 return Object.prototype.hasOwnProperty.call(obj, prop);
7798}
7799
7800}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7801},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7802// Base58 encoding/decoding
7803// Originally written by Mike Hearn for BitcoinJ
7804// Copyright (c) 2011 Google Inc
7805// Ported to JavaScript by Stefan Thomas
7806// Merged Buffer refactorings from base58-native by Stephen Pair
7807// Copyright (c) 2013 BitPay Inc
7808
ebd8d4e8 7809var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7810var ALPHABET_MAP = {}
7811for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7812 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7813}
ab78acc6 7814var BASE = 58
ebd8d4e8
IC
7815
7816function encode(buffer) {
ab78acc6
IC
7817 if (buffer.length === 0) return ''
7818
7819 var i, j, digits = [0]
7820 for (i = 0; i < buffer.length; i++) {
7821 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7822
7823 digits[0] += buffer[i]
ebd8d4e8 7824
ab78acc6
IC
7825 var carry = 0
7826 for (j = 0; j < digits.length; ++j) {
7827 digits[j] += carry
ebd8d4e8 7828
ab78acc6
IC
7829 carry = (digits[j] / BASE) | 0
7830 digits[j] %= BASE
7831 }
7832
7833 while (carry) {
7834 digits.push(carry % BASE)
7835
7836 carry = (carry / BASE) | 0
7837 }
ebd8d4e8
IC
7838 }
7839
7840 // deal with leading zeros
ab78acc6 7841 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7842
ab78acc6
IC
7843 // convert digits to a string
7844 var stringOutput = ""
7845 for (var i = digits.length - 1; i >= 0; i--) {
7846 stringOutput = stringOutput + ALPHABET[digits[i]]
7847 }
7848 return stringOutput
ebd8d4e8
IC
7849}
7850
7851function decode(string) {
ab78acc6 7852 if (string.length === 0) return []
ebd8d4e8 7853
ab78acc6
IC
7854 var i, j, bytes = [0]
7855 for (i = 0; i < string.length; i++) {
7856 var c = string[i]
7857 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7858
ab78acc6
IC
7859 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7860 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7861
ab78acc6
IC
7862 var carry = 0
7863 for (j = 0; j < bytes.length; ++j) {
7864 bytes[j] += carry
ebd8d4e8 7865
ab78acc6
IC
7866 carry = bytes[j] >> 8
7867 bytes[j] &= 0xff
7868 }
ebd8d4e8 7869
ab78acc6
IC
7870 while (carry) {
7871 bytes.push(carry & 0xff)
7872
7873 carry >>= 8
7874 }
ebd8d4e8
IC
7875 }
7876
ab78acc6
IC
7877 // deal with leading zeros
7878 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7879
ab78acc6 7880 return bytes.reverse()
ebd8d4e8
IC
7881}
7882
7883module.exports = {
7884 encode: encode,
7885 decode: decode
7886}
7887
ab78acc6 7888},{}],31:[function(require,module,exports){
ebd8d4e8 7889(function (Buffer){
ab78acc6
IC
7890'use strict'
7891
7892var base58 = require('bs58')
7893var createHash = require('create-hash')
7894
7895// SHA256(SHA256(buffer))
7896function sha256x2 (buffer) {
7897 buffer = createHash('sha256').update(buffer).digest()
7898 return createHash('sha256').update(buffer).digest()
7899}
7900
7901// Encode a buffer as a base58-check encoded string
7902function encode (payload) {
7903 var checksum = sha256x2(payload).slice(0, 4)
7904
7905 return base58.encode(Buffer.concat([
7906 payload,
7907 checksum
7908 ]))
7909}
7910
7911// Decode a base58-check encoded string to a buffer
7912function decode (string) {
7913 var buffer = new Buffer(base58.decode(string))
7914
7915 var payload = buffer.slice(0, -4)
7916 var checksum = buffer.slice(-4)
7917 var newChecksum = sha256x2(payload).slice(0, 4)
7918
7919 for (var i = 0; i < newChecksum.length; ++i) {
7920 if (newChecksum[i] === checksum[i]) continue
7921
7922 throw new Error('Invalid checksum')
ebd8d4e8 7923 }
ab78acc6
IC
7924
7925 return payload
ebd8d4e8
IC
7926}
7927
ab78acc6
IC
7928module.exports = {
7929 encode: encode,
7930 decode: decode
ebd8d4e8
IC
7931}
7932
ab78acc6
IC
7933}).call(this,require("buffer").Buffer)
7934},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7935(function (Buffer){
ab78acc6
IC
7936'use strict';
7937var inherits = require('inherits')
7938var md5 = require('./md5')
7939var rmd160 = require('ripemd160')
7940var sha = require('sha.js')
ebd8d4e8 7941
ab78acc6 7942var Transform = require('stream').Transform
ebd8d4e8 7943
ab78acc6
IC
7944function HashNoConstructor(hash) {
7945 Transform.call(this)
ebd8d4e8 7946
ab78acc6
IC
7947 this._hash = hash
7948 this.buffers = []
7949}
ebd8d4e8 7950
ab78acc6 7951inherits(HashNoConstructor, Transform)
ebd8d4e8 7952
ab78acc6
IC
7953HashNoConstructor.prototype._transform = function (data, _, next) {
7954 this.buffers.push(data)
ebd8d4e8 7955
ab78acc6
IC
7956 next()
7957}
ebd8d4e8 7958
ab78acc6
IC
7959HashNoConstructor.prototype._flush = function (next) {
7960 this.push(this.digest())
7961 next()
7962}
7963
7964HashNoConstructor.prototype.update = function (data, enc) {
7965 if (typeof data === 'string') {
7966 data = new Buffer(data, enc)
ebd8d4e8
IC
7967 }
7968
ab78acc6
IC
7969 this.buffers.push(data)
7970 return this
7971}
7972
7973HashNoConstructor.prototype.digest = function (enc) {
7974 var buf = Buffer.concat(this.buffers)
7975 var r = this._hash(buf)
7976 this.buffers = null
7977
7978 return enc ? r.toString(enc) : r
7979}
7980
7981function Hash(hash) {
7982 Transform.call(this)
7983
7984 this._hash = hash
7985}
7986
7987inherits(Hash, Transform)
7988
7989Hash.prototype._transform = function (data, enc, next) {
7990 if (enc) data = new Buffer(data, enc)
7991
7992 this._hash.update(data)
7993
7994 next()
ebd8d4e8
IC
7995}
7996
ab78acc6
IC
7997Hash.prototype._flush = function (next) {
7998 this.push(this._hash.digest())
7999 this._hash = null
8000
8001 next()
8002}
8003
8004Hash.prototype.update = function (data, enc) {
8005 if (typeof data === 'string') {
8006 data = new Buffer(data, enc)
8007 }
8008
8009 this._hash.update(data)
ebd8d4e8
IC
8010 return this
8011}
8012
ab78acc6
IC
8013Hash.prototype.digest = function (enc) {
8014 var outData = this._hash.digest()
8015
8016 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
8017}
8018
ab78acc6
IC
8019module.exports = function createHash (alg) {
8020 if ('md5' === alg) return new HashNoConstructor(md5)
8021 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8022
8023 return new Hash(sha(alg))
8024}
ebd8d4e8 8025
ab78acc6
IC
8026}).call(this,require("buffer").Buffer)
8027},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 8028(function (Buffer){
ab78acc6 8029'use strict';
ebd8d4e8
IC
8030var intSize = 4;
8031var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8032var chrsz = 8;
8033
8034function toArray(buf, bigEndian) {
8035 if ((buf.length % intSize) !== 0) {
8036 var len = buf.length + (intSize - (buf.length % intSize));
8037 buf = Buffer.concat([buf, zeroBuffer], len);
8038 }
8039
8040 var arr = [];
8041 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8042 for (var i = 0; i < buf.length; i += intSize) {
8043 arr.push(fn.call(buf, i));
8044 }
8045 return arr;
8046}
8047
8048function toBuffer(arr, size, bigEndian) {
8049 var buf = new Buffer(size);
8050 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8051 for (var i = 0; i < arr.length; i++) {
8052 fn.call(buf, arr[i], i * 4, true);
8053 }
8054 return buf;
8055}
8056
8057function hash(buf, fn, hashSize, bigEndian) {
8058 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8059 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8060 return toBuffer(arr, hashSize, bigEndian);
8061}
ab78acc6
IC
8062exports.hash = hash;
8063}).call(this,require("buffer").Buffer)
8064},{"buffer":7}],34:[function(require,module,exports){
8065'use strict';
ebd8d4e8
IC
8066/*
8067 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8068 * Digest Algorithm, as defined in RFC 1321.
8069 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8070 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8071 * Distributed under the BSD License
8072 * See http://pajhome.org.uk/crypt/md5 for more info.
8073 */
8074
ab78acc6 8075var helpers = require('./helpers');
ebd8d4e8
IC
8076
8077/*
8078 * Calculate the MD5 of an array of little-endian words, and a bit length
8079 */
8080function core_md5(x, len)
8081{
8082 /* append padding */
8083 x[len >> 5] |= 0x80 << ((len) % 32);
8084 x[(((len + 64) >>> 9) << 4) + 14] = len;
8085
8086 var a = 1732584193;
8087 var b = -271733879;
8088 var c = -1732584194;
8089 var d = 271733878;
8090
8091 for(var i = 0; i < x.length; i += 16)
8092 {
8093 var olda = a;
8094 var oldb = b;
8095 var oldc = c;
8096 var oldd = d;
8097
8098 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8099 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8100 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8101 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8102 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8103 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8104 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8105 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8106 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8107 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8108 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8109 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8110 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8111 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8112 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8113 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8114
8115 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8116 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8117 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8118 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8119 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8120 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8121 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8122 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8123 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8124 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8125 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8126 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8127 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8128 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8129 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8130 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8131
8132 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8133 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8134 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8135 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8136 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8137 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8138 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8139 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8140 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8141 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8142 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8143 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8144 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8145 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8146 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8147 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8148
8149 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8150 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8151 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8152 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8153 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8154 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8155 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8156 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8157 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8158 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8159 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8160 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8161 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8162 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8163 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8164 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8165
8166 a = safe_add(a, olda);
8167 b = safe_add(b, oldb);
8168 c = safe_add(c, oldc);
8169 d = safe_add(d, oldd);
8170 }
8171 return Array(a, b, c, d);
8172
8173}
8174
8175/*
8176 * These functions implement the four basic operations the algorithm uses.
8177 */
8178function md5_cmn(q, a, b, x, s, t)
8179{
8180 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8181}
8182function md5_ff(a, b, c, d, x, s, t)
8183{
8184 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8185}
8186function md5_gg(a, b, c, d, x, s, t)
8187{
8188 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8189}
8190function md5_hh(a, b, c, d, x, s, t)
8191{
8192 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8193}
8194function md5_ii(a, b, c, d, x, s, t)
8195{
8196 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8197}
8198
8199/*
8200 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8201 * to work around bugs in some JS interpreters.
8202 */
8203function safe_add(x, y)
8204{
8205 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8206 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8207 return (msw << 16) | (lsw & 0xFFFF);
8208}
8209
8210/*
8211 * Bitwise rotate a 32-bit number to the left.
8212 */
8213function bit_rol(num, cnt)
8214{
8215 return (num << cnt) | (num >>> (32 - cnt));
8216}
8217
8218module.exports = function md5(buf) {
8219 return helpers.hash(buf, core_md5, 16);
8220};
ab78acc6
IC
8221},{"./helpers":33}],35:[function(require,module,exports){
8222arguments[4][12][0].apply(exports,arguments)
8223},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8224(function (Buffer){
ebd8d4e8
IC
8225/*
8226CryptoJS v3.1.2
8227code.google.com/p/crypto-js
8228(c) 2009-2013 by Jeff Mott. All rights reserved.
8229code.google.com/p/crypto-js/wiki/License
8230*/
8231/** @preserve
8232(c) 2012 by Cédric Mesnil. All rights reserved.
8233
8234Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8235
8236 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8237 - 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.
8238
8239THIS 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.
8240*/
8241
ab78acc6 8242// constants table
ebd8d4e8 8243var zl = [
ab78acc6
IC
8244 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8245 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8246 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8247 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8248 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8249]
8250
ebd8d4e8 8251var zr = [
ab78acc6
IC
8252 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8253 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8254 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8255 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8256 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8257]
8258
ebd8d4e8 8259var sl = [
ab78acc6
IC
8260 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8261 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8262 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8263 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8264 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8265]
8266
ebd8d4e8 8267var sr = [
ab78acc6
IC
8268 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8269 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8270 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8271 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8272 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8273]
ebd8d4e8 8274
ab78acc6
IC
8275var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8276var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8277
ab78acc6
IC
8278function bytesToWords (bytes) {
8279 var words = []
ebd8d4e8 8280 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8281 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8282 }
ab78acc6
IC
8283 return words
8284}
ebd8d4e8 8285
ab78acc6
IC
8286function wordsToBytes (words) {
8287 var bytes = []
ebd8d4e8 8288 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8289 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8290 }
ab78acc6
IC
8291 return bytes
8292}
ebd8d4e8 8293
ab78acc6
IC
8294function processBlock (H, M, offset) {
8295 // swap endian
ebd8d4e8 8296 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8297 var offset_i = offset + i
8298 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8299
8300 // Swap
8301 M[offset_i] = (
ab78acc6
IC
8302 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8303 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8304 )
ebd8d4e8
IC
8305 }
8306
8307 // Working variables
ab78acc6
IC
8308 var al, bl, cl, dl, el
8309 var ar, br, cr, dr, er
8310
8311 ar = al = H[0]
8312 br = bl = H[1]
8313 cr = cl = H[2]
8314 dr = dl = H[3]
8315 er = el = H[4]
8316
8317 // computation
8318 var t
8319 for (i = 0; i < 80; i += 1) {
8320 t = (al + M[offset + zl[i]]) | 0
8321 if (i < 16) {
8322 t += f1(bl, cl, dl) + hl[0]
8323 } else if (i < 32) {
8324 t += f2(bl, cl, dl) + hl[1]
8325 } else if (i < 48) {
8326 t += f3(bl, cl, dl) + hl[2]
8327 } else if (i < 64) {
8328 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8329 } else {// if (i<80) {
ab78acc6
IC
8330 t += f5(bl, cl, dl) + hl[4]
8331 }
8332 t = t | 0
8333 t = rotl(t, sl[i])
8334 t = (t + el) | 0
8335 al = el
8336 el = dl
8337 dl = rotl(cl, 10)
8338 cl = bl
8339 bl = t
8340
8341 t = (ar + M[offset + zr[i]]) | 0
8342 if (i < 16) {
8343 t += f5(br, cr, dr) + hr[0]
8344 } else if (i < 32) {
8345 t += f4(br, cr, dr) + hr[1]
8346 } else if (i < 48) {
8347 t += f3(br, cr, dr) + hr[2]
8348 } else if (i < 64) {
8349 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8350 } else {// if (i<80) {
ab78acc6 8351 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8352 }
ebd8d4e8 8353
ab78acc6
IC
8354 t = t | 0
8355 t = rotl(t, sr[i])
8356 t = (t + er) | 0
8357 ar = er
8358 er = dr
8359 dr = rotl(cr, 10)
8360 cr = br
8361 br = t
8362 }
8363
8364 // intermediate hash value
8365 t = (H[1] + cl + dr) | 0
8366 H[1] = (H[2] + dl + er) | 0
8367 H[2] = (H[3] + el + ar) | 0
8368 H[3] = (H[4] + al + br) | 0
8369 H[4] = (H[0] + bl + cr) | 0
8370 H[0] = t
ebd8d4e8
IC
8371}
8372
ab78acc6
IC
8373function f1 (x, y, z) {
8374 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8375}
8376
ab78acc6
IC
8377function f2 (x, y, z) {
8378 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8379}
8380
ab78acc6
IC
8381function f3 (x, y, z) {
8382 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8383}
8384
ab78acc6
IC
8385function f4 (x, y, z) {
8386 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8387}
8388
ab78acc6
IC
8389function f5 (x, y, z) {
8390 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8391}
8392
ab78acc6
IC
8393function rotl (x, n) {
8394 return (x << n) | (x >>> (32 - n))
8395}
8396
8397function ripemd160 (message) {
8398 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8399
ab78acc6
IC
8400 if (typeof message === 'string') {
8401 message = new Buffer(message, 'utf8')
8402 }
ebd8d4e8 8403
ab78acc6 8404 var m = bytesToWords(message)
ebd8d4e8 8405
ab78acc6
IC
8406 var nBitsLeft = message.length * 8
8407 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8408
8409 // Add padding
ab78acc6 8410 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8411 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8412 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8413 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8414 )
ebd8d4e8 8415
ab78acc6
IC
8416 for (var i = 0; i < m.length; i += 16) {
8417 processBlock(H, m, i)
ebd8d4e8
IC
8418 }
8419
ab78acc6
IC
8420 // swap endian
8421 for (i = 0; i < 5; i++) {
8422 // shortcut
8423 var H_i = H[i]
ebd8d4e8
IC
8424
8425 // Swap
ab78acc6
IC
8426 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8427 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8428 }
8429
ab78acc6
IC
8430 var digestbytes = wordsToBytes(H)
8431 return new Buffer(digestbytes)
ebd8d4e8
IC
8432}
8433
ab78acc6
IC
8434module.exports = ripemd160
8435
8436}).call(this,require("buffer").Buffer)
8437},{"buffer":7}],37:[function(require,module,exports){
8438(function (Buffer){
8439// prototype class for hash functions
8440function Hash (blockSize, finalSize) {
8441 this._block = new Buffer(blockSize)
8442 this._finalSize = finalSize
8443 this._blockSize = blockSize
8444 this._len = 0
8445 this._s = 0
8446}
ebd8d4e8 8447
ab78acc6
IC
8448Hash.prototype.update = function (data, enc) {
8449 if (typeof data === 'string') {
8450 enc = enc || 'utf8'
8451 data = new Buffer(data, enc)
8452 }
ebd8d4e8 8453
ab78acc6
IC
8454 var l = this._len += data.length
8455 var s = this._s || 0
8456 var f = 0
8457 var buffer = this._block
ebd8d4e8 8458
ab78acc6
IC
8459 while (s < l) {
8460 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8461 var ch = (t - f)
ebd8d4e8 8462
ab78acc6
IC
8463 for (var i = 0; i < ch; i++) {
8464 buffer[(s % this._blockSize) + i] = data[i + f]
8465 }
8466
8467 s += ch
8468 f += ch
ebd8d4e8 8469
ab78acc6
IC
8470 if ((s % this._blockSize) === 0) {
8471 this._update(buffer)
8472 }
ebd8d4e8 8473 }
ab78acc6
IC
8474 this._s = s
8475
8476 return this
8477}
ebd8d4e8 8478
ab78acc6
IC
8479Hash.prototype.digest = function (enc) {
8480 // Suppose the length of the message M, in bits, is l
8481 var l = this._len * 8
8482
8483 // Append the bit 1 to the end of the message
8484 this._block[this._len % this._blockSize] = 0x80
8485
8486 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8487 this._block.fill(0, this._len % this._blockSize + 1)
8488
8489 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8490 this._update(this._block)
8491 this._block.fill(0)
ebd8d4e8
IC
8492 }
8493
ab78acc6
IC
8494 // to this append the block which is equal to the number l written in binary
8495 // TODO: handle case where l is > Math.pow(2, 29)
8496 this._block.writeInt32BE(l, this._blockSize - 4)
8497
8498 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8499
ab78acc6
IC
8500 return enc ? hash.toString(enc) : hash
8501}
ebd8d4e8 8502
ab78acc6
IC
8503Hash.prototype._update = function () {
8504 throw new Error('_update must be implemented by subclass')
8505}
ebd8d4e8 8506
ab78acc6 8507module.exports = Hash
ebd8d4e8 8508
ab78acc6
IC
8509}).call(this,require("buffer").Buffer)
8510},{"buffer":7}],38:[function(require,module,exports){
8511var exports = module.exports = function SHA (algorithm) {
8512 algorithm = algorithm.toLowerCase()
ebd8d4e8 8513
ab78acc6
IC
8514 var Algorithm = exports[algorithm]
8515 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8516
ab78acc6
IC
8517 return new Algorithm()
8518}
8519
8520exports.sha = require('./sha')
8521exports.sha1 = require('./sha1')
8522exports.sha224 = require('./sha224')
8523exports.sha256 = require('./sha256')
8524exports.sha384 = require('./sha384')
8525exports.sha512 = require('./sha512')
8526
8527},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8528(function (Buffer){
8529/*
8530 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8531 * in FIPS PUB 180-1
8532 * This source code is derived from sha1.js of the same repository.
8533 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8534 * operation was added.
8535 */
ebd8d4e8 8536
ab78acc6
IC
8537var inherits = require('inherits')
8538var Hash = require('./hash')
ebd8d4e8 8539
ab78acc6 8540var W = new Array(80)
ebd8d4e8 8541
ab78acc6
IC
8542function Sha () {
8543 this.init()
8544 this._w = W
ebd8d4e8 8545
ab78acc6
IC
8546 Hash.call(this, 64, 56)
8547}
ebd8d4e8 8548
ab78acc6 8549inherits(Sha, Hash)
ebd8d4e8 8550
ab78acc6
IC
8551Sha.prototype.init = function () {
8552 this._a = 0x67452301 | 0
8553 this._b = 0xefcdab89 | 0
8554 this._c = 0x98badcfe | 0
8555 this._d = 0x10325476 | 0
8556 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8557
ab78acc6
IC
8558 return this
8559}
8560
8561/*
8562 * Bitwise rotate a 32-bit number to the left.
8563 */
8564function rol (num, cnt) {
8565 return (num << cnt) | (num >>> (32 - cnt))
8566}
8567
8568Sha.prototype._update = function (M) {
8569 var W = this._w
8570
8571 var a = this._a
8572 var b = this._b
8573 var c = this._c
8574 var d = this._d
8575 var e = this._e
ebd8d4e8 8576
ab78acc6
IC
8577 var j = 0, k
8578
8579 /*
8580 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8581 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8582 */
8583 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8584 function loop (w, f) {
8585 W[j] = w
8586
8587 var t = rol(a, 5) + f + e + w + k
8588
8589 e = d
8590 d = c
8591 c = rol(b, 30)
8592 b = a
8593 a = t
8594 j++
ebd8d4e8
IC
8595 }
8596
ab78acc6
IC
8597 k = 1518500249
8598 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8599 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8600 k = 1859775393
8601 while (j < 40) loop(calcW(), b ^ c ^ d)
8602 k = -1894007588
8603 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8604 k = -899497514
8605 while (j < 80) loop(calcW(), b ^ c ^ d)
8606
8607 this._a = (a + this._a) | 0
8608 this._b = (b + this._b) | 0
8609 this._c = (c + this._c) | 0
8610 this._d = (d + this._d) | 0
8611 this._e = (e + this._e) | 0
ebd8d4e8
IC
8612}
8613
ab78acc6
IC
8614Sha.prototype._hash = function () {
8615 var H = new Buffer(20)
8616
8617 H.writeInt32BE(this._a | 0, 0)
8618 H.writeInt32BE(this._b | 0, 4)
8619 H.writeInt32BE(this._c | 0, 8)
8620 H.writeInt32BE(this._d | 0, 12)
8621 H.writeInt32BE(this._e | 0, 16)
8622
8623 return H
ebd8d4e8
IC
8624}
8625
ab78acc6 8626module.exports = Sha
ebd8d4e8 8627
ebd8d4e8 8628
ab78acc6
IC
8629}).call(this,require("buffer").Buffer)
8630},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8631(function (Buffer){
ebd8d4e8
IC
8632/*
8633 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8634 * in FIPS PUB 180-1
8635 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8636 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8637 * Distributed under the BSD License
8638 * See http://pajhome.org.uk/crypt/md5 for details.
8639 */
ebd8d4e8 8640
ab78acc6
IC
8641var inherits = require('inherits')
8642var Hash = require('./hash')
ebd8d4e8 8643
ab78acc6 8644var W = new Array(80)
ebd8d4e8 8645
ab78acc6
IC
8646function Sha1 () {
8647 this.init()
8648 this._w = W
ebd8d4e8 8649
ab78acc6
IC
8650 Hash.call(this, 64, 56)
8651}
ebd8d4e8 8652
ab78acc6 8653inherits(Sha1, Hash)
ebd8d4e8 8654
ab78acc6
IC
8655Sha1.prototype.init = function () {
8656 this._a = 0x67452301 | 0
8657 this._b = 0xefcdab89 | 0
8658 this._c = 0x98badcfe | 0
8659 this._d = 0x10325476 | 0
8660 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8661
ab78acc6
IC
8662 return this
8663}
ebd8d4e8 8664
ab78acc6
IC
8665/*
8666 * Bitwise rotate a 32-bit number to the left.
8667 */
8668function rol (num, cnt) {
8669 return (num << cnt) | (num >>> (32 - cnt))
8670}
ebd8d4e8 8671
ab78acc6
IC
8672Sha1.prototype._update = function (M) {
8673 var W = this._w
ebd8d4e8 8674
ab78acc6
IC
8675 var a = this._a
8676 var b = this._b
8677 var c = this._c
8678 var d = this._d
8679 var e = this._e
ebd8d4e8 8680
ab78acc6 8681 var j = 0, k
ebd8d4e8 8682
ab78acc6
IC
8683 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8684 function loop (w, f) {
8685 W[j] = w
ebd8d4e8 8686
ab78acc6 8687 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8688
ab78acc6
IC
8689 e = d
8690 d = c
8691 c = rol(b, 30)
8692 b = a
8693 a = t
8694 j++
ebd8d4e8
IC
8695 }
8696
ab78acc6
IC
8697 k = 1518500249
8698 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8699 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8700 k = 1859775393
8701 while (j < 40) loop(calcW(), b ^ c ^ d)
8702 k = -1894007588
8703 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8704 k = -899497514
8705 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8706
ab78acc6
IC
8707 this._a = (a + this._a) | 0
8708 this._b = (b + this._b) | 0
8709 this._c = (c + this._c) | 0
8710 this._d = (d + this._d) | 0
8711 this._e = (e + this._e) | 0
8712}
ebd8d4e8 8713
ab78acc6
IC
8714Sha1.prototype._hash = function () {
8715 var H = new Buffer(20)
ebd8d4e8 8716
ab78acc6
IC
8717 H.writeInt32BE(this._a | 0, 0)
8718 H.writeInt32BE(this._b | 0, 4)
8719 H.writeInt32BE(this._c | 0, 8)
8720 H.writeInt32BE(this._d | 0, 12)
8721 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8722
ab78acc6
IC
8723 return H
8724}
ebd8d4e8 8725
ab78acc6 8726module.exports = Sha1
ebd8d4e8 8727
ab78acc6
IC
8728}).call(this,require("buffer").Buffer)
8729},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8730(function (Buffer){
8731/**
8732 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8733 * in FIPS 180-2
8734 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8735 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8736 *
8737 */
ebd8d4e8 8738
ab78acc6
IC
8739var inherits = require('inherits')
8740var Sha256 = require('./sha256')
8741var Hash = require('./hash')
ebd8d4e8 8742
ab78acc6 8743var W = new Array(64)
ebd8d4e8 8744
ab78acc6
IC
8745function Sha224 () {
8746 this.init()
ebd8d4e8 8747
ab78acc6 8748 this._w = W // new Array(64)
ebd8d4e8 8749
ab78acc6
IC
8750 Hash.call(this, 64, 56)
8751}
ebd8d4e8 8752
ab78acc6 8753inherits(Sha224, Sha256)
ebd8d4e8 8754
ab78acc6
IC
8755Sha224.prototype.init = function () {
8756 this._a = 0xc1059ed8 | 0
8757 this._b = 0x367cd507 | 0
8758 this._c = 0x3070dd17 | 0
8759 this._d = 0xf70e5939 | 0
8760 this._e = 0xffc00b31 | 0
8761 this._f = 0x68581511 | 0
8762 this._g = 0x64f98fa7 | 0
8763 this._h = 0xbefa4fa4 | 0
8764
8765 return this
8766}
8767
8768Sha224.prototype._hash = function () {
8769 var H = new Buffer(28)
8770
8771 H.writeInt32BE(this._a, 0)
8772 H.writeInt32BE(this._b, 4)
8773 H.writeInt32BE(this._c, 8)
8774 H.writeInt32BE(this._d, 12)
8775 H.writeInt32BE(this._e, 16)
8776 H.writeInt32BE(this._f, 20)
8777 H.writeInt32BE(this._g, 24)
8778
8779 return H
ebd8d4e8
IC
8780}
8781
ab78acc6 8782module.exports = Sha224
ebd8d4e8 8783
ab78acc6
IC
8784}).call(this,require("buffer").Buffer)
8785},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8786(function (Buffer){
ebd8d4e8
IC
8787/**
8788 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8789 * in FIPS 180-2
8790 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8791 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8792 *
8793 */
8794
ab78acc6
IC
8795var inherits = require('inherits')
8796var Hash = require('./hash')
8797
8798var K = [
8799 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8800 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8801 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8802 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8803 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8804 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8805 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8806 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8807 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8808 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8809 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8810 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8811 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8812 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8813 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8814 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8815]
8816
8817var W = new Array(64)
8818
8819function Sha256 () {
8820 this.init()
8821
8822 this._w = W // new Array(64)
8823
8824 Hash.call(this, 64, 56)
8825}
8826
8827inherits(Sha256, Hash)
8828
8829Sha256.prototype.init = function () {
8830 this._a = 0x6a09e667 | 0
8831 this._b = 0xbb67ae85 | 0
8832 this._c = 0x3c6ef372 | 0
8833 this._d = 0xa54ff53a | 0
8834 this._e = 0x510e527f | 0
8835 this._f = 0x9b05688c | 0
8836 this._g = 0x1f83d9ab | 0
8837 this._h = 0x5be0cd19 | 0
ebd8d4e8 8838
ab78acc6
IC
8839 return this
8840}
ebd8d4e8 8841
ab78acc6
IC
8842function S (X, n) {
8843 return (X >>> n) | (X << (32 - n))
8844}
ebd8d4e8 8845
ab78acc6
IC
8846function R (X, n) {
8847 return (X >>> n)
8848}
ebd8d4e8 8849
ab78acc6
IC
8850function Ch (x, y, z) {
8851 return ((x & y) ^ ((~x) & z))
8852}
ebd8d4e8 8853
ab78acc6
IC
8854function Maj (x, y, z) {
8855 return ((x & y) ^ (x & z) ^ (y & z))
8856}
ebd8d4e8 8857
ab78acc6
IC
8858function Sigma0256 (x) {
8859 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8860}
ebd8d4e8 8861
ab78acc6
IC
8862function Sigma1256 (x) {
8863 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8864}
ebd8d4e8 8865
ab78acc6
IC
8866function Gamma0256 (x) {
8867 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8868}
ebd8d4e8 8869
ab78acc6
IC
8870function Gamma1256 (x) {
8871 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8872}
ebd8d4e8 8873
ab78acc6
IC
8874Sha256.prototype._update = function (M) {
8875 var W = this._w
ebd8d4e8 8876
ab78acc6
IC
8877 var a = this._a | 0
8878 var b = this._b | 0
8879 var c = this._c | 0
8880 var d = this._d | 0
8881 var e = this._e | 0
8882 var f = this._f | 0
8883 var g = this._g | 0
8884 var h = this._h | 0
ebd8d4e8 8885
ab78acc6 8886 var j = 0
ebd8d4e8 8887
ab78acc6
IC
8888 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8889 function loop (w) {
8890 W[j] = w
ebd8d4e8 8891
ab78acc6
IC
8892 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8893 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8894
ab78acc6
IC
8895 h = g
8896 g = f
8897 f = e
8898 e = d + T1
8899 d = c
8900 c = b
8901 b = a
8902 a = T1 + T2
ebd8d4e8 8903
ab78acc6 8904 j++
ebd8d4e8
IC
8905 }
8906
ab78acc6
IC
8907 while (j < 16) loop(M.readInt32BE(j * 4))
8908 while (j < 64) loop(calcW())
ebd8d4e8 8909
ab78acc6
IC
8910 this._a = (a + this._a) | 0
8911 this._b = (b + this._b) | 0
8912 this._c = (c + this._c) | 0
8913 this._d = (d + this._d) | 0
8914 this._e = (e + this._e) | 0
8915 this._f = (f + this._f) | 0
8916 this._g = (g + this._g) | 0
8917 this._h = (h + this._h) | 0
8918}
ebd8d4e8 8919
ab78acc6
IC
8920Sha256.prototype._hash = function () {
8921 var H = new Buffer(32)
ebd8d4e8 8922
ab78acc6
IC
8923 H.writeInt32BE(this._a, 0)
8924 H.writeInt32BE(this._b, 4)
8925 H.writeInt32BE(this._c, 8)
8926 H.writeInt32BE(this._d, 12)
8927 H.writeInt32BE(this._e, 16)
8928 H.writeInt32BE(this._f, 20)
8929 H.writeInt32BE(this._g, 24)
8930 H.writeInt32BE(this._h, 28)
ebd8d4e8 8931
ab78acc6
IC
8932 return H
8933}
ebd8d4e8 8934
ab78acc6 8935module.exports = Sha256
ebd8d4e8 8936
ab78acc6
IC
8937}).call(this,require("buffer").Buffer)
8938},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8939(function (Buffer){
8940var inherits = require('inherits')
8941var SHA512 = require('./sha512')
8942var Hash = require('./hash')
ebd8d4e8 8943
ab78acc6 8944var W = new Array(160)
ebd8d4e8 8945
ab78acc6
IC
8946function Sha384 () {
8947 this.init()
8948 this._w = W
ebd8d4e8 8949
ab78acc6
IC
8950 Hash.call(this, 128, 112)
8951}
ebd8d4e8 8952
ab78acc6 8953inherits(Sha384, SHA512)
ebd8d4e8 8954
ab78acc6
IC
8955Sha384.prototype.init = function () {
8956 this._a = 0xcbbb9d5d | 0
8957 this._b = 0x629a292a | 0
8958 this._c = 0x9159015a | 0
8959 this._d = 0x152fecd8 | 0
8960 this._e = 0x67332667 | 0
8961 this._f = 0x8eb44a87 | 0
8962 this._g = 0xdb0c2e0d | 0
8963 this._h = 0x47b5481d | 0
ebd8d4e8 8964
ab78acc6
IC
8965 this._al = 0xc1059ed8 | 0
8966 this._bl = 0x367cd507 | 0
8967 this._cl = 0x3070dd17 | 0
8968 this._dl = 0xf70e5939 | 0
8969 this._el = 0xffc00b31 | 0
8970 this._fl = 0x68581511 | 0
8971 this._gl = 0x64f98fa7 | 0
8972 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8973
ab78acc6 8974 return this
ebd8d4e8
IC
8975}
8976
ab78acc6
IC
8977Sha384.prototype._hash = function () {
8978 var H = new Buffer(48)
ebd8d4e8 8979
ab78acc6
IC
8980 function writeInt64BE (h, l, offset) {
8981 H.writeInt32BE(h, offset)
8982 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8983 }
ebd8d4e8 8984
ab78acc6
IC
8985 writeInt64BE(this._a, this._al, 0)
8986 writeInt64BE(this._b, this._bl, 8)
8987 writeInt64BE(this._c, this._cl, 16)
8988 writeInt64BE(this._d, this._dl, 24)
8989 writeInt64BE(this._e, this._el, 32)
8990 writeInt64BE(this._f, this._fl, 40)
8991
8992 return H
ebd8d4e8
IC
8993}
8994
ab78acc6 8995module.exports = Sha384
ebd8d4e8 8996
ab78acc6
IC
8997}).call(this,require("buffer").Buffer)
8998},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8999(function (Buffer){
ab78acc6
IC
9000var inherits = require('inherits')
9001var Hash = require('./hash')
9002
9003var K = [
9004 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9005 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9006 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9007 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9008 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9009 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9010 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9011 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9012 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9013 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9014 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9015 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9016 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9017 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9018 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9019 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9020 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9021 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9022 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9023 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9024 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9025 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9026 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9027 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9028 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9029 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9030 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9031 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9032 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9033 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9034 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9035 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9036 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9037 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9038 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9039 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9040 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9041 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9042 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9043 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9044]
9045
9046var W = new Array(160)
9047
9048function Sha512 () {
9049 this.init()
9050 this._w = W
9051
9052 Hash.call(this, 128, 112)
9053}
9054
9055inherits(Sha512, Hash)
9056
9057Sha512.prototype.init = function () {
9058 this._a = 0x6a09e667 | 0
9059 this._b = 0xbb67ae85 | 0
9060 this._c = 0x3c6ef372 | 0
9061 this._d = 0xa54ff53a | 0
9062 this._e = 0x510e527f | 0
9063 this._f = 0x9b05688c | 0
9064 this._g = 0x1f83d9ab | 0
9065 this._h = 0x5be0cd19 | 0
9066
9067 this._al = 0xf3bcc908 | 0
9068 this._bl = 0x84caa73b | 0
9069 this._cl = 0xfe94f82b | 0
9070 this._dl = 0x5f1d36f1 | 0
9071 this._el = 0xade682d1 | 0
9072 this._fl = 0x2b3e6c1f | 0
9073 this._gl = 0xfb41bd6b | 0
9074 this._hl = 0x137e2179 | 0
ebd8d4e8 9075
ab78acc6 9076 return this
ebd8d4e8
IC
9077}
9078
ab78acc6
IC
9079function S (X, Xl, n) {
9080 return (X >>> n) | (Xl << (32 - n))
9081}
9082
9083function Ch (x, y, z) {
9084 return ((x & y) ^ ((~x) & z))
9085}
9086
9087function Maj (x, y, z) {
9088 return ((x & y) ^ (x & z) ^ (y & z))
9089}
9090
9091Sha512.prototype._update = function (M) {
9092 var W = this._w
9093
9094 var a = this._a | 0
9095 var b = this._b | 0
9096 var c = this._c | 0
9097 var d = this._d | 0
9098 var e = this._e | 0
9099 var f = this._f | 0
9100 var g = this._g | 0
9101 var h = this._h | 0
9102
9103 var al = this._al | 0
9104 var bl = this._bl | 0
9105 var cl = this._cl | 0
9106 var dl = this._dl | 0
9107 var el = this._el | 0
9108 var fl = this._fl | 0
9109 var gl = this._gl | 0
9110 var hl = this._hl | 0
9111
9112 var i = 0, j = 0
9113 var Wi, Wil
9114 function calcW () {
9115 var x = W[j - 15 * 2]
9116 var xl = W[j - 15 * 2 + 1]
9117 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9118 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9119
9120 x = W[j - 2 * 2]
9121 xl = W[j - 2 * 2 + 1]
9122 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9123 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9124
9125 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9126 var Wi7 = W[j - 7 * 2]
9127 var Wi7l = W[j - 7 * 2 + 1]
9128
9129 var Wi16 = W[j - 16 * 2]
9130 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9131
ab78acc6
IC
9132 Wil = gamma0l + Wi7l
9133 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9134 Wil = Wil + gamma1l
9135 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9136 Wil = Wil + Wi16l
9137 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9138 }
9139
9140 function loop () {
9141 W[j] = Wi
9142 W[j + 1] = Wil
ebd8d4e8 9143
ab78acc6
IC
9144 var maj = Maj(a, b, c)
9145 var majl = Maj(al, bl, cl)
ebd8d4e8 9146
ab78acc6
IC
9147 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9148 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9149 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9150 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9151
ab78acc6
IC
9152 // t1 = h + sigma1 + ch + K[i] + W[i]
9153 var Ki = K[j]
9154 var Kil = K[j + 1]
ebd8d4e8 9155
ab78acc6
IC
9156 var ch = Ch(e, f, g)
9157 var chl = Ch(el, fl, gl)
ebd8d4e8 9158
ab78acc6
IC
9159 var t1l = hl + sigma1l
9160 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9161 t1l = t1l + chl
9162 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9163 t1l = t1l + Kil
9164 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9165 t1l = t1l + Wil
9166 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9167
ab78acc6
IC
9168 // t2 = sigma0 + maj
9169 var t2l = sigma0l + majl
9170 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9171
ab78acc6
IC
9172 h = g
9173 hl = gl
9174 g = f
9175 gl = fl
9176 f = e
9177 fl = el
9178 el = (dl + t1l) | 0
9179 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9180 d = c
9181 dl = cl
9182 c = b
9183 cl = bl
9184 b = a
9185 bl = al
9186 al = (t1l + t2l) | 0
9187 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9188
9189 i++
9190 j += 2
9191 }
9192
9193 while (i < 16) {
9194 Wi = M.readInt32BE(j * 4)
9195 Wil = M.readInt32BE(j * 4 + 4)
9196
9197 loop()
9198 }
9199
9200 while (i < 80) {
9201 calcW()
9202 loop()
9203 }
9204
9205 this._al = (this._al + al) | 0
9206 this._bl = (this._bl + bl) | 0
9207 this._cl = (this._cl + cl) | 0
9208 this._dl = (this._dl + dl) | 0
9209 this._el = (this._el + el) | 0
9210 this._fl = (this._fl + fl) | 0
9211 this._gl = (this._gl + gl) | 0
9212 this._hl = (this._hl + hl) | 0
9213
9214 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9215 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9216 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9217 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9218 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9219 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9220 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9221 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9222}
9223
9224Sha512.prototype._hash = function () {
9225 var H = new Buffer(64)
9226
9227 function writeInt64BE (h, l, offset) {
9228 H.writeInt32BE(h, offset)
9229 H.writeInt32BE(l, offset + 4)
9230 }
9231
9232 writeInt64BE(this._a, this._al, 0)
9233 writeInt64BE(this._b, this._bl, 8)
9234 writeInt64BE(this._c, this._cl, 16)
9235 writeInt64BE(this._d, this._dl, 24)
9236 writeInt64BE(this._e, this._el, 32)
9237 writeInt64BE(this._f, this._fl, 40)
9238 writeInt64BE(this._g, this._gl, 48)
9239 writeInt64BE(this._h, this._hl, 56)
9240
9241 return H
9242}
9243
9244module.exports = Sha512
9245
9246}).call(this,require("buffer").Buffer)
9247},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9248(function (Buffer){
9249'use strict';
9250var createHash = require('create-hash/browser');
9251var inherits = require('inherits')
ebd8d4e8 9252
ab78acc6 9253var Transform = require('stream').Transform
ebd8d4e8 9254
ab78acc6
IC
9255var ZEROS = new Buffer(128)
9256ZEROS.fill(0)
ebd8d4e8 9257
ab78acc6
IC
9258function Hmac(alg, key) {
9259 Transform.call(this)
ebd8d4e8 9260
ab78acc6
IC
9261 if (typeof key === 'string') {
9262 key = new Buffer(key)
9263 }
ebd8d4e8 9264
ab78acc6 9265 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9266
ab78acc6
IC
9267 this._alg = alg
9268 this._key = key
ebd8d4e8 9269
ab78acc6
IC
9270 if (key.length > blocksize) {
9271 key = createHash(alg).update(key).digest()
ebd8d4e8 9272
ab78acc6
IC
9273 } else if (key.length < blocksize) {
9274 key = Buffer.concat([key, ZEROS], blocksize)
9275 }
ebd8d4e8 9276
ab78acc6
IC
9277 var ipad = this._ipad = new Buffer(blocksize)
9278 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9279
ab78acc6
IC
9280 for (var i = 0; i < blocksize; i++) {
9281 ipad[i] = key[i] ^ 0x36
9282 opad[i] = key[i] ^ 0x5C
9283 }
ebd8d4e8 9284
ab78acc6
IC
9285 this._hash = createHash(alg).update(ipad)
9286}
ebd8d4e8 9287
ab78acc6 9288inherits(Hmac, Transform)
ebd8d4e8 9289
ab78acc6
IC
9290Hmac.prototype.update = function (data, enc) {
9291 this._hash.update(data, enc)
ebd8d4e8 9292
ab78acc6
IC
9293 return this
9294}
ebd8d4e8 9295
ab78acc6
IC
9296Hmac.prototype._transform = function (data, _, next) {
9297 this._hash.update(data)
ebd8d4e8 9298
ab78acc6
IC
9299 next()
9300}
ebd8d4e8 9301
ab78acc6
IC
9302Hmac.prototype._flush = function (next) {
9303 this.push(this.digest())
ebd8d4e8 9304
ab78acc6
IC
9305 next()
9306}
ebd8d4e8 9307
ab78acc6
IC
9308Hmac.prototype.digest = function (enc) {
9309 var h = this._hash.digest()
ebd8d4e8 9310
ab78acc6
IC
9311 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9312}
ebd8d4e8 9313
ab78acc6
IC
9314module.exports = function createHmac(alg, key) {
9315 return new Hmac(alg, key)
9316}
ebd8d4e8 9317
ab78acc6
IC
9318}).call(this,require("buffer").Buffer)
9319},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9320arguments[4][12][0].apply(exports,arguments)
9321},{"dup":12}],47:[function(require,module,exports){
9322var assert = require('assert')
9323var BigInteger = require('bigi')
ebd8d4e8 9324
ab78acc6 9325var Point = require('./point')
ebd8d4e8
IC
9326
9327function Curve(p, a, b, Gx, Gy, n, h) {
9328 this.p = p
9329 this.a = a
9330 this.b = b
9331 this.G = Point.fromAffine(this, Gx, Gy)
9332 this.n = n
9333 this.h = h
9334
9335 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9336
9337 // result caching
9338 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9339}
9340
9341Curve.prototype.pointFromX = function(isOdd, x) {
9342 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9343 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9344
9345 var y = beta
9346 if (beta.isEven() ^ !isOdd) {
9347 y = this.p.subtract(y) // -y % p
9348 }
9349
9350 return Point.fromAffine(this, x, y)
9351}
9352
9353Curve.prototype.isInfinity = function(Q) {
9354 if (Q === this.infinity) return true
9355
9356 return Q.z.signum() === 0 && Q.y.signum() !== 0
9357}
9358
9359Curve.prototype.isOnCurve = function(Q) {
9360 if (this.isInfinity(Q)) return true
9361
9362 var x = Q.affineX
9363 var y = Q.affineY
9364 var a = this.a
9365 var b = this.b
9366 var p = this.p
9367
9368 // Check that xQ and yQ are integers in the interval [0, p - 1]
9369 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9370 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9371
9372 // and check that y^2 = x^3 + ax + b (mod p)
9373 var lhs = y.square().mod(p)
9374 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9375 return lhs.equals(rhs)
9376}
9377
9378/**
9379 * Validate an elliptic curve point.
9380 *
9381 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9382 */
9383Curve.prototype.validate = function(Q) {
9384 // Check Q != O
9385 assert(!this.isInfinity(Q), 'Point is at infinity')
9386 assert(this.isOnCurve(Q), 'Point is not on the curve')
9387
9388 // Check nQ = O (where Q is a scalar multiple of G)
9389 var nQ = Q.multiply(this.n)
9390 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9391
9392 return true
9393}
9394
9395module.exports = Curve
9396
ab78acc6 9397},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9398module.exports={
9399 "secp128r1": {
9400 "p": "fffffffdffffffffffffffffffffffff",
9401 "a": "fffffffdfffffffffffffffffffffffc",
9402 "b": "e87579c11079f43dd824993c2cee5ed3",
9403 "n": "fffffffe0000000075a30d1b9038a115",
9404 "h": "01",
9405 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9406 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9407 },
9408 "secp160k1": {
9409 "p": "fffffffffffffffffffffffffffffffeffffac73",
9410 "a": "00",
9411 "b": "07",
9412 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9413 "h": "01",
9414 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9415 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9416 },
9417 "secp160r1": {
9418 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9419 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9420 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9421 "n": "0100000000000000000001f4c8f927aed3ca752257",
9422 "h": "01",
9423 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9424 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9425 },
9426 "secp192k1": {
9427 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9428 "a": "00",
9429 "b": "03",
9430 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9431 "h": "01",
9432 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9433 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9434 },
9435 "secp192r1": {
9436 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9437 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9438 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9439 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9440 "h": "01",
9441 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9442 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9443 },
ebd8d4e8
IC
9444 "secp256k1": {
9445 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9446 "a": "00",
9447 "b": "07",
9448 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9449 "h": "01",
9450 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9451 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9452 },
9453 "secp256r1": {
9454 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9455 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9456 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9457 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9458 "h": "01",
9459 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9460 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9461 }
9462}
9463
ab78acc6
IC
9464},{}],49:[function(require,module,exports){
9465var Point = require('./point')
9466var Curve = require('./curve')
ebd8d4e8 9467
ab78acc6 9468var getCurveByName = require('./names')
ebd8d4e8
IC
9469
9470module.exports = {
9471 Curve: Curve,
9472 Point: Point,
9473 getCurveByName: getCurveByName
9474}
9475
ab78acc6
IC
9476},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9477var BigInteger = require('bigi')
ebd8d4e8 9478
ab78acc6
IC
9479var curves = require('./curves')
9480var Curve = require('./curve')
ebd8d4e8
IC
9481
9482function getCurveByName(name) {
9483 var curve = curves[name]
9484 if (!curve) return null
9485
9486 var p = new BigInteger(curve.p, 16)
9487 var a = new BigInteger(curve.a, 16)
9488 var b = new BigInteger(curve.b, 16)
9489 var n = new BigInteger(curve.n, 16)
9490 var h = new BigInteger(curve.h, 16)
9491 var Gx = new BigInteger(curve.Gx, 16)
9492 var Gy = new BigInteger(curve.Gy, 16)
9493
9494 return new Curve(p, a, b, Gx, Gy, n, h)
9495}
9496
9497module.exports = getCurveByName
9498
ab78acc6 9499},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9500(function (Buffer){
ab78acc6
IC
9501var assert = require('assert')
9502var BigInteger = require('bigi')
ebd8d4e8
IC
9503
9504var THREE = BigInteger.valueOf(3)
9505
9506function Point(curve, x, y, z) {
9507 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9508
9509 this.curve = curve
9510 this.x = x
9511 this.y = y
9512 this.z = z
9513 this._zInv = null
9514
9515 this.compressed = true
9516}
9517
9518Object.defineProperty(Point.prototype, 'zInv', {
9519 get: function() {
9520 if (this._zInv === null) {
9521 this._zInv = this.z.modInverse(this.curve.p)
9522 }
9523
9524 return this._zInv
9525 }
9526})
9527
9528Object.defineProperty(Point.prototype, 'affineX', {
9529 get: function() {
9530 return this.x.multiply(this.zInv).mod(this.curve.p)
9531 }
9532})
9533
9534Object.defineProperty(Point.prototype, 'affineY', {
9535 get: function() {
9536 return this.y.multiply(this.zInv).mod(this.curve.p)
9537 }
9538})
9539
9540Point.fromAffine = function(curve, x, y) {
9541 return new Point(curve, x, y, BigInteger.ONE)
9542}
9543
9544Point.prototype.equals = function(other) {
9545 if (other === this) return true
9546 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9547 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9548
9549 // u = Y2 * Z1 - Y1 * Z2
9550 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9551
9552 if (u.signum() !== 0) return false
9553
9554 // v = X2 * Z1 - X1 * Z2
9555 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9556
9557 return v.signum() === 0
9558}
9559
9560Point.prototype.negate = function() {
9561 var y = this.curve.p.subtract(this.y)
9562
9563 return new Point(this.curve, this.x, y, this.z)
9564}
9565
9566Point.prototype.add = function(b) {
9567 if (this.curve.isInfinity(this)) return b
9568 if (this.curve.isInfinity(b)) return this
9569
9570 var x1 = this.x
9571 var y1 = this.y
9572 var x2 = b.x
9573 var y2 = b.y
9574
9575 // u = Y2 * Z1 - Y1 * Z2
9576 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9577 // v = X2 * Z1 - X1 * Z2
9578 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9579
9580 if (v.signum() === 0) {
9581 if (u.signum() === 0) {
9582 return this.twice() // this == b, so double
9583 }
9584
9585 return this.curve.infinity // this = -b, so infinity
9586 }
9587
9588 var v2 = v.square()
9589 var v3 = v2.multiply(v)
9590 var x1v2 = x1.multiply(v2)
9591 var zu2 = u.square().multiply(this.z)
9592
9593 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9594 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9595 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9596 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)
9597 // z3 = v^3 * z1 * z2
9598 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9599
9600 return new Point(this.curve, x3, y3, z3)
9601}
9602
9603Point.prototype.twice = function() {
9604 if (this.curve.isInfinity(this)) return this
9605 if (this.y.signum() === 0) return this.curve.infinity
9606
9607 var x1 = this.x
9608 var y1 = this.y
9609
9610 var y1z1 = y1.multiply(this.z)
9611 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9612 var a = this.curve.a
9613
9614 // w = 3 * x1^2 + a * z1^2
9615 var w = x1.square().multiply(THREE)
9616
9617 if (a.signum() !== 0) {
9618 w = w.add(this.z.square().multiply(a))
9619 }
9620
9621 w = w.mod(this.curve.p)
9622 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9623 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9624 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9625 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9626 // z3 = 8 * (y1 * z1)^3
9627 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9628
9629 return new Point(this.curve, x3, y3, z3)
9630}
9631
9632// Simple NAF (Non-Adjacent Form) multiplication algorithm
9633// TODO: modularize the multiplication algorithm
9634Point.prototype.multiply = function(k) {
9635 if (this.curve.isInfinity(this)) return this
9636 if (k.signum() === 0) return this.curve.infinity
9637
9638 var e = k
9639 var h = e.multiply(THREE)
9640
9641 var neg = this.negate()
9642 var R = this
9643
9644 for (var i = h.bitLength() - 2; i > 0; --i) {
9645 R = R.twice()
9646
9647 var hBit = h.testBit(i)
9648 var eBit = e.testBit(i)
9649
9650 if (hBit != eBit) {
9651 R = R.add(hBit ? this : neg)
9652 }
9653 }
9654
9655 return R
9656}
9657
9658// Compute this*j + x*k (simultaneous multiplication)
9659Point.prototype.multiplyTwo = function(j, x, k) {
9660 var i
9661
9662 if (j.bitLength() > k.bitLength())
9663 i = j.bitLength() - 1
9664 else
9665 i = k.bitLength() - 1
9666
9667 var R = this.curve.infinity
9668 var both = this.add(x)
9669
9670 while (i >= 0) {
9671 R = R.twice()
9672
9673 var jBit = j.testBit(i)
9674 var kBit = k.testBit(i)
9675
9676 if (jBit) {
9677 if (kBit) {
9678 R = R.add(both)
9679
9680 } else {
9681 R = R.add(this)
9682 }
9683
9684 } else {
9685 if (kBit) {
9686 R = R.add(x)
9687 }
9688 }
9689 --i
9690 }
9691
9692 return R
9693}
9694
9695Point.prototype.getEncoded = function(compressed) {
9696 if (compressed == undefined) compressed = this.compressed
9697 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9698
9699 var x = this.affineX
9700 var y = this.affineY
9701
9702 var buffer
9703
9704 // Determine size of q in bytes
9705 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9706
9707 // 0x02/0x03 | X
9708 if (compressed) {
9709 buffer = new Buffer(1 + byteLength)
9710 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9711
9712 // 0x04 | X | Y
9713 } else {
9714 buffer = new Buffer(1 + byteLength + byteLength)
9715 buffer.writeUInt8(0x04, 0)
9716
9717 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9718 }
9719
9720 x.toBuffer(byteLength).copy(buffer, 1)
9721
9722 return buffer
9723}
9724
9725Point.decodeFrom = function(curve, buffer) {
9726 var type = buffer.readUInt8(0)
9727 var compressed = (type !== 4)
9728
ebd8d4e8 9729 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9730 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9731
9732 var Q
9733 if (compressed) {
9734 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9735 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9736
9737 var isOdd = (type === 0x03)
9738 Q = curve.pointFromX(isOdd, x)
9739
9740 } else {
9741 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9742
9743 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9744 Q = Point.fromAffine(curve, x, y)
9745 }
9746
9747 Q.compressed = compressed
9748 return Q
9749}
9750
9751Point.prototype.toString = function () {
9752 if (this.curve.isInfinity(this)) return '(INFINITY)'
9753
9754 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9755}
9756
9757module.exports = Point
9758
ab78acc6
IC
9759}).call(this,require("buffer").Buffer)
9760},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9761(function (process,global,Buffer){
9762'use strict';
ebd8d4e8 9763
ab78acc6
IC
9764var crypto = global.crypto || global.msCrypto
9765if(crypto && crypto.getRandomValues) {
9766 module.exports = randomBytes;
9767} else {
9768 module.exports = oldBrowser;
9769}
9770function randomBytes(size, cb) {
9771 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9772 /* This will not work in older browsers.
9773 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9774 */
9775
9776 crypto.getRandomValues(bytes);
9777 if (typeof cb === 'function') {
9778 return process.nextTick(function () {
9779 cb(null, bytes);
9780 });
ebd8d4e8 9781 }
ab78acc6
IC
9782 return bytes;
9783}
9784function oldBrowser() {
9785 throw new Error(
9786 'secure random number generation not supported by this browser\n'+
9787 'use chrome, FireFox or Internet Explorer 11'
9788 )
ebd8d4e8
IC
9789}
9790
ab78acc6
IC
9791}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9792},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9793(function (Buffer){
9794'use strict';
ebd8d4e8 9795
ab78acc6
IC
9796function getFunctionName(fn) {
9797 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9798}
9799
9800function getTypeTypeName(type) {
9801 if (nativeTypes.Function(type)) {
9802 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9803 }
ab78acc6
IC
9804 if (nativeTypes.Object(type)) return JSON.stringify(type);
9805
9806 return type;
ebd8d4e8
IC
9807}
9808
ab78acc6
IC
9809function getValueTypeName(value) {
9810 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9811
ab78acc6
IC
9812 return getFunctionName(value.constructor);
9813}
9814
9815function tfErrorString(type, value) {
9816 var typeTypeName = getTypeTypeName(type);
9817 var valueTypeName = getValueTypeName(value);
9818
9819 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9820}
9821
9822function tfPropertyErrorString(type, name, value) {
9823 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9824}
9825
9826var nativeTypes = {
9827 Array: (function (_Array) {
9828 function Array(_x) {
9829 return _Array.apply(this, arguments);
9830 }
9831
9832 Array.toString = function () {
9833 return _Array.toString();
9834 };
9835
9836 return Array;
9837 })(function (value) {
9838 return value !== null && value !== undefined && value.constructor === Array;
9839 }),
9840 Boolean: function Boolean(value) {
9841 return typeof value === 'boolean';
9842 },
9843 Buffer: (function (_Buffer) {
9844 function Buffer(_x2) {
9845 return _Buffer.apply(this, arguments);
9846 }
9847
9848 Buffer.toString = function () {
9849 return _Buffer.toString();
9850 };
9851
9852 return Buffer;
9853 })(function (value) {
9854 return Buffer.isBuffer(value);
9855 }),
9856 Function: function Function(value) {
9857 return typeof value === 'function';
9858 },
9859 Null: function Null(value) {
9860 return value === undefined || value === null;
9861 },
9862 Number: function Number(value) {
9863 return typeof value === 'number';
9864 },
9865 Object: function Object(value) {
9866 return typeof value === 'object';
9867 },
9868 String: function String(value) {
9869 return typeof value === 'string';
9870 },
9871 '': function _() {
9872 return true;
ebd8d4e8 9873 }
ab78acc6
IC
9874};
9875
9876function tJSON(type) {
9877 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9878}
9879
ab78acc6
IC
9880function sJSON(type) {
9881 var json = tJSON(type);
9882 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9883}
9884
ab78acc6
IC
9885var otherTypes = {
9886 arrayOf: function arrayOf(type) {
9887 function arrayOf(value, strict) {
9888 try {
9889 return nativeTypes.Array(value) && value.every(function (x) {
9890 return typeforce(type, x, strict);
9891 });
9892 } catch (e) {
9893 return false;
9894 }
9895 }
9896 arrayOf.toJSON = function () {
9897 return [tJSON(type)];
9898 };
9899
9900 return arrayOf;
9901 },
9902
9903 maybe: function maybe(type) {
9904 function maybe(value, strict) {
9905 return nativeTypes.Null(value) || typeforce(type, value, strict);
9906 }
9907 maybe.toJSON = function () {
9908 return '?' + sJSON(type);
9909 };
9910
9911 return maybe;
9912 },
9913
9914 object: function object(type) {
9915 function object(value, strict) {
9916 typeforce(nativeTypes.Object, value, strict);
9917
9918 var propertyName, propertyType, propertyValue;
9919
9920 try {
9921 for (propertyName in type) {
9922 propertyType = type[propertyName];
9923 propertyValue = value[propertyName];
9924
9925 typeforce(propertyType, propertyValue, strict);
9926 }
9927 } catch (e) {
9928 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9929 }
9930
9931 if (strict) {
9932 for (propertyName in value) {
9933 if (type[propertyName]) continue;
9934
9935 throw new TypeError('Unexpected property "' + propertyName + '"');
9936 }
9937 }
9938
9939 return true;
9940 }
9941 object.toJSON = function () {
9942 return type;
9943 };
9944
9945 return object;
9946 },
9947
9948 oneOf: function oneOf() {
9949 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9950 types[_key] = arguments[_key];
9951 }
9952
9953 function oneOf(value, strict) {
9954 return types.some(function (type) {
9955 try {
9956 return typeforce(type, value, strict);
9957 } catch (e) {
9958 return false;
9959 }
9960 });
9961 }
9962 oneOf.toJSON = function () {
9963 return types.map(sJSON).join('|');
9964 };
9965
9966 return oneOf;
9967 },
9968
9969 quacksLike: function quacksLike(type) {
9970 function quacksLike(value, strict) {
9971 return type === getValueTypeName(value);
9972 }
9973 quacksLike.toJSON = function () {
9974 return type;
9975 };
9976
9977 return quacksLike;
9978 },
9979
9980 tuple: function tuple() {
9981 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9982 types[_key2] = arguments[_key2];
9983 }
9984
9985 function tuple(value, strict) {
9986 return types.every(function (type, i) {
9987 return typeforce(type, value[i], strict);
9988 });
9989 }
9990 tuple.toJSON = function () {
9991 return '(' + types.map(sJSON).join(', ') + ')';
9992 };
9993
9994 return tuple;
9995 },
9996
9997 value: function value(expected) {
9998 function value(actual) {
9999 return actual === expected;
10000 }
10001 value.toJSON = function () {
10002 return expected;
10003 };
10004
10005 return value;
10006 }
10007};
10008
10009function compile(type) {
10010 if (nativeTypes.String(type)) {
10011 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10012
10013 return nativeTypes[type] || otherTypes.quacksLike(type);
10014 } else if (type && nativeTypes.Object(type)) {
10015 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10016
10017 var compiled = {};
10018
10019 for (var propertyName in type) {
10020 compiled[propertyName] = compile(type[propertyName]);
10021 }
10022
10023 return otherTypes.object(compiled);
10024 } else if (nativeTypes.Function(type)) {
10025 return type;
10026 }
10027
10028 return otherTypes.value(type);
ebd8d4e8
IC
10029}
10030
ab78acc6
IC
10031function typeforce(_x3, _x4, _x5) {
10032 var _again = true;
10033
10034 _function: while (_again) {
10035 var type = _x3,
10036 value = _x4,
10037 strict = _x5;
10038 _again = false;
10039
10040 if (nativeTypes.Function(type)) {
10041 if (type(value, strict)) return true;
10042
10043 throw new TypeError(tfErrorString(type, value));
10044 }
10045
10046 // JIT
10047 _x3 = compile(type);
10048 _x4 = value;
10049 _x5 = strict;
10050 _again = true;
10051 continue _function;
10052 }
ebd8d4e8
IC
10053}
10054
ab78acc6
IC
10055// assign all types to typeforce function
10056var typeName;
10057Object.keys(nativeTypes).forEach(function (typeName) {
10058 var nativeType = nativeTypes[typeName];
10059 nativeType.toJSON = function () {
10060 return typeName;
10061 };
10062
10063 typeforce[typeName] = nativeType;
10064});
ebd8d4e8 10065
ab78acc6
IC
10066for (typeName in otherTypes) {
10067 typeforce[typeName] = otherTypes[typeName];
10068}
ebd8d4e8 10069
ab78acc6
IC
10070module.exports = typeforce;
10071module.exports.compile = compile;
10072}).call(this,require("buffer").Buffer)
10073},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10074(function (Buffer){
ab78acc6
IC
10075var assert = require('assert')
10076var base58check = require('bs58check')
10077var typeForce = require('typeforce')
10078var networks = require('./networks')
10079var scripts = require('./scripts')
ebd8d4e8 10080
ab78acc6 10081function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10082 for (var networkName in networks) {
10083 var network = networks[networkName]
10084
10085 if (version === network.pubKeyHash) return 'pubkeyhash'
10086 if (version === network.scriptHash) return 'scripthash'
10087 }
10088}
10089
ab78acc6
IC
10090function Address (hash, version) {
10091 typeForce('Buffer', hash)
10092
ebd8d4e8
IC
10093 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10094 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10095
10096 this.hash = hash
10097 this.version = version
10098}
10099
ab78acc6 10100Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10101 var payload = base58check.decode(string)
10102 var version = payload.readUInt8(0)
10103 var hash = payload.slice(1)
10104
10105 return new Address(hash, version)
10106}
10107
ab78acc6 10108Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10109 network = network || networks.bitcoin
10110
ab78acc6
IC
10111 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10112 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10113
ab78acc6 10114 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10115}
10116
ebd8d4e8
IC
10117Address.prototype.toBase58Check = function () {
10118 var payload = new Buffer(21)
10119 payload.writeUInt8(this.version, 0)
10120 this.hash.copy(payload, 1)
10121
10122 return base58check.encode(payload)
10123}
10124
ab78acc6 10125Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10126 var scriptType = findScriptTypeByVersion(this.version)
10127
10128 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10129 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10130
ab78acc6
IC
10131 assert(false, this.toString() + ' has no matching Script')
10132}
10133
10134Address.prototype.toString = Address.prototype.toBase58Check
10135
10136module.exports = Address
10137
10138}).call(this,require("buffer").Buffer)
10139},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10140var bs58check = require('bs58check')
10141
10142function decode () {
10143 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10144
10145 return bs58check.decode.apply(undefined, arguments)
10146}
10147
10148function encode () {
10149 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10150
10151 return bs58check.encode.apply(undefined, arguments)
10152}
10153
10154module.exports = {
10155 decode: decode,
10156 encode: encode
10157}
10158
10159},{"bs58check":31}],56:[function(require,module,exports){
10160(function (Buffer){
10161var assert = require('assert')
10162var bufferutils = require('./bufferutils')
10163var crypto = require('./crypto')
10164
10165var Transaction = require('./transaction')
10166
10167function Block () {
10168 this.version = 1
10169 this.prevHash = null
10170 this.merkleRoot = null
10171 this.timestamp = 0
10172 this.bits = 0
10173 this.nonce = 0
10174}
10175
10176Block.fromBuffer = function (buffer) {
10177 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10178
10179 var offset = 0
10180 function readSlice (n) {
10181 offset += n
10182 return buffer.slice(offset - n, offset)
10183 }
10184
10185 function readUInt32 () {
10186 var i = buffer.readUInt32LE(offset)
10187 offset += 4
10188 return i
10189 }
10190
10191 var block = new Block()
10192 block.version = readUInt32()
10193 block.prevHash = readSlice(32)
10194 block.merkleRoot = readSlice(32)
10195 block.timestamp = readUInt32()
10196 block.bits = readUInt32()
10197 block.nonce = readUInt32()
10198
10199 if (buffer.length === 80) return block
10200
10201 function readVarInt () {
10202 var vi = bufferutils.readVarInt(buffer, offset)
10203 offset += vi.size
10204 return vi.number
10205 }
10206
10207 // FIXME: poor performance
10208 function readTransaction () {
10209 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10210
10211 offset += tx.toBuffer().length
10212 return tx
10213 }
10214
10215 var nTransactions = readVarInt()
10216 block.transactions = []
10217
10218 for (var i = 0; i < nTransactions; ++i) {
10219 var tx = readTransaction()
10220 block.transactions.push(tx)
10221 }
10222
10223 return block
10224}
10225
10226Block.fromHex = function (hex) {
10227 return Block.fromBuffer(new Buffer(hex, 'hex'))
10228}
10229
10230Block.prototype.getHash = function () {
10231 return crypto.hash256(this.toBuffer(true))
10232}
10233
10234Block.prototype.getId = function () {
10235 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10236}
10237
ab78acc6
IC
10238Block.prototype.getUTCDate = function () {
10239 var date = new Date(0) // epoch
10240 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10241
ab78acc6
IC
10242 return date
10243}
ebd8d4e8 10244
ab78acc6
IC
10245Block.prototype.toBuffer = function (headersOnly) {
10246 var buffer = new Buffer(80)
ebd8d4e8 10247
ab78acc6
IC
10248 var offset = 0
10249 function writeSlice (slice) {
10250 slice.copy(buffer, offset)
10251 offset += slice.length
10252 }
ebd8d4e8 10253
ab78acc6
IC
10254 function writeUInt32 (i) {
10255 buffer.writeUInt32LE(i, offset)
10256 offset += 4
10257 }
ebd8d4e8 10258
ab78acc6
IC
10259 writeUInt32(this.version)
10260 writeSlice(this.prevHash)
10261 writeSlice(this.merkleRoot)
10262 writeUInt32(this.timestamp)
10263 writeUInt32(this.bits)
10264 writeUInt32(this.nonce)
ebd8d4e8 10265
ab78acc6 10266 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10267
ab78acc6
IC
10268 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10269 var txBuffers = this.transactions.map(function (tx) {
10270 return tx.toBuffer()
10271 })
ebd8d4e8 10272
ab78acc6 10273 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10274}
10275
ab78acc6
IC
10276Block.prototype.toHex = function (headersOnly) {
10277 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10278}
10279
ab78acc6
IC
10280module.exports = Block
10281
10282}).call(this,require("buffer").Buffer)
10283},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10284(function (Buffer){
10285var assert = require('assert')
10286var opcodes = require('./opcodes')
ebd8d4e8
IC
10287
10288// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10289function verifuint (value, max) {
ebd8d4e8
IC
10290 assert(typeof value === 'number', 'cannot write a non-number as a number')
10291 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10292 assert(value <= max, 'value is larger than maximum value for type')
10293 assert(Math.floor(value) === value, 'value has a fractional component')
10294}
10295
ab78acc6 10296function pushDataSize (i) {
ebd8d4e8 10297 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10298 : i < 0xff ? 2
10299 : i < 0xffff ? 3
10300 : 5
ebd8d4e8
IC
10301}
10302
ab78acc6 10303function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10304 var opcode = buffer.readUInt8(offset)
10305 var number, size
10306
10307 // ~6 bit
10308 if (opcode < opcodes.OP_PUSHDATA1) {
10309 number = opcode
10310 size = 1
10311
10312 // 8 bit
10313 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10314 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10315 number = buffer.readUInt8(offset + 1)
10316 size = 2
10317
10318 // 16 bit
10319 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10320 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10321 number = buffer.readUInt16LE(offset + 1)
10322 size = 3
10323
10324 // 32 bit
10325 } else {
ab78acc6 10326 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10327 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10328
10329 number = buffer.readUInt32LE(offset + 1)
10330 size = 5
ebd8d4e8
IC
10331 }
10332
10333 return {
10334 opcode: opcode,
10335 number: number,
10336 size: size
10337 }
10338}
10339
ab78acc6 10340function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10341 var a = buffer.readUInt32LE(offset)
10342 var b = buffer.readUInt32LE(offset + 4)
10343 b *= 0x100000000
10344
10345 verifuint(b + a, 0x001fffffffffffff)
10346
10347 return b + a
10348}
10349
ab78acc6 10350function readVarInt (buffer, offset) {
ebd8d4e8
IC
10351 var t = buffer.readUInt8(offset)
10352 var number, size
10353
10354 // 8 bit
10355 if (t < 253) {
10356 number = t
10357 size = 1
10358
10359 // 16 bit
10360 } else if (t < 254) {
10361 number = buffer.readUInt16LE(offset + 1)
10362 size = 3
10363
10364 // 32 bit
10365 } else if (t < 255) {
10366 number = buffer.readUInt32LE(offset + 1)
10367 size = 5
10368
10369 // 64 bit
10370 } else {
10371 number = readUInt64LE(buffer, offset + 1)
10372 size = 9
10373 }
10374
10375 return {
10376 number: number,
10377 size: size
10378 }
10379}
10380
ab78acc6 10381function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10382 var size = pushDataSize(number)
10383
10384 // ~6 bit
10385 if (size === 1) {
10386 buffer.writeUInt8(number, offset)
10387
10388 // 8 bit
10389 } else if (size === 2) {
10390 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10391 buffer.writeUInt8(number, offset + 1)
10392
10393 // 16 bit
10394 } else if (size === 3) {
10395 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10396 buffer.writeUInt16LE(number, offset + 1)
10397
10398 // 32 bit
10399 } else {
10400 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10401 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10402 }
10403
10404 return size
10405}
10406
ab78acc6 10407function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10408 verifuint(value, 0x001fffffffffffff)
10409
10410 buffer.writeInt32LE(value & -1, offset)
10411 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10412}
10413
ab78acc6
IC
10414function varIntSize (i) {
10415 return i < 253 ? 1
10416 : i < 0x10000 ? 3
10417 : i < 0x100000000 ? 5
10418 : 9
ebd8d4e8
IC
10419}
10420
ab78acc6 10421function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10422 var size = varIntSize(number)
10423
10424 // 8 bit
10425 if (size === 1) {
10426 buffer.writeUInt8(number, offset)
10427
10428 // 16 bit
10429 } else if (size === 3) {
10430 buffer.writeUInt8(253, offset)
10431 buffer.writeUInt16LE(number, offset + 1)
10432
10433 // 32 bit
10434 } else if (size === 5) {
10435 buffer.writeUInt8(254, offset)
10436 buffer.writeUInt32LE(number, offset + 1)
10437
10438 // 64 bit
10439 } else {
10440 buffer.writeUInt8(255, offset)
10441 writeUInt64LE(buffer, number, offset + 1)
10442 }
10443
10444 return size
10445}
10446
ab78acc6
IC
10447function varIntBuffer (i) {
10448 var size = varIntSize(i)
10449 var buffer = new Buffer(size)
10450 writeVarInt(buffer, i, 0)
10451
10452 return buffer
10453}
10454
10455function reverse (buffer) {
10456 var buffer2 = new Buffer(buffer)
10457 Array.prototype.reverse.call(buffer2)
10458 return buffer2
10459}
10460
ebd8d4e8
IC
10461module.exports = {
10462 pushDataSize: pushDataSize,
10463 readPushDataInt: readPushDataInt,
10464 readUInt64LE: readUInt64LE,
10465 readVarInt: readVarInt,
ab78acc6
IC
10466 reverse: reverse,
10467 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10468 varIntSize: varIntSize,
10469 writePushDataInt: writePushDataInt,
10470 writeUInt64LE: writeUInt64LE,
10471 writeVarInt: writeVarInt
10472}
10473
ab78acc6
IC
10474}).call(this,require("buffer").Buffer)
10475},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10476var createHash = require('create-hash')
ebd8d4e8 10477
ab78acc6 10478function hash160 (buffer) {
ebd8d4e8
IC
10479 return ripemd160(sha256(buffer))
10480}
10481
ab78acc6 10482function hash256 (buffer) {
ebd8d4e8
IC
10483 return sha256(sha256(buffer))
10484}
10485
ab78acc6
IC
10486function ripemd160 (buffer) {
10487 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10488}
10489
ab78acc6
IC
10490function sha1 (buffer) {
10491 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10492}
10493
ab78acc6
IC
10494function sha256 (buffer) {
10495 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10496}
10497
10498// FIXME: Name not consistent with others
ab78acc6 10499var createHmac = require('create-hmac')
ebd8d4e8 10500
ab78acc6
IC
10501function HmacSHA256 (buffer, secret) {
10502 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10503 return createHmac('sha256', secret).update(buffer).digest()
10504}
ebd8d4e8 10505
ab78acc6
IC
10506function HmacSHA512 (buffer, secret) {
10507 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10508 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10509}
10510
10511module.exports = {
10512 ripemd160: ripemd160,
10513 sha1: sha1,
10514 sha256: sha256,
10515 hash160: hash160,
10516 hash256: hash256,
10517 HmacSHA256: HmacSHA256,
10518 HmacSHA512: HmacSHA512
10519}
10520
ab78acc6 10521},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10522(function (Buffer){
ab78acc6
IC
10523var assert = require('assert')
10524var createHmac = require('create-hmac')
10525var typeForce = require('typeforce')
ebd8d4e8 10526
ab78acc6
IC
10527var BigInteger = require('bigi')
10528var ECSignature = require('./ecsignature')
10529
10530var ZERO = new Buffer([0])
10531var ONE = new Buffer([1])
ebd8d4e8
IC
10532
10533// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10534function deterministicGenerateK (curve, hash, d, checkSig) {
10535 typeForce('Buffer', hash)
10536 typeForce('BigInteger', d)
10537
10538 // FIXME: remove/uncomment for 2.0.0
10539 // typeForce('Function', checkSig)
10540
10541 if (typeof checkSig !== 'function') {
10542 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10543
10544 checkSig = function (k) {
10545 var G = curve.G
10546 var n = curve.n
10547 var e = BigInteger.fromBuffer(hash)
10548
10549 var Q = G.multiply(k)
10550
10551 if (curve.isInfinity(Q))
10552 return false
10553
10554 var r = Q.affineX.mod(n)
10555 if (r.signum() === 0)
10556 return false
10557
10558 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10559 if (s.signum() === 0)
10560 return false
10561
10562 return true
10563 }
10564 }
10565
10566 // sanity check
ebd8d4e8 10567 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10568
10569 var x = d.toBuffer(32)
10570 var k = new Buffer(32)
10571 var v = new Buffer(32)
10572
ab78acc6 10573 // Step A, ignored as hash already provided
ebd8d4e8
IC
10574 // Step B
10575 v.fill(1)
10576
10577 // Step C
10578 k.fill(0)
10579
10580 // Step D
ab78acc6
IC
10581 k = createHmac('sha256', k)
10582 .update(v)
10583 .update(ZERO)
10584 .update(x)
10585 .update(hash)
10586 .digest()
ebd8d4e8
IC
10587
10588 // Step E
ab78acc6 10589 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10590
10591 // Step F
ab78acc6
IC
10592 k = createHmac('sha256', k)
10593 .update(v)
10594 .update(ONE)
10595 .update(x)
10596 .update(hash)
10597 .digest()
ebd8d4e8
IC
10598
10599 // Step G
ab78acc6 10600 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10601
10602 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10603 // Step H2b
ab78acc6 10604 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10605
10606 var T = BigInteger.fromBuffer(v)
10607
ab78acc6
IC
10608 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10609 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10610 k = createHmac('sha256', k)
10611 .update(v)
10612 .update(ZERO)
10613 .digest()
10614
10615 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10616
ab78acc6
IC
10617 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10618 // Step H2b again
10619 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10620 T = BigInteger.fromBuffer(v)
10621 }
10622
10623 return T
10624}
10625
ab78acc6
IC
10626function sign (curve, hash, d) {
10627 var r, s
ebd8d4e8 10628
ab78acc6 10629 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10630 var n = curve.n
10631 var G = curve.G
ebd8d4e8 10632
ab78acc6
IC
10633 deterministicGenerateK(curve, hash, d, function (k) {
10634 var Q = G.multiply(k)
10635
10636 if (curve.isInfinity(Q))
10637 return false
10638
10639 r = Q.affineX.mod(n)
10640 if (r.signum() === 0)
10641 return false
10642
10643 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10644 if (s.signum() === 0)
10645 return false
ebd8d4e8 10646
ab78acc6
IC
10647 return true
10648 })
ebd8d4e8
IC
10649
10650 var N_OVER_TWO = n.shiftRight(1)
10651
10652 // enforce low S values, see bip62: 'low s values in signatures'
10653 if (s.compareTo(N_OVER_TWO) > 0) {
10654 s = n.subtract(s)
10655 }
10656
10657 return new ECSignature(r, s)
10658}
10659
ab78acc6 10660function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10661 var n = curve.n
10662 var G = curve.G
10663
10664 var r = signature.r
10665 var s = signature.s
10666
ab78acc6
IC
10667 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10668 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10669 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10670
ab78acc6 10671 // c = s^-1 mod n
ebd8d4e8
IC
10672 var c = s.modInverse(n)
10673
ab78acc6
IC
10674 // 1.4.4 Compute u1 = es^−1 mod n
10675 // u2 = rs^−1 mod n
ebd8d4e8
IC
10676 var u1 = e.multiply(c).mod(n)
10677 var u2 = r.multiply(c).mod(n)
10678
ab78acc6
IC
10679 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10680 var R = G.multiplyTwo(u1, Q, u2)
10681 var v = R.affineX.mod(n)
ebd8d4e8 10682
ab78acc6
IC
10683 // 1.4.5 (cont.) Enforce R is not at infinity
10684 if (curve.isInfinity(R)) return false
10685
10686 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10687 return v.equals(r)
10688}
10689
ab78acc6
IC
10690function verify (curve, hash, signature, Q) {
10691 // 1.4.2 H = Hash(M), already done by the user
10692 // 1.4.3 e = H
10693 var e = BigInteger.fromBuffer(hash)
10694
10695 return verifyRaw(curve, e, signature, Q)
10696}
10697
ebd8d4e8
IC
10698/**
10699 * Recover a public key from a signature.
10700 *
10701 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10702 * Key Recovery Operation".
10703 *
10704 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10705 */
ab78acc6 10706function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10707 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10708
ab78acc6
IC
10709 var n = curve.n
10710 var G = curve.G
10711
ebd8d4e8
IC
10712 var r = signature.r
10713 var s = signature.s
10714
ab78acc6
IC
10715 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10716 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10717
ebd8d4e8
IC
10718 // A set LSB signifies that the y-coordinate is odd
10719 var isYOdd = i & 1
10720
10721 // The more significant bit specifies whether we should use the
10722 // first or second candidate key.
10723 var isSecondKey = i >> 1
10724
ebd8d4e8
IC
10725 // 1.1 Let x = r + jn
10726 var x = isSecondKey ? r.add(n) : r
10727 var R = curve.pointFromX(isYOdd, x)
10728
10729 // 1.4 Check that nR is at infinity
10730 var nR = R.multiply(n)
10731 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10732
10733 // Compute -e from e
10734 var eNeg = e.negate().mod(n)
10735
10736 // 1.6.1 Compute Q = r^-1 (sR - eG)
10737 // Q = r^-1 (sR + -eG)
10738 var rInv = r.modInverse(n)
10739
10740 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10741 curve.validate(Q)
10742
10743 return Q
10744}
10745
10746/**
10747 * Calculate pubkey extraction parameter.
10748 *
10749 * When extracting a pubkey from a signature, we have to
10750 * distinguish four different cases. Rather than putting this
10751 * burden on the verifier, Bitcoin includes a 2-bit value with the
10752 * signature.
10753 *
10754 * This function simply tries all four cases and returns the value
10755 * that resulted in a successful pubkey recovery.
10756 */
ab78acc6 10757function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10758 for (var i = 0; i < 4; i++) {
10759 var Qprime = recoverPubKey(curve, e, signature, i)
10760
10761 // 1.6.2 Verify Q
10762 if (Qprime.equals(Q)) {
10763 return i
10764 }
10765 }
10766
10767 throw new Error('Unable to find valid recovery factor')
10768}
10769
10770module.exports = {
10771 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10772 deterministicGenerateK: deterministicGenerateK,
10773 recoverPubKey: recoverPubKey,
10774 sign: sign,
10775 verify: verify,
10776 verifyRaw: verifyRaw
10777}
10778
ab78acc6
IC
10779}).call(this,require("buffer").Buffer)
10780},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10781(function (Buffer){
ab78acc6
IC
10782var assert = require('assert')
10783var base58check = require('bs58check')
10784var ecdsa = require('./ecdsa')
10785var networks = require('./networks')
10786var randomBytes = require('randombytes')
10787var typeForce = require('typeforce')
ebd8d4e8 10788
ab78acc6
IC
10789var BigInteger = require('bigi')
10790var ECPubKey = require('./ecpubkey')
ebd8d4e8 10791
ab78acc6
IC
10792var ecurve = require('ecurve')
10793var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10794
ab78acc6 10795function ECKey (d, compressed) {
ebd8d4e8 10796 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10797 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10798
ab78acc6 10799 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10800
10801 this.d = d
10802 this.pub = new ECPubKey(Q, compressed)
10803}
10804
ab78acc6
IC
10805// Constants
10806ECKey.curve = secp256k1
10807
ebd8d4e8 10808// Static constructors
ab78acc6 10809ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10810 var payload = base58check.decode(string)
10811 var compressed = false
10812
10813 // Ignore the version byte
10814 payload = payload.slice(1)
10815
10816 if (payload.length === 33) {
10817 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10818
10819 // Truncate the compression flag
10820 payload = payload.slice(0, -1)
10821 compressed = true
10822 }
10823
10824 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10825
10826 var d = BigInteger.fromBuffer(payload)
10827 return new ECKey(d, compressed)
10828}
10829
ab78acc6
IC
10830ECKey.makeRandom = function (compressed, rng) {
10831 rng = rng || randomBytes
ebd8d4e8
IC
10832
10833 var buffer = rng(32)
ab78acc6
IC
10834 typeForce('Buffer', buffer)
10835 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10836
10837 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10838 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10839
10840 return new ECKey(d, compressed)
10841}
10842
10843// Export functions
ab78acc6 10844ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10845 network = network || networks.bitcoin
10846
10847 var bufferLen = this.pub.compressed ? 34 : 33
10848 var buffer = new Buffer(bufferLen)
10849
10850 buffer.writeUInt8(network.wif, 0)
10851 this.d.toBuffer(32).copy(buffer, 1)
10852
10853 if (this.pub.compressed) {
10854 buffer.writeUInt8(0x01, 33)
10855 }
10856
10857 return base58check.encode(buffer)
10858}
10859
10860// Operations
ab78acc6
IC
10861ECKey.prototype.sign = function (hash) {
10862 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10863}
10864
10865module.exports = ECKey
10866
ab78acc6
IC
10867}).call(this,require("buffer").Buffer)
10868},{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
ebd8d4e8 10869(function (Buffer){
ab78acc6
IC
10870var crypto = require('./crypto')
10871var ecdsa = require('./ecdsa')
10872var typeForce = require('typeforce')
10873var networks = require('./networks')
ebd8d4e8 10874
ab78acc6 10875var Address = require('./address')
ebd8d4e8 10876
ab78acc6
IC
10877var ecurve = require('ecurve')
10878var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10879
ab78acc6
IC
10880function ECPubKey (Q, compressed) {
10881 if (compressed === undefined) {
10882 compressed = true
10883 }
ebd8d4e8 10884
ab78acc6
IC
10885 typeForce('Point', Q)
10886 typeForce('Boolean', compressed)
ebd8d4e8
IC
10887
10888 this.compressed = compressed
10889 this.Q = Q
10890}
10891
ab78acc6
IC
10892// Constants
10893ECPubKey.curve = secp256k1
10894
ebd8d4e8 10895// Static constructors
ab78acc6
IC
10896ECPubKey.fromBuffer = function (buffer) {
10897 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10898 return new ECPubKey(Q, Q.compressed)
10899}
10900
ab78acc6 10901ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10902 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10903}
10904
10905// Operations
ab78acc6 10906ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10907 network = network || networks.bitcoin
10908
10909 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10910}
10911
ab78acc6
IC
10912ECPubKey.prototype.verify = function (hash, signature) {
10913 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10914}
10915
10916// Export functions
ab78acc6 10917ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10918 return this.Q.getEncoded(this.compressed)
10919}
10920
ab78acc6 10921ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10922 return this.toBuffer().toString('hex')
10923}
10924
10925module.exports = ECPubKey
10926
ab78acc6
IC
10927}).call(this,require("buffer").Buffer)
10928},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10929(function (Buffer){
ab78acc6
IC
10930var assert = require('assert')
10931var typeForce = require('typeforce')
10932
10933var BigInteger = require('bigi')
10934
10935function ECSignature (r, s) {
10936 typeForce('BigInteger', r)
10937 typeForce('BigInteger', s)
ebd8d4e8 10938
ebd8d4e8
IC
10939 this.r = r
10940 this.s = s
10941}
10942
ab78acc6 10943ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10944 assert.equal(buffer.length, 65, 'Invalid signature length')
10945 var i = buffer.readUInt8(0) - 27
10946
10947 // At most 3 bits
10948 assert.equal(i, i & 7, 'Invalid signature parameter')
10949 var compressed = !!(i & 4)
10950
10951 // Recovery param only
10952 i = i & 3
10953
10954 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10955 var s = BigInteger.fromBuffer(buffer.slice(33))
10956
10957 return {
10958 compressed: compressed,
10959 i: i,
10960 signature: new ECSignature(r, s)
10961 }
10962}
10963
ab78acc6 10964ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10965 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10966 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10967 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10968
10969 var rLen = buffer.readUInt8(3)
10970 assert(rLen > 0, 'R length is zero')
10971
10972 var offset = 4 + rLen
10973 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10974
10975 var sLen = buffer.readUInt8(offset + 1)
10976 assert(sLen > 0, 'S length is zero')
10977
10978 var rB = buffer.slice(4, offset)
10979 var sB = buffer.slice(offset + 2)
10980 offset += 2 + sLen
10981
10982 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10983 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10984 }
10985
10986 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10987 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10988 }
10989
10990 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10991 var r = BigInteger.fromDERInteger(rB)
10992 var s = BigInteger.fromDERInteger(sB)
10993
10994 assert(r.signum() >= 0, 'R value is negative')
10995 assert(s.signum() >= 0, 'S value is negative')
10996
10997 return new ECSignature(r, s)
10998}
10999
ab78acc6
IC
11000// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11001ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
11002 var hashType = buffer.readUInt8(buffer.length - 1)
11003 var hashTypeMod = hashType & ~0x80
11004
ab78acc6 11005 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
11006
11007 return {
11008 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11009 hashType: hashType
11010 }
11011}
11012
ab78acc6
IC
11013ECSignature.prototype.toCompact = function (i, compressed) {
11014 if (compressed) {
11015 i += 4
11016 }
11017
ebd8d4e8
IC
11018 i += 27
11019
11020 var buffer = new Buffer(65)
11021 buffer.writeUInt8(i, 0)
11022
11023 this.r.toBuffer(32).copy(buffer, 1)
11024 this.s.toBuffer(32).copy(buffer, 33)
11025
11026 return buffer
11027}
11028
ab78acc6 11029ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
11030 var rBa = this.r.toDERInteger()
11031 var sBa = this.s.toDERInteger()
11032
11033 var sequence = []
ab78acc6
IC
11034
11035 // INTEGER
11036 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
11037 sequence = sequence.concat(rBa)
11038
ab78acc6
IC
11039 // INTEGER
11040 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
11041 sequence = sequence.concat(sBa)
11042
ab78acc6
IC
11043 // SEQUENCE
11044 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
11045
11046 return new Buffer(sequence)
11047}
11048
ab78acc6
IC
11049ECSignature.prototype.toScriptSignature = function (hashType) {
11050 var hashTypeMod = hashType & ~0x80
11051 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11052
ebd8d4e8
IC
11053 var hashTypeBuffer = new Buffer(1)
11054 hashTypeBuffer.writeUInt8(hashType, 0)
11055
11056 return Buffer.concat([this.toDER(), hashTypeBuffer])
11057}
11058
11059module.exports = ECSignature
11060
ab78acc6
IC
11061}).call(this,require("buffer").Buffer)
11062},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11063(function (Buffer){
ab78acc6
IC
11064var assert = require('assert')
11065var base58check = require('bs58check')
11066var bcrypto = require('./crypto')
11067var createHmac = require('create-hmac')
11068var typeForce = require('typeforce')
11069var networks = require('./networks')
11070
11071var BigInteger = require('bigi')
11072var ECKey = require('./eckey')
11073var ECPubKey = require('./ecpubkey')
11074
11075var ecurve = require('ecurve')
ebd8d4e8
IC
11076var curve = ecurve.getCurveByName('secp256k1')
11077
ab78acc6 11078function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11079 for (var name in networks) {
11080 var network = networks[name]
11081
ab78acc6
IC
11082 if (version === network.bip32.private || version === network.bip32.public) {
11083 return network
ebd8d4e8
IC
11084 }
11085 }
11086
ab78acc6 11087 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11088}
11089
ab78acc6 11090function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11091 network = network || networks.bitcoin
11092
ab78acc6
IC
11093 typeForce('Buffer', chainCode)
11094
11095 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11096 assert(network.bip32, 'Unknown BIP32 constants for network')
11097
11098 this.chainCode = chainCode
11099 this.depth = 0
11100 this.index = 0
ab78acc6 11101 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11102 this.network = network
11103
11104 if (K instanceof BigInteger) {
11105 this.privKey = new ECKey(K, true)
11106 this.pubKey = this.privKey.pub
ab78acc6
IC
11107 } else if (K instanceof ECKey) {
11108 assert(K.pub.compressed, 'ECKey must be compressed')
11109 this.privKey = K
11110 this.pubKey = K.pub
11111 } else if (K instanceof ECPubKey) {
11112 assert(K.compressed, 'ECPubKey must be compressed')
11113 this.pubKey = K
ebd8d4e8
IC
11114 } else {
11115 this.pubKey = new ECPubKey(K, true)
11116 }
11117}
11118
11119HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11120HDNode.HIGHEST_BIT = 0x80000000
11121HDNode.LENGTH = 78
11122
ab78acc6
IC
11123HDNode.fromSeedBuffer = function (seed, network) {
11124 typeForce('Buffer', seed)
11125
11126 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11127 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11128
11129 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11130 var IL = I.slice(0, 32)
11131 var IR = I.slice(32)
11132
11133 // In case IL is 0 or >= n, the master key is invalid
11134 // This is handled by `new ECKey` in the HDNode constructor
11135 var pIL = BigInteger.fromBuffer(IL)
11136
11137 return new HDNode(pIL, IR, network)
11138}
11139
ab78acc6 11140HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11141 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11142}
11143
ab78acc6
IC
11144HDNode.fromBase58 = function (string, network) {
11145 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11146}
11147
ab78acc6
IC
11148// FIXME: remove in 2.x.y
11149HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11150 if (!__ignoreDeprecation) {
11151 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11152 }
11153
ebd8d4e8
IC
11154 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11155
11156 // 4 byte: version bytes
11157 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11158
11159 if (network) {
11160 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11161
11162 // auto-detect
11163 } else {
11164 network = findBIP32NetworkByVersion(version)
11165 }
ebd8d4e8
IC
11166
11167 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11168 var depth = buffer.readUInt8(4)
11169
11170 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11171 var parentFingerprint = buffer.readUInt32BE(5)
11172 if (depth === 0) {
11173 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11174 }
11175
11176 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11177 // This is encoded in MSB order. (0x00000000 if master key)
11178 var index = buffer.readUInt32BE(9)
11179 assert(depth > 0 || index === 0, 'Invalid index')
11180
11181 // 32 bytes: the chain code
11182 var chainCode = buffer.slice(13, 45)
ab78acc6 11183 var data, hd
ebd8d4e8
IC
11184
11185 // 33 bytes: private key data (0x00 + k)
ab78acc6 11186 if (version === network.bip32.private) {
ebd8d4e8 11187 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11188 data = buffer.slice(46, 78)
ebd8d4e8 11189 var d = BigInteger.fromBuffer(data)
ab78acc6 11190 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11191
11192 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11193 } else {
ab78acc6 11194 data = buffer.slice(45, 78)
ebd8d4e8
IC
11195 var Q = ecurve.Point.decodeFrom(curve, data)
11196 assert.equal(Q.compressed, true, 'Invalid public key')
11197
11198 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11199 // If not, the extended public key is invalid.
11200 curve.validate(Q)
11201
ab78acc6 11202 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11203 }
11204
11205 hd.depth = depth
11206 hd.index = index
11207 hd.parentFingerprint = parentFingerprint
11208
11209 return hd
11210}
11211
ab78acc6
IC
11212// FIXME: remove in 2.x.y
11213HDNode.fromHex = function (hex, network) {
11214 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11215}
11216
ab78acc6
IC
11217HDNode.prototype.getIdentifier = function () {
11218 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11219}
11220
ab78acc6 11221HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11222 return this.getIdentifier().slice(0, 4)
11223}
11224
ab78acc6 11225HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11226 return this.pubKey.getAddress(this.network)
11227}
11228
ab78acc6
IC
11229HDNode.prototype.neutered = function () {
11230 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11231 neutered.depth = this.depth
11232 neutered.index = this.index
11233 neutered.parentFingerprint = this.parentFingerprint
11234
11235 return neutered
11236}
11237
11238HDNode.prototype.toBase58 = function (isPrivate) {
11239 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11240}
11241
ab78acc6
IC
11242// FIXME: remove in 2.x.y
11243HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11244 if (isPrivate === undefined) {
11245 isPrivate = !!this.privKey
11246
11247 // FIXME: remove in 2.x.y
11248 } else {
11249 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11250 }
11251
11252 if (!__ignoreDeprecation) {
11253 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11254 }
ebd8d4e8
IC
11255
11256 // Version
11257 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11258 var buffer = new Buffer(HDNode.LENGTH)
11259
11260 // 4 bytes: version bytes
11261 buffer.writeUInt32BE(version, 0)
11262
11263 // Depth
11264 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11265 buffer.writeUInt8(this.depth, 4)
11266
11267 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11268 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11269
11270 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11271 // This is encoded in Big endian. (0x00000000 if master key)
11272 buffer.writeUInt32BE(this.index, 9)
11273
11274 // 32 bytes: the chain code
11275 this.chainCode.copy(buffer, 13)
11276
11277 // 33 bytes: the public key or private key data
11278 if (isPrivate) {
ab78acc6 11279 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11280 assert(this.privKey, 'Missing private key')
11281
11282 // 0x00 + k for private keys
11283 buffer.writeUInt8(0, 45)
11284 this.privKey.d.toBuffer(32).copy(buffer, 46)
11285 } else {
ebd8d4e8
IC
11286 // X9.62 encoding for public keys
11287 this.pubKey.toBuffer().copy(buffer, 45)
11288 }
11289
11290 return buffer
11291}
11292
ab78acc6
IC
11293// FIXME: remove in 2.x.y
11294HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11295 return this.toBuffer(isPrivate).toString('hex')
11296}
11297
11298// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11299HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11300 var isHardened = index >= HDNode.HIGHEST_BIT
11301 var indexBuffer = new Buffer(4)
11302 indexBuffer.writeUInt32BE(index, 0)
11303
11304 var data
11305
11306 // Hardened child
11307 if (isHardened) {
11308 assert(this.privKey, 'Could not derive hardened child key')
11309
11310 // data = 0x00 || ser256(kpar) || ser32(index)
11311 data = Buffer.concat([
11312 this.privKey.d.toBuffer(33),
11313 indexBuffer
11314 ])
11315
11316 // Normal child
11317 } else {
11318 // data = serP(point(kpar)) || ser32(index)
11319 // = serP(Kpar) || ser32(index)
11320 data = Buffer.concat([
11321 this.pubKey.toBuffer(),
11322 indexBuffer
11323 ])
11324 }
11325
ab78acc6 11326 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11327 var IL = I.slice(0, 32)
11328 var IR = I.slice(32)
11329
11330 var pIL = BigInteger.fromBuffer(IL)
11331
11332 // In case parse256(IL) >= n, proceed with the next value for i
11333 if (pIL.compareTo(curve.n) >= 0) {
11334 return this.derive(index + 1)
11335 }
11336
11337 // Private parent key -> private child key
11338 var hd
11339 if (this.privKey) {
11340 // ki = parse256(IL) + kpar (mod n)
11341 var ki = pIL.add(this.privKey.d).mod(curve.n)
11342
11343 // In case ki == 0, proceed with the next value for i
11344 if (ki.signum() === 0) {
11345 return this.derive(index + 1)
11346 }
11347
11348 hd = new HDNode(ki, IR, this.network)
11349
11350 // Public parent key -> public child key
11351 } else {
11352 // Ki = point(parse256(IL)) + Kpar
11353 // = G*IL + Kpar
11354 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11355
11356 // In case Ki is the point at infinity, proceed with the next value for i
11357 if (curve.isInfinity(Ki)) {
11358 return this.derive(index + 1)
11359 }
11360
11361 hd = new HDNode(Ki, IR, this.network)
11362 }
11363
11364 hd.depth = this.depth + 1
11365 hd.index = index
11366 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11367
11368 return hd
11369}
11370
ab78acc6 11371HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11372 // Only derives hardened private keys by default
11373 return this.derive(index + HDNode.HIGHEST_BIT)
11374}
11375
11376HDNode.prototype.toString = HDNode.prototype.toBase58
11377
11378module.exports = HDNode
11379
ab78acc6
IC
11380}).call(this,require("buffer").Buffer)
11381},{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
ebd8d4e8 11382module.exports = {
ab78acc6
IC
11383 Address: require('./address'),
11384 base58check: require('./base58check'),
11385 Block: require('./block'),
11386 bufferutils: require('./bufferutils'),
11387 crypto: require('./crypto'),
11388 ecdsa: require('./ecdsa'),
11389 ECKey: require('./eckey'),
11390 ECPubKey: require('./ecpubkey'),
11391 ECSignature: require('./ecsignature'),
11392 Message: require('./message'),
11393 opcodes: require('./opcodes'),
11394 HDNode: require('./hdnode'),
11395 Script: require('./script'),
11396 scripts: require('./scripts'),
11397 Transaction: require('./transaction'),
11398 TransactionBuilder: require('./transaction_builder'),
11399 networks: require('./networks'),
11400 Wallet: require('./wallet')
11401}
11402
11403},{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
ebd8d4e8 11404(function (Buffer){
ab78acc6
IC
11405var bufferutils = require('./bufferutils')
11406var crypto = require('./crypto')
11407var ecdsa = require('./ecdsa')
11408var networks = require('./networks')
11409
11410var BigInteger = require('bigi')
11411var ECPubKey = require('./ecpubkey')
11412var ECSignature = require('./ecsignature')
11413
11414var ecurve = require('ecurve')
ebd8d4e8
IC
11415var ecparams = ecurve.getCurveByName('secp256k1')
11416
ab78acc6 11417function magicHash (message, network) {
ebd8d4e8
IC
11418 var magicPrefix = new Buffer(network.magicPrefix)
11419 var messageBuffer = new Buffer(message)
ab78acc6 11420 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11421
11422 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11423 return crypto.hash256(buffer)
11424}
11425
ab78acc6 11426function sign (privKey, message, network) {
ebd8d4e8
IC
11427 network = network || networks.bitcoin
11428
11429 var hash = magicHash(message, network)
11430 var signature = privKey.sign(hash)
11431 var e = BigInteger.fromBuffer(hash)
11432 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11433
11434 return signature.toCompact(i, privKey.pub.compressed)
11435}
11436
11437// TODO: network could be implied from address
ab78acc6
IC
11438function verify (address, signature, message, network) {
11439 if (!Buffer.isBuffer(signature)) {
11440 signature = new Buffer(signature, 'base64')
ebd8d4e8 11441 }
ab78acc6 11442
ebd8d4e8
IC
11443 network = network || networks.bitcoin
11444
11445 var hash = magicHash(message, network)
ab78acc6 11446 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11447 var e = BigInteger.fromBuffer(hash)
11448 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11449
11450 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11451 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11452}
11453
11454module.exports = {
11455 magicHash: magicHash,
11456 sign: sign,
11457 verify: verify
11458}
11459
ab78acc6
IC
11460}).call(this,require("buffer").Buffer)
11461},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
ebd8d4e8
IC
11462// https://en.bitcoin.it/wiki/List_of_address_prefixes
11463// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11464
11465var networks = {
11466 bitcoin: {
11467 magicPrefix: '\x18Bitcoin Signed Message:\n',
11468 bip32: {
11469 public: 0x0488b21e,
11470 private: 0x0488ade4
11471 },
11472 pubKeyHash: 0x00,
11473 scriptHash: 0x05,
11474 wif: 0x80,
11475 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11476 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11477 estimateFee: estimateFee('bitcoin')
a9385c1b 11478 },
ab78acc6
IC
11479 testnet: {
11480 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11481 bip32: {
ab78acc6
IC
11482 public: 0x043587cf,
11483 private: 0x04358394
a9385c1b 11484 },
ab78acc6
IC
11485 pubKeyHash: 0x6f,
11486 scriptHash: 0xc4,
11487 wif: 0xef,
11488 dustThreshold: 546,
cb325c58 11489 feePerKb: 10000,
ab78acc6 11490 estimateFee: estimateFee('testnet')
a9385c1b 11491 },
ab78acc6
IC
11492 litecoin: {
11493 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11494 bip32: {
ab78acc6
IC
11495 public: 0x019da462,
11496 private: 0x019d9cfe
a9385c1b 11497 },
ab78acc6
IC
11498 pubKeyHash: 0x30,
11499 scriptHash: 0x05,
11500 wif: 0xb0,
11501 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11502 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11503 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11504 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11505 },
11506 dogecoin: {
11507 magicPrefix: '\x19Dogecoin Signed Message:\n',
11508 bip32: {
11509 public: 0x02facafd,
11510 private: 0x02fac398
11511 },
11512 pubKeyHash: 0x1e,
11513 scriptHash: 0x16,
11514 wif: 0x9e,
11515 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11516 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11517 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11518 estimateFee: estimateFee('dogecoin')
11519 },
ab78acc6
IC
11520 viacoin: {
11521 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11522 bip32: {
ab78acc6
IC
11523 public: 0x0488b21e,
11524 private: 0x0488ade4
ebd8d4e8 11525 },
ab78acc6
IC
11526 pubKeyHash: 0x47,
11527 scriptHash: 0x21,
11528 wif: 0xc7,
11529 dustThreshold: 560,
11530 dustSoftThreshold: 100000,
11531 feePerKb: 100000, //
11532 estimateFee: estimateFee('viacoin')
ebd8d4e8 11533 },
ab78acc6
IC
11534 viacointestnet: {
11535 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11536 bip32: {
11537 public: 0x043587cf,
11538 private: 0x04358394
11539 },
ab78acc6 11540 pubKeyHash: 0x7f,
ebd8d4e8 11541 scriptHash: 0xc4,
ab78acc6
IC
11542 wif: 0xff,
11543 dustThreshold: 560,
11544 dustSoftThreshold: 100000,
11545 feePerKb: 100000,
11546 estimateFee: estimateFee('viacointestnet')
11547 },
11548 gamerscoin: {
11549 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11550 bip32: {
11551 public: 0x019da462,
11552 private: 0x019d9cfe
11553 },
11554 pubKeyHash: 0x26,
11555 scriptHash: 0x05,
11556 wif: 0xA6,
11557 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11558 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11559 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11560 estimateFee: estimateFee('gamerscoin')
11561 },
11562 jumbucks: {
11563 magicPrefix: '\x19Jumbucks Signed Message:\n',
11564 bip32: {
11565 public: 0x037a689a,
11566 private: 0x037a6460
11567 },
11568 pubKeyHash: 0x2b,
11569 scriptHash: 0x05,
11570 wif: 0xab,
11571 dustThreshold: 0,
11572 dustSoftThreshold: 10000,
ebd8d4e8 11573 feePerKb: 10000,
ab78acc6
IC
11574 estimateFee: estimateFee('jumbucks')
11575 },
11576 zetacoin: {
11577 magicPrefix: '\x18Zetacoin Signed Message:\n',
11578 bip32: {
11579 public: 0x0488b21e,
11580 private: 0x0488ade4
11581 },
11582 pubKeyHash: 0x50,
11583 scriptHash: 0x09,
11584 wif: 0xe0,
11585 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11586 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11587 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11588 }
11589}
11590
ab78acc6
IC
11591function estimateFee (type) {
11592 return function (tx) {
ebd8d4e8
IC
11593 var network = networks[type]
11594 var baseFee = network.feePerKb
11595 var byteSize = tx.toBuffer().length
11596
11597 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11598 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11599
ab78acc6 11600 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11601 if (e.value < network.dustSoftThreshold) {
11602 fee += baseFee
11603 }
11604 })
11605
11606 return fee
11607 }
11608}
11609
11610module.exports = networks
11611
ab78acc6 11612},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11613module.exports = {
11614 // push value
ab78acc6
IC
11615 OP_FALSE: 0,
11616 OP_0: 0,
11617 OP_PUSHDATA1: 76,
11618 OP_PUSHDATA2: 77,
11619 OP_PUSHDATA4: 78,
11620 OP_1NEGATE: 79,
11621 OP_RESERVED: 80,
11622 OP_1: 81,
11623 OP_TRUE: 81,
11624 OP_2: 82,
11625 OP_3: 83,
11626 OP_4: 84,
11627 OP_5: 85,
11628 OP_6: 86,
11629 OP_7: 87,
11630 OP_8: 88,
11631 OP_9: 89,
11632 OP_10: 90,
11633 OP_11: 91,
11634 OP_12: 92,
11635 OP_13: 93,
11636 OP_14: 94,
11637 OP_15: 95,
11638 OP_16: 96,
ebd8d4e8
IC
11639
11640 // control
ab78acc6
IC
11641 OP_NOP: 97,
11642 OP_VER: 98,
11643 OP_IF: 99,
11644 OP_NOTIF: 100,
11645 OP_VERIF: 101,
11646 OP_VERNOTIF: 102,
11647 OP_ELSE: 103,
11648 OP_ENDIF: 104,
11649 OP_VERIFY: 105,
11650 OP_RETURN: 106,
ebd8d4e8
IC
11651
11652 // stack ops
ab78acc6
IC
11653 OP_TOALTSTACK: 107,
11654 OP_FROMALTSTACK: 108,
11655 OP_2DROP: 109,
11656 OP_2DUP: 110,
11657 OP_3DUP: 111,
11658 OP_2OVER: 112,
11659 OP_2ROT: 113,
11660 OP_2SWAP: 114,
11661 OP_IFDUP: 115,
11662 OP_DEPTH: 116,
11663 OP_DROP: 117,
11664 OP_DUP: 118,
11665 OP_NIP: 119,
11666 OP_OVER: 120,
11667 OP_PICK: 121,
11668 OP_ROLL: 122,
11669 OP_ROT: 123,
11670 OP_SWAP: 124,
11671 OP_TUCK: 125,
ebd8d4e8
IC
11672
11673 // splice ops
ab78acc6
IC
11674 OP_CAT: 126,
11675 OP_SUBSTR: 127,
11676 OP_LEFT: 128,
11677 OP_RIGHT: 129,
11678 OP_SIZE: 130,
ebd8d4e8
IC
11679
11680 // bit logic
ab78acc6
IC
11681 OP_INVERT: 131,
11682 OP_AND: 132,
11683 OP_OR: 133,
11684 OP_XOR: 134,
11685 OP_EQUAL: 135,
11686 OP_EQUALVERIFY: 136,
11687 OP_RESERVED1: 137,
11688 OP_RESERVED2: 138,
ebd8d4e8
IC
11689
11690 // numeric
ab78acc6
IC
11691 OP_1ADD: 139,
11692 OP_1SUB: 140,
11693 OP_2MUL: 141,
11694 OP_2DIV: 142,
11695 OP_NEGATE: 143,
11696 OP_ABS: 144,
11697 OP_NOT: 145,
11698 OP_0NOTEQUAL: 146,
11699
11700 OP_ADD: 147,
11701 OP_SUB: 148,
11702 OP_MUL: 149,
11703 OP_DIV: 150,
11704 OP_MOD: 151,
11705 OP_LSHIFT: 152,
11706 OP_RSHIFT: 153,
11707
11708 OP_BOOLAND: 154,
11709 OP_BOOLOR: 155,
11710 OP_NUMEQUAL: 156,
11711 OP_NUMEQUALVERIFY: 157,
11712 OP_NUMNOTEQUAL: 158,
11713 OP_LESSTHAN: 159,
11714 OP_GREATERTHAN: 160,
11715 OP_LESSTHANOREQUAL: 161,
11716 OP_GREATERTHANOREQUAL: 162,
11717 OP_MIN: 163,
11718 OP_MAX: 164,
11719
11720 OP_WITHIN: 165,
ebd8d4e8
IC
11721
11722 // crypto
ab78acc6
IC
11723 OP_RIPEMD160: 166,
11724 OP_SHA1: 167,
11725 OP_SHA256: 168,
11726 OP_HASH160: 169,
11727 OP_HASH256: 170,
11728 OP_CODESEPARATOR: 171,
11729 OP_CHECKSIG: 172,
11730 OP_CHECKSIGVERIFY: 173,
11731 OP_CHECKMULTISIG: 174,
11732 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11733
11734 // expansion
ab78acc6
IC
11735 OP_NOP1: 176,
11736 OP_NOP2: 177,
11737 OP_NOP3: 178,
11738 OP_NOP4: 179,
11739 OP_NOP5: 180,
11740 OP_NOP6: 181,
11741 OP_NOP7: 182,
11742 OP_NOP8: 183,
11743 OP_NOP9: 184,
11744 OP_NOP10: 185,
ebd8d4e8
IC
11745
11746 // template matching params
ab78acc6
IC
11747 OP_PUBKEYHASH: 253,
11748 OP_PUBKEY: 254,
11749 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11750}
11751
ab78acc6 11752},{}],68:[function(require,module,exports){
ebd8d4e8 11753(function (Buffer){
ab78acc6
IC
11754var assert = require('assert')
11755var bufferutils = require('./bufferutils')
11756var crypto = require('./crypto')
11757var typeForce = require('typeforce')
11758var opcodes = require('./opcodes')
ebd8d4e8 11759
ab78acc6
IC
11760function Script (buffer, chunks) {
11761 typeForce('Buffer', buffer)
11762 typeForce('Array', chunks)
ebd8d4e8
IC
11763
11764 this.buffer = buffer
11765 this.chunks = chunks
11766}
11767
ab78acc6 11768Script.fromASM = function (asm) {
ebd8d4e8 11769 var strChunks = asm.split(' ')
ab78acc6
IC
11770 var chunks = strChunks.map(function (strChunk) {
11771 // opcode
ebd8d4e8
IC
11772 if (strChunk in opcodes) {
11773 return opcodes[strChunk]
11774
ab78acc6 11775 // data chunk
ebd8d4e8
IC
11776 } else {
11777 return new Buffer(strChunk, 'hex')
11778 }
11779 })
11780
11781 return Script.fromChunks(chunks)
11782}
11783
ab78acc6 11784Script.fromBuffer = function (buffer) {
ebd8d4e8 11785 var chunks = []
ebd8d4e8
IC
11786 var i = 0
11787
11788 while (i < buffer.length) {
11789 var opcode = buffer.readUInt8(i)
11790
ab78acc6 11791 // data chunk
ebd8d4e8
IC
11792 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11793 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11794
11795 // did reading a pushDataInt fail? return non-chunked script
11796 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11797 i += d.size
11798
ab78acc6
IC
11799 // attempt to read too much data?
11800 if (i + d.number > buffer.length) return new Script(buffer, [])
11801
ebd8d4e8
IC
11802 var data = buffer.slice(i, i + d.number)
11803 i += d.number
11804
11805 chunks.push(data)
11806
ab78acc6 11807 // opcode
ebd8d4e8
IC
11808 } else {
11809 chunks.push(opcode)
11810
11811 i += 1
11812 }
11813 }
11814
11815 return new Script(buffer, chunks)
11816}
11817
ab78acc6
IC
11818Script.fromChunks = function (chunks) {
11819 typeForce('Array', chunks)
ebd8d4e8 11820
ab78acc6
IC
11821 var bufferSize = chunks.reduce(function (accum, chunk) {
11822 // data chunk
ebd8d4e8
IC
11823 if (Buffer.isBuffer(chunk)) {
11824 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11825 }
11826
ab78acc6 11827 // opcode
ebd8d4e8
IC
11828 return accum + 1
11829 }, 0.0)
11830
11831 var buffer = new Buffer(bufferSize)
11832 var offset = 0
11833
ab78acc6
IC
11834 chunks.forEach(function (chunk) {
11835 // data chunk
ebd8d4e8
IC
11836 if (Buffer.isBuffer(chunk)) {
11837 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11838
11839 chunk.copy(buffer, offset)
11840 offset += chunk.length
11841
ab78acc6 11842 // opcode
ebd8d4e8
IC
11843 } else {
11844 buffer.writeUInt8(chunk, offset)
11845 offset += 1
11846 }
11847 })
11848
11849 assert.equal(offset, buffer.length, 'Could not decode chunks')
11850 return new Script(buffer, chunks)
11851}
11852
ab78acc6 11853Script.fromHex = function (hex) {
ebd8d4e8
IC
11854 return Script.fromBuffer(new Buffer(hex, 'hex'))
11855}
11856
ebd8d4e8
IC
11857Script.EMPTY = Script.fromChunks([])
11858
ab78acc6 11859Script.prototype.getHash = function () {
ebd8d4e8
IC
11860 return crypto.hash160(this.buffer)
11861}
11862
11863// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11864Script.prototype.without = function (needle) {
11865 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11866 return op !== needle
11867 }))
11868}
11869
ebd8d4e8
IC
11870var reverseOps = []
11871for (var op in opcodes) {
11872 var code = opcodes[op]
11873 reverseOps[code] = op
11874}
11875
ab78acc6
IC
11876Script.prototype.toASM = function () {
11877 return this.chunks.map(function (chunk) {
11878 // data chunk
ebd8d4e8
IC
11879 if (Buffer.isBuffer(chunk)) {
11880 return chunk.toString('hex')
11881
ab78acc6 11882 // opcode
ebd8d4e8
IC
11883 } else {
11884 return reverseOps[chunk]
11885 }
11886 }).join(' ')
11887}
11888
ab78acc6 11889Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11890 return this.buffer
11891}
11892
ab78acc6 11893Script.prototype.toHex = function () {
ebd8d4e8
IC
11894 return this.toBuffer().toString('hex')
11895}
11896
11897module.exports = Script
11898
ab78acc6
IC
11899}).call(this,require("buffer").Buffer)
11900},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11901(function (Buffer){
ab78acc6
IC
11902var assert = require('assert')
11903var ops = require('./opcodes')
11904var typeForce = require('typeforce')
ebd8d4e8 11905
ab78acc6 11906var ecurve = require('ecurve')
ebd8d4e8
IC
11907var curve = ecurve.getCurveByName('secp256k1')
11908
ab78acc6
IC
11909var ECSignature = require('./ecsignature')
11910var Script = require('./script')
ebd8d4e8 11911
ab78acc6 11912function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11913 if (!Buffer.isBuffer(buffer)) return false
11914
11915 try {
ebd8d4e8
IC
11916 ecurve.Point.decodeFrom(curve, buffer)
11917 } catch (e) {
ab78acc6
IC
11918 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11919 throw e
ebd8d4e8
IC
11920
11921 return false
11922 }
11923
11924 return true
11925}
11926
ab78acc6 11927function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11928 if (!Buffer.isBuffer(buffer)) return false
11929
11930 try {
11931 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11932 } catch (e) {
11933 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/))) {
11934 throw e
11935 }
ebd8d4e8
IC
11936
11937 return false
11938 }
11939
11940 return true
11941}
11942
ab78acc6
IC
11943function isPubKeyHashInput (script) {
11944 return script.chunks.length === 2 &&
11945 isCanonicalSignature(script.chunks[0]) &&
11946 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11947}
11948
ab78acc6
IC
11949function isPubKeyHashOutput (script) {
11950 return script.chunks.length === 5 &&
11951 script.chunks[0] === ops.OP_DUP &&
11952 script.chunks[1] === ops.OP_HASH160 &&
11953 Buffer.isBuffer(script.chunks[2]) &&
11954 script.chunks[2].length === 20 &&
11955 script.chunks[3] === ops.OP_EQUALVERIFY &&
11956 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11957}
11958
ab78acc6
IC
11959function isPubKeyInput (script) {
11960 return script.chunks.length === 1 &&
11961 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11962}
11963
ab78acc6
IC
11964function isPubKeyOutput (script) {
11965 return script.chunks.length === 2 &&
11966 isCanonicalPubKey(script.chunks[0]) &&
11967 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11968}
11969
ab78acc6
IC
11970function isScriptHashInput (script, allowIncomplete) {
11971 if (script.chunks.length < 2) return false
ebd8d4e8 11972
ab78acc6 11973 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11974 if (!Buffer.isBuffer(lastChunk)) return false
11975
ab78acc6
IC
11976 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11977 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11978
ab78acc6
IC
11979 // is redeemScript a valid script?
11980 if (redeemScript.chunks.length === 0) return false
11981
11982 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11983}
11984
ab78acc6
IC
11985function isScriptHashOutput (script) {
11986 return script.chunks.length === 3 &&
11987 script.chunks[0] === ops.OP_HASH160 &&
11988 Buffer.isBuffer(script.chunks[1]) &&
11989 script.chunks[1].length === 20 &&
11990 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11991}
11992
ab78acc6
IC
11993// allowIncomplete is to account for combining signatures
11994// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11995function isMultisigInput (script, allowIncomplete) {
11996 if (script.chunks.length < 2) return false
11997 if (script.chunks[0] !== ops.OP_0) return false
11998
11999 if (allowIncomplete) {
12000 return script.chunks.slice(1).every(function (chunk) {
12001 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12002 })
12003 }
12004
12005 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
12006}
12007
ab78acc6
IC
12008function isMultisigOutput (script) {
12009 if (script.chunks.length < 4) return false
12010 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 12011
ab78acc6
IC
12012 var mOp = script.chunks[0]
12013 if (mOp === ops.OP_0) return false
12014 if (mOp < ops.OP_1) return false
12015 if (mOp > ops.OP_16) return false
ebd8d4e8 12016
ab78acc6
IC
12017 var nOp = script.chunks[script.chunks.length - 2]
12018 if (nOp === ops.OP_0) return false
12019 if (nOp < ops.OP_1) return false
12020 if (nOp > ops.OP_16) return false
ebd8d4e8 12021
ab78acc6
IC
12022 var m = mOp - (ops.OP_1 - 1)
12023 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
12024 if (n < m) return false
12025
ab78acc6 12026 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
12027 if (n < pubKeys.length) return false
12028
12029 return pubKeys.every(isCanonicalPubKey)
12030}
12031
ab78acc6
IC
12032function isNullDataOutput (script) {
12033 return script.chunks[0] === ops.OP_RETURN
12034}
12035
12036function classifyOutput (script) {
12037 typeForce('Script', script)
12038
12039 if (isPubKeyHashOutput(script)) {
12040 return 'pubkeyhash'
12041 } else if (isScriptHashOutput(script)) {
12042 return 'scripthash'
12043 } else if (isMultisigOutput(script)) {
12044 return 'multisig'
12045 } else if (isPubKeyOutput(script)) {
12046 return 'pubkey'
12047 } else if (isNullDataOutput(script)) {
12048 return 'nulldata'
12049 }
12050
12051 return 'nonstandard'
12052}
12053
12054function classifyInput (script, allowIncomplete) {
12055 typeForce('Script', script)
12056
12057 if (isPubKeyHashInput(script)) {
12058 return 'pubkeyhash'
12059 } else if (isMultisigInput(script, allowIncomplete)) {
12060 return 'multisig'
12061 } else if (isScriptHashInput(script, allowIncomplete)) {
12062 return 'scripthash'
12063 } else if (isPubKeyInput(script)) {
12064 return 'pubkey'
12065 }
12066
12067 return 'nonstandard'
ebd8d4e8
IC
12068}
12069
12070// Standard Script Templates
12071// {pubKey} OP_CHECKSIG
ab78acc6 12072function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12073 return Script.fromChunks([
12074 pubKey.toBuffer(),
ab78acc6 12075 ops.OP_CHECKSIG
ebd8d4e8
IC
12076 ])
12077}
12078
12079// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12080function pubKeyHashOutput (hash) {
12081 typeForce('Buffer', hash)
ebd8d4e8
IC
12082
12083 return Script.fromChunks([
ab78acc6
IC
12084 ops.OP_DUP,
12085 ops.OP_HASH160,
ebd8d4e8 12086 hash,
ab78acc6
IC
12087 ops.OP_EQUALVERIFY,
12088 ops.OP_CHECKSIG
ebd8d4e8
IC
12089 ])
12090}
12091
12092// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12093function scriptHashOutput (hash) {
12094 typeForce('Buffer', hash)
ebd8d4e8
IC
12095
12096 return Script.fromChunks([
ab78acc6 12097 ops.OP_HASH160,
ebd8d4e8 12098 hash,
ab78acc6 12099 ops.OP_EQUAL
ebd8d4e8
IC
12100 ])
12101}
12102
12103// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12104function multisigOutput (m, pubKeys) {
12105 typeForce(['ECPubKey'], pubKeys)
12106
ebd8d4e8
IC
12107 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12108
ab78acc6 12109 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12110 return pubKey.toBuffer()
12111 })
12112 var n = pubKeys.length
12113
12114 return Script.fromChunks([].concat(
ab78acc6 12115 (ops.OP_1 - 1) + m,
ebd8d4e8 12116 pubKeyBuffers,
ab78acc6
IC
12117 (ops.OP_1 - 1) + n,
12118 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12119 ))
12120}
12121
12122// {signature}
ab78acc6
IC
12123function pubKeyInput (signature) {
12124 typeForce('Buffer', signature)
ebd8d4e8
IC
12125
12126 return Script.fromChunks([signature])
12127}
12128
12129// {signature} {pubKey}
ab78acc6
IC
12130function pubKeyHashInput (signature, pubKey) {
12131 typeForce('Buffer', signature)
ebd8d4e8
IC
12132
12133 return Script.fromChunks([signature, pubKey.toBuffer()])
12134}
12135
12136// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12137function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12138 return Script.fromChunks([].concat(
12139 scriptSig.chunks,
12140 scriptPubKey.toBuffer()
12141 ))
12142}
12143
12144// OP_0 [signatures ...]
ab78acc6 12145function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12146 if (scriptPubKey) {
ab78acc6
IC
12147 assert(isMultisigOutput(scriptPubKey))
12148
12149 var mOp = scriptPubKey.chunks[0]
12150 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12151 var m = mOp - (ops.OP_1 - 1)
12152 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12153
ab78acc6
IC
12154 assert(signatures.length >= m, 'Not enough signatures provided')
12155 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12156 }
12157
ab78acc6
IC
12158 return Script.fromChunks([].concat(ops.OP_0, signatures))
12159}
12160
12161function nullDataOutput (data) {
12162 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12163}
12164
12165module.exports = {
ab78acc6
IC
12166 isCanonicalPubKey: isCanonicalPubKey,
12167 isCanonicalSignature: isCanonicalSignature,
12168 isPubKeyHashInput: isPubKeyHashInput,
12169 isPubKeyHashOutput: isPubKeyHashOutput,
12170 isPubKeyInput: isPubKeyInput,
12171 isPubKeyOutput: isPubKeyOutput,
12172 isScriptHashInput: isScriptHashInput,
12173 isScriptHashOutput: isScriptHashOutput,
12174 isMultisigInput: isMultisigInput,
12175 isMultisigOutput: isMultisigOutput,
12176 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12177 classifyOutput: classifyOutput,
ab78acc6
IC
12178 classifyInput: classifyInput,
12179 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12180 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12181 scriptHashOutput: scriptHashOutput,
12182 multisigOutput: multisigOutput,
ebd8d4e8 12183 pubKeyInput: pubKeyInput,
ab78acc6 12184 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12185 scriptHashInput: scriptHashInput,
ab78acc6
IC
12186 multisigInput: multisigInput,
12187 dataOutput: function (data) {
12188 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12189 return nullDataOutput(data)
12190 },
12191 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12192}
12193
ab78acc6
IC
12194}).call(this,require("buffer").Buffer)
12195},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12196(function (Buffer){
ab78acc6
IC
12197var assert = require('assert')
12198var bufferutils = require('./bufferutils')
12199var crypto = require('./crypto')
12200var typeForce = require('typeforce')
12201var opcodes = require('./opcodes')
12202var scripts = require('./scripts')
12203
12204var Address = require('./address')
12205var ECSignature = require('./ecsignature')
12206var Script = require('./script')
12207
12208function Transaction () {
12209 this.version = 1
12210 this.locktime = 0
12211 this.ins = []
12212 this.outs = []
12213}
ebd8d4e8
IC
12214
12215Transaction.DEFAULT_SEQUENCE = 0xffffffff
12216Transaction.SIGHASH_ALL = 0x01
12217Transaction.SIGHASH_NONE = 0x02
12218Transaction.SIGHASH_SINGLE = 0x03
12219Transaction.SIGHASH_ANYONECANPAY = 0x80
12220
ab78acc6
IC
12221Transaction.fromBuffer = function (buffer, __disableAssert) {
12222 var offset = 0
12223 function readSlice (n) {
12224 offset += n
12225 return buffer.slice(offset - n, offset)
12226 }
12227
12228 function readUInt32 () {
12229 var i = buffer.readUInt32LE(offset)
12230 offset += 4
12231 return i
12232 }
12233
12234 function readUInt64 () {
12235 var i = bufferutils.readUInt64LE(buffer, offset)
12236 offset += 8
12237 return i
12238 }
12239
12240 function readVarInt () {
12241 var vi = bufferutils.readVarInt(buffer, offset)
12242 offset += vi.size
12243 return vi.number
12244 }
12245
12246 function readScript () {
12247 return Script.fromBuffer(readSlice(readVarInt()))
12248 }
12249
12250 function readGenerationScript () {
12251 return new Script(readSlice(readVarInt()), [])
12252 }
12253
12254 var tx = new Transaction()
12255 tx.version = readUInt32()
12256
12257 var vinLen = readVarInt()
12258 for (var i = 0; i < vinLen; ++i) {
12259 var hash = readSlice(32)
12260
12261 if (Transaction.isCoinbaseHash(hash)) {
12262 tx.ins.push({
12263 hash: hash,
12264 index: readUInt32(),
12265 script: readGenerationScript(),
12266 sequence: readUInt32()
12267 })
12268 } else {
12269 tx.ins.push({
12270 hash: hash,
12271 index: readUInt32(),
12272 script: readScript(),
12273 sequence: readUInt32()
12274 })
12275 }
12276 }
12277
12278 var voutLen = readVarInt()
12279 for (i = 0; i < voutLen; ++i) {
12280 tx.outs.push({
12281 value: readUInt64(),
12282 script: readScript()
12283 })
12284 }
12285
12286 tx.locktime = readUInt32()
12287
12288 if (!__disableAssert) {
12289 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12290 }
12291
12292 return tx
12293}
12294
12295Transaction.fromHex = function (hex) {
12296 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12297}
12298
12299Transaction.isCoinbaseHash = function (buffer) {
12300 return Array.prototype.every.call(buffer, function (x) {
12301 return x === 0
12302 })
ebd8d4e8
IC
12303}
12304
12305/**
ab78acc6 12306 * Create a new txIn.
ebd8d4e8
IC
12307 *
12308 * Can be called with any of:
12309 *
12310 * - A transaction and an index
12311 * - A transaction hash and an index
12312 *
12313 * Note that this method does not sign the created input.
12314 */
ab78acc6
IC
12315Transaction.prototype.addInput = function (hash, index, sequence, script) {
12316 if (sequence === undefined || sequence === null) {
12317 sequence = Transaction.DEFAULT_SEQUENCE
12318 }
ebd8d4e8 12319
ab78acc6 12320 script = script || Script.EMPTY
ebd8d4e8 12321
ab78acc6 12322 if (typeof hash === 'string') {
ebd8d4e8 12323 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12324 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12325 } else if (hash instanceof Transaction) {
12326 hash = hash.getHash()
ebd8d4e8
IC
12327 }
12328
ab78acc6
IC
12329 typeForce('Buffer', hash)
12330 typeForce('Number', index)
12331 typeForce('Number', sequence)
12332 typeForce('Script', script)
12333
ebd8d4e8 12334 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12335
ab78acc6 12336 // Add the input and return the input's index
ebd8d4e8
IC
12337 return (this.ins.push({
12338 hash: hash,
12339 index: index,
ab78acc6 12340 script: script,
ebd8d4e8
IC
12341 sequence: sequence
12342 }) - 1)
12343}
12344
12345/**
ab78acc6 12346 * Create a new txOut.
ebd8d4e8
IC
12347 *
12348 * Can be called with:
12349 *
12350 * - A base58 address string and a value
12351 * - An Address object and a value
12352 * - A scriptPubKey Script and a value
12353 */
ab78acc6 12354Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12355 // Attempt to get a valid address if it's a base58 address string
12356 if (typeof scriptPubKey === 'string') {
12357 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12358 }
12359
12360 // Attempt to get a valid script if it's an Address object
12361 if (scriptPubKey instanceof Address) {
ab78acc6 12362 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12363 }
12364
ab78acc6
IC
12365 typeForce('Script', scriptPubKey)
12366 typeForce('Number', value)
12367
12368 // Add the output and return the output's index
ebd8d4e8
IC
12369 return (this.outs.push({
12370 script: scriptPubKey,
ab78acc6 12371 value: value
ebd8d4e8
IC
12372 }) - 1)
12373}
12374
ab78acc6
IC
12375Transaction.prototype.clone = function () {
12376 var newTx = new Transaction()
12377 newTx.version = this.version
12378 newTx.locktime = this.locktime
12379
12380 newTx.ins = this.ins.map(function (txIn) {
12381 return {
12382 hash: txIn.hash,
12383 index: txIn.index,
12384 script: txIn.script,
12385 sequence: txIn.sequence
12386 }
12387 })
12388
12389 newTx.outs = this.outs.map(function (txOut) {
12390 return {
12391 script: txOut.script,
12392 value: txOut.value
12393 }
12394 })
12395
12396 return newTx
12397}
12398
12399/**
12400 * Hash transaction for signing a specific input.
12401 *
12402 * Bitcoin uses a different hash for each signed transaction input. This
12403 * method copies the transaction, makes the necessary changes based on the
12404 * hashType, serializes and finally hashes the result. This hash can then be
12405 * used to sign the transaction input in question.
12406 */
12407Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12408 // FIXME: remove in 2.x.y
12409 if (arguments[0] instanceof Script) {
12410 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12411
12412 // swap the arguments (must be stored in tmp, arguments is special)
12413 var tmp = arguments[0]
12414 inIndex = arguments[1]
12415 prevOutScript = tmp
12416 }
12417
12418 typeForce('Number', inIndex)
12419 typeForce('Script', prevOutScript)
12420 typeForce('Number', hashType)
12421
12422 assert(inIndex >= 0, 'Invalid vin index')
12423 assert(inIndex < this.ins.length, 'Invalid vin index')
12424
12425 var txTmp = this.clone()
12426 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12427
12428 // Blank out other inputs' signatures
12429 txTmp.ins.forEach(function (txIn) {
12430 txIn.script = Script.EMPTY
12431 })
12432 txTmp.ins[inIndex].script = hashScript
12433
12434 var hashTypeModifier = hashType & 0x1f
12435
12436 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12437 assert(false, 'SIGHASH_NONE not yet supported')
12438 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12439 assert(false, 'SIGHASH_SINGLE not yet supported')
12440 }
12441
12442 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12443 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12444 }
12445
12446 var hashTypeBuffer = new Buffer(4)
12447 hashTypeBuffer.writeInt32LE(hashType, 0)
12448
12449 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12450 return crypto.hash256(buffer)
12451}
12452
12453Transaction.prototype.getHash = function () {
12454 return crypto.hash256(this.toBuffer())
12455}
12456
12457Transaction.prototype.getId = function () {
12458 // TxHash is little-endian, we need big-endian
12459 return bufferutils.reverse(this.getHash()).toString('hex')
12460}
12461
ebd8d4e8 12462Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12463 function scriptSize (script) {
12464 var length = script.buffer.length
ebd8d4e8 12465
ab78acc6
IC
12466 return bufferutils.varIntSize(length) + length
12467 }
ebd8d4e8
IC
12468
12469 var buffer = new Buffer(
12470 8 +
12471 bufferutils.varIntSize(this.ins.length) +
12472 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12473 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12474 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12475 )
12476
12477 var offset = 0
ab78acc6 12478 function writeSlice (slice) {
ebd8d4e8
IC
12479 slice.copy(buffer, offset)
12480 offset += slice.length
12481 }
ab78acc6
IC
12482
12483 function writeUInt32 (i) {
ebd8d4e8
IC
12484 buffer.writeUInt32LE(i, offset)
12485 offset += 4
12486 }
ab78acc6
IC
12487
12488 function writeUInt64 (i) {
ebd8d4e8
IC
12489 bufferutils.writeUInt64LE(buffer, i, offset)
12490 offset += 8
12491 }
ab78acc6
IC
12492
12493 function writeVarInt (i) {
ebd8d4e8
IC
12494 var n = bufferutils.writeVarInt(buffer, i, offset)
12495 offset += n
12496 }
12497
12498 writeUInt32(this.version)
12499 writeVarInt(this.ins.length)
12500
ab78acc6
IC
12501 this.ins.forEach(function (txIn) {
12502 writeSlice(txIn.hash)
12503 writeUInt32(txIn.index)
12504 writeVarInt(txIn.script.buffer.length)
12505 writeSlice(txIn.script.buffer)
12506 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12507 })
12508
12509 writeVarInt(this.outs.length)
ab78acc6
IC
12510 this.outs.forEach(function (txOut) {
12511 writeUInt64(txOut.value)
12512 writeVarInt(txOut.script.buffer.length)
12513 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12514 })
12515
12516 writeUInt32(this.locktime)
12517
12518 return buffer
12519}
12520
ab78acc6 12521Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12522 return this.toBuffer().toString('hex')
12523}
12524
ab78acc6
IC
12525Transaction.prototype.setInputScript = function (index, script) {
12526 typeForce('Number', index)
12527 typeForce('Script', script)
12528
12529 this.ins[index].script = script
12530}
12531
12532// FIXME: remove in 2.x.y
12533Transaction.prototype.sign = function (index, privKey, hashType) {
12534 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12535
12536 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12537 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12538
12539 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12540 this.setInputScript(index, scriptSig)
12541}
12542
12543// FIXME: remove in 2.x.y
12544Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12545 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12546
12547 hashType = hashType || Transaction.SIGHASH_ALL
12548
12549 var hash = this.hashForSignature(index, prevOutScript, hashType)
12550 var signature = privKey.sign(hash)
12551
12552 return signature.toScriptSignature(hashType)
12553}
12554
12555// FIXME: remove in 2.x.y
12556Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12557 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12558
12559 var parsed = ECSignature.parseScriptSignature(buffer)
12560 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12561
12562 return pubKey.verify(hash, parsed.signature)
12563}
12564
12565module.exports = Transaction
12566
12567}).call(this,require("buffer").Buffer)
12568},{"./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){
12569(function (Buffer){
12570var assert = require('assert')
12571var ops = require('./opcodes')
12572var scripts = require('./scripts')
12573
12574var ECPubKey = require('./ecpubkey')
12575var ECSignature = require('./ecsignature')
12576var Script = require('./script')
12577var Transaction = require('./transaction')
12578
12579function extractInput (txIn) {
12580 var redeemScript
12581 var scriptSig = txIn.script
12582 var prevOutScript
12583 var prevOutType = scripts.classifyInput(scriptSig, true)
12584 var scriptType
12585
12586 // Re-classify if scriptHash
12587 if (prevOutType === 'scripthash') {
12588 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12589 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12590
12591 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12592 scriptType = scripts.classifyInput(scriptSig, true)
12593 } else {
12594 scriptType = prevOutType
12595 }
12596
12597 // Extract hashType, pubKeys and signatures
12598 var hashType, parsed, pubKeys, signatures
12599
12600 switch (scriptType) {
12601 case 'pubkeyhash': {
12602 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12603 hashType = parsed.hashType
12604 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12605 signatures = [parsed.signature]
12606 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12607
12608 break
12609 }
12610
12611 case 'pubkey': {
12612 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12613 hashType = parsed.hashType
12614 signatures = [parsed.signature]
12615
12616 if (redeemScript) {
12617 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12618 }
12619
12620 break
12621 }
12622
12623 case 'multisig': {
12624 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12625 if (chunk === ops.OP_0) return chunk
12626
12627 var parsed = ECSignature.parseScriptSignature(chunk)
12628 hashType = parsed.hashType
12629
12630 return parsed.signature
12631 })
12632
12633 if (redeemScript) {
12634 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12635 }
12636
12637 break
12638 }
12639 }
12640
12641 return {
12642 hashType: hashType,
12643 prevOutScript: prevOutScript,
12644 prevOutType: prevOutType,
12645 pubKeys: pubKeys,
12646 redeemScript: redeemScript,
12647 scriptType: scriptType,
12648 signatures: signatures
12649 }
12650}
12651
12652function TransactionBuilder () {
12653 this.prevTxMap = {}
12654 this.prevOutScripts = {}
12655 this.prevOutTypes = {}
12656
12657 this.inputs = []
12658 this.tx = new Transaction()
12659}
12660
12661TransactionBuilder.fromTransaction = function (transaction) {
12662 var txb = new TransactionBuilder()
12663
12664 // Copy other transaction fields
12665 txb.tx.version = transaction.version
12666 txb.tx.locktime = transaction.locktime
12667
12668 // Extract/add inputs
12669 transaction.ins.forEach(function (txIn) {
12670 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12671 })
12672
12673 // Extract/add outputs
12674 transaction.outs.forEach(function (txOut) {
12675 txb.addOutput(txOut.script, txOut.value)
12676 })
12677
12678 // Extract/add signatures
12679 txb.inputs = transaction.ins.map(function (txIn) {
12680 // TODO: remove me after testcase added
12681 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12682
12683 // Ignore empty scripts
12684 if (txIn.script.buffer.length === 0) return {}
12685
12686 return extractInput(txIn)
12687 })
12688
12689 return txb
12690}
12691
12692TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12693 var prevOutHash
12694
12695 // txId
12696 if (typeof prevTx === 'string') {
12697 prevOutHash = new Buffer(prevTx, 'hex')
12698
12699 // TxId hex is big-endian, we want little-endian hash
12700 Array.prototype.reverse.call(prevOutHash)
12701
12702 // Transaction
12703 } else if (prevTx instanceof Transaction) {
12704 prevOutHash = prevTx.getHash()
12705 prevOutScript = prevTx.outs[index].script
12706
12707 // txHash
12708 } else {
12709 prevOutHash = prevTx
12710 }
12711
12712 var input = {}
12713 if (prevOutScript) {
12714 var prevOutType = scripts.classifyOutput(prevOutScript)
12715
12716 // if we can, extract pubKey information
12717 switch (prevOutType) {
12718 case 'multisig': {
12719 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12720 break
12721 }
12722
12723 case 'pubkey': {
12724 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12725 break
12726 }
12727 }
12728
12729 if (prevOutType !== 'scripthash') {
12730 input.scriptType = prevOutType
12731 }
12732
12733 input.prevOutScript = prevOutScript
12734 input.prevOutType = prevOutType
12735 }
12736
12737 assert(this.inputs.every(function (input2) {
12738 if (input2.hashType === undefined) return true
12739
12740 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12741 }), 'No, this would invalidate signatures')
12742
12743 var prevOut = prevOutHash.toString('hex') + ':' + index
12744 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12745
12746 var vin = this.tx.addInput(prevOutHash, index, sequence)
12747 this.inputs[vin] = input
12748 this.prevTxMap[prevOut] = vin
12749
12750 return vin
12751}
12752
12753TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12754 assert(this.inputs.every(function (input) {
12755 if (input.hashType === undefined) return true
ebd8d4e8 12756
ab78acc6
IC
12757 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12758 }), 'No, this would invalidate signatures')
ebd8d4e8 12759
ab78acc6
IC
12760 return this.tx.addOutput(scriptPubKey, value)
12761}
ebd8d4e8 12762
ab78acc6
IC
12763TransactionBuilder.prototype.build = function () {
12764 return this.__build(false)
12765}
12766TransactionBuilder.prototype.buildIncomplete = function () {
12767 return this.__build(true)
12768}
ebd8d4e8 12769
ab78acc6
IC
12770var canSignTypes = {
12771 'pubkeyhash': true,
12772 'multisig': true,
12773 'pubkey': true
12774}
ebd8d4e8 12775
ab78acc6
IC
12776TransactionBuilder.prototype.__build = function (allowIncomplete) {
12777 if (!allowIncomplete) {
12778 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12779 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12780 }
12781
ab78acc6 12782 var tx = this.tx.clone()
ebd8d4e8 12783
ab78acc6
IC
12784 // Create script signatures from signature meta-data
12785 this.inputs.forEach(function (input, index) {
12786 var scriptType = input.scriptType
12787 var scriptSig
ebd8d4e8 12788
ab78acc6
IC
12789 if (!allowIncomplete) {
12790 assert(!!scriptType, 'Transaction is not complete')
12791 assert(scriptType in canSignTypes, scriptType + ' not supported')
12792 assert(input.signatures, 'Transaction is missing signatures')
12793 }
ebd8d4e8 12794
ab78acc6
IC
12795 if (input.signatures) {
12796 switch (scriptType) {
12797 case 'pubkeyhash': {
12798 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12799 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12800 break
12801 }
ebd8d4e8 12802
ab78acc6
IC
12803 case 'multisig': {
12804 // Array.prototype.map is sparse-compatible
12805 var msSignatures = input.signatures.map(function (signature) {
12806 return signature && signature.toScriptSignature(input.hashType)
12807 })
ebd8d4e8 12808
ab78acc6
IC
12809 // fill in blanks with OP_0
12810 if (allowIncomplete) {
12811 for (var i = 0; i < msSignatures.length; ++i) {
12812 if (msSignatures[i]) continue
ebd8d4e8 12813
ab78acc6
IC
12814 msSignatures[i] = ops.OP_0
12815 }
12816 } else {
12817 // Array.prototype.filter returns non-sparse array
12818 msSignatures = msSignatures.filter(function (x) { return x })
12819 }
ebd8d4e8 12820
ab78acc6
IC
12821 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12822 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12823 break
12824 }
ebd8d4e8 12825
ab78acc6
IC
12826 case 'pubkey': {
12827 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12828 scriptSig = scripts.pubKeyInput(pkSignature)
12829 break
12830 }
12831 }
ebd8d4e8 12832 }
ebd8d4e8 12833
ab78acc6
IC
12834 // did we build a scriptSig?
12835 if (scriptSig) {
12836 // wrap as scriptHash if necessary
12837 if (input.prevOutType === 'scripthash') {
12838 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12839 }
12840
12841 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12842 }
12843 })
12844
ab78acc6 12845 return tx
ebd8d4e8
IC
12846}
12847
ab78acc6
IC
12848TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12849 assert(index in this.inputs, 'No input at index: ' + index)
12850 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12851
ab78acc6
IC
12852 var input = this.inputs[index]
12853 var canSign = input.hashType &&
12854 input.prevOutScript &&
12855 input.prevOutType &&
12856 input.pubKeys &&
12857 input.scriptType &&
12858 input.signatures
ebd8d4e8 12859
ab78acc6
IC
12860 // are we almost ready to sign?
12861 if (canSign) {
12862 // if redeemScript was provided, enforce consistency
12863 if (redeemScript) {
12864 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12865 }
ebd8d4e8 12866
ab78acc6 12867 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12868
ab78acc6
IC
12869 // no? prepare
12870 } else {
12871 // must be pay-to-scriptHash?
12872 if (redeemScript) {
12873 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12874 if (input.prevOutScript) {
12875 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12876
12877 var scriptHash = input.prevOutScript.chunks[1]
12878 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12879 }
ebd8d4e8 12880
ab78acc6
IC
12881 var scriptType = scripts.classifyOutput(redeemScript)
12882 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12883
ab78acc6
IC
12884 var pubKeys = []
12885 switch (scriptType) {
12886 case 'multisig': {
12887 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12888 break
12889 }
ebd8d4e8 12890
ab78acc6
IC
12891 case 'pubkeyhash': {
12892 var pkh1 = redeemScript.chunks[2]
12893 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12894
ab78acc6
IC
12895 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12896 pubKeys = [privKey.pub]
12897 break
12898 }
ebd8d4e8 12899
ab78acc6
IC
12900 case 'pubkey': {
12901 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12902 break
12903 }
12904 }
ebd8d4e8 12905
ab78acc6
IC
12906 if (!input.prevOutScript) {
12907 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12908 input.prevOutType = 'scripthash'
12909 }
ebd8d4e8 12910
ab78acc6
IC
12911 input.pubKeys = pubKeys
12912 input.redeemScript = redeemScript
12913 input.scriptType = scriptType
ebd8d4e8 12914
ab78acc6
IC
12915 // cannot be pay-to-scriptHash
12916 } else {
12917 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12918
ab78acc6
IC
12919 // can we otherwise sign this?
12920 if (input.scriptType) {
12921 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12922
ab78acc6
IC
12923 // we know nothin' Jon Snow, assume pubKeyHash
12924 } else {
12925 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12926 input.prevOutType = 'pubkeyhash'
12927 input.pubKeys = [privKey.pub]
12928 input.scriptType = input.prevOutType
12929 }
12930 }
ebd8d4e8 12931
ab78acc6
IC
12932 input.hashType = hashType
12933 input.signatures = input.signatures || []
12934 }
12935
12936 var signatureScript = input.redeemScript || input.prevOutScript
12937 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12938
12939 // enforce signature order matches public keys
12940 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12941 // maintain a local copy of unmatched signatures
12942 var unmatched = input.signatures.slice()
12943
12944 input.signatures = input.pubKeys.map(function (pubKey) {
12945 var match
12946
12947 // check for any matching signatures
12948 unmatched.some(function (signature, i) {
12949 if (!pubKey.verify(signatureHash, signature)) return false
12950 match = signature
12951
12952 // remove matched signature from unmatched
12953 unmatched.splice(i, 1)
12954
12955 return true
12956 })
12957
12958 return match || undefined
12959 })
12960 }
12961
12962 // enforce in order signing of public keys
12963 assert(input.pubKeys.some(function (pubKey, i) {
12964 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12965
12966 assert(!input.signatures[i], 'Signature already exists')
12967 var signature = privKey.sign(signatureHash)
12968 input.signatures[i] = signature
12969
12970 return true
12971 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12972}
12973
ab78acc6 12974module.exports = TransactionBuilder
ebd8d4e8 12975
ab78acc6
IC
12976}).call(this,require("buffer").Buffer)
12977},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12978(function (Buffer){
ab78acc6
IC
12979var assert = require('assert')
12980var bufferutils = require('./bufferutils')
12981var typeForce = require('typeforce')
12982var networks = require('./networks')
12983var randomBytes = require('randombytes')
ebd8d4e8 12984
ab78acc6
IC
12985var Address = require('./address')
12986var HDNode = require('./hdnode')
12987var TransactionBuilder = require('./transaction_builder')
12988var Script = require('./script')
ebd8d4e8 12989
ab78acc6
IC
12990function Wallet (seed, network) {
12991 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12992
12993 seed = seed || randomBytes(32)
ebd8d4e8
IC
12994 network = network || networks.bitcoin
12995
12996 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12997 var masterKey = HDNode.fromSeedBuffer(seed, network)
12998
12999 // HD first-level child derivation method should be hardened
13000 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13001 var accountZero = masterKey.deriveHardened(0)
13002 var externalAccount = accountZero.derive(0)
13003 var internalAccount = accountZero.derive(1)
ebd8d4e8 13004
ebd8d4e8
IC
13005 this.addresses = []
13006 this.changeAddresses = []
ab78acc6
IC
13007 this.network = network
13008 this.unspents = []
ebd8d4e8 13009
ab78acc6
IC
13010 // FIXME: remove in 2.0.0
13011 this.unspentMap = {}
ebd8d4e8 13012
ab78acc6
IC
13013 // FIXME: remove in 2.0.0
13014 var me = this
13015 this.newMasterKey = function (seed) {
13016 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13017
13018 seed = seed || randomBytes(32)
13019 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 13020
ab78acc6 13021 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
13022 externalAccount = accountZero.derive(0)
13023 internalAccount = accountZero.derive(1)
13024
13025 me.addresses = []
13026 me.changeAddresses = []
13027
ab78acc6
IC
13028 me.unspents = []
13029 me.unspentMap = {}
ebd8d4e8
IC
13030 }
13031
ab78acc6
IC
13032 this.getMasterKey = function () {
13033 return masterKey
ebd8d4e8 13034 }
ab78acc6
IC
13035 this.getAccountZero = function () {
13036 return accountZero
ebd8d4e8 13037 }
ab78acc6
IC
13038 this.getExternalAccount = function () {
13039 return externalAccount
13040 }
13041 this.getInternalAccount = function () {
13042 return internalAccount
ebd8d4e8 13043 }
ab78acc6 13044}
ebd8d4e8 13045
ab78acc6
IC
13046Wallet.prototype.createTransaction = function (to, value, options) {
13047 // FIXME: remove in 2.0.0
13048 if (typeof options !== 'object') {
13049 if (options !== undefined) {
13050 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13051
ab78acc6
IC
13052 options = {
13053 fixedFee: arguments[2],
13054 changeAddress: arguments[3]
13055 }
ebd8d4e8 13056 }
ebd8d4e8
IC
13057 }
13058
ab78acc6 13059 options = options || {}
ebd8d4e8 13060
ab78acc6 13061 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13062
ab78acc6
IC
13063 var changeAddress = options.changeAddress
13064 var fixedFee = options.fixedFee
13065 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13066
ab78acc6
IC
13067 // filter by minConf, then pending and sort by descending value
13068 var unspents = this.unspents.filter(function (unspent) {
13069 return unspent.confirmations >= minConf
13070 }).filter(function (unspent) {
13071 return !unspent.pending
13072 }).sort(function (o1, o2) {
13073 return o2.value - o1.value
13074 })
ebd8d4e8 13075
ab78acc6
IC
13076 var accum = 0
13077 var addresses = []
13078 var subTotal = value
ebd8d4e8 13079
ab78acc6
IC
13080 var txb = new TransactionBuilder()
13081 txb.addOutput(to, value)
ebd8d4e8 13082
ab78acc6
IC
13083 for (var i = 0; i < unspents.length; ++i) {
13084 var unspent = unspents[i]
13085 addresses.push(unspent.address)
ebd8d4e8 13086
ab78acc6
IC
13087 txb.addInput(unspent.txHash, unspent.index)
13088
13089 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13090
ab78acc6
IC
13091 accum += unspent.value
13092 subTotal = value + fee
13093
13094 if (accum >= subTotal) {
13095 var change = accum - subTotal
13096
13097 if (change > this.network.dustThreshold) {
13098 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13099 }
ebd8d4e8 13100
ab78acc6 13101 break
ebd8d4e8
IC
13102 }
13103 }
13104
ab78acc6 13105 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13106
ab78acc6
IC
13107 return this.signWith(txb, addresses).build()
13108}
ebd8d4e8 13109
ab78acc6
IC
13110// FIXME: remove in 2.0.0
13111Wallet.prototype.processPendingTx = function (tx) {
13112 this.__processTx(tx, true)
13113}
ebd8d4e8 13114
ab78acc6
IC
13115// FIXME: remove in 2.0.0
13116Wallet.prototype.processConfirmedTx = function (tx) {
13117 this.__processTx(tx, false)
13118}
ebd8d4e8 13119
ab78acc6
IC
13120// FIXME: remove in 2.0.0
13121Wallet.prototype.__processTx = function (tx, isPending) {
13122 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13123
ab78acc6
IC
13124 var txId = tx.getId()
13125 var txHash = tx.getHash()
ebd8d4e8 13126
ab78acc6
IC
13127 tx.outs.forEach(function (txOut, i) {
13128 var address
ebd8d4e8 13129
ab78acc6
IC
13130 try {
13131 address = Address.fromOutputScript(txOut.script, this.network).toString()
13132 } catch (e) {
13133 if (!(e.message.match(/has no matching Address/)))
13134 throw e
13135 }
13136
13137 var myAddresses = this.addresses.concat(this.changeAddresses)
13138 if (myAddresses.indexOf(address) > -1) {
13139 var lookup = txId + ':' + i
13140 if (lookup in this.unspentMap) return
13141
13142 // its unique, add it
13143 var unspent = {
13144 address: address,
13145 confirmations: 0, // no way to determine this without more information
13146 index: i,
13147 txHash: txHash,
13148 txId: txId,
13149 value: txOut.value,
13150 pending: isPending
ebd8d4e8 13151 }
ebd8d4e8 13152
ab78acc6
IC
13153 this.unspentMap[lookup] = unspent
13154 this.unspents.push(unspent)
13155 }
13156 }, this)
ebd8d4e8 13157
ab78acc6
IC
13158 tx.ins.forEach(function (txIn) {
13159 // copy and convert to big-endian hex
13160 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13161
ab78acc6
IC
13162 var lookup = txInId + ':' + txIn.index
13163 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13164
ab78acc6 13165 var unspent = this.unspentMap[lookup]
ebd8d4e8 13166
ab78acc6
IC
13167 if (isPending) {
13168 unspent.pending = true
13169 unspent.spent = true
13170 } else {
13171 delete this.unspentMap[lookup]
ebd8d4e8 13172
ab78acc6
IC
13173 this.unspents = this.unspents.filter(function (unspent2) {
13174 return unspent !== unspent2
13175 })
13176 }
13177 }, this)
13178}
ebd8d4e8 13179
ab78acc6
IC
13180Wallet.prototype.generateAddress = function () {
13181 var k = this.addresses.length
13182 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13183
ab78acc6 13184 this.addresses.push(address.toString())
ebd8d4e8 13185
ab78acc6
IC
13186 return this.getReceiveAddress()
13187}
ebd8d4e8 13188
ab78acc6
IC
13189Wallet.prototype.generateChangeAddress = function () {
13190 var k = this.changeAddresses.length
13191 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13192
ab78acc6 13193 this.changeAddresses.push(address.toString())
ebd8d4e8 13194
ab78acc6
IC
13195 return this.getChangeAddress()
13196}
ebd8d4e8 13197
ab78acc6
IC
13198Wallet.prototype.getAddress = function () {
13199 if (this.addresses.length === 0) {
13200 this.generateAddress()
ebd8d4e8
IC
13201 }
13202
ab78acc6
IC
13203 return this.addresses[this.addresses.length - 1]
13204}
ebd8d4e8 13205
ab78acc6
IC
13206Wallet.prototype.getBalance = function (minConf) {
13207 minConf = minConf || 0
ebd8d4e8 13208
ab78acc6
IC
13209 return this.unspents.filter(function (unspent) {
13210 return unspent.confirmations >= minConf
13211
13212 // FIXME: remove spent filter in 2.0.0
13213 }).filter(function (unspent) {
13214 return !unspent.spent
13215 }).reduce(function (accum, unspent) {
13216 return accum + unspent.value
13217 }, 0)
13218}
ebd8d4e8 13219
ab78acc6
IC
13220Wallet.prototype.getChangeAddress = function () {
13221 if (this.changeAddresses.length === 0) {
13222 this.generateChangeAddress()
ebd8d4e8
IC
13223 }
13224
ab78acc6
IC
13225 return this.changeAddresses[this.changeAddresses.length - 1]
13226}
13227
13228Wallet.prototype.getInternalPrivateKey = function (index) {
13229 return this.getInternalAccount().derive(index).privKey
13230}
13231
13232Wallet.prototype.getPrivateKey = function (index) {
13233 return this.getExternalAccount().derive(index).privKey
13234}
13235
13236Wallet.prototype.getPrivateKeyForAddress = function (address) {
13237 var index
ebd8d4e8 13238
ab78acc6
IC
13239 if ((index = this.addresses.indexOf(address)) > -1) {
13240 return this.getPrivateKey(index)
ebd8d4e8
IC
13241 }
13242
ab78acc6
IC
13243 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13244 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13245 }
13246
ab78acc6
IC
13247 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13248}
ebd8d4e8 13249
ab78acc6
IC
13250Wallet.prototype.getUnspentOutputs = function (minConf) {
13251 minConf = minConf || 0
ebd8d4e8 13252
ab78acc6
IC
13253 return this.unspents.filter(function (unspent) {
13254 return unspent.confirmations >= minConf
ebd8d4e8 13255
ab78acc6
IC
13256 // FIXME: remove spent filter in 2.0.0
13257 }).filter(function (unspent) {
13258 return !unspent.spent
13259 }).map(function (unspent) {
13260 return {
13261 address: unspent.address,
13262 confirmations: unspent.confirmations,
13263 index: unspent.index,
13264 txId: unspent.txId,
13265 value: unspent.value,
13266
13267 // FIXME: remove in 2.0.0
13268 hash: unspent.txId,
13269 pending: unspent.pending
13270 }
13271 })
13272}
ebd8d4e8 13273
ab78acc6
IC
13274Wallet.prototype.setUnspentOutputs = function (unspents) {
13275 this.unspentMap = {}
13276 this.unspents = unspents.map(function (unspent) {
13277 // FIXME: remove unspent.hash in 2.0.0
13278 var txId = unspent.txId || unspent.hash
13279 var index = unspent.index
ebd8d4e8 13280
ab78acc6
IC
13281 // FIXME: remove in 2.0.0
13282 if (unspent.hash !== undefined) {
13283 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13284 }
ebd8d4e8 13285
ab78acc6
IC
13286 // FIXME: remove in 2.0.0
13287 if (index === undefined) {
13288 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13289 index = unspent.outputIndex
13290 }
ebd8d4e8 13291
ab78acc6
IC
13292 typeForce('String', txId)
13293 typeForce('Number', index)
13294 typeForce('Number', unspent.value)
13295
13296 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13297 assert.doesNotThrow(function () {
13298 Address.fromBase58Check(unspent.address)
13299 }, 'Expected Base58 Address, got ' + unspent.address)
13300 assert(isFinite(index), 'Expected finite index, got ' + index)
13301
13302 // FIXME: remove branch in 2.0.0
13303 if (unspent.confirmations !== undefined) {
13304 typeForce('Number', unspent.confirmations)
ebd8d4e8 13305 }
ebd8d4e8 13306
ab78acc6 13307 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13308
ab78acc6
IC
13309 unspent = {
13310 address: unspent.address,
13311 confirmations: unspent.confirmations || 0,
13312 index: index,
13313 txHash: txHash,
13314 txId: txId,
13315 value: unspent.value,
ebd8d4e8 13316
ab78acc6
IC
13317 // FIXME: remove in 2.0.0
13318 pending: unspent.pending || false
13319 }
13320
13321 // FIXME: remove in 2.0.0
13322 this.unspentMap[txId + ':' + index] = unspent
13323
13324 return unspent
13325 }, this)
13326}
13327
13328Wallet.prototype.signWith = function (tx, addresses) {
13329 addresses.forEach(function (address, i) {
13330 var privKey = this.getPrivateKeyForAddress(address)
13331
13332 tx.sign(i, privKey)
13333 }, this)
13334
13335 return tx
13336}
13337
13338function estimatePaddedFee (tx, network) {
13339 var tmpTx = tx.clone()
13340 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13341
13342 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13343}
13344
ab78acc6
IC
13345// FIXME: 1.0.0 shims, remove in 2.0.0
13346Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13347Wallet.prototype.createTx = Wallet.prototype.createTransaction
13348
ebd8d4e8
IC
13349module.exports = Wallet
13350
ab78acc6
IC
13351}).call(this,require("buffer").Buffer)
13352},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13353});</script>
d5dc92fd
IC
13354 <script>bitcoin.networks.shadow = {
13355 magicPrefix: '\x19ShadowCash Signed Message:\n',
13356 bip32: {
13357 public: 0xEE80286A,
13358 private: 0xEE8031E8
13359 },
13360 pubKeyHash: 0x3f,
13361 scriptHash: 0x7d,
13362 wif: 0xbf,
13363 dustThreshold: 0,
13364 feePerKb: 1000,
13365 estimateFee: function() { return "unused in this app" },
13366};
13367
13368bitcoin.networks.shadowtn = {
13369 magicPrefix: '\x19ShadowCash Signed Message:\n',
13370 bip32: {
13371 public: 0x76C0FDFB,
13372 private: 0x76C1077A
13373 },
13374 pubKeyHash: 0x7f,
13375 scriptHash: 0xc4,
13376 wif: 0xff,
13377 dustThreshold: 0,
13378 feePerKb: 1000,
13379 estimateFee: function() { return "unused in this app" },
13380};
5c434a8a
CM
13381
13382bitcoin.networks.clam = {
13383 bip32: {
13384 public: 0xa8c26d64,
13385 private: 0xa8c17826
13386 },
13387 pubKeyHash: 0x89,
13388 wif: 0x85,
13389};
5493efc3 13390
13391bitcoin.networks.dash = {
13392 bip32: {
13393 public: 0x0488b21e,
13394 private: 0x0488ade4
13395 },
68151a47 13396 pubKeyHash: 0x4c,
5493efc3 13397 scriptHash: 0x10,
13398 wif: 0xcc,
13399};
13400
07ac4350 13401bitcoin.networks.namecoin = {
13402 bip32: {
13403 public: 0x0488b21e,
13404 private: 0x0488ade4
13405 },
13406 pubKeyHash: 0x34,
13407 //scriptHash: 0x10,
13408 wif: 0x80,
13409};
13410
13411bitcoin.networks.peercoin = {
13412 bip32: {
13413 public: 0x0488b21e,
13414 private: 0x0488ade4
13415 },
13416 pubKeyHash: 0x37,
13417 //scriptHash: 0x10,
13418 wif: 0xb7,
13419};
13420
d5dc92fd 13421</script>
ab78acc6 13422 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13423
13424//// base.js
13425
13426/** @fileOverview Javascript cryptography implementation.
13427 *
13428 * Crush to remove comments, shorten variable names and
13429 * generally reduce transmission size.
13430 *
13431 * @author Emily Stark
13432 * @author Mike Hamburg
13433 * @author Dan Boneh
13434 */
13435
13436"use strict";
13437/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13438/*global document, window, escape, unescape, module, require, Uint32Array */
13439
13440/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13441var sjcl = {
13442 /** @namespace Symmetric ciphers. */
13443 cipher: {},
13444
13445 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13446 hash: {},
13447
13448 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13449 keyexchange: {},
13450
13451 /** @namespace Block cipher modes of operation. */
13452 mode: {},
13453
13454 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13455 misc: {},
13456
13457 /**
13458 * @namespace Bit array encoders and decoders.
13459 *
13460 * @description
13461 * The members of this namespace are functions which translate between
13462 * SJCL's bitArrays and other objects (usually strings). Because it
13463 * isn't always clear which direction is encoding and which is decoding,
13464 * the method names are "fromBits" and "toBits".
13465 */
13466 codec: {},
13467
13468 /** @namespace Exceptions. */
13469 exception: {
13470 /** @constructor Ciphertext is corrupt. */
13471 corrupt: function(message) {
13472 this.toString = function() { return "CORRUPT: "+this.message; };
13473 this.message = message;
13474 },
13475
13476 /** @constructor Invalid parameter. */
13477 invalid: function(message) {
13478 this.toString = function() { return "INVALID: "+this.message; };
13479 this.message = message;
13480 },
13481
13482 /** @constructor Bug or missing feature in SJCL. @constructor */
13483 bug: function(message) {
13484 this.toString = function() { return "BUG: "+this.message; };
13485 this.message = message;
13486 },
13487
13488 /** @constructor Something isn't ready. */
13489 notReady: function(message) {
13490 this.toString = function() { return "NOT READY: "+this.message; };
13491 this.message = message;
ebd8d4e8 13492 }
80c4dd2a
IC
13493 }
13494};
13495
13496if(typeof module !== 'undefined' && module.exports){
13497 module.exports = sjcl;
13498}
13499if (typeof define === "function") {
13500 define([], function () {
13501 return sjcl;
13502 });
13503}
13504
13505
13506//// bitArray.js
13507
13508/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13509 *
13510 * @author Emily Stark
13511 * @author Mike Hamburg
13512 * @author Dan Boneh
13513 */
13514
13515/** @namespace Arrays of bits, encoded as arrays of Numbers.
13516 *
13517 * @description
13518 * <p>
13519 * These objects are the currency accepted by SJCL's crypto functions.
13520 * </p>
13521 *
13522 * <p>
13523 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13524 * but many of them can take arguments that are not a multiple of 4 bytes.
13525 * This library encodes arrays of bits (whose size need not be a multiple of 8
13526 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13527 * array of words, 32 bits at a time. Since the words are double-precision
13528 * floating point numbers, they fit some extra data. We use this (in a private,
13529 * possibly-changing manner) to encode the number of bits actually present
13530 * in the last word of the array.
13531 * </p>
13532 *
13533 * <p>
13534 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13535 * to ciphers like AES which want arrays of words.
13536 * </p>
13537 */
13538sjcl.bitArray = {
13539 /**
13540 * Array slices in units of bits.
13541 * @param {bitArray} a The array to slice.
13542 * @param {Number} bstart The offset to the start of the slice, in bits.
13543 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13544 * slice until the end of the array.
13545 * @return {bitArray} The requested slice.
13546 */
13547 bitSlice: function (a, bstart, bend) {
13548 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13549 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13550 },
13551
13552 /**
13553 * Extract a number packed into a bit array.
13554 * @param {bitArray} a The array to slice.
13555 * @param {Number} bstart The offset to the start of the slice, in bits.
13556 * @param {Number} length The length of the number to extract.
13557 * @return {Number} The requested slice.
13558 */
13559 extract: function(a, bstart, blength) {
13560 // FIXME: this Math.floor is not necessary at all, but for some reason
13561 // seems to suppress a bug in the Chromium JIT.
13562 var x, sh = Math.floor((-bstart-blength) & 31);
13563 if ((bstart + blength - 1 ^ bstart) & -32) {
13564 // it crosses a boundary
13565 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13566 } else {
13567 // within a single word
13568 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13569 }
80c4dd2a
IC
13570 return x & ((1<<blength) - 1);
13571 },
13572
13573 /**
13574 * Concatenate two bit arrays.
13575 * @param {bitArray} a1 The first array.
13576 * @param {bitArray} a2 The second array.
13577 * @return {bitArray} The concatenation of a1 and a2.
13578 */
13579 concat: function (a1, a2) {
13580 if (a1.length === 0 || a2.length === 0) {
13581 return a1.concat(a2);
13582 }
13583
13584 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13585 if (shift === 32) {
13586 return a1.concat(a2);
13587 } else {
13588 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13589 }
80c4dd2a
IC
13590 },
13591
13592 /**
13593 * Find the length of an array of bits.
13594 * @param {bitArray} a The array.
13595 * @return {Number} The length of a, in bits.
13596 */
13597 bitLength: function (a) {
13598 var l = a.length, x;
13599 if (l === 0) { return 0; }
13600 x = a[l - 1];
13601 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13602 },
13603
13604 /**
13605 * Truncate an array.
13606 * @param {bitArray} a The array.
13607 * @param {Number} len The length to truncate to, in bits.
13608 * @return {bitArray} A new array, truncated to len bits.
13609 */
13610 clamp: function (a, len) {
13611 if (a.length * 32 < len) { return a; }
13612 a = a.slice(0, Math.ceil(len / 32));
13613 var l = a.length;
13614 len = len & 31;
13615 if (l > 0 && len) {
13616 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13617 }
13618 return a;
13619 },
13620
13621 /**
13622 * Make a partial word for a bit array.
13623 * @param {Number} len The number of bits in the word.
13624 * @param {Number} x The bits.
13625 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13626 * @return {Number} The partial word.
13627 */
13628 partial: function (len, x, _end) {
13629 if (len === 32) { return x; }
13630 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13631 },
13632
13633 /**
13634 * Get the number of bits used by a partial word.
13635 * @param {Number} x The partial word.
13636 * @return {Number} The number of bits used by the partial word.
13637 */
13638 getPartial: function (x) {
13639 return Math.round(x/0x10000000000) || 32;
13640 },
13641
13642 /**
13643 * Compare two arrays for equality in a predictable amount of time.
13644 * @param {bitArray} a The first array.
13645 * @param {bitArray} b The second array.
13646 * @return {boolean} true if a == b; false otherwise.
13647 */
13648 equal: function (a, b) {
13649 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13650 return false;
ebd8d4e8 13651 }
80c4dd2a
IC
13652 var x = 0, i;
13653 for (i=0; i<a.length; i++) {
13654 x |= a[i]^b[i];
ebd8d4e8 13655 }
80c4dd2a
IC
13656 return (x === 0);
13657 },
13658
13659 /** Shift an array right.
13660 * @param {bitArray} a The array to shift.
13661 * @param {Number} shift The number of bits to shift.
13662 * @param {Number} [carry=0] A byte to carry in
13663 * @param {bitArray} [out=[]] An array to prepend to the output.
13664 * @private
13665 */
13666 _shiftRight: function (a, shift, carry, out) {
13667 var i, last2=0, shift2;
13668 if (out === undefined) { out = []; }
13669
13670 for (; shift >= 32; shift -= 32) {
13671 out.push(carry);
13672 carry = 0;
13673 }
13674 if (shift === 0) {
13675 return out.concat(a);
13676 }
13677
13678 for (i=0; i<a.length; i++) {
13679 out.push(carry | a[i]>>>shift);
13680 carry = a[i] << (32-shift);
13681 }
13682 last2 = a.length ? a[a.length-1] : 0;
13683 shift2 = sjcl.bitArray.getPartial(last2);
13684 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13685 return out;
13686 },
13687
13688 /** xor a block of 4 words together.
13689 * @private
13690 */
13691 _xor4: function(x,y) {
13692 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13693 },
13694
13695 /** byteswap a word array inplace.
13696 * (does not handle partial words)
13697 * @param {sjcl.bitArray} a word array
13698 * @return {sjcl.bitArray} byteswapped array
13699 */
13700 byteswapM: function(a) {
13701 var i, v, m = 0xff00;
13702 for (i = 0; i < a.length; ++i) {
13703 v = a[i];
13704 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13705 }
80c4dd2a
IC
13706 return a;
13707 }
13708};
13709
13710
13711//// codecString.js
13712
13713/** @fileOverview Bit array codec implementations.
13714 *
13715 * @author Emily Stark
13716 * @author Mike Hamburg
13717 * @author Dan Boneh
13718 */
13719
13720/** @namespace UTF-8 strings */
13721sjcl.codec.utf8String = {
13722 /** Convert from a bitArray to a UTF-8 string. */
13723 fromBits: function (arr) {
13724 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13725 for (i=0; i<bl/8; i++) {
13726 if ((i&3) === 0) {
13727 tmp = arr[i/4];
13728 }
13729 out += String.fromCharCode(tmp >>> 24);
13730 tmp <<= 8;
ebd8d4e8 13731 }
80c4dd2a
IC
13732 return decodeURIComponent(escape(out));
13733 },
13734
13735 /** Convert from a UTF-8 string to a bitArray. */
13736 toBits: function (str) {
13737 str = unescape(encodeURIComponent(str));
13738 var out = [], i, tmp=0;
13739 for (i=0; i<str.length; i++) {
13740 tmp = tmp << 8 | str.charCodeAt(i);
13741 if ((i&3) === 3) {
13742 out.push(tmp);
13743 tmp = 0;
13744 }
ebd8d4e8 13745 }
80c4dd2a
IC
13746 if (i&3) {
13747 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13748 }
80c4dd2a
IC
13749 return out;
13750 }
13751};
13752
13753
13754//// codecHex.js
13755
13756/** @fileOverview Bit array codec implementations.
13757 *
13758 * @author Emily Stark
13759 * @author Mike Hamburg
13760 * @author Dan Boneh
13761 */
13762
13763/** @namespace Hexadecimal */
13764sjcl.codec.hex = {
13765 /** Convert from a bitArray to a hex string. */
13766 fromBits: function (arr) {
13767 var out = "", i;
13768 for (i=0; i<arr.length; i++) {
13769 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13770 }
80c4dd2a
IC
13771 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13772 },
13773 /** Convert from a hex string to a bitArray. */
13774 toBits: function (str) {
13775 var i, out=[], len;
13776 str = str.replace(/\s|0x/g, "");
13777 len = str.length;
13778 str = str + "00000000";
13779 for (i=0; i<str.length; i+=8) {
13780 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13781 }
80c4dd2a
IC
13782 return sjcl.bitArray.clamp(out, len*4);
13783 }
13784};
13785
13786
13787//// sha512.js
13788
13789/** @fileOverview Javascript SHA-512 implementation.
13790 *
13791 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13792 * SJCL by Stefan Thomas.
13793 *
13794 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13795 * Released with New BSD License
13796 *
13797 * @author Emily Stark
13798 * @author Mike Hamburg
13799 * @author Dan Boneh
13800 * @author Jeff Mott
13801 * @author Stefan Thomas
13802 */
13803
13804/**
13805 * Context for a SHA-512 operation in progress.
13806 * @constructor
13807 * @class Secure Hash Algorithm, 512 bits.
13808 */
13809sjcl.hash.sha512 = function (hash) {
13810 if (!this._key[0]) { this._precompute(); }
13811 if (hash) {
13812 this._h = hash._h.slice(0);
13813 this._buffer = hash._buffer.slice(0);
13814 this._length = hash._length;
13815 } else {
13816 this.reset();
13817 }
13818};
13819
13820/**
13821 * Hash a string or an array of words.
13822 * @static
13823 * @param {bitArray|String} data the data to hash.
13824 * @return {bitArray} The hash value, an array of 16 big-endian words.
13825 */
13826sjcl.hash.sha512.hash = function (data) {
13827 return (new sjcl.hash.sha512()).update(data).finalize();
13828};
13829
13830sjcl.hash.sha512.prototype = {
13831 /**
13832 * The hash's block size, in bits.
13833 * @constant
13834 */
13835 blockSize: 1024,
13836
13837 /**
13838 * Reset the hash state.
13839 * @return this
13840 */
13841 reset:function () {
13842 this._h = this._init.slice(0);
13843 this._buffer = [];
13844 this._length = 0;
13845 return this;
13846 },
13847
13848 /**
13849 * Input several words to the hash.
13850 * @param {bitArray|String} data the data to hash.
13851 * @return this
13852 */
13853 update: function (data) {
13854 if (typeof data === "string") {
13855 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13856 }
80c4dd2a
IC
13857 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13858 ol = this._length,
13859 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13860 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13861 this._block(b.splice(0,32));
ebd8d4e8 13862 }
80c4dd2a
IC
13863 return this;
13864 },
13865
13866 /**
13867 * Complete hashing and output the hash value.
13868 * @return {bitArray} The hash value, an array of 16 big-endian words.
13869 */
13870 finalize:function () {
13871 var i, b = this._buffer, h = this._h;
13872
13873 // Round out and push the buffer
13874 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13875
13876 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13877 for (i = b.length + 4; i & 31; i++) {
13878 b.push(0);
ebd8d4e8 13879 }
80c4dd2a
IC
13880
13881 // append the length
13882 b.push(0);
13883 b.push(0);
13884 b.push(Math.floor(this._length / 0x100000000));
13885 b.push(this._length | 0);
13886
13887 while (b.length) {
13888 this._block(b.splice(0,32));
ebd8d4e8 13889 }
80c4dd2a
IC
13890
13891 this.reset();
13892 return h;
13893 },
13894
13895 /**
13896 * The SHA-512 initialization vector, to be precomputed.
13897 * @private
13898 */
13899 _init:[],
13900
13901 /**
13902 * Least significant 24 bits of SHA512 initialization values.
13903 *
13904 * Javascript only has 53 bits of precision, so we compute the 40 most
13905 * significant bits and add the remaining 24 bits as constants.
13906 *
13907 * @private
13908 */
13909 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13910
13911 /*
13912 _init:
13913 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13914 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13915 */
13916
13917 /**
13918 * The SHA-512 hash key, to be precomputed.
13919 * @private
13920 */
13921 _key:[],
13922
13923 /**
13924 * Least significant 24 bits of SHA512 key values.
13925 * @private
13926 */
13927 _keyr:
13928 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13929 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13930 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13931 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13932 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13933 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13934 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13935 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13936 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13937 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13938
13939 /*
13940 _key:
13941 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13942 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13943 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13944 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13945 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13946 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13947 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13948 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13949 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13950 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13951 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13952 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13953 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13954 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13955 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13956 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13957 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13958 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13959 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13960 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13961 */
13962
13963 /**
13964 * Function to precompute _init and _key.
13965 * @private
13966 */
13967 _precompute: function () {
13968 // XXX: This code is for precomputing the SHA256 constants, change for
13969 // SHA512 and re-enable.
13970 var i = 0, prime = 2, factor;
13971
13972 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13973 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13974
13975 outer: for (; i<80; prime++) {
13976 for (factor=2; factor*factor <= prime; factor++) {
13977 if (prime % factor === 0) {
13978 // not a prime
13979 continue outer;
ebd8d4e8 13980 }
80c4dd2a
IC
13981 }
13982
13983 if (i<8) {
13984 this._init[i*2] = frac(Math.pow(prime, 1/2));
13985 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13986 }
13987 this._key[i*2] = frac(Math.pow(prime, 1/3));
13988 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13989 i++;
ebd8d4e8 13990 }
80c4dd2a
IC
13991 },
13992
13993 /**
13994 * Perform one cycle of SHA-512.
13995 * @param {bitArray} words one block of words.
13996 * @private
13997 */
13998 _block:function (words) {
13999 var i, wrh, wrl,
14000 w = words.slice(0),
14001 h = this._h,
14002 k = this._key,
14003 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14004 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14005 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14006 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14007
14008 // Working variables
14009 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14010 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14011 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14012 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14013
14014 for (i=0; i<80; i++) {
14015 // load up the input word for this round
14016 if (i<16) {
14017 wrh = w[i * 2];
14018 wrl = w[i * 2 + 1];
14019 } else {
14020 // Gamma0
14021 var gamma0xh = w[(i-15) * 2];
14022 var gamma0xl = w[(i-15) * 2 + 1];
14023 var gamma0h =
14024 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14025 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14026 (gamma0xh >>> 7);
14027 var gamma0l =
14028 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14029 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14030 ((gamma0xh << 25) | (gamma0xl >>> 7));
14031
14032 // Gamma1
14033 var gamma1xh = w[(i-2) * 2];
14034 var gamma1xl = w[(i-2) * 2 + 1];
14035 var gamma1h =
14036 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14037 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14038 (gamma1xh >>> 6);
14039 var gamma1l =
14040 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14041 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14042 ((gamma1xh << 26) | (gamma1xl >>> 6));
14043
14044 // Shortcuts
14045 var wr7h = w[(i-7) * 2];
14046 var wr7l = w[(i-7) * 2 + 1];
14047
14048 var wr16h = w[(i-16) * 2];
14049 var wr16l = w[(i-16) * 2 + 1];
14050
14051 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14052 wrl = gamma0l + wr7l;
14053 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14054 wrl += gamma1l;
14055 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14056 wrl += wr16l;
14057 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14058 }
14059
14060 w[i*2] = wrh |= 0;
14061 w[i*2 + 1] = wrl |= 0;
14062
14063 // Ch
14064 var chh = (eh & fh) ^ (~eh & gh);
14065 var chl = (el & fl) ^ (~el & gl);
14066
14067 // Maj
14068 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14069 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14070
14071 // Sigma0
14072 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14073 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14074
14075 // Sigma1
14076 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14077 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14078
14079 // K(round)
14080 var krh = k[i*2];
14081 var krl = k[i*2+1];
14082
14083 // t1 = h + sigma1 + ch + K(round) + W(round)
14084 var t1l = hl + sigma1l;
14085 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14086 t1l += chl;
14087 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14088 t1l += krl;
14089 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14090 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14091 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14092
14093 // t2 = sigma0 + maj
14094 var t2l = sigma0l + majl;
14095 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14096
14097 // Update working variables
14098 hh = gh;
14099 hl = gl;
14100 gh = fh;
14101 gl = fl;
14102 fh = eh;
14103 fl = el;
14104 el = (dl + t1l) | 0;
14105 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14106 dh = ch;
14107 dl = cl;
14108 ch = bh;
14109 cl = bl;
14110 bh = ah;
14111 bl = al;
14112 al = (t1l + t2l) | 0;
14113 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14114 }
14115
14116 // Intermediate hash
14117 h0l = h[1] = (h0l + al) | 0;
14118 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14119 h1l = h[3] = (h1l + bl) | 0;
14120 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14121 h2l = h[5] = (h2l + cl) | 0;
14122 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14123 h3l = h[7] = (h3l + dl) | 0;
14124 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14125 h4l = h[9] = (h4l + el) | 0;
14126 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14127 h5l = h[11] = (h5l + fl) | 0;
14128 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14129 h6l = h[13] = (h6l + gl) | 0;
14130 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14131 h7l = h[15] = (h7l + hl) | 0;
14132 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14133 }
14134};
14135
14136
14137//// hmac.js
14138
14139/** @fileOverview HMAC implementation.
14140 *
14141 * @author Emily Stark
14142 * @author Mike Hamburg
14143 * @author Dan Boneh
14144 */
14145
14146/** HMAC with the specified hash function.
14147 * @constructor
14148 * @param {bitArray} key the key for HMAC.
14149 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14150 */
14151sjcl.misc.hmac = function (key, Hash) {
14152 this._hash = Hash = Hash || sjcl.hash.sha256;
14153 var exKey = [[],[]], i,
14154 bs = Hash.prototype.blockSize / 32;
14155 this._baseHash = [new Hash(), new Hash()];
14156
14157 if (key.length > bs) {
14158 key = Hash.hash(key);
14159 }
14160
14161 for (i=0; i<bs; i++) {
14162 exKey[0][i] = key[i]^0x36363636;
14163 exKey[1][i] = key[i]^0x5C5C5C5C;
14164 }
14165
14166 this._baseHash[0].update(exKey[0]);
14167 this._baseHash[1].update(exKey[1]);
14168 this._resultHash = new Hash(this._baseHash[0]);
14169};
14170
14171/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14172 * @param {bitArray|String} data The data to mac.
14173 */
14174sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14175 if (!this._updated) {
14176 this.update(data);
14177 return this.digest(data);
14178 } else {
14179 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14180 }
14181};
14182
14183sjcl.misc.hmac.prototype.reset = function () {
14184 this._resultHash = new this._hash(this._baseHash[0]);
14185 this._updated = false;
14186};
14187
14188sjcl.misc.hmac.prototype.update = function (data) {
14189 this._updated = true;
14190 this._resultHash.update(data);
14191};
14192
14193sjcl.misc.hmac.prototype.digest = function () {
14194 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14195
14196 this.reset();
14197
14198 return result;
14199};
14200
14201
14202//// pbkdf2.js
14203
14204
14205/** @fileOverview Password-based key-derivation function, version 2.0.
14206 *
14207 * @author Emily Stark
14208 * @author Mike Hamburg
14209 * @author Dan Boneh
14210 */
14211
14212/** Password-Based Key-Derivation Function, version 2.0.
14213 *
14214 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14215 *
14216 * This is the method specified by RSA's PKCS #5 standard.
14217 *
14218 * @param {bitArray|String} password The password.
14219 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14220 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14221 * @param {Number} [length] The length of the derived key. Defaults to the
14222 output size of the hash function.
14223 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14224 * @return {bitArray} the derived key.
14225 */
14226sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14227 count = count || 1000;
14228
14229 if (length < 0 || count < 0) {
14230 throw sjcl.exception.invalid("invalid params to pbkdf2");
14231 }
14232
14233 if (typeof password === "string") {
14234 password = sjcl.codec.utf8String.toBits(password);
14235 }
14236
14237 if (typeof salt === "string") {
14238 salt = sjcl.codec.utf8String.toBits(salt);
14239 }
14240
14241 Prff = Prff || sjcl.misc.hmac;
14242
14243 var prf = new Prff(password),
14244 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14245
14246 for (k = 1; 32 * out.length < (length || 1); k++) {
14247 u = ui = prf.encrypt(b.concat(salt,[k]));
14248
14249 for (i=1; i<count; i++) {
14250 ui = prf.encrypt(ui);
14251 for (j=0; j<ui.length; j++) {
14252 u[j] ^= ui[j];
14253 }
ebd8d4e8 14254 }
80c4dd2a
IC
14255
14256 out = out.concat(u);
14257 }
14258
14259 if (length) { out = b.clamp(out, length); }
14260
14261 return out;
14262};
14263
14264
14265//// sha256.js
14266
14267/** @fileOverview Javascript SHA-256 implementation.
14268 *
14269 * An older version of this implementation is available in the public
14270 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14271 * Stanford University 2008-2010 and BSD-licensed for liability
14272 * reasons.
14273 *
14274 * Special thanks to Aldo Cortesi for pointing out several bugs in
14275 * this code.
14276 *
14277 * @author Emily Stark
14278 * @author Mike Hamburg
14279 * @author Dan Boneh
14280 */
14281
14282/**
14283 * Context for a SHA-256 operation in progress.
14284 * @constructor
14285 * @class Secure Hash Algorithm, 256 bits.
14286 */
14287sjcl.hash.sha256 = function (hash) {
14288 if (!this._key[0]) { this._precompute(); }
14289 if (hash) {
14290 this._h = hash._h.slice(0);
14291 this._buffer = hash._buffer.slice(0);
14292 this._length = hash._length;
14293 } else {
14294 this.reset();
14295 }
14296};
14297
14298/**
14299 * Hash a string or an array of words.
14300 * @static
14301 * @param {bitArray|String} data the data to hash.
14302 * @return {bitArray} The hash value, an array of 16 big-endian words.
14303 */
14304sjcl.hash.sha256.hash = function (data) {
14305 return (new sjcl.hash.sha256()).update(data).finalize();
14306};
14307
14308sjcl.hash.sha256.prototype = {
14309 /**
14310 * The hash's block size, in bits.
14311 * @constant
14312 */
14313 blockSize: 512,
14314
14315 /**
14316 * Reset the hash state.
14317 * @return this
14318 */
14319 reset:function () {
14320 this._h = this._init.slice(0);
14321 this._buffer = [];
14322 this._length = 0;
14323 return this;
14324 },
14325
14326 /**
14327 * Input several words to the hash.
14328 * @param {bitArray|String} data the data to hash.
14329 * @return this
14330 */
14331 update: function (data) {
14332 if (typeof data === "string") {
14333 data = sjcl.codec.utf8String.toBits(data);
14334 }
14335 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14336 ol = this._length,
14337 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14338 for (i = 512+ol & -512; i <= nl; i+= 512) {
14339 this._block(b.splice(0,16));
ebd8d4e8 14340 }
3af2954a 14341 return this;
80c4dd2a
IC
14342 },
14343
14344 /**
14345 * Complete hashing and output the hash value.
14346 * @return {bitArray} The hash value, an array of 8 big-endian words.
14347 */
14348 finalize:function () {
14349 var i, b = this._buffer, h = this._h;
14350
14351 // Round out and push the buffer
14352 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14353
14354 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14355 for (i = b.length + 2; i & 15; i++) {
14356 b.push(0);
14357 }
14358
14359 // append the length
14360 b.push(Math.floor(this._length / 0x100000000));
14361 b.push(this._length | 0);
14362
14363 while (b.length) {
14364 this._block(b.splice(0,16));
14365 }
14366
14367 this.reset();
14368 return h;
14369 },
14370
14371 /**
14372 * The SHA-256 initialization vector, to be precomputed.
14373 * @private
14374 */
14375 _init:[],
14376 /*
14377 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14378 */
14379
14380 /**
14381 * The SHA-256 hash key, to be precomputed.
14382 * @private
14383 */
14384 _key:[],
14385 /*
14386 _key:
14387 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14388 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14389 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14390 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14391 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14392 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14393 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14394 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14395 */
14396
14397
14398 /**
14399 * Function to precompute _init and _key.
14400 * @private
14401 */
14402 _precompute: function () {
14403 var i = 0, prime = 2, factor;
14404
14405 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14406
14407 outer: for (; i<64; prime++) {
14408 for (factor=2; factor*factor <= prime; factor++) {
14409 if (prime % factor === 0) {
14410 // not a prime
14411 continue outer;
ebd8d4e8 14412 }
80c4dd2a
IC
14413 }
14414
14415 if (i<8) {
14416 this._init[i] = frac(Math.pow(prime, 1/2));
14417 }
14418 this._key[i] = frac(Math.pow(prime, 1/3));
14419 i++;
ebd8d4e8 14420 }
80c4dd2a
IC
14421 },
14422
14423 /**
14424 * Perform one cycle of SHA-256.
14425 * @param {bitArray} words one block of words.
14426 * @private
14427 */
14428 _block:function (words) {
14429 var i, tmp, a, b,
14430 w = words.slice(0),
14431 h = this._h,
14432 k = this._key,
14433 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14434 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14435
14436 /* Rationale for placement of |0 :
14437 * If a value can overflow is original 32 bits by a factor of more than a few
14438 * million (2^23 ish), there is a possibility that it might overflow the
14439 * 53-bit mantissa and lose precision.
14440 *
14441 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14442 * propagates around the loop, and on the hash state h[]. I don't believe
14443 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14444 * (for h4 anyway), and better safe than sorry.
14445 *
14446 * The clamps on h[] are necessary for the output to be correct even in the
14447 * common case and for short inputs.
14448 */
14449 for (i=0; i<64; i++) {
14450 // load up the input word for this round
14451 if (i<16) {
14452 tmp = w[i];
14453 } else {
14454 a = w[(i+1 ) & 15];
14455 b = w[(i+14) & 15];
14456 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14457 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14458 w[i&15] + w[(i+9) & 15]) | 0;
14459 }
14460
14461 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14462
14463 // shift register
14464 h7 = h6; h6 = h5; h5 = h4;
14465 h4 = h3 + tmp | 0;
14466 h3 = h2; h2 = h1; h1 = h0;
14467
14468 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14469 }
14470
14471 h[0] = h[0]+h0 | 0;
14472 h[1] = h[1]+h1 | 0;
14473 h[2] = h[2]+h2 | 0;
14474 h[3] = h[3]+h3 | 0;
14475 h[4] = h[4]+h4 | 0;
14476 h[5] = h[5]+h5 | 0;
14477 h[6] = h[6]+h6 | 0;
14478 h[7] = h[7]+h7 | 0;
14479 }
14480};
dc55c6b0 14481</script>
ab78acc6 14482 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14483WORDLISTS["english"] = [
ebd8d4e8
IC
14484"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14485"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14486"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14487"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14488"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14489"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14490"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14491"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14492"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14493"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14494"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14495"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14496"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14497"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14498"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14499"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14500"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14501"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14502"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14503"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14504"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14505"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14506"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14507"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14508"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14509"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14510"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14511"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14512"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14513"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14514"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14515"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14516"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14517"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14518"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14519"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14520"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14521"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14522"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14523"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14524"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14525"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14526"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14527"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14528"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14529"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14530"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14531"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14532"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14533"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14534"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14535"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14536"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14537"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14538"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14539"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14540"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14541"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14542"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14543"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14544"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14545"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14546"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14547"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14548"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14549"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14550"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14551"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14552"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14553"film","filter","final","find","fine","finger","finish","fire","firm","first",
14554"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14555"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14556"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14557"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14558"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14559"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14560"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14561"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14562"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14563"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14564"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14565"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14566"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14567"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14568"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14569"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14570"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14571"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14572"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14573"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14574"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14575"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14576"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14577"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14578"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14579"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14580"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14581"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14582"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14583"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14584"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14585"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14586"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14587"liar","liberty","library","license","life","lift","light","like","limb","limit",
14588"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14589"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14590"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14591"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14592"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14593"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14594"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14595"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14596"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14597"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14598"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14599"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14600"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14601"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14602"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14603"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14604"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14605"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14606"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14607"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14608"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14609"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14610"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14611"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14612"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14613"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14614"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14615"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14616"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14617"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14618"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14619"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14620"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14621"prize","problem","process","produce","profit","program","project","promote","proof","property",
14622"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14623"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14624"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14625"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14626"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14627"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14628"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14629"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14630"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14631"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14632"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14633"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14634"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14635"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14636"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14637"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14638"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14639"scrub","sea","search","season","seat","second","secret","section","security","seed",
14640"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14641"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14642"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14643"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14644"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14645"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14646"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14647"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14648"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14649"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14650"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14651"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14652"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14653"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14654"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14655"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14656"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14657"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14658"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14659"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14660"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14661"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14662"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14663"thank","that","theme","then","theory","there","they","thing","this","thought",
14664"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14665"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14666"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14667"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14668"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14669"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14670"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14671"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14672"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14673"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14674"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14675"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14676"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14677"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14678"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14679"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14680"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14681"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14682"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14683"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14684"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14685"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14686"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14687"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14688"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
14689</script>
14690 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14691WORDLISTS["japanese"] = [
14692"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14693"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14694"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14695"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14696"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14697"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14698"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14699"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14700"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14701"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14702"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14703"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14704"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14705"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14706"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14707"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14708"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14709"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14710"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14711"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14712"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14713"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14714"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14715"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14716"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14717"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14718"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14719"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14720"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14721"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14722"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14723"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14724"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14725"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14726"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14727"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14728"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14729"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14730"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14731"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14732"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14733"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14734"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14735"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14736"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14737"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14738"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14739"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14740"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14741"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14742"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14743"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14744"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14745"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14746"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14747"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14748"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14749"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14750"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14751"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14752"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14753"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14754"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14755"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14756"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14757"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14758"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14759"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14760"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14761"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14762"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14763"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14764"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14765"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14766"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14767"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14768"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14769"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14770"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14771"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14772"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14773"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14774"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14775"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14776"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14777"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14778"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14779"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14780"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14781"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14782"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14783"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14784"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14785"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14786"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14787"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14788"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14789"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14790"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14791"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14792"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14793"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14794"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14795"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14796"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14797"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14798"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14799"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14800"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14801"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14802"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14803"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14804"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14805"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14806"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14807"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14808"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14809"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14810"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14811"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14812"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14813"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14814"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14815"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14816"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14817"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14818"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14819"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14820"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14821"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14822"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14823"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14824"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14825"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14826"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14827"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14828"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14829"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14830"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14831"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14832"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14833"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14834"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14835"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14836"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14837"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14838"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14839"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14840"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14841"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14842"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14843"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14844"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14845"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14846"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14847"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14848"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14849"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14850"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14851"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14852"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14853"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14854"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14855"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14856"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14857"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14858"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14859"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14860"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14861"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14862"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14863"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14864"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14865"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14866"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14867"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14868"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14869"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14870"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14871"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14872"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14873"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14874"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14875"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14876"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14877"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14878"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14879"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14880"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14881"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14882"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14883"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14884"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14885"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14886"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14887"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14888"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14889"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14890"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14891"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14892"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14893"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14894"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14895"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14896"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14897</script>
14898 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14899WORDLISTS["spanish"] = [
14900"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14901"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14902"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14903"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14904"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14905"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14906"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14907"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14908"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14909"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14910"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14911"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14912"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14913"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14914"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14915"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14916"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14917"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14918"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14919"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14920"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14921"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14922"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14923"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14924"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14925"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14926"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14927"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14928"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14929"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14930"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14931"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14932"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14933"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14934"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14935"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14936"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14937"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14938"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14939"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14940"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14941"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14942"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14943"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14944"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14945"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14946"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14947"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14948"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14949"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14950"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14951"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14952"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14953"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14954"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14955"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14956"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14957"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14958"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14959"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14960"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14961"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14962"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14963"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14964"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14965"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14966"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14967"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14968"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14969"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14970"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14971"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14972"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14973"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14974"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14975"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14976"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14977"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14978"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14979"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14980"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14981"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14982"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14983"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14984"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14985"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14986"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14987"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14988"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14989"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14990"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14991"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14992"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
14993"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
14994"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
14995"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
14996"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
14997"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
14998"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
14999"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15000"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15001"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15002"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15003"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15004"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15005"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15006"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15007"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15008"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15009"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15010"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15011"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15012"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15013"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15014"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15015"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15016"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15017"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15018"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15019"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15020"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15021"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15022"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15023"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15024"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15025"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15026"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15027"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15028"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15029"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15030"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15031"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15032"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15033"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15034"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15035"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15036"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15037"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15038"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15039"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15040"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15041"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15042"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15043"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15044"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15045"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15046"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15047"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15048"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15049"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15050"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15051"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15052"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15053"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15054"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15055"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15056"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15057"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15058"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15059"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15060"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15061"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15062"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15063"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15064"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15065"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15066"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15067"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15068"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15069"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15070"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15071"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15072"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15073"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15074"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15075"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15076"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15077"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15078"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15079"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15080"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15081"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15082"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15083"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15084"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15085"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15086"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15087"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15088"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15089"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15090"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15091"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15092"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15093"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15094"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15095"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15096"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15097"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15098"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15099"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15100"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15101"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15102"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15103"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15104"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15105</script>
15106 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15107WORDLISTS["chinese_simplified"] = [
15108"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15109"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15110"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15111"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15112"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15113"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15114"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15115"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15116"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15117"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15118"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15119"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15120"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15121"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15122"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15123"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15124"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15125"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15126"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15127"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15128"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15129"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15130"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15131"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15132"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15133"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15134"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15135"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15136"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15137"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15138"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15139"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15140"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15141"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15142"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15143"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15144"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15145"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15146"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15147"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15148"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15149"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15150"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15151"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15152"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15153"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15154"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15155"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15156"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15157"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15158"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15159"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15160"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15161"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15162"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15163"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15164"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15165"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15166"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15167"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15168"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15169"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15170"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15171"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15172"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15173"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15174"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15175"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15176"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15177"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15178"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15179"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15180"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15181"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15182"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15183"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15184"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15185"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15186"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15187"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15188"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15189"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15190"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15191"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15192"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15193"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15194"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15195"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15196"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15197"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15198"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15199"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15200"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15201"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15202"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15203"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15204"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15205"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15206"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15207"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15208"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15209"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15210"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15211"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15212"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15213"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15214"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15215"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15216"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15217"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15218"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15219"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15220"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15221"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15222"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15223"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15224"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15225"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15226"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15227"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15228"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15229"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15230"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15231"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15232"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15233"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15234"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15235"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15236"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15237"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15238"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15239"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15240"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15241"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15242"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15243"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15244"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15245"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15246"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15247"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15248"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15249"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15250"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15251"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15252"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15253"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15254"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15255"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15256"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15257"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15258"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15259"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15260"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15261"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15262"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15263"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15264"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15265"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15266"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15267"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15268"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15269"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15270"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15271"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15272"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15273"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15274"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15275"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15276"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15277"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15278"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15279"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15280"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15281"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15282"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15283"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15284"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15285"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15286"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15287"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15288"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15289"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15290"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15291"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15292"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15293"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15294"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15295"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15296"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15297"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15298"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15299"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15300"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15301"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15302"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15303"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15304"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15305"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15306"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15307"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15308"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15309"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15310"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15311"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15312"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15313</script>
15314 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15315WORDLISTS["chinese_traditional"] = [
15316"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15317"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15318"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15319"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15320"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15321"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15322"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15323"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15324"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15325"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15326"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15327"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15328"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15329"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15330"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15331"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15332"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15333"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15334"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15335"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15336"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15337"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15338"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15339"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15340"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15341"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15342"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15343"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15344"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15345"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15346"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15347"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15348"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15349"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15350"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15351"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15352"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15353"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15354"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15355"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15356"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15357"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15358"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15359"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15360"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15361"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15362"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15363"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15364"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15365"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15366"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15367"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15368"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15369"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15370"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15371"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15372"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15373"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15374"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15375"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15376"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15377"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15378"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15379"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15380"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15381"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15382"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15383"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15384"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15385"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15386"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15387"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15388"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15389"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15390"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15391"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15392"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15393"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15394"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15395"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15396"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15397"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15398"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15399"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15400"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15401"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15402"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15403"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15404"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15405"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15406"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15407"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15408"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15409"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15410"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15411"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15412"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15413"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15414"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15415"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15416"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15417"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15418"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15419"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15420"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15421"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15422"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15423"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15424"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15425"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15426"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15427"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15428"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15429"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15430"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15431"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15432"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15433"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15434"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15435"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15436"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15437"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15438"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15439"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15440"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15441"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15442"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15443"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15444"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15445"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15446"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15447"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15448"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15449"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15450"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15451"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15452"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15453"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15454"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15455"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15456"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15457"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15458"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15459"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15460"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15461"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15462"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15463"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15464"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15465"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15466"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15467"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15468"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15469"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15470"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15471"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15472"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15473"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15474"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15475"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15476"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15477"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15478"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15479"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15480"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15481"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15482"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15483"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15484"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15485"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15486"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15487"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15488"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15489"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15490"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15491"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15492"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15493"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15494"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15495"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15496"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15497"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15498"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15499"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15500"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15501"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15502"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15503"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15504"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15505"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15506"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15507"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15508"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15509"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15510"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15511"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15512"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15513"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15514"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15515"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15516"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15517"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15518"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15519"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15520"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15521</script>
15522 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15523WORDLISTS["french"] = [
15524"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15525"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15526"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15527"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15528"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15529"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15530"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15531"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15532"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15533"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15534"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15535"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15536"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15537"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15538"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15539"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15540"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15541"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15542"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15543"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15544"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15545"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15546"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15547"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15548"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15549"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15550"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15551"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15552"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15553"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15554"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15555"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15556"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15557"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15558"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15559"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15560"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15561"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15562"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15563"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15564"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15565"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15566"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15567"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15568"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15569"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15570"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15571"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15572"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15573"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15574"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15575"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15576"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15577"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15578"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15579"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15580"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15581"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15582"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15583"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15584"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15585"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15586"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15587"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15588"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15589"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15590"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15591"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15592"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15593"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15594"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15595"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15596"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15597"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15598"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15599"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15600"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15601"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15602"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15603"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15604"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15605"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15606"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15607"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15608"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15609"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15610"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15611"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15612"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15613"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15614"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15615"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15616"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15617"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15618"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15619"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15620"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15621"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15622"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15623"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15624"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15625"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15626"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15627"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15628"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15629"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15630"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15631"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15632"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15633"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15634"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15635"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15636"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15637"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15638"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15639"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15640"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15641"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15642"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15643"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15644"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15645"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15646"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15647"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15648"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15649"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15650"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15651"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15652"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15653"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15654"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15655"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15656"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15657"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15658"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15659"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15660"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15661"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15662"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15663"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15664"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15665"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15666"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15667"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15668"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15669"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15670"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15671"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15672"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15673"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15674"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15675"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15676"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15677"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15678"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15679"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15680"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15681"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15682"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15683"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15684"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15685"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15686"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15687"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15688"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15689"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15690"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15691"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15692"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15693"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15694"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15695"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15696"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15697"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15698"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15699"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15700"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15701"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15702"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15703"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15704"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15705"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15706"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15707"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15708"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15709"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15710"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15711"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15712"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15713"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15714"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15715"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15716"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15717"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15718"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15719"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15720"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15721"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15722"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15723"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15724"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15725"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15726"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15727"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15728"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15729</script>
15730 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15731WORDLISTS["italian"] = [
15732"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15733"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15734"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15735"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15736"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15737"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15738"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15739"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15740"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15741"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15742"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15743"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15744"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15745"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15746"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15747"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15748"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15749"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15750"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15751"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15752"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15753"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15754"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15755"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15756"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15757"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15758"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15759"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15760"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15761"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15762"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15763"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15764"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15765"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15766"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15767"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15768"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15769"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15770"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15771"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15772"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15773"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15774"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15775"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15776"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15777"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15778"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15779"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15780"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15781"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15782"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15783"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15784"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15785"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15786"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15787"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15788"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15789"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15790"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15791"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15792"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15793"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15794"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15795"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15796"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15797"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15798"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15799"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15800"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15801"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15802"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15803"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15804"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15805"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15806"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15807"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15808"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15809"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15810"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15811"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15812"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15813"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15814"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15815"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15816"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15817"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15818"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15819"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15820"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15821"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15822"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15823"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15824"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15825"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15826"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15827"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15828"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15829"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15830"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15831"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15832"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15833"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15834"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15835"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15836"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15837"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15838"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15839"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15840"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15841"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15842"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15843"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15844"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15845"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15846"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15847"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15848"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15849"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15850"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15851"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15852"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15853"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15854"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15855"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15856"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15857"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15858"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15859"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15860"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15861"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15862"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15863"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15864"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15865"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15866"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15867"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15868"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15869"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15870"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15871"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15872"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15873"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15874"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15875"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15876"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15877"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15878"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15879"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15880"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15881"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15882"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15883"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15884"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15885"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15886"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15887"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15888"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15889"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15890"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15891"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15892"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15893"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15894"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15895"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15896"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15897"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15898"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15899"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15900"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15901"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15902"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15903"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15904"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15905"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15906"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15907"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15908"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15909"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15910"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15911"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15912"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15913"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15914"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15915"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15916"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15917"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15918"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15919"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15920"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15921"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15922"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15923"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15924"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15925"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15926"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15927"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15928"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15929"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15930"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15931"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15932"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15933"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15934"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15935"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15936"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 15937</script>
ab78acc6 15938 <script>/*
3af2954a
IC
15939 * Copyright (c) 2013 Pavol Rusnak
15940 *
15941 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15942 * this software and associated documentation files (the "Software"), to deal in
15943 * the Software without restriction, including without limitation the rights to
15944 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15945 * of the Software, and to permit persons to whom the Software is furnished to do
15946 * so, subject to the following conditions:
15947 *
15948 * The above copyright notice and this permission notice shall be included in all
15949 * copies or substantial portions of the Software.
15950 *
15951 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15952 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15953 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15954 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15955 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15956 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15957 */
15958
15959/*
15960 * Javascript port from python by Ian Coleman
15961 *
80c4dd2a
IC
15962 * Requires code from sjcl
15963 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
15964 */
15965
15966var Mnemonic = function(language) {
15967
15968 var PBKDF2_ROUNDS = 2048;
15969 var RADIX = 2048;
15970
15971 var self = this;
15972 var wordlist = [];
15973
80c4dd2a
IC
15974 var hmacSHA512 = function(key) {
15975 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15976 this.encrypt = function() {
15977 return hasher.encrypt.apply(hasher, arguments);
15978 };
15979 };
15980
3af2954a
IC
15981 function init() {
15982 wordlist = WORDLISTS[language];
15983 if (wordlist.length != RADIX) {
15984 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15985 throw err;
15986 }
15987 }
15988
15989 self.generate = function(strength) {
15990 strength = strength || 128;
15991 var r = strength % 32;
15992 if (r > 0) {
15993 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
15994 }
15995 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
15996 if (!hasStrongCrypto) {
15997 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
15998 }
15999 var buffer = new Uint8Array(strength / 8);
16000 var data = crypto.getRandomValues(buffer);
16001 return self.toMnemonic(data);
16002 }
16003
80c4dd2a
IC
16004 self.toMnemonic = function(byteArray) {
16005 if (byteArray.length % 4 > 0) {
16006 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
16007 }
16008
16009 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
16010 var data = byteArrayToWordArray(byteArray);
16011 var hash = sjcl.hash.sha256.hash(data);
16012 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
16013
16014 // b is a binary string, eg '00111010101100...'
16015 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16016 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16017 //
16018 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16019 // c = bin(int(h, 16))[2:].zfill(256)
16020 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
16021 var a = byteArrayToBinaryString(byteArray);
16022 var c = zfill(hexStringToBinaryString(h), 256);
16023 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
16024 // b = line1 + line2
16025 var b = a + d;
16026
16027 var result = [];
16028 var blen = b.length / 11;
16029 for (var i=0; i<blen; i++) {
16030 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16031 result.push(wordlist[idx]);
16032 }
0515eeec 16033 return self.joinWords(result);
3af2954a
IC
16034 }
16035
16036 self.check = function(mnemonic) {
0515eeec 16037 var mnemonic = self.splitWords(mnemonic);
3af2954a
IC
16038 if (mnemonic.length % 3 > 0) {
16039 return false
16040 }
16041 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16042 var idx = [];
16043 for (var i=0; i<mnemonic.length; i++) {
16044 var word = mnemonic[i];
16045 var wordIndex = wordlist.indexOf(word);
16046 if (wordIndex == -1) {
16047 return false;
16048 }
16049 var binaryIndex = zfill(wordIndex.toString(2), 11);
16050 idx.push(binaryIndex);
16051 }
16052 var b = idx.join('');
16053 var l = b.length;
16054 //d = b[:l / 33 * 32]
16055 //h = b[-l / 33:]
16056 var d = b.substring(0, l / 33 * 32);
16057 var h = b.substring(l - l / 33, l);
16058 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 16059 var nd = binaryStringToWordArray(d);
3af2954a 16060 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
16061 var ndHash = sjcl.hash.sha256.hash(nd);
16062 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16063 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
16064 var nh = ndBstr.substring(0,l/33);
16065 return h == nh;
16066 }
16067
16068 self.toSeed = function(mnemonic, passphrase) {
16069 passphrase = passphrase || '';
0515eeec 16070 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
3af2954a
IC
16071 passphrase = self.normalizeString(passphrase)
16072 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
16073 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16074 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16075 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16076 var hashHex = sjcl.codec.hex.fromBits(result);
16077 return hashHex;
3af2954a
IC
16078 }
16079
0515eeec
IC
16080 self.splitWords = function(mnemonic) {
16081 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16082 }
16083
16084 self.joinWords = function(words) {
16085 // Set space correctly depending on the language
16086 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16087 var space = " ";
16088 if (language == "japanese") {
16089 space = "\u3000"; // ideographic space
16090 }
16091 return words.join(space);
16092 }
16093
3af2954a
IC
16094 self.normalizeString = function(str) {
16095 if (typeof str.normalize == "function") {
16096 return str.normalize("NFKD");
16097 }
16098 else {
16099 // TODO decide how to handle this in the future.
16100 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16101 return str;
16102 }
16103 }
16104
80c4dd2a
IC
16105 function byteArrayToWordArray(data) {
16106 var a = [];
16107 for (var i=0; i<data.length/4; i++) {
16108 v = 0;
16109 v += data[i*4 + 0] << 8 * 3;
16110 v += data[i*4 + 1] << 8 * 2;
16111 v += data[i*4 + 2] << 8 * 1;
16112 v += data[i*4 + 3] << 8 * 0;
16113 a.push(v);
16114 }
16115 return a;
16116 }
16117
3af2954a
IC
16118 function byteArrayToBinaryString(data) {
16119 var bin = "";
16120 for (var i=0; i<data.length; i++) {
16121 bin += zfill(data[i].toString(2), 8);
16122 }
16123 return bin;
16124 }
16125
80c4dd2a
IC
16126 function hexStringToBinaryString(hexString) {
16127 binaryString = "";
16128 for (var i=0; i<hexString.length; i++) {
16129 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16130 }
16131 return binaryString;
16132 }
16133
16134 function binaryStringToWordArray(binary) {
16135 var aLen = binary.length / 32;
16136 var a = [];
16137 for (var i=0; i<aLen; i++) {
16138 var valueStr = binary.substring(0,32);
3af2954a 16139 var value = parseInt(valueStr, 2);
80c4dd2a
IC
16140 a.push(value);
16141 binary = binary.slice(32);
3af2954a 16142 }
80c4dd2a 16143 return a;
3af2954a
IC
16144 }
16145
16146 // Pad a numeric string on the left with zero digits until the given width
16147 // is reached.
16148 // Note this differs to the python implementation because it does not
16149 // handle numbers starting with a sign.
16150 function zfill(source, length) {
16151 source = source.toString();
16152 while (source.length < length) {
16153 source = '0' + source;
16154 }
16155 return source;
16156 }
16157
16158 init();
ebd8d4e8 16159
3af2954a 16160}
dc55c6b0 16161</script>
ab78acc6 16162 <script>(function() {
ebd8d4e8 16163
0515eeec
IC
16164 // mnemonics is populated as required by getLanguage
16165 var mnemonics = { "english": new Mnemonic("english") };
16166 var mnemonic = mnemonics["english"];
73161a92 16167 var seed = null
ebd8d4e8
IC
16168 var bip32RootKey = null;
16169 var bip32ExtendedKey = null;
ab78acc6 16170 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
16171 var addressRowTemplate = $("#address-row-template");
16172
80c4dd2a
IC
16173 var showIndex = true;
16174 var showAddress = true;
16175 var showPrivKey = true;
16176
ebd8d4e8 16177 var phraseChangeTimeoutEvent = null;
efe41586 16178 var rootKeyChangedTimeoutEvent = null;
ebd8d4e8
IC
16179
16180 var DOM = {};
d6cedc94
IC
16181 DOM.network = $(".network");
16182 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 16183 DOM.phrase = $(".phrase");
721b7284 16184 DOM.passphrase = $(".passphrase");
ebd8d4e8 16185 DOM.generate = $(".generate");
73161a92 16186 DOM.seed = $(".seed");
ebd8d4e8
IC
16187 DOM.rootKey = $(".root-key");
16188 DOM.extendedPrivKey = $(".extended-priv-key");
16189 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
16190 DOM.bip32tab = $("#bip32-tab");
16191 DOM.bip44tab = $("#bip44-tab");
16192 DOM.bip32panel = $("#bip32");
16193 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
16194 DOM.bip32path = $("#bip32-path");
16195 DOM.bip44path = $("#bip44-path");
16196 DOM.bip44purpose = $("#bip44 .purpose");
16197 DOM.bip44coin = $("#bip44 .coin");
16198 DOM.bip44account = $("#bip44 .account");
16199 DOM.bip44change = $("#bip44 .change");
16200 DOM.strength = $(".strength");
1975bfbc 16201 DOM.hardenedAddresses = $(".hardened-addresses");
ebd8d4e8
IC
16202 DOM.addresses = $(".addresses");
16203 DOM.rowsToAdd = $(".rows-to-add");
16204 DOM.more = $(".more");
16205 DOM.feedback = $(".feedback");
16206 DOM.tab = $(".derivation-type a");
16207 DOM.indexToggle = $(".index-toggle");
16208 DOM.addressToggle = $(".address-toggle");
16209 DOM.privateKeyToggle = $(".private-key-toggle");
0515eeec 16210 DOM.languages = $(".languages a");
ebd8d4e8 16211
ebd8d4e8
IC
16212 function init() {
16213 // Events
d6cedc94 16214 DOM.network.on("change", networkChanged);
a19a5498
IC
16215 DOM.phrase.on("input", delayedPhraseChanged);
16216 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
16217 DOM.generate.on("click", generateClicked);
16218 DOM.more.on("click", showMore);
efe41586
IC
16219 DOM.rootKey.on("input", delayedRootKeyChanged);
16220 DOM.bip32path.on("input", calcForDerivationPath);
16221 DOM.bip44purpose.on("input", calcForDerivationPath);
16222 DOM.bip44coin.on("input", calcForDerivationPath);
16223 DOM.bip44account.on("input", calcForDerivationPath);
16224 DOM.bip44change.on("input", calcForDerivationPath);
16225 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
1975bfbc 16226 DOM.hardenedAddresses.on("change", calcForDerivationPath);
ebd8d4e8
IC
16227 DOM.indexToggle.on("click", toggleIndexes);
16228 DOM.addressToggle.on("click", toggleAddresses);
16229 DOM.privateKeyToggle.on("click", togglePrivateKeys);
0515eeec 16230 DOM.languages.on("click", languageChanged);
ebd8d4e8
IC
16231 disableForms();
16232 hidePending();
16233 hideValidationError();
ab78acc6 16234 populateNetworkSelect();
ebd8d4e8
IC
16235 }
16236
16237 // Event handlers
16238
d6cedc94 16239 function networkChanged(e) {
54563907
IC
16240 var networkIndex = e.target.value;
16241 networks[networkIndex].onSelect();
16242 if (seed != null) {
16243 phraseChanged();
16244 }
16245 else {
16246 rootKeyChanged();
16247 }
d6cedc94
IC
16248 }
16249
ebd8d4e8
IC
16250 function delayedPhraseChanged() {
16251 hideValidationError();
16252 showPending();
16253 if (phraseChangeTimeoutEvent != null) {
16254 clearTimeout(phraseChangeTimeoutEvent);
16255 }
16256 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
16257 }
16258
16259 function phraseChanged() {
16260 showPending();
16261 hideValidationError();
0515eeec 16262 setMnemonicLanguage();
ebd8d4e8
IC
16263 // Get the mnemonic phrase
16264 var phrase = DOM.phrase.val();
16265 var errorText = findPhraseErrors(phrase);
16266 if (errorText) {
16267 showValidationError(errorText);
16268 return;
16269 }
efe41586
IC
16270 // Calculate and display
16271 var passphrase = DOM.passphrase.val();
16272 calcBip32RootKeyFromSeed(phrase, passphrase);
16273 calcForDerivationPath();
16274 hidePending();
16275 }
16276
16277 function delayedRootKeyChanged() {
16278 // Warn if there is an existing mnemonic or passphrase.
16279 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
16280 if (!confirm("This will clear existing mnemonic and passphrase")) {
16281 DOM.rootKey.val(bip32RootKey);
16282 return
16283 }
16284 }
16285 hideValidationError();
16286 showPending();
16287 // Clear existing mnemonic and passphrase
16288 DOM.phrase.val("");
16289 DOM.passphrase.val("");
16290 seed = null;
16291 if (rootKeyChangedTimeoutEvent != null) {
16292 clearTimeout(rootKeyChangedTimeoutEvent);
16293 }
16294 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
16295 }
16296
16297 function rootKeyChanged() {
16298 showPending();
16299 hideValidationError();
16300 // Validate the root key TODO
16301 var rootKeyBase58 = DOM.rootKey.val();
16302 var errorText = validateRootKey(rootKeyBase58);
16303 if (errorText) {
16304 showValidationError(errorText);
16305 return;
16306 }
16307 // Calculate and display
16308 calcBip32RootKeyFromBase58(rootKeyBase58);
16309 calcForDerivationPath();
16310 hidePending();
16311 }
16312
16313 function calcForDerivationPath() {
16314 showPending();
16315 hideValidationError();
ebd8d4e8 16316 // Get the derivation path
38523d36
IC
16317 var derivationPath = getDerivationPath();
16318 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
16319 if (errorText) {
16320 showValidationError(errorText);
16321 return;
16322 }
efe41586 16323 calcBip32ExtendedKey(derivationPath);
ebd8d4e8
IC
16324 displayBip32Info();
16325 hidePending();
16326 }
16327
16328 function generateClicked() {
16329 clearDisplay();
16330 showPending();
16331 setTimeout(function() {
0515eeec 16332 setMnemonicLanguage();
ebd8d4e8
IC
16333 var phrase = generateRandomPhrase();
16334 if (!phrase) {
16335 return;
16336 }
16337 phraseChanged();
16338 }, 50);
16339 }
16340
0515eeec
IC
16341 function languageChanged() {
16342 setTimeout(function() {
16343 setMnemonicLanguage();
16344 if (DOM.phrase.val().length > 0) {
16345 var newPhrase = convertPhraseToNewLanguage();
16346 DOM.phrase.val(newPhrase);
16347 phraseChanged();
16348 }
16349 else {
16350 DOM.generate.trigger("click");
16351 }
16352 }, 50);
16353 }
16354
ebd8d4e8 16355 function toggleIndexes() {
80c4dd2a 16356 showIndex = !showIndex;
ebd8d4e8
IC
16357 $("td.index span").toggleClass("invisible");
16358 }
16359
16360 function toggleAddresses() {
80c4dd2a 16361 showAddress = !showAddress;
ebd8d4e8
IC
16362 $("td.address span").toggleClass("invisible");
16363 }
16364
16365 function togglePrivateKeys() {
80c4dd2a 16366 showPrivKey = !showPrivKey;
ebd8d4e8
IC
16367 $("td.privkey span").toggleClass("invisible");
16368 }
16369
16370 // Private methods
16371
16372 function generateRandomPhrase() {
16373 if (!hasStrongRandom()) {
16374 var errorText = "This browser does not support strong randomness";
16375 showValidationError(errorText);
16376 return;
16377 }
16378 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
16379 var strength = numWords / 3 * 32;
16380 var words = mnemonic.generate(strength);
16381 DOM.phrase.val(words);
16382 return words;
16383 }
16384
efe41586 16385 function calcBip32RootKeyFromSeed(phrase, passphrase) {
73161a92 16386 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 16387 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
efe41586
IC
16388 }
16389
16390 function calcBip32RootKeyFromBase58(rootKeyBase58) {
3821c0d3 16391 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
16392 }
16393
16394 function calcBip32ExtendedKey(path) {
ebd8d4e8
IC
16395 bip32ExtendedKey = bip32RootKey;
16396 // Derive the key from the path
16397 var pathBits = path.split("/");
16398 for (var i=0; i<pathBits.length; i++) {
16399 var bit = pathBits[i];
16400 var index = parseInt(bit);
16401 if (isNaN(index)) {
16402 continue;
16403 }
16404 var hardened = bit[bit.length-1] == "'";
16405 if (hardened) {
16406 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16407 }
16408 else {
16409 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16410 }
16411 }
16412 }
16413
16414 function showValidationError(errorText) {
16415 DOM.feedback
16416 .text(errorText)
16417 .show();
16418 }
16419
16420 function hideValidationError() {
16421 DOM.feedback
16422 .text("")
16423 .hide();
16424 }
16425
16426 function findPhraseErrors(phrase) {
16427 // TODO make this right
16428 // Preprocess the words
783981de 16429 phrase = mnemonic.normalizeString(phrase);
0515eeec 16430 var words = phraseToWordArray(phrase);
563e401a 16431 // Check each word
0515eeec
IC
16432 for (var i=0; i<words.length; i++) {
16433 var word = words[i];
16434 var language = getLanguage();
16435 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
16436 console.log("Finding closest match to " + word);
16437 var nearestWord = findNearestWord(word);
16438 return word + " not in wordlist, did you mean " + nearestWord + "?";
16439 }
16440 }
ebd8d4e8 16441 // Check the words are valid
0515eeec 16442 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
16443 var isValid = mnemonic.check(properPhrase);
16444 if (!isValid) {
16445 return "Invalid mnemonic";
16446 }
16447 return false;
16448 }
16449
efe41586
IC
16450 function validateRootKey(rootKeyBase58) {
16451 try {
16452 bitcoin.HDNode.fromBase58(rootKeyBase58);
16453 }
16454 catch (e) {
16455 return "Invalid root key";
16456 }
16457 return "";
16458 }
16459
38523d36
IC
16460 function getDerivationPath() {
16461 if (DOM.bip44tab.hasClass("active")) {
16462 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
16463 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
16464 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
16465 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
16466 var path = "m/";
16467 path += purpose + "'/";
16468 path += coin + "'/";
16469 path += account + "'/";
16470 path += change;
16471 DOM.bip44path.val(path);
16472 var derivationPath = DOM.bip44path.val();
16473 console.log("Using derivation path from BIP44 tab: " + derivationPath);
16474 return derivationPath;
16475 }
16476 else if (DOM.bip32tab.hasClass("active")) {
16477 var derivationPath = DOM.bip32path.val();
16478 console.log("Using derivation path from BIP32 tab: " + derivationPath);
16479 return derivationPath;
16480 }
16481 else {
16482 console.log("Unknown derivation path");
16483 }
16484 }
16485
ebd8d4e8 16486 function findDerivationPathErrors(path) {
30c9e79d
IC
16487 // TODO is not perfect but is better than nothing
16488 // Inspired by
16489 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
16490 // and
16491 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
16492 var maxDepth = 255; // TODO verify this!!
16493 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
16494 if (path[0] != "m") {
16495 return "First character must be 'm'";
16496 }
16497 if (path.length > 1) {
16498 if (path[1] != "/") {
16499 return "Separator must be '/'";
16500 }
16501 var indexes = path.split("/");
16502 if (indexes.length > maxDepth) {
16503 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16504 }
16505 for (var depth = 1; depth<indexes.length; depth++) {
16506 var index = indexes[depth];
16507 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
16508 if (invalidChars.length > 0) {
16509 return "Invalid characters " + invalidChars + " found at depth " + depth;
16510 }
16511 var indexValue = parseInt(index.replace("'", ""));
16512 if (isNaN(depth)) {
16513 return "Invalid number at depth " + depth;
16514 }
16515 if (indexValue > maxIndexValue) {
16516 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16517 }
16518 }
16519 }
ebd8d4e8
IC
16520 return false;
16521 }
16522
16523 function displayBip32Info() {
16524 // Display the key
73161a92 16525 DOM.seed.val(seed);
ebd8d4e8
IC
16526 var rootKey = bip32RootKey.toBase58();
16527 DOM.rootKey.val(rootKey);
16528 var extendedPrivKey = bip32ExtendedKey.toBase58();
16529 DOM.extendedPrivKey.val(extendedPrivKey);
16530 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16531 DOM.extendedPubKey.val(extendedPubKey);
16532 // Display the addresses and privkeys
16533 clearAddressesList();
16534 displayAddresses(0, 20);
16535 }
16536
16537 function displayAddresses(start, total) {
16538 for (var i=0; i<total; i++) {
80c4dd2a
IC
16539 var index = i + start;
16540 new TableRow(index);
16541 }
16542 }
16543
16544 function TableRow(index) {
16545
1975bfbc
IC
16546 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
16547
80c4dd2a
IC
16548 function init() {
16549 calculateValues();
16550 }
16551
16552 function calculateValues() {
16553 setTimeout(function() {
1975bfbc
IC
16554 var key = "";
16555 if (useHardenedAddresses) {
16556 key = bip32ExtendedKey.deriveHardened(index);
16557 }
16558 else {
16559 key = bip32ExtendedKey.derive(index);
16560 }
80c4dd2a
IC
16561 var address = key.getAddress().toString();
16562 var privkey = key.privKey.toWIF(network);
38523d36 16563 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
16564 if (useHardenedAddresses) {
16565 indexText = indexText + "'";
16566 }
38523d36 16567 addAddressToList(indexText, address, privkey);
80c4dd2a 16568 }, 50)
ebd8d4e8 16569 }
80c4dd2a
IC
16570
16571 init();
16572
ebd8d4e8
IC
16573 }
16574
16575 function showMore() {
16576 var start = DOM.addresses.children().length;
16577 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16578 if (isNaN(rowsToAdd)) {
16579 rowsToAdd = 20;
16580 DOM.rowsToAdd.val("20");
16581 }
16582 if (rowsToAdd > 200) {
16583 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
16584 msg += "Do you want to continue?";
16585 if (!confirm(msg)) {
16586 return;
16587 }
16588 }
ebd8d4e8 16589 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
16590 }
16591
16592 function clearDisplay() {
16593 clearAddressesList();
16594 clearKey();
16595 hideValidationError();
16596 }
16597
16598 function clearAddressesList() {
16599 DOM.addresses.empty();
16600 }
16601
16602 function clearKey() {
16603 DOM.rootKey.val("");
16604 DOM.extendedPrivKey.val("");
16605 DOM.extendedPubKey.val("");
16606 }
16607
38523d36 16608 function addAddressToList(indexText, address, privkey) {
ebd8d4e8 16609 var row = $(addressRowTemplate.html());
80c4dd2a
IC
16610 // Elements
16611 var indexCell = row.find(".index span");
16612 var addressCell = row.find(".address span");
16613 var privkeyCell = row.find(".privkey span");
16614 // Content
ae30fed8 16615 indexCell.text(indexText);
80c4dd2a
IC
16616 addressCell.text(address);
16617 privkeyCell.text(privkey);
16618 // Visibility
16619 if (!showIndex) {
16620 indexCell.addClass("invisible");
16621 }
16622 if (!showAddress) {
16623 addressCell.addClass("invisible");
16624 }
16625 if (!showPrivKey) {
6d628db7 16626 privkeyCell.addClass("invisible");
80c4dd2a 16627 }
ebd8d4e8
IC
16628 DOM.addresses.append(row);
16629 }
16630
16631 function hasStrongRandom() {
16632 return 'crypto' in window && window['crypto'] !== null;
16633 }
16634
16635 function disableForms() {
16636 $("form").on("submit", function(e) {
16637 e.preventDefault();
16638 });
16639 }
16640
ebd8d4e8
IC
16641 function parseIntNoNaN(val, defaultVal) {
16642 var v = parseInt(val);
16643 if (isNaN(v)) {
16644 return defaultVal;
16645 }
16646 return v;
16647 }
16648
16649 function showPending() {
16650 DOM.feedback
16651 .text("Calculating...")
16652 .show();
16653 }
16654
563e401a 16655 function findNearestWord(word) {
0515eeec
IC
16656 var language = getLanguage();
16657 var words = WORDLISTS[language];
563e401a
IC
16658 var minDistance = 99;
16659 var closestWord = words[0];
16660 for (var i=0; i<words.length; i++) {
16661 var comparedTo = words[i];
16662 var distance = Levenshtein.get(word, comparedTo);
16663 if (distance < minDistance) {
16664 closestWord = comparedTo;
16665 minDistance = distance;
16666 }
16667 }
16668 return closestWord;
16669 }
16670
ebd8d4e8
IC
16671 function hidePending() {
16672 DOM.feedback
16673 .text("")
16674 .hide();
16675 }
16676
ab78acc6
IC
16677 function populateNetworkSelect() {
16678 for (var i=0; i<networks.length; i++) {
16679 var network = networks[i];
16680 var option = $("<option>");
16681 option.attr("value", i);
16682 option.text(network.name);
16683 DOM.phraseNetwork.append(option);
16684 }
16685 }
16686
0515eeec
IC
16687 function getLanguage() {
16688 var defaultLanguage = "english";
16689 // Try to get from existing phrase
16690 var language = getLanguageFromPhrase();
16691 // Try to get from url if not from phrase
16692 if (language.length == 0) {
16693 language = getLanguageFromUrl();
16694 }
16695 // Default to English if no other option
16696 if (language.length == 0) {
16697 language = defaultLanguage;
16698 }
16699 return language;
16700 }
16701
16702 function getLanguageFromPhrase(phrase) {
16703 // Check if how many words from existing phrase match a language.
16704 var language = "";
16705 if (!phrase) {
16706 phrase = DOM.phrase.val();
16707 }
16708 if (phrase.length > 0) {
16709 var words = phraseToWordArray(phrase);
16710 var languageMatches = {};
16711 for (l in WORDLISTS) {
16712 // Track how many words match in this language
16713 languageMatches[l] = 0;
16714 for (var i=0; i<words.length; i++) {
16715 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
16716 if (wordInLanguage) {
16717 languageMatches[l]++;
16718 }
16719 }
16720 // Find languages with most word matches.
16721 // This is made difficult due to commonalities between Chinese
16722 // simplified vs traditional.
16723 var mostMatches = 0;
16724 var mostMatchedLanguages = [];
16725 for (var l in languageMatches) {
16726 var numMatches = languageMatches[l];
16727 if (numMatches > mostMatches) {
16728 mostMatches = numMatches;
16729 mostMatchedLanguages = [l];
16730 }
16731 else if (numMatches == mostMatches) {
16732 mostMatchedLanguages.push(l);
16733 }
16734 }
16735 }
16736 if (mostMatchedLanguages.length > 0) {
16737 // Use first language and warn if multiple detected
16738 language = mostMatchedLanguages[0];
16739 if (mostMatchedLanguages.length > 1) {
16740 console.warn("Multiple possible languages");
16741 console.warn(mostMatchedLanguages);
16742 }
16743 }
16744 }
16745 return language;
16746 }
16747
16748 function getLanguageFromUrl() {
16749 return window.location.hash.substring(1);
16750 }
16751
16752 function setMnemonicLanguage() {
16753 var language = getLanguage();
16754 // Load the bip39 mnemonic generator for this language if required
16755 if (!(language in mnemonics)) {
16756 mnemonics[language] = new Mnemonic(language);
16757 }
16758 mnemonic = mnemonics[language];
16759 }
16760
16761 function convertPhraseToNewLanguage() {
16762 var oldLanguage = getLanguageFromPhrase();
16763 var newLanguage = getLanguageFromUrl();
16764 var oldPhrase = DOM.phrase.val();
16765 var oldWords = phraseToWordArray(oldPhrase);
16766 var newWords = [];
16767 for (var i=0; i<oldWords.length; i++) {
16768 var oldWord = oldWords[i];
16769 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16770 var newWord = WORDLISTS[newLanguage][index];
16771 newWords.push(newWord);
16772 }
16773 newPhrase = wordArrayToPhrase(newWords);
16774 return newPhrase;
16775 }
16776
16777 // TODO look at jsbip39 - mnemonic.splitWords
16778 function phraseToWordArray(phrase) {
16779 var words = phrase.split(/\s/g);
16780 var noBlanks = [];
16781 for (var i=0; i<words.length; i++) {
16782 var word = words[i];
16783 if (word.length > 0) {
16784 noBlanks.push(word);
16785 }
16786 }
16787 return noBlanks;
16788 }
16789
16790 // TODO look at jsbip39 - mnemonic.joinWords
16791 function wordArrayToPhrase(words) {
16792 var phrase = words.join(" ");
16793 var language = getLanguageFromPhrase(phrase);
16794 if (language == "japanese") {
16795 phrase = words.join("\u3000");
16796 }
16797 return phrase;
16798 }
16799
ab78acc6
IC
16800 var networks = [
16801 {
16802 name: "Bitcoin",
16803 onSelect: function() {
16804 network = bitcoin.networks.bitcoin;
16805 DOM.bip44coin.val(0);
ab78acc6
IC
16806 },
16807 },
16808 {
16809 name: "Bitcoin Testnet",
16810 onSelect: function() {
16811 network = bitcoin.networks.testnet;
16812 DOM.bip44coin.val(1);
ab78acc6
IC
16813 },
16814 },
16815 {
16816 name: "Litecoin",
16817 onSelect: function() {
16818 network = bitcoin.networks.litecoin;
16819 DOM.bip44coin.val(2);
16820 },
16821 },
16822 {
16823 name: "Dogecoin",
16824 onSelect: function() {
16825 network = bitcoin.networks.dogecoin;
16826 DOM.bip44coin.val(3);
16827 },
16828 },
d5dc92fd
IC
16829 {
16830 name: "ShadowCash",
16831 onSelect: function() {
16832 network = bitcoin.networks.shadow;
16833 DOM.bip44coin.val(35);
16834 },
16835 },
16836 {
16837 name: "ShadowCash Testnet",
16838 onSelect: function() {
16839 network = bitcoin.networks.shadowtn;
16840 DOM.bip44coin.val(1);
16841 },
16842 },
a3baa26e
IC
16843 {
16844 name: "Viacoin",
16845 onSelect: function() {
16846 network = bitcoin.networks.viacoin;
16847 DOM.bip44coin.val(14);
16848 },
16849 },
16850 {
16851 name: "Viacoin Testnet",
16852 onSelect: function() {
16853 network = bitcoin.networks.viacointestnet;
16854 DOM.bip44coin.val(1);
16855 },
16856 },
16857 {
16858 name: "Jumbucks",
16859 onSelect: function() {
16860 network = bitcoin.networks.jumbucks;
16861 DOM.bip44coin.val(26);
16862 },
16863 },
5c434a8a
CM
16864 {
16865 name: "CLAM",
16866 onSelect: function() {
16867 network = bitcoin.networks.clam;
16868 DOM.bip44coin.val(23);
16869 },
16870 },
5493efc3 16871 {
16872 name: "DASH",
16873 onSelect: function() {
16874 network = bitcoin.networks.dash;
16875 DOM.bip44coin.val(5);
16876 },
16877 },
07ac4350 16878 {
16879 name: "Namecoin",
16880 onSelect: function() {
16881 network = bitcoin.networks.namecoin;
16882 DOM.bip44coin.val(7);
16883 },
16884 },
16885 {
16886 name: "Peercoin",
16887 onSelect: function() {
16888 network = bitcoin.networks.peercoin;
16889 DOM.bip44coin.val(6);
16890 },
16891 },
ab78acc6
IC
16892 ]
16893
ebd8d4e8
IC
16894 init();
16895
16896})();
dc55c6b0 16897</script>
ebd8d4e8
IC
16898 </body>
16899</html>