]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Mnemonic length can be set when using raw entropy
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="Ian Coleman" name="author" />
15
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
47 .phrase {
48 word-break: keep-all;
49 }
50 .strength {
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
54 }
55 .languages * {
56 padding-left: 10px;
57 }
58 .monospace {
59 font-family: monospace;
60 }
61 </style>
62 </head>
63 <body>
64 <div class="container">
65
66 <h1 class="text-center">Mnemonic Code Converter</h1>
67 <hr>
68 <div class="row">
69 <div class="col-md-12">
70 <h2>Mnemonic</h2>
71 <form class="form-horizontal" role="form">
72 <div class="form-group">
73 <div class="col-sm-2"></div>
74 <div class="col-sm-10">
75 <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>
76 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
77 </div>
78 </div>
79 <div class="form-group generate-container">
80 <label class="col-sm-2 control-label"></label>
81 <div class="col-sm-10">
82 <div class="form-inline">
83 <div class="input-group-inline">
84 <button class="btn generate">Generate</button>
85 <span>a random</span>
86 <select id="strength" class="strength form-control">
87 <option value="3">3</option>
88 <option value="6">6</option>
89 <option value="9">9</option>
90 <option value="12">12</option>
91 <option value="15" selected>15</option>
92 <option value="18">18</option>
93 <option value="21">21</option>
94 <option value="24">24</option>
95 </select>
96 word mnemonic, or enter your own below.
97 </div>
98 </div>
99 </div>
100 </div>
101 <div class="entropy-container hidden">
102 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
103 <div class="col-sm-10">
104 <input id="entropy" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal">
105 <span class="help-block">
106 <div class="text-danger">
107 This is an advanced feature.
108 Your mnemonic may be insecure if this feature is used incorrectly.
109 <a href="#entropy-notes">Read more</a>
110 </div>
111 <div class="text-danger entropy-error"></div>
112 </span>
113 </div>
114 </div>
115 <div class="form-group">
116 <div class="col-sm-2"></div>
117 <div class="col-sm-10 checkbox">
118 <label>
119 <input type="checkbox" class="use-entropy">
120 Supply my own source of entropy
121 </label>
122 </div>
123 </div>
124 <div class="form-group">
125 <label class="col-sm-2 control-label"></label>
126 <div class="col-sm-10 languages">
127 <a href="#english">English</a>
128 <a href="#japanese" title="Japanese">日本語</a>
129 <a href="#spanish" title="Spanish">Español</a>
130 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
131 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
132 <a href="#french" title="French">Français</a>
133 <a href="#italian" title="Italian">Italiano</a>
134 </div>
135 </div>
136 <div class="form-group">
137 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
138 <div class="col-sm-10">
139 <textarea id="phrase" class="phrase form-control"></textarea>
140 </div>
141 </div>
142 <div class="form-group">
143 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
144 <div class="col-sm-10">
145 <textarea id="passphrase" class="passphrase form-control"></textarea>
146 </div>
147 </div>
148 <div class="form-group">
149 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
150 <div class="col-sm-10">
151 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
152 </div>
153 </div>
154 <div class="form-group">
155 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
156 <div class="col-sm-10">
157 <select id="network-phrase" class="network form-control">
158 <!-- populated by javascript -->
159 </select>
160 </div>
161 </div>
162 <div class="form-group">
163 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
164 <div class="col-sm-10">
165 <textarea id="root-key" class="root-key form-control"></textarea>
166 </div>
167 </div>
168 </form>
169 </div>
170 </div>
171
172 <hr>
173
174 <div class="row">
175 <div class="col-md-12">
176 <h2>Derivation Path</h2>
177 <ul class="derivation-type nav nav-tabs" role="tablist">
178 <li id="bip44-tab" class="active">
179 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
180 </li>
181 <li id="bip32-tab">
182 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
183 </li>
184 </ul>
185 <div class="derivation-type tab-content">
186 <div id="bip44" class="tab-pane active">
187 <form class="form-horizontal" role="form">
188 <br>
189 <div class="col-sm-2"></div>
190 <div class="col-sm-10">
191 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
192 </div>
193 <div class="form-group">
194 <label for="purpose" class="col-sm-2 control-label">
195 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
196 </label>
197 <div class="col-sm-10">
198 <input id="purpose" type="text" class="purpose form-control" value="44">
199 </div>
200 </div>
201 <div class="form-group">
202 <label for="coin" class="col-sm-2 control-label">
203 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
204 </label>
205 <div class="col-sm-10">
206 <input id="coin" type="text" class="coin form-control" value="0">
207 </div>
208 </div>
209 <div class="form-group">
210 <label for="account" class="col-sm-2 control-label">
211 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
212 </label>
213 <div class="col-sm-10">
214 <input id="account" type="text" class="account form-control" value="0">
215 </div>
216 </div>
217 <div class="form-group">
218 <label for="change" class="col-sm-2 control-label">
219 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
220 </label>
221 <div class="col-sm-10">
222 <input id="change" type="text" class="change form-control" value="0">
223 </div>
224 </div>
225 <div class="form-group">
226 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
227 <div class="col-sm-10">
228 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
229 </div>
230 </div>
231 </form>
232 </div>
233 <div id="bip32" class="tab-pane">
234 <form class="form-horizontal" role="form">
235 <br>
236 <div class="col-sm-2"></div>
237 <div class="col-sm-10">
238 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
239 </div>
240 <div class="form-group">
241 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
242 <div class="col-sm-10">
243 <input id="bip32-path" type="text" class="path form-control" value="m/0">
244 </div>
245 </div>
246 <div class="form-group">
247 <div class="col-sm-2"></div>
248 <label class="col-sm-10">
249 <input class="hardened-addresses" type="checkbox">
250 Use hardened addresses
251 </label>
252 </div>
253 <div class="form-group">
254 <label class="col-sm-2 control-label">Hive Wallet</label>
255 <div class="col-sm-10">
256 <p class="form-control no-border">
257 Use path <code>m/0'/0</code>.
258 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
259 </p>
260 </div>
261 </div>
262 <div class="form-group">
263 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
264 <div class="col-sm-10">
265 <p class="form-control no-border">
266 Use path <code>m/44'/0'/0'/0</code>.
267 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
268 </p>
269 </div>
270 </div>
271 <div class="form-group">
272 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
273 <div class="col-sm-10">
274 <p class="form-control no-border">
275 Use path <code>m/0'/0'</code> with hardened addresses.
276 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
277 </p>
278 </div>
279 </div>
280 <div class="form-group">
281 <label class="col-sm-2 control-label">Block Explorers</label>
282 <div class="col-sm-10">
283 <p class="form-control no-border">
284 Use path <code>m/44'/0'/0'</code>.
285 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
286 </p>
287 </div>
288 </div>
289 </form>
290 </div>
291 </div>
292 <form class="form-horizontal" role="form">
293 <div class="form-group">
294 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
295 <div class="col-sm-10">
296 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
297 </div>
298 </div>
299 <div class="form-group">
300 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
301 <div class="col-sm-10">
302 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
303 </div>
304 </div>
305 </form>
306 </div>
307 </div>
308
309 <hr>
310
311 <div class="row">
312 <div class="col-md-12">
313 <h2>Derived Addresses</h2>
314 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
315 <table class="table table-striped">
316 <thead>
317 <th>
318 <div class="input-group">
319 Path&nbsp;&nbsp;
320 <button class="index-toggle">Toggle</button>
321 </div>
322 </th>
323 <th>
324 <div class="input-group">
325 Address&nbsp;&nbsp;
326 <button class="address-toggle">Toggle</button>
327 </div>
328 </th>
329 <th>
330 <div class="input-group">
331 Public Key&nbsp;&nbsp;
332 <button class="public-key-toggle">Toggle</button>
333 </div>
334 </th>
335 <th>
336 <div class="input-group">
337 Private Key&nbsp;&nbsp;
338 <button class="private-key-toggle">Toggle</button>
339 </div>
340 </th>
341 </thead>
342 <tbody class="addresses monospace">
343 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
344 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
345 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
346 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
347 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
348 </tbody>
349 </table>
350 </div>
351 </div>
352 <span>Show next </button>
353 <input type="number" class="rows-to-add" value="20">
354 <button class="more">Show</button>
355
356 <hr>
357
358 <div class="row">
359 <div class="col-md-12">
360 <h2>More info</h2>
361 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
362 <p>
363 Read more at the
364 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
365 </p>
366 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
367 <p>
368 Read more at the
369 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
370 and see the demo at
371 <a href="http://bip32.org/" target="_blank">bip32.org</a>
372 </p>
373 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
374 <p>
375 Read more at the
376 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
377 </p>
378 <h3>Private Keys</h3>
379 <p>
380 Use private keys at
381 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
382 but be careful - it can be easy to make mistakes if you
383 don't know what you're doing
384 </p>
385 <h3 id="entropy-notes">Entropy</h3>
386 <p>
387 Entropy values must be sourced from a
388 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
389 This means flipping a fair coin, rolling a fair dice, noise measurements etc. Do <strong>NOT</strong> use
390 phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i>
391 is random, because chances are <em>overwhelming</em> that it isn't random enough for the needs of this tool.
392 </p>
393 <p>
394 The random mnemonic generator on this page uses a
395 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>,
396 and can generally be trusted more than your own intuition about randomness.
397 If cryptographic randomness isn't available in your browser, this page will show a warning and <i>will not generate
398 random mnemonics</i>.
399 </p>
400 <p>
401 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
402 </p>
403 </div>
404 </div>
405
406 <hr>
407
408 <div class="row">
409 <div class="col-md-12">
410
411 <h2>Offline Usage</h2>
412
413 <p>
414 You can use this tool without having to be online.
415 </p>
416 <p>
417 In your browser, select file save-as, and save this page
418 as a file.
419 </p>
420 <p>
421 Double-click that file to open it in a browser
422 on any offline computer.
423 </p>
424 <p>
425 Alternatively, download it from
426 <a href="https://github.com/iancoleman/bip39">
427 https://github.com/iancoleman/bip39
428 </a>
429
430 </div>
431 </div>
432
433 <hr>
434
435 <div class="row">
436 <div class="col-md-12">
437
438 <h2>This project is 100% open-source code</h2>
439
440 <p>
441 <span>Get the source code at - </span>
442 <a href="https://github.com/iancoleman/bip39" target="_blank">
443 https://github.com/iancoleman/bip39
444 </a>
445 </p>
446
447 <h3>Libraries</h3>
448
449 <p>
450 <span>BitcoinJS - </span>
451 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
452 https://github.com/bitcoinjs/bitcoinjs-lib
453 </a>
454 </p>
455
456 <p>
457 <span>jsBIP39 - </span>
458 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
459 https://github.com/iancoleman/jsbip39
460 </a>
461 </p>
462
463 <p>
464 <span>sjcl - </span>
465 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
466 https://github.com/bitwiseshiftleft/sjcl
467 </a>
468 </p>
469
470 <p>
471 <span>jQuery - </span>
472 <a href="https://jquery.com/" target="_blank">
473 https://jquery.com/
474 </a>
475 </p>
476
477 <p>
478 <span>Twitter Bootstrap - </span>
479 <a href="http://getbootstrap.com/" target="_blank">
480 http://getbootstrap.com/
481 </a>
482 </p>
483
484 </div>
485 </div>
486
487 </div>
488
489 <div class="feedback-container">
490 <div class="feedback">Loading...</div>
491 </div>
492
493 <script type="text/template" id="address-row-template">
494 <tr>
495 <td class="index"><span></span></td>
496 <td class="address"><span></span></td>
497 <td class="pubkey"><span></span></td>
498 <td class="privkey"><span></span></td>
499 </tr>
500 </script>
501 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
502 !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)
503 },_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))
504 },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});
505 </script>
506 <script>/*!
507 * Bootstrap v3.2.0 (http://getbootstrap.com)
508 * Copyright 2011-2014 Twitter, Inc.
509 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
510 */
511 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
512 <script>(function() {
513 'use strict';
514
515 /**
516 * Extend an Object with another Object's properties.
517 *
518 * The source objects are specified as additional arguments.
519 *
520 * @param dst Object the object to extend.
521 *
522 * @return Object the final object.
523 */
524 var _extend = function(dst) {
525 var sources = Array.prototype.slice.call(arguments, 1);
526 for (var i=0; i<sources.length; ++i) {
527 var src = sources[i];
528 for (var p in src) {
529 if (src.hasOwnProperty(p)) dst[p] = src[p];
530 }
531 }
532 return dst;
533 };
534
535
536 /**
537 * Defer execution of given function.
538 * @param {Function} func
539 */
540 var _defer = function(func) {
541 if (typeof setImmediate === 'function') {
542 return setImmediate(func);
543 } else {
544 return setTimeout(func, 0);
545 }
546 };
547
548 /**
549 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
550 */
551 var Levenshtein = {
552 /**
553 * Calculate levenshtein distance of the two strings.
554 *
555 * @param str1 String the first string.
556 * @param str2 String the second string.
557 * @return Integer the levenshtein distance (0 and above).
558 */
559 get: function(str1, str2) {
560 // base cases
561 if (str1 === str2) return 0;
562 if (str1.length === 0) return str2.length;
563 if (str2.length === 0) return str1.length;
564
565 // two rows
566 var prevRow = new Array(str2.length + 1),
567 curCol, nextCol, i, j, tmp;
568
569 // initialise previous row
570 for (i=0; i<prevRow.length; ++i) {
571 prevRow[i] = i;
572 }
573
574 // calculate current row distance from previous row
575 for (i=0; i<str1.length; ++i) {
576 nextCol = i + 1;
577
578 for (j=0; j<str2.length; ++j) {
579 curCol = nextCol;
580
581 // substution
582 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
583 // insertion
584 tmp = curCol + 1;
585 if (nextCol > tmp) {
586 nextCol = tmp;
587 }
588 // deletion
589 tmp = prevRow[j + 1] + 1;
590 if (nextCol > tmp) {
591 nextCol = tmp;
592 }
593
594 // copy current col value into previous (in preparation for next iteration)
595 prevRow[j] = curCol;
596 }
597
598 // copy last col value into previous (in preparation for next iteration)
599 prevRow[j] = nextCol;
600 }
601
602 return nextCol;
603 },
604
605 /**
606 * Asynchronously calculate levenshtein distance of the two strings.
607 *
608 * @param str1 String the first string.
609 * @param str2 String the second string.
610 * @param cb Function callback function with signature: function(Error err, int distance)
611 * @param [options] Object additional options.
612 * @param [options.progress] Function progress callback with signature: function(percentComplete)
613 */
614 getAsync: function(str1, str2, cb, options) {
615 options = _extend({}, {
616 progress: null
617 }, options);
618
619 // base cases
620 if (str1 === str2) return cb(null, 0);
621 if (str1.length === 0) return cb(null, str2.length);
622 if (str2.length === 0) return cb(null, str1.length);
623
624 // two rows
625 var prevRow = new Array(str2.length + 1),
626 curCol, nextCol,
627 i, j, tmp,
628 startTime, currentTime;
629
630 // initialise previous row
631 for (i=0; i<prevRow.length; ++i) {
632 prevRow[i] = i;
633 }
634
635 nextCol = 1;
636 i = 0;
637 j = -1;
638
639 var __calculate = function() {
640 // reset timer
641 startTime = new Date().valueOf();
642 currentTime = startTime;
643
644 // keep going until one second has elapsed
645 while (currentTime - startTime < 1000) {
646 // reached end of current row?
647 if (str2.length <= (++j)) {
648 // copy current into previous (in preparation for next iteration)
649 prevRow[j] = nextCol;
650
651 // if already done all chars
652 if (str1.length <= (++i)) {
653 return cb(null, nextCol);
654 }
655 // else if we have more left to do
656 else {
657 nextCol = i + 1;
658 j = 0;
659 }
660 }
661
662 // calculation
663 curCol = nextCol;
664
665 // substution
666 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
667 // insertion
668 tmp = curCol + 1;
669 if (nextCol > tmp) {
670 nextCol = tmp;
671 }
672 // deletion
673 tmp = prevRow[j + 1] + 1;
674 if (nextCol > tmp) {
675 nextCol = tmp;
676 }
677
678 // copy current into previous (in preparation for next iteration)
679 prevRow[j] = curCol;
680
681 // get current time
682 currentTime = new Date().valueOf();
683 }
684
685 // send a progress update?
686 if (null !== options.progress) {
687 try {
688 options.progress.call(null, (i * 100.0/ str1.length));
689 } catch (err) {
690 return cb('Progress callback: ' + err.toString());
691 }
692 }
693
694 // next iteration
695 _defer(__calculate);
696 };
697
698 __calculate();
699 }
700
701 };
702
703 // amd
704 if (typeof define !== "undefined" && define !== null && define.amd) {
705 define(function() {
706 return Levenshtein;
707 });
708 }
709 // commonjs
710 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
711 module.exports = Levenshtein;
712 }
713 // web worker
714 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
715 self.Levenshtein = Levenshtein;
716 }
717 // browser main thread
718 else if (typeof window !== "undefined" && window !== null) {
719 window.Levenshtein = Levenshtein;
720 }
721 }());
722
723 </script>
724 <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){
725 // (public) Constructor
726 function BigInteger(a, b, c) {
727 if (!(this instanceof BigInteger))
728 return new BigInteger(a, b, c)
729
730 if (a != null) {
731 if ("number" == typeof a) this.fromNumber(a, b, c)
732 else if (b == null && "string" != typeof a) this.fromString(a, 256)
733 else this.fromString(a, b)
734 }
735 }
736
737 var proto = BigInteger.prototype
738
739 // duck-typed isBigInteger
740 proto.__bigi = require('../package.json').version
741 BigInteger.isBigInteger = function (obj, check_ver) {
742 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
743 }
744
745 // Bits per digit
746 var dbits
747
748 // am: Compute w_j += (x*this_i), propagate carries,
749 // c is initial carry, returns final carry.
750 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
751 // We need to select the fastest one that works in this environment.
752
753 // am1: use a single mult and divide to get the high bits,
754 // max digit bits should be 26 because
755 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
756 function am1(i, x, w, j, c, n) {
757 while (--n >= 0) {
758 var v = x * this[i++] + w[j] + c
759 c = Math.floor(v / 0x4000000)
760 w[j++] = v & 0x3ffffff
761 }
762 return c
763 }
764 // am2 avoids a big mult-and-extract completely.
765 // Max digit bits should be <= 30 because we do bitwise ops
766 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
767 function am2(i, x, w, j, c, n) {
768 var xl = x & 0x7fff,
769 xh = x >> 15
770 while (--n >= 0) {
771 var l = this[i] & 0x7fff
772 var h = this[i++] >> 15
773 var m = xh * l + h * xl
774 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
775 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
776 w[j++] = l & 0x3fffffff
777 }
778 return c
779 }
780 // Alternately, set max digit bits to 28 since some
781 // browsers slow down when dealing with 32-bit numbers.
782 function am3(i, x, w, j, c, n) {
783 var xl = x & 0x3fff,
784 xh = x >> 14
785 while (--n >= 0) {
786 var l = this[i] & 0x3fff
787 var h = this[i++] >> 14
788 var m = xh * l + h * xl
789 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
790 c = (l >> 28) + (m >> 14) + xh * h
791 w[j++] = l & 0xfffffff
792 }
793 return c
794 }
795
796 // wtf?
797 BigInteger.prototype.am = am1
798 dbits = 26
799
800 BigInteger.prototype.DB = dbits
801 BigInteger.prototype.DM = ((1 << dbits) - 1)
802 var DV = BigInteger.prototype.DV = (1 << dbits)
803
804 var BI_FP = 52
805 BigInteger.prototype.FV = Math.pow(2, BI_FP)
806 BigInteger.prototype.F1 = BI_FP - dbits
807 BigInteger.prototype.F2 = 2 * dbits - BI_FP
808
809 // Digit conversions
810 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
811 var BI_RC = new Array()
812 var rr, vv
813 rr = "0".charCodeAt(0)
814 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
815 rr = "a".charCodeAt(0)
816 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
817 rr = "A".charCodeAt(0)
818 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
819
820 function int2char(n) {
821 return BI_RM.charAt(n)
822 }
823
824 function intAt(s, i) {
825 var c = BI_RC[s.charCodeAt(i)]
826 return (c == null) ? -1 : c
827 }
828
829 // (protected) copy this to r
830 function bnpCopyTo(r) {
831 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
832 r.t = this.t
833 r.s = this.s
834 }
835
836 // (protected) set from integer value x, -DV <= x < DV
837 function bnpFromInt(x) {
838 this.t = 1
839 this.s = (x < 0) ? -1 : 0
840 if (x > 0) this[0] = x
841 else if (x < -1) this[0] = x + DV
842 else this.t = 0
843 }
844
845 // return bigint initialized to value
846 function nbv(i) {
847 var r = new BigInteger()
848 r.fromInt(i)
849 return r
850 }
851
852 // (protected) set from string and radix
853 function bnpFromString(s, b) {
854 var self = this
855
856 var k
857 if (b == 16) k = 4
858 else if (b == 8) k = 3
859 else if (b == 256) k = 8; // byte array
860 else if (b == 2) k = 1
861 else if (b == 32) k = 5
862 else if (b == 4) k = 2
863 else {
864 self.fromRadix(s, b)
865 return
866 }
867 self.t = 0
868 self.s = 0
869 var i = s.length,
870 mi = false,
871 sh = 0
872 while (--i >= 0) {
873 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
874 if (x < 0) {
875 if (s.charAt(i) == "-") mi = true
876 continue
877 }
878 mi = false
879 if (sh == 0)
880 self[self.t++] = x
881 else if (sh + k > self.DB) {
882 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
883 self[self.t++] = (x >> (self.DB - sh))
884 } else
885 self[self.t - 1] |= x << sh
886 sh += k
887 if (sh >= self.DB) sh -= self.DB
888 }
889 if (k == 8 && (s[0] & 0x80) != 0) {
890 self.s = -1
891 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
892 }
893 self.clamp()
894 if (mi) BigInteger.ZERO.subTo(self, self)
895 }
896
897 // (protected) clamp off excess high words
898 function bnpClamp() {
899 var c = this.s & this.DM
900 while (this.t > 0 && this[this.t - 1] == c)--this.t
901 }
902
903 // (public) return string representation in given radix
904 function bnToString(b) {
905 var self = this
906 if (self.s < 0) return "-" + self.negate()
907 .toString(b)
908 var k
909 if (b == 16) k = 4
910 else if (b == 8) k = 3
911 else if (b == 2) k = 1
912 else if (b == 32) k = 5
913 else if (b == 4) k = 2
914 else return self.toRadix(b)
915 var km = (1 << k) - 1,
916 d, m = false,
917 r = "",
918 i = self.t
919 var p = self.DB - (i * self.DB) % k
920 if (i-- > 0) {
921 if (p < self.DB && (d = self[i] >> p) > 0) {
922 m = true
923 r = int2char(d)
924 }
925 while (i >= 0) {
926 if (p < k) {
927 d = (self[i] & ((1 << p) - 1)) << (k - p)
928 d |= self[--i] >> (p += self.DB - k)
929 } else {
930 d = (self[i] >> (p -= k)) & km
931 if (p <= 0) {
932 p += self.DB
933 --i
934 }
935 }
936 if (d > 0) m = true
937 if (m) r += int2char(d)
938 }
939 }
940 return m ? r : "0"
941 }
942
943 // (public) -this
944 function bnNegate() {
945 var r = new BigInteger()
946 BigInteger.ZERO.subTo(this, r)
947 return r
948 }
949
950 // (public) |this|
951 function bnAbs() {
952 return (this.s < 0) ? this.negate() : this
953 }
954
955 // (public) return + if this > a, - if this < a, 0 if equal
956 function bnCompareTo(a) {
957 var r = this.s - a.s
958 if (r != 0) return r
959 var i = this.t
960 r = i - a.t
961 if (r != 0) return (this.s < 0) ? -r : r
962 while (--i >= 0)
963 if ((r = this[i] - a[i]) != 0) return r
964 return 0
965 }
966
967 // returns bit length of the integer x
968 function nbits(x) {
969 var r = 1,
970 t
971 if ((t = x >>> 16) != 0) {
972 x = t
973 r += 16
974 }
975 if ((t = x >> 8) != 0) {
976 x = t
977 r += 8
978 }
979 if ((t = x >> 4) != 0) {
980 x = t
981 r += 4
982 }
983 if ((t = x >> 2) != 0) {
984 x = t
985 r += 2
986 }
987 if ((t = x >> 1) != 0) {
988 x = t
989 r += 1
990 }
991 return r
992 }
993
994 // (public) return the number of bits in "this"
995 function bnBitLength() {
996 if (this.t <= 0) return 0
997 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
998 }
999
1000 // (public) return the number of bytes in "this"
1001 function bnByteLength() {
1002 return this.bitLength() >> 3
1003 }
1004
1005 // (protected) r = this << n*DB
1006 function bnpDLShiftTo(n, r) {
1007 var i
1008 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
1009 for (i = n - 1; i >= 0; --i) r[i] = 0
1010 r.t = this.t + n
1011 r.s = this.s
1012 }
1013
1014 // (protected) r = this >> n*DB
1015 function bnpDRShiftTo(n, r) {
1016 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
1017 r.t = Math.max(this.t - n, 0)
1018 r.s = this.s
1019 }
1020
1021 // (protected) r = this << n
1022 function bnpLShiftTo(n, r) {
1023 var self = this
1024 var bs = n % self.DB
1025 var cbs = self.DB - bs
1026 var bm = (1 << cbs) - 1
1027 var ds = Math.floor(n / self.DB),
1028 c = (self.s << bs) & self.DM,
1029 i
1030 for (i = self.t - 1; i >= 0; --i) {
1031 r[i + ds + 1] = (self[i] >> cbs) | c
1032 c = (self[i] & bm) << bs
1033 }
1034 for (i = ds - 1; i >= 0; --i) r[i] = 0
1035 r[ds] = c
1036 r.t = self.t + ds + 1
1037 r.s = self.s
1038 r.clamp()
1039 }
1040
1041 // (protected) r = this >> n
1042 function bnpRShiftTo(n, r) {
1043 var self = this
1044 r.s = self.s
1045 var ds = Math.floor(n / self.DB)
1046 if (ds >= self.t) {
1047 r.t = 0
1048 return
1049 }
1050 var bs = n % self.DB
1051 var cbs = self.DB - bs
1052 var bm = (1 << bs) - 1
1053 r[0] = self[ds] >> bs
1054 for (var i = ds + 1; i < self.t; ++i) {
1055 r[i - ds - 1] |= (self[i] & bm) << cbs
1056 r[i - ds] = self[i] >> bs
1057 }
1058 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1059 r.t = self.t - ds
1060 r.clamp()
1061 }
1062
1063 // (protected) r = this - a
1064 function bnpSubTo(a, r) {
1065 var self = this
1066 var i = 0,
1067 c = 0,
1068 m = Math.min(a.t, self.t)
1069 while (i < m) {
1070 c += self[i] - a[i]
1071 r[i++] = c & self.DM
1072 c >>= self.DB
1073 }
1074 if (a.t < self.t) {
1075 c -= a.s
1076 while (i < self.t) {
1077 c += self[i]
1078 r[i++] = c & self.DM
1079 c >>= self.DB
1080 }
1081 c += self.s
1082 } else {
1083 c += self.s
1084 while (i < a.t) {
1085 c -= a[i]
1086 r[i++] = c & self.DM
1087 c >>= self.DB
1088 }
1089 c -= a.s
1090 }
1091 r.s = (c < 0) ? -1 : 0
1092 if (c < -1) r[i++] = self.DV + c
1093 else if (c > 0) r[i++] = c
1094 r.t = i
1095 r.clamp()
1096 }
1097
1098 // (protected) r = this * a, r != this,a (HAC 14.12)
1099 // "this" should be the larger one if appropriate.
1100 function bnpMultiplyTo(a, r) {
1101 var x = this.abs(),
1102 y = a.abs()
1103 var i = x.t
1104 r.t = i + y.t
1105 while (--i >= 0) r[i] = 0
1106 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1107 r.s = 0
1108 r.clamp()
1109 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1110 }
1111
1112 // (protected) r = this^2, r != this (HAC 14.16)
1113 function bnpSquareTo(r) {
1114 var x = this.abs()
1115 var i = r.t = 2 * x.t
1116 while (--i >= 0) r[i] = 0
1117 for (i = 0; i < x.t - 1; ++i) {
1118 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1119 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1120 r[i + x.t] -= x.DV
1121 r[i + x.t + 1] = 1
1122 }
1123 }
1124 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1125 r.s = 0
1126 r.clamp()
1127 }
1128
1129 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1130 // r != q, this != m. q or r may be null.
1131 function bnpDivRemTo(m, q, r) {
1132 var self = this
1133 var pm = m.abs()
1134 if (pm.t <= 0) return
1135 var pt = self.abs()
1136 if (pt.t < pm.t) {
1137 if (q != null) q.fromInt(0)
1138 if (r != null) self.copyTo(r)
1139 return
1140 }
1141 if (r == null) r = new BigInteger()
1142 var y = new BigInteger(),
1143 ts = self.s,
1144 ms = m.s
1145 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1146 if (nsh > 0) {
1147 pm.lShiftTo(nsh, y)
1148 pt.lShiftTo(nsh, r)
1149 } else {
1150 pm.copyTo(y)
1151 pt.copyTo(r)
1152 }
1153 var ys = y.t
1154 var y0 = y[ys - 1]
1155 if (y0 == 0) return
1156 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1157 var d1 = self.FV / yt,
1158 d2 = (1 << self.F1) / yt,
1159 e = 1 << self.F2
1160 var i = r.t,
1161 j = i - ys,
1162 t = (q == null) ? new BigInteger() : q
1163 y.dlShiftTo(j, t)
1164 if (r.compareTo(t) >= 0) {
1165 r[r.t++] = 1
1166 r.subTo(t, r)
1167 }
1168 BigInteger.ONE.dlShiftTo(ys, t)
1169 t.subTo(y, y); // "negative" y so we can replace sub with am later
1170 while (y.t < ys) y[y.t++] = 0
1171 while (--j >= 0) {
1172 // Estimate quotient digit
1173 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1174 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1175 y.dlShiftTo(j, t)
1176 r.subTo(t, r)
1177 while (r[i] < --qd) r.subTo(t, r)
1178 }
1179 }
1180 if (q != null) {
1181 r.drShiftTo(ys, q)
1182 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1183 }
1184 r.t = ys
1185 r.clamp()
1186 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1187 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1188 }
1189
1190 // (public) this mod a
1191 function bnMod(a) {
1192 var r = new BigInteger()
1193 this.abs()
1194 .divRemTo(a, null, r)
1195 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1196 return r
1197 }
1198
1199 // Modular reduction using "classic" algorithm
1200 function Classic(m) {
1201 this.m = m
1202 }
1203
1204 function cConvert(x) {
1205 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1206 else return x
1207 }
1208
1209 function cRevert(x) {
1210 return x
1211 }
1212
1213 function cReduce(x) {
1214 x.divRemTo(this.m, null, x)
1215 }
1216
1217 function cMulTo(x, y, r) {
1218 x.multiplyTo(y, r)
1219 this.reduce(r)
1220 }
1221
1222 function cSqrTo(x, r) {
1223 x.squareTo(r)
1224 this.reduce(r)
1225 }
1226
1227 Classic.prototype.convert = cConvert
1228 Classic.prototype.revert = cRevert
1229 Classic.prototype.reduce = cReduce
1230 Classic.prototype.mulTo = cMulTo
1231 Classic.prototype.sqrTo = cSqrTo
1232
1233 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1234 // justification:
1235 // xy == 1 (mod m)
1236 // xy = 1+km
1237 // xy(2-xy) = (1+km)(1-km)
1238 // x[y(2-xy)] = 1-k^2m^2
1239 // x[y(2-xy)] == 1 (mod m^2)
1240 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1241 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1242 // JS multiply "overflows" differently from C/C++, so care is needed here.
1243 function bnpInvDigit() {
1244 if (this.t < 1) return 0
1245 var x = this[0]
1246 if ((x & 1) == 0) return 0
1247 var y = x & 3; // y == 1/x mod 2^2
1248 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1249 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1250 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1251 // last step - calculate inverse mod DV directly
1252 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1253 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1254 // we really want the negative inverse, and -DV < y < DV
1255 return (y > 0) ? this.DV - y : -y
1256 }
1257
1258 // Montgomery reduction
1259 function Montgomery(m) {
1260 this.m = m
1261 this.mp = m.invDigit()
1262 this.mpl = this.mp & 0x7fff
1263 this.mph = this.mp >> 15
1264 this.um = (1 << (m.DB - 15)) - 1
1265 this.mt2 = 2 * m.t
1266 }
1267
1268 // xR mod m
1269 function montConvert(x) {
1270 var r = new BigInteger()
1271 x.abs()
1272 .dlShiftTo(this.m.t, r)
1273 r.divRemTo(this.m, null, r)
1274 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1275 return r
1276 }
1277
1278 // x/R mod m
1279 function montRevert(x) {
1280 var r = new BigInteger()
1281 x.copyTo(r)
1282 this.reduce(r)
1283 return r
1284 }
1285
1286 // x = x/R mod m (HAC 14.32)
1287 function montReduce(x) {
1288 while (x.t <= this.mt2) // pad x so am has enough room later
1289 x[x.t++] = 0
1290 for (var i = 0; i < this.m.t; ++i) {
1291 // faster way of calculating u0 = x[i]*mp mod DV
1292 var j = x[i] & 0x7fff
1293 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1294 // use am to combine the multiply-shift-add into one call
1295 j = i + this.m.t
1296 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1297 // propagate carry
1298 while (x[j] >= x.DV) {
1299 x[j] -= x.DV
1300 x[++j]++
1301 }
1302 }
1303 x.clamp()
1304 x.drShiftTo(this.m.t, x)
1305 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1306 }
1307
1308 // r = "x^2/R mod m"; x != r
1309 function montSqrTo(x, r) {
1310 x.squareTo(r)
1311 this.reduce(r)
1312 }
1313
1314 // r = "xy/R mod m"; x,y != r
1315 function montMulTo(x, y, r) {
1316 x.multiplyTo(y, r)
1317 this.reduce(r)
1318 }
1319
1320 Montgomery.prototype.convert = montConvert
1321 Montgomery.prototype.revert = montRevert
1322 Montgomery.prototype.reduce = montReduce
1323 Montgomery.prototype.mulTo = montMulTo
1324 Montgomery.prototype.sqrTo = montSqrTo
1325
1326 // (protected) true iff this is even
1327 function bnpIsEven() {
1328 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1329 }
1330
1331 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1332 function bnpExp(e, z) {
1333 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1334 var r = new BigInteger(),
1335 r2 = new BigInteger(),
1336 g = z.convert(this),
1337 i = nbits(e) - 1
1338 g.copyTo(r)
1339 while (--i >= 0) {
1340 z.sqrTo(r, r2)
1341 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1342 else {
1343 var t = r
1344 r = r2
1345 r2 = t
1346 }
1347 }
1348 return z.revert(r)
1349 }
1350
1351 // (public) this^e % m, 0 <= e < 2^32
1352 function bnModPowInt(e, m) {
1353 var z
1354 if (e < 256 || m.isEven()) z = new Classic(m)
1355 else z = new Montgomery(m)
1356 return this.exp(e, z)
1357 }
1358
1359 // protected
1360 proto.copyTo = bnpCopyTo
1361 proto.fromInt = bnpFromInt
1362 proto.fromString = bnpFromString
1363 proto.clamp = bnpClamp
1364 proto.dlShiftTo = bnpDLShiftTo
1365 proto.drShiftTo = bnpDRShiftTo
1366 proto.lShiftTo = bnpLShiftTo
1367 proto.rShiftTo = bnpRShiftTo
1368 proto.subTo = bnpSubTo
1369 proto.multiplyTo = bnpMultiplyTo
1370 proto.squareTo = bnpSquareTo
1371 proto.divRemTo = bnpDivRemTo
1372 proto.invDigit = bnpInvDigit
1373 proto.isEven = bnpIsEven
1374 proto.exp = bnpExp
1375
1376 // public
1377 proto.toString = bnToString
1378 proto.negate = bnNegate
1379 proto.abs = bnAbs
1380 proto.compareTo = bnCompareTo
1381 proto.bitLength = bnBitLength
1382 proto.byteLength = bnByteLength
1383 proto.mod = bnMod
1384 proto.modPowInt = bnModPowInt
1385
1386 // (public)
1387 function bnClone() {
1388 var r = new BigInteger()
1389 this.copyTo(r)
1390 return r
1391 }
1392
1393 // (public) return value as integer
1394 function bnIntValue() {
1395 if (this.s < 0) {
1396 if (this.t == 1) return this[0] - this.DV
1397 else if (this.t == 0) return -1
1398 } else if (this.t == 1) return this[0]
1399 else if (this.t == 0) return 0
1400 // assumes 16 < DB < 32
1401 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1402 }
1403
1404 // (public) return value as byte
1405 function bnByteValue() {
1406 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1407 }
1408
1409 // (public) return value as short (assumes DB>=16)
1410 function bnShortValue() {
1411 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1412 }
1413
1414 // (protected) return x s.t. r^x < DV
1415 function bnpChunkSize(r) {
1416 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1417 }
1418
1419 // (public) 0 if this == 0, 1 if this > 0
1420 function bnSigNum() {
1421 if (this.s < 0) return -1
1422 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1423 else return 1
1424 }
1425
1426 // (protected) convert to radix string
1427 function bnpToRadix(b) {
1428 if (b == null) b = 10
1429 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1430 var cs = this.chunkSize(b)
1431 var a = Math.pow(b, cs)
1432 var d = nbv(a),
1433 y = new BigInteger(),
1434 z = new BigInteger(),
1435 r = ""
1436 this.divRemTo(d, y, z)
1437 while (y.signum() > 0) {
1438 r = (a + z.intValue())
1439 .toString(b)
1440 .substr(1) + r
1441 y.divRemTo(d, y, z)
1442 }
1443 return z.intValue()
1444 .toString(b) + r
1445 }
1446
1447 // (protected) convert from radix string
1448 function bnpFromRadix(s, b) {
1449 var self = this
1450 self.fromInt(0)
1451 if (b == null) b = 10
1452 var cs = self.chunkSize(b)
1453 var d = Math.pow(b, cs),
1454 mi = false,
1455 j = 0,
1456 w = 0
1457 for (var i = 0; i < s.length; ++i) {
1458 var x = intAt(s, i)
1459 if (x < 0) {
1460 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1461 continue
1462 }
1463 w = b * w + x
1464 if (++j >= cs) {
1465 self.dMultiply(d)
1466 self.dAddOffset(w, 0)
1467 j = 0
1468 w = 0
1469 }
1470 }
1471 if (j > 0) {
1472 self.dMultiply(Math.pow(b, j))
1473 self.dAddOffset(w, 0)
1474 }
1475 if (mi) BigInteger.ZERO.subTo(self, self)
1476 }
1477
1478 // (protected) alternate constructor
1479 function bnpFromNumber(a, b, c) {
1480 var self = this
1481 if ("number" == typeof b) {
1482 // new BigInteger(int,int,RNG)
1483 if (a < 2) self.fromInt(1)
1484 else {
1485 self.fromNumber(a, c)
1486 if (!self.testBit(a - 1)) // force MSB set
1487 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1488 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1489 while (!self.isProbablePrime(b)) {
1490 self.dAddOffset(2, 0)
1491 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1492 }
1493 }
1494 } else {
1495 // new BigInteger(int,RNG)
1496 var x = new Array(),
1497 t = a & 7
1498 x.length = (a >> 3) + 1
1499 b.nextBytes(x)
1500 if (t > 0) x[0] &= ((1 << t) - 1)
1501 else x[0] = 0
1502 self.fromString(x, 256)
1503 }
1504 }
1505
1506 // (public) convert to bigendian byte array
1507 function bnToByteArray() {
1508 var self = this
1509 var i = self.t,
1510 r = new Array()
1511 r[0] = self.s
1512 var p = self.DB - (i * self.DB) % 8,
1513 d, k = 0
1514 if (i-- > 0) {
1515 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1516 r[k++] = d | (self.s << (self.DB - p))
1517 while (i >= 0) {
1518 if (p < 8) {
1519 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1520 d |= self[--i] >> (p += self.DB - 8)
1521 } else {
1522 d = (self[i] >> (p -= 8)) & 0xff
1523 if (p <= 0) {
1524 p += self.DB
1525 --i
1526 }
1527 }
1528 if ((d & 0x80) != 0) d |= -256
1529 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1530 if (k > 0 || d != self.s) r[k++] = d
1531 }
1532 }
1533 return r
1534 }
1535
1536 function bnEquals(a) {
1537 return (this.compareTo(a) == 0)
1538 }
1539
1540 function bnMin(a) {
1541 return (this.compareTo(a) < 0) ? this : a
1542 }
1543
1544 function bnMax(a) {
1545 return (this.compareTo(a) > 0) ? this : a
1546 }
1547
1548 // (protected) r = this op a (bitwise)
1549 function bnpBitwiseTo(a, op, r) {
1550 var self = this
1551 var i, f, m = Math.min(a.t, self.t)
1552 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1553 if (a.t < self.t) {
1554 f = a.s & self.DM
1555 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1556 r.t = self.t
1557 } else {
1558 f = self.s & self.DM
1559 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1560 r.t = a.t
1561 }
1562 r.s = op(self.s, a.s)
1563 r.clamp()
1564 }
1565
1566 // (public) this & a
1567 function op_and(x, y) {
1568 return x & y
1569 }
1570
1571 function bnAnd(a) {
1572 var r = new BigInteger()
1573 this.bitwiseTo(a, op_and, r)
1574 return r
1575 }
1576
1577 // (public) this | a
1578 function op_or(x, y) {
1579 return x | y
1580 }
1581
1582 function bnOr(a) {
1583 var r = new BigInteger()
1584 this.bitwiseTo(a, op_or, r)
1585 return r
1586 }
1587
1588 // (public) this ^ a
1589 function op_xor(x, y) {
1590 return x ^ y
1591 }
1592
1593 function bnXor(a) {
1594 var r = new BigInteger()
1595 this.bitwiseTo(a, op_xor, r)
1596 return r
1597 }
1598
1599 // (public) this & ~a
1600 function op_andnot(x, y) {
1601 return x & ~y
1602 }
1603
1604 function bnAndNot(a) {
1605 var r = new BigInteger()
1606 this.bitwiseTo(a, op_andnot, r)
1607 return r
1608 }
1609
1610 // (public) ~this
1611 function bnNot() {
1612 var r = new BigInteger()
1613 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1614 r.t = this.t
1615 r.s = ~this.s
1616 return r
1617 }
1618
1619 // (public) this << n
1620 function bnShiftLeft(n) {
1621 var r = new BigInteger()
1622 if (n < 0) this.rShiftTo(-n, r)
1623 else this.lShiftTo(n, r)
1624 return r
1625 }
1626
1627 // (public) this >> n
1628 function bnShiftRight(n) {
1629 var r = new BigInteger()
1630 if (n < 0) this.lShiftTo(-n, r)
1631 else this.rShiftTo(n, r)
1632 return r
1633 }
1634
1635 // return index of lowest 1-bit in x, x < 2^31
1636 function lbit(x) {
1637 if (x == 0) return -1
1638 var r = 0
1639 if ((x & 0xffff) == 0) {
1640 x >>= 16
1641 r += 16
1642 }
1643 if ((x & 0xff) == 0) {
1644 x >>= 8
1645 r += 8
1646 }
1647 if ((x & 0xf) == 0) {
1648 x >>= 4
1649 r += 4
1650 }
1651 if ((x & 3) == 0) {
1652 x >>= 2
1653 r += 2
1654 }
1655 if ((x & 1) == 0)++r
1656 return r
1657 }
1658
1659 // (public) returns index of lowest 1-bit (or -1 if none)
1660 function bnGetLowestSetBit() {
1661 for (var i = 0; i < this.t; ++i)
1662 if (this[i] != 0) return i * this.DB + lbit(this[i])
1663 if (this.s < 0) return this.t * this.DB
1664 return -1
1665 }
1666
1667 // return number of 1 bits in x
1668 function cbit(x) {
1669 var r = 0
1670 while (x != 0) {
1671 x &= x - 1
1672 ++r
1673 }
1674 return r
1675 }
1676
1677 // (public) return number of set bits
1678 function bnBitCount() {
1679 var r = 0,
1680 x = this.s & this.DM
1681 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1682 return r
1683 }
1684
1685 // (public) true iff nth bit is set
1686 function bnTestBit(n) {
1687 var j = Math.floor(n / this.DB)
1688 if (j >= this.t) return (this.s != 0)
1689 return ((this[j] & (1 << (n % this.DB))) != 0)
1690 }
1691
1692 // (protected) this op (1<<n)
1693 function bnpChangeBit(n, op) {
1694 var r = BigInteger.ONE.shiftLeft(n)
1695 this.bitwiseTo(r, op, r)
1696 return r
1697 }
1698
1699 // (public) this | (1<<n)
1700 function bnSetBit(n) {
1701 return this.changeBit(n, op_or)
1702 }
1703
1704 // (public) this & ~(1<<n)
1705 function bnClearBit(n) {
1706 return this.changeBit(n, op_andnot)
1707 }
1708
1709 // (public) this ^ (1<<n)
1710 function bnFlipBit(n) {
1711 return this.changeBit(n, op_xor)
1712 }
1713
1714 // (protected) r = this + a
1715 function bnpAddTo(a, r) {
1716 var self = this
1717
1718 var i = 0,
1719 c = 0,
1720 m = Math.min(a.t, self.t)
1721 while (i < m) {
1722 c += self[i] + a[i]
1723 r[i++] = c & self.DM
1724 c >>= self.DB
1725 }
1726 if (a.t < self.t) {
1727 c += a.s
1728 while (i < self.t) {
1729 c += self[i]
1730 r[i++] = c & self.DM
1731 c >>= self.DB
1732 }
1733 c += self.s
1734 } else {
1735 c += self.s
1736 while (i < a.t) {
1737 c += a[i]
1738 r[i++] = c & self.DM
1739 c >>= self.DB
1740 }
1741 c += a.s
1742 }
1743 r.s = (c < 0) ? -1 : 0
1744 if (c > 0) r[i++] = c
1745 else if (c < -1) r[i++] = self.DV + c
1746 r.t = i
1747 r.clamp()
1748 }
1749
1750 // (public) this + a
1751 function bnAdd(a) {
1752 var r = new BigInteger()
1753 this.addTo(a, r)
1754 return r
1755 }
1756
1757 // (public) this - a
1758 function bnSubtract(a) {
1759 var r = new BigInteger()
1760 this.subTo(a, r)
1761 return r
1762 }
1763
1764 // (public) this * a
1765 function bnMultiply(a) {
1766 var r = new BigInteger()
1767 this.multiplyTo(a, r)
1768 return r
1769 }
1770
1771 // (public) this^2
1772 function bnSquare() {
1773 var r = new BigInteger()
1774 this.squareTo(r)
1775 return r
1776 }
1777
1778 // (public) this / a
1779 function bnDivide(a) {
1780 var r = new BigInteger()
1781 this.divRemTo(a, r, null)
1782 return r
1783 }
1784
1785 // (public) this % a
1786 function bnRemainder(a) {
1787 var r = new BigInteger()
1788 this.divRemTo(a, null, r)
1789 return r
1790 }
1791
1792 // (public) [this/a,this%a]
1793 function bnDivideAndRemainder(a) {
1794 var q = new BigInteger(),
1795 r = new BigInteger()
1796 this.divRemTo(a, q, r)
1797 return new Array(q, r)
1798 }
1799
1800 // (protected) this *= n, this >= 0, 1 < n < DV
1801 function bnpDMultiply(n) {
1802 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1803 ++this.t
1804 this.clamp()
1805 }
1806
1807 // (protected) this += n << w words, this >= 0
1808 function bnpDAddOffset(n, w) {
1809 if (n == 0) return
1810 while (this.t <= w) this[this.t++] = 0
1811 this[w] += n
1812 while (this[w] >= this.DV) {
1813 this[w] -= this.DV
1814 if (++w >= this.t) this[this.t++] = 0
1815 ++this[w]
1816 }
1817 }
1818
1819 // A "null" reducer
1820 function NullExp() {}
1821
1822 function nNop(x) {
1823 return x
1824 }
1825
1826 function nMulTo(x, y, r) {
1827 x.multiplyTo(y, r)
1828 }
1829
1830 function nSqrTo(x, r) {
1831 x.squareTo(r)
1832 }
1833
1834 NullExp.prototype.convert = nNop
1835 NullExp.prototype.revert = nNop
1836 NullExp.prototype.mulTo = nMulTo
1837 NullExp.prototype.sqrTo = nSqrTo
1838
1839 // (public) this^e
1840 function bnPow(e) {
1841 return this.exp(e, new NullExp())
1842 }
1843
1844 // (protected) r = lower n words of "this * a", a.t <= n
1845 // "this" should be the larger one if appropriate.
1846 function bnpMultiplyLowerTo(a, n, r) {
1847 var i = Math.min(this.t + a.t, n)
1848 r.s = 0; // assumes a,this >= 0
1849 r.t = i
1850 while (i > 0) r[--i] = 0
1851 var j
1852 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1853 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1854 r.clamp()
1855 }
1856
1857 // (protected) r = "this * a" without lower n words, n > 0
1858 // "this" should be the larger one if appropriate.
1859 function bnpMultiplyUpperTo(a, n, r) {
1860 --n
1861 var i = r.t = this.t + a.t - n
1862 r.s = 0; // assumes a,this >= 0
1863 while (--i >= 0) r[i] = 0
1864 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1865 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1866 r.clamp()
1867 r.drShiftTo(1, r)
1868 }
1869
1870 // Barrett modular reduction
1871 function Barrett(m) {
1872 // setup Barrett
1873 this.r2 = new BigInteger()
1874 this.q3 = new BigInteger()
1875 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1876 this.mu = this.r2.divide(m)
1877 this.m = m
1878 }
1879
1880 function barrettConvert(x) {
1881 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1882 else if (x.compareTo(this.m) < 0) return x
1883 else {
1884 var r = new BigInteger()
1885 x.copyTo(r)
1886 this.reduce(r)
1887 return r
1888 }
1889 }
1890
1891 function barrettRevert(x) {
1892 return x
1893 }
1894
1895 // x = x mod m (HAC 14.42)
1896 function barrettReduce(x) {
1897 var self = this
1898 x.drShiftTo(self.m.t - 1, self.r2)
1899 if (x.t > self.m.t + 1) {
1900 x.t = self.m.t + 1
1901 x.clamp()
1902 }
1903 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1904 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1905 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1906 x.subTo(self.r2, x)
1907 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1908 }
1909
1910 // r = x^2 mod m; x != r
1911 function barrettSqrTo(x, r) {
1912 x.squareTo(r)
1913 this.reduce(r)
1914 }
1915
1916 // r = x*y mod m; x,y != r
1917 function barrettMulTo(x, y, r) {
1918 x.multiplyTo(y, r)
1919 this.reduce(r)
1920 }
1921
1922 Barrett.prototype.convert = barrettConvert
1923 Barrett.prototype.revert = barrettRevert
1924 Barrett.prototype.reduce = barrettReduce
1925 Barrett.prototype.mulTo = barrettMulTo
1926 Barrett.prototype.sqrTo = barrettSqrTo
1927
1928 // (public) this^e % m (HAC 14.85)
1929 function bnModPow(e, m) {
1930 var i = e.bitLength(),
1931 k, r = nbv(1),
1932 z
1933 if (i <= 0) return r
1934 else if (i < 18) k = 1
1935 else if (i < 48) k = 3
1936 else if (i < 144) k = 4
1937 else if (i < 768) k = 5
1938 else k = 6
1939 if (i < 8)
1940 z = new Classic(m)
1941 else if (m.isEven())
1942 z = new Barrett(m)
1943 else
1944 z = new Montgomery(m)
1945
1946 // precomputation
1947 var g = new Array(),
1948 n = 3,
1949 k1 = k - 1,
1950 km = (1 << k) - 1
1951 g[1] = z.convert(this)
1952 if (k > 1) {
1953 var g2 = new BigInteger()
1954 z.sqrTo(g[1], g2)
1955 while (n <= km) {
1956 g[n] = new BigInteger()
1957 z.mulTo(g2, g[n - 2], g[n])
1958 n += 2
1959 }
1960 }
1961
1962 var j = e.t - 1,
1963 w, is1 = true,
1964 r2 = new BigInteger(),
1965 t
1966 i = nbits(e[j]) - 1
1967 while (j >= 0) {
1968 if (i >= k1) w = (e[j] >> (i - k1)) & km
1969 else {
1970 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1971 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1972 }
1973
1974 n = k
1975 while ((w & 1) == 0) {
1976 w >>= 1
1977 --n
1978 }
1979 if ((i -= n) < 0) {
1980 i += this.DB
1981 --j
1982 }
1983 if (is1) { // ret == 1, don't bother squaring or multiplying it
1984 g[w].copyTo(r)
1985 is1 = false
1986 } else {
1987 while (n > 1) {
1988 z.sqrTo(r, r2)
1989 z.sqrTo(r2, r)
1990 n -= 2
1991 }
1992 if (n > 0) z.sqrTo(r, r2)
1993 else {
1994 t = r
1995 r = r2
1996 r2 = t
1997 }
1998 z.mulTo(r2, g[w], r)
1999 }
2000
2001 while (j >= 0 && (e[j] & (1 << i)) == 0) {
2002 z.sqrTo(r, r2)
2003 t = r
2004 r = r2
2005 r2 = t
2006 if (--i < 0) {
2007 i = this.DB - 1
2008 --j
2009 }
2010 }
2011 }
2012 return z.revert(r)
2013 }
2014
2015 // (public) gcd(this,a) (HAC 14.54)
2016 function bnGCD(a) {
2017 var x = (this.s < 0) ? this.negate() : this.clone()
2018 var y = (a.s < 0) ? a.negate() : a.clone()
2019 if (x.compareTo(y) < 0) {
2020 var t = x
2021 x = y
2022 y = t
2023 }
2024 var i = x.getLowestSetBit(),
2025 g = y.getLowestSetBit()
2026 if (g < 0) return x
2027 if (i < g) g = i
2028 if (g > 0) {
2029 x.rShiftTo(g, x)
2030 y.rShiftTo(g, y)
2031 }
2032 while (x.signum() > 0) {
2033 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
2034 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
2035 if (x.compareTo(y) >= 0) {
2036 x.subTo(y, x)
2037 x.rShiftTo(1, x)
2038 } else {
2039 y.subTo(x, y)
2040 y.rShiftTo(1, y)
2041 }
2042 }
2043 if (g > 0) y.lShiftTo(g, y)
2044 return y
2045 }
2046
2047 // (protected) this % n, n < 2^26
2048 function bnpModInt(n) {
2049 if (n <= 0) return 0
2050 var d = this.DV % n,
2051 r = (this.s < 0) ? n - 1 : 0
2052 if (this.t > 0)
2053 if (d == 0) r = this[0] % n
2054 else
2055 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2056 return r
2057 }
2058
2059 // (public) 1/this % m (HAC 14.61)
2060 function bnModInverse(m) {
2061 var ac = m.isEven()
2062 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2063 var u = m.clone(),
2064 v = this.clone()
2065 var a = nbv(1),
2066 b = nbv(0),
2067 c = nbv(0),
2068 d = nbv(1)
2069 while (u.signum() != 0) {
2070 while (u.isEven()) {
2071 u.rShiftTo(1, u)
2072 if (ac) {
2073 if (!a.isEven() || !b.isEven()) {
2074 a.addTo(this, a)
2075 b.subTo(m, b)
2076 }
2077 a.rShiftTo(1, a)
2078 } else if (!b.isEven()) b.subTo(m, b)
2079 b.rShiftTo(1, b)
2080 }
2081 while (v.isEven()) {
2082 v.rShiftTo(1, v)
2083 if (ac) {
2084 if (!c.isEven() || !d.isEven()) {
2085 c.addTo(this, c)
2086 d.subTo(m, d)
2087 }
2088 c.rShiftTo(1, c)
2089 } else if (!d.isEven()) d.subTo(m, d)
2090 d.rShiftTo(1, d)
2091 }
2092 if (u.compareTo(v) >= 0) {
2093 u.subTo(v, u)
2094 if (ac) a.subTo(c, a)
2095 b.subTo(d, b)
2096 } else {
2097 v.subTo(u, v)
2098 if (ac) c.subTo(a, c)
2099 d.subTo(b, d)
2100 }
2101 }
2102 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2103 if (d.compareTo(m) >= 0) return d.subtract(m)
2104 if (d.signum() < 0) d.addTo(m, d)
2105 else return d
2106 if (d.signum() < 0) return d.add(m)
2107 else return d
2108 }
2109
2110 var lowprimes = [
2111 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2112 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2113 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2114 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2115 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2116 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2117 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2118 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2119 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2120 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2121 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2122 ]
2123
2124 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2125
2126 // (public) test primality with certainty >= 1-.5^t
2127 function bnIsProbablePrime(t) {
2128 var i, x = this.abs()
2129 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2130 for (i = 0; i < lowprimes.length; ++i)
2131 if (x[0] == lowprimes[i]) return true
2132 return false
2133 }
2134 if (x.isEven()) return false
2135 i = 1
2136 while (i < lowprimes.length) {
2137 var m = lowprimes[i],
2138 j = i + 1
2139 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2140 m = x.modInt(m)
2141 while (i < j) if (m % lowprimes[i++] == 0) return false
2142 }
2143 return x.millerRabin(t)
2144 }
2145
2146 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2147 function bnpMillerRabin(t) {
2148 var n1 = this.subtract(BigInteger.ONE)
2149 var k = n1.getLowestSetBit()
2150 if (k <= 0) return false
2151 var r = n1.shiftRight(k)
2152 t = (t + 1) >> 1
2153 if (t > lowprimes.length) t = lowprimes.length
2154 var a = new BigInteger(null)
2155 var j, bases = []
2156 for (var i = 0; i < t; ++i) {
2157 for (;;) {
2158 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2159 if (bases.indexOf(j) == -1) break
2160 }
2161 bases.push(j)
2162 a.fromInt(j)
2163 var y = a.modPow(r, this)
2164 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2165 var j = 1
2166 while (j++ < k && y.compareTo(n1) != 0) {
2167 y = y.modPowInt(2, this)
2168 if (y.compareTo(BigInteger.ONE) == 0) return false
2169 }
2170 if (y.compareTo(n1) != 0) return false
2171 }
2172 }
2173 return true
2174 }
2175
2176 // protected
2177 proto.chunkSize = bnpChunkSize
2178 proto.toRadix = bnpToRadix
2179 proto.fromRadix = bnpFromRadix
2180 proto.fromNumber = bnpFromNumber
2181 proto.bitwiseTo = bnpBitwiseTo
2182 proto.changeBit = bnpChangeBit
2183 proto.addTo = bnpAddTo
2184 proto.dMultiply = bnpDMultiply
2185 proto.dAddOffset = bnpDAddOffset
2186 proto.multiplyLowerTo = bnpMultiplyLowerTo
2187 proto.multiplyUpperTo = bnpMultiplyUpperTo
2188 proto.modInt = bnpModInt
2189 proto.millerRabin = bnpMillerRabin
2190
2191 // public
2192 proto.clone = bnClone
2193 proto.intValue = bnIntValue
2194 proto.byteValue = bnByteValue
2195 proto.shortValue = bnShortValue
2196 proto.signum = bnSigNum
2197 proto.toByteArray = bnToByteArray
2198 proto.equals = bnEquals
2199 proto.min = bnMin
2200 proto.max = bnMax
2201 proto.and = bnAnd
2202 proto.or = bnOr
2203 proto.xor = bnXor
2204 proto.andNot = bnAndNot
2205 proto.not = bnNot
2206 proto.shiftLeft = bnShiftLeft
2207 proto.shiftRight = bnShiftRight
2208 proto.getLowestSetBit = bnGetLowestSetBit
2209 proto.bitCount = bnBitCount
2210 proto.testBit = bnTestBit
2211 proto.setBit = bnSetBit
2212 proto.clearBit = bnClearBit
2213 proto.flipBit = bnFlipBit
2214 proto.add = bnAdd
2215 proto.subtract = bnSubtract
2216 proto.multiply = bnMultiply
2217 proto.divide = bnDivide
2218 proto.remainder = bnRemainder
2219 proto.divideAndRemainder = bnDivideAndRemainder
2220 proto.modPow = bnModPow
2221 proto.modInverse = bnModInverse
2222 proto.pow = bnPow
2223 proto.gcd = bnGCD
2224 proto.isProbablePrime = bnIsProbablePrime
2225
2226 // JSBN-specific extension
2227 proto.square = bnSquare
2228
2229 // constants
2230 BigInteger.ZERO = nbv(0)
2231 BigInteger.ONE = nbv(1)
2232 BigInteger.valueOf = nbv
2233
2234 module.exports = BigInteger
2235
2236 },{"../package.json":4}],2:[function(require,module,exports){
2237 (function (Buffer){
2238 // FIXME: Kind of a weird way to throw exceptions, consider removing
2239 var assert = require('assert')
2240 var BigInteger = require('./bigi')
2241
2242 /**
2243 * Turns a byte array into a big integer.
2244 *
2245 * This function will interpret a byte array as a big integer in big
2246 * endian notation.
2247 */
2248 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2249 // BigInteger expects a DER integer conformant byte array
2250 if (byteArray[0] & 0x80) {
2251 return new BigInteger([0].concat(byteArray))
2252 }
2253
2254 return new BigInteger(byteArray)
2255 }
2256
2257 /**
2258 * Returns a byte array representation of the big integer.
2259 *
2260 * This returns the absolute of the contained value in big endian
2261 * form. A value of zero results in an empty array.
2262 */
2263 BigInteger.prototype.toByteArrayUnsigned = function() {
2264 var byteArray = this.toByteArray()
2265 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2266 }
2267
2268 BigInteger.fromDERInteger = function(byteArray) {
2269 return new BigInteger(byteArray)
2270 }
2271
2272 /*
2273 * Converts BigInteger to a DER integer representation.
2274 *
2275 * The format for this value uses the most significant bit as a sign
2276 * bit. If the most significant bit is already set and the integer is
2277 * positive, a 0x00 is prepended.
2278 *
2279 * Examples:
2280 *
2281 * 0 => 0x00
2282 * 1 => 0x01
2283 * -1 => 0xff
2284 * 127 => 0x7f
2285 * -127 => 0x81
2286 * 128 => 0x0080
2287 * -128 => 0x80
2288 * 255 => 0x00ff
2289 * -255 => 0xff01
2290 * 16300 => 0x3fac
2291 * -16300 => 0xc054
2292 * 62300 => 0x00f35c
2293 * -62300 => 0xff0ca4
2294 */
2295 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2296
2297 BigInteger.fromBuffer = function(buffer) {
2298 // BigInteger expects a DER integer conformant byte array
2299 if (buffer[0] & 0x80) {
2300 var byteArray = Array.prototype.slice.call(buffer)
2301
2302 return new BigInteger([0].concat(byteArray))
2303 }
2304
2305 return new BigInteger(buffer)
2306 }
2307
2308 BigInteger.fromHex = function(hex) {
2309 if (hex === '') return BigInteger.ZERO
2310
2311 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2312 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2313 return new BigInteger(hex, 16)
2314 }
2315
2316 BigInteger.prototype.toBuffer = function(size) {
2317 var byteArray = this.toByteArrayUnsigned()
2318 var zeros = []
2319
2320 var padding = size - byteArray.length
2321 while (zeros.length < padding) zeros.push(0)
2322
2323 return new Buffer(zeros.concat(byteArray))
2324 }
2325
2326 BigInteger.prototype.toHex = function(size) {
2327 return this.toBuffer(size).toString('hex')
2328 }
2329
2330 }).call(this,require("buffer").Buffer)
2331 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2332 var BigInteger = require('./bigi')
2333
2334 //addons
2335 require('./convert')
2336
2337 module.exports = BigInteger
2338 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2339 module.exports={
2340 "name": "bigi",
2341 "version": "1.4.0",
2342 "description": "Big integers.",
2343 "keywords": [
2344 "cryptography",
2345 "math",
2346 "bitcoin",
2347 "arbitrary",
2348 "precision",
2349 "arithmetic",
2350 "big",
2351 "integer",
2352 "int",
2353 "number",
2354 "biginteger",
2355 "bigint",
2356 "bignumber",
2357 "decimal",
2358 "float"
2359 ],
2360 "devDependencies": {
2361 "mocha": "^1.20.1",
2362 "jshint": "^2.5.1",
2363 "coveralls": "^2.10.0",
2364 "istanbul": "^0.2.11"
2365 },
2366 "repository": {
2367 "url": "https://github.com/cryptocoinjs/bigi",
2368 "type": "git"
2369 },
2370 "main": "./lib/index.js",
2371 "scripts": {
2372 "test": "_mocha -- test/*.js",
2373 "jshint": "jshint --config jshint.json lib/*.js ; true",
2374 "unit": "mocha",
2375 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2376 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2377 },
2378 "dependencies": {},
2379 "testling": {
2380 "files": "test/*.js",
2381 "harness": "mocha",
2382 "browsers": [
2383 "ie/9..latest",
2384 "firefox/latest",
2385 "chrome/latest",
2386 "safari/6.0..latest",
2387 "iphone/6.0..latest",
2388 "android-browser/4.2..latest"
2389 ]
2390 },
2391 "bugs": {
2392 "url": "https://github.com/cryptocoinjs/bigi/issues"
2393 },
2394 "homepage": "https://github.com/cryptocoinjs/bigi",
2395 "_id": "bigi@1.4.0",
2396 "dist": {
2397 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2398 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2399 },
2400 "_from": "bigi@^1.4.0",
2401 "_npmVersion": "1.4.3",
2402 "_npmUser": {
2403 "name": "jp",
2404 "email": "jprichardson@gmail.com"
2405 },
2406 "maintainers": [
2407 {
2408 "name": "jp",
2409 "email": "jprichardson@gmail.com"
2410 },
2411 {
2412 "name": "midnightlightning",
2413 "email": "boydb@midnightdesign.ws"
2414 },
2415 {
2416 "name": "sidazhang",
2417 "email": "sidazhang89@gmail.com"
2418 },
2419 {
2420 "name": "nadav",
2421 "email": "npm@shesek.info"
2422 }
2423 ],
2424 "directories": {},
2425 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2426 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2427 }
2428
2429 },{}],5:[function(require,module,exports){
2430 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2431 //
2432 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2433 //
2434 // Originally from narwhal.js (http://narwhaljs.org)
2435 // Copyright (c) 2009 Thomas Robinson <280north.com>
2436 //
2437 // Permission is hereby granted, free of charge, to any person obtaining a copy
2438 // of this software and associated documentation files (the 'Software'), to
2439 // deal in the Software without restriction, including without limitation the
2440 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2441 // sell copies of the Software, and to permit persons to whom the Software is
2442 // furnished to do so, subject to the following conditions:
2443 //
2444 // The above copyright notice and this permission notice shall be included in
2445 // all copies or substantial portions of the Software.
2446 //
2447 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2448 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2449 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2450 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2451 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2452 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2453
2454 // when used in node, this will actually load the util module we depend on
2455 // versus loading the builtin util module as happens otherwise
2456 // this is a bug in node module loading as far as I am concerned
2457 var util = require('util/');
2458
2459 var pSlice = Array.prototype.slice;
2460 var hasOwn = Object.prototype.hasOwnProperty;
2461
2462 // 1. The assert module provides functions that throw
2463 // AssertionError's when particular conditions are not met. The
2464 // assert module must conform to the following interface.
2465
2466 var assert = module.exports = ok;
2467
2468 // 2. The AssertionError is defined in assert.
2469 // new assert.AssertionError({ message: message,
2470 // actual: actual,
2471 // expected: expected })
2472
2473 assert.AssertionError = function AssertionError(options) {
2474 this.name = 'AssertionError';
2475 this.actual = options.actual;
2476 this.expected = options.expected;
2477 this.operator = options.operator;
2478 if (options.message) {
2479 this.message = options.message;
2480 this.generatedMessage = false;
2481 } else {
2482 this.message = getMessage(this);
2483 this.generatedMessage = true;
2484 }
2485 var stackStartFunction = options.stackStartFunction || fail;
2486
2487 if (Error.captureStackTrace) {
2488 Error.captureStackTrace(this, stackStartFunction);
2489 }
2490 else {
2491 // non v8 browsers so we can have a stacktrace
2492 var err = new Error();
2493 if (err.stack) {
2494 var out = err.stack;
2495
2496 // try to strip useless frames
2497 var fn_name = stackStartFunction.name;
2498 var idx = out.indexOf('\n' + fn_name);
2499 if (idx >= 0) {
2500 // once we have located the function frame
2501 // we need to strip out everything before it (and its line)
2502 var next_line = out.indexOf('\n', idx + 1);
2503 out = out.substring(next_line + 1);
2504 }
2505
2506 this.stack = out;
2507 }
2508 }
2509 };
2510
2511 // assert.AssertionError instanceof Error
2512 util.inherits(assert.AssertionError, Error);
2513
2514 function replacer(key, value) {
2515 if (util.isUndefined(value)) {
2516 return '' + value;
2517 }
2518 if (util.isNumber(value) && !isFinite(value)) {
2519 return value.toString();
2520 }
2521 if (util.isFunction(value) || util.isRegExp(value)) {
2522 return value.toString();
2523 }
2524 return value;
2525 }
2526
2527 function truncate(s, n) {
2528 if (util.isString(s)) {
2529 return s.length < n ? s : s.slice(0, n);
2530 } else {
2531 return s;
2532 }
2533 }
2534
2535 function getMessage(self) {
2536 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2537 self.operator + ' ' +
2538 truncate(JSON.stringify(self.expected, replacer), 128);
2539 }
2540
2541 // At present only the three keys mentioned above are used and
2542 // understood by the spec. Implementations or sub modules can pass
2543 // other keys to the AssertionError's constructor - they will be
2544 // ignored.
2545
2546 // 3. All of the following functions must throw an AssertionError
2547 // when a corresponding condition is not met, with a message that
2548 // may be undefined if not provided. All assertion methods provide
2549 // both the actual and expected values to the assertion error for
2550 // display purposes.
2551
2552 function fail(actual, expected, message, operator, stackStartFunction) {
2553 throw new assert.AssertionError({
2554 message: message,
2555 actual: actual,
2556 expected: expected,
2557 operator: operator,
2558 stackStartFunction: stackStartFunction
2559 });
2560 }
2561
2562 // EXTENSION! allows for well behaved errors defined elsewhere.
2563 assert.fail = fail;
2564
2565 // 4. Pure assertion tests whether a value is truthy, as determined
2566 // by !!guard.
2567 // assert.ok(guard, message_opt);
2568 // This statement is equivalent to assert.equal(true, !!guard,
2569 // message_opt);. To test strictly for the value true, use
2570 // assert.strictEqual(true, guard, message_opt);.
2571
2572 function ok(value, message) {
2573 if (!value) fail(value, true, message, '==', assert.ok);
2574 }
2575 assert.ok = ok;
2576
2577 // 5. The equality assertion tests shallow, coercive equality with
2578 // ==.
2579 // assert.equal(actual, expected, message_opt);
2580
2581 assert.equal = function equal(actual, expected, message) {
2582 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2583 };
2584
2585 // 6. The non-equality assertion tests for whether two objects are not equal
2586 // with != assert.notEqual(actual, expected, message_opt);
2587
2588 assert.notEqual = function notEqual(actual, expected, message) {
2589 if (actual == expected) {
2590 fail(actual, expected, message, '!=', assert.notEqual);
2591 }
2592 };
2593
2594 // 7. The equivalence assertion tests a deep equality relation.
2595 // assert.deepEqual(actual, expected, message_opt);
2596
2597 assert.deepEqual = function deepEqual(actual, expected, message) {
2598 if (!_deepEqual(actual, expected)) {
2599 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2600 }
2601 };
2602
2603 function _deepEqual(actual, expected) {
2604 // 7.1. All identical values are equivalent, as determined by ===.
2605 if (actual === expected) {
2606 return true;
2607
2608 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2609 if (actual.length != expected.length) return false;
2610
2611 for (var i = 0; i < actual.length; i++) {
2612 if (actual[i] !== expected[i]) return false;
2613 }
2614
2615 return true;
2616
2617 // 7.2. If the expected value is a Date object, the actual value is
2618 // equivalent if it is also a Date object that refers to the same time.
2619 } else if (util.isDate(actual) && util.isDate(expected)) {
2620 return actual.getTime() === expected.getTime();
2621
2622 // 7.3 If the expected value is a RegExp object, the actual value is
2623 // equivalent if it is also a RegExp object with the same source and
2624 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2625 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2626 return actual.source === expected.source &&
2627 actual.global === expected.global &&
2628 actual.multiline === expected.multiline &&
2629 actual.lastIndex === expected.lastIndex &&
2630 actual.ignoreCase === expected.ignoreCase;
2631
2632 // 7.4. Other pairs that do not both pass typeof value == 'object',
2633 // equivalence is determined by ==.
2634 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2635 return actual == expected;
2636
2637 // 7.5 For all other Object pairs, including Array objects, equivalence is
2638 // determined by having the same number of owned properties (as verified
2639 // with Object.prototype.hasOwnProperty.call), the same set of keys
2640 // (although not necessarily the same order), equivalent values for every
2641 // corresponding key, and an identical 'prototype' property. Note: this
2642 // accounts for both named and indexed properties on Arrays.
2643 } else {
2644 return objEquiv(actual, expected);
2645 }
2646 }
2647
2648 function isArguments(object) {
2649 return Object.prototype.toString.call(object) == '[object Arguments]';
2650 }
2651
2652 function objEquiv(a, b) {
2653 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2654 return false;
2655 // an identical 'prototype' property.
2656 if (a.prototype !== b.prototype) return false;
2657 // if one is a primitive, the other must be same
2658 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2659 return a === b;
2660 }
2661 var aIsArgs = isArguments(a),
2662 bIsArgs = isArguments(b);
2663 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2664 return false;
2665 if (aIsArgs) {
2666 a = pSlice.call(a);
2667 b = pSlice.call(b);
2668 return _deepEqual(a, b);
2669 }
2670 var ka = objectKeys(a),
2671 kb = objectKeys(b),
2672 key, i;
2673 // having the same number of owned properties (keys incorporates
2674 // hasOwnProperty)
2675 if (ka.length != kb.length)
2676 return false;
2677 //the same set of keys (although not necessarily the same order),
2678 ka.sort();
2679 kb.sort();
2680 //~~~cheap key test
2681 for (i = ka.length - 1; i >= 0; i--) {
2682 if (ka[i] != kb[i])
2683 return false;
2684 }
2685 //equivalent values for every corresponding key, and
2686 //~~~possibly expensive deep test
2687 for (i = ka.length - 1; i >= 0; i--) {
2688 key = ka[i];
2689 if (!_deepEqual(a[key], b[key])) return false;
2690 }
2691 return true;
2692 }
2693
2694 // 8. The non-equivalence assertion tests for any deep inequality.
2695 // assert.notDeepEqual(actual, expected, message_opt);
2696
2697 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2698 if (_deepEqual(actual, expected)) {
2699 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2700 }
2701 };
2702
2703 // 9. The strict equality assertion tests strict equality, as determined by ===.
2704 // assert.strictEqual(actual, expected, message_opt);
2705
2706 assert.strictEqual = function strictEqual(actual, expected, message) {
2707 if (actual !== expected) {
2708 fail(actual, expected, message, '===', assert.strictEqual);
2709 }
2710 };
2711
2712 // 10. The strict non-equality assertion tests for strict inequality, as
2713 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2714
2715 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2716 if (actual === expected) {
2717 fail(actual, expected, message, '!==', assert.notStrictEqual);
2718 }
2719 };
2720
2721 function expectedException(actual, expected) {
2722 if (!actual || !expected) {
2723 return false;
2724 }
2725
2726 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2727 return expected.test(actual);
2728 } else if (actual instanceof expected) {
2729 return true;
2730 } else if (expected.call({}, actual) === true) {
2731 return true;
2732 }
2733
2734 return false;
2735 }
2736
2737 function _throws(shouldThrow, block, expected, message) {
2738 var actual;
2739
2740 if (util.isString(expected)) {
2741 message = expected;
2742 expected = null;
2743 }
2744
2745 try {
2746 block();
2747 } catch (e) {
2748 actual = e;
2749 }
2750
2751 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2752 (message ? ' ' + message : '.');
2753
2754 if (shouldThrow && !actual) {
2755 fail(actual, expected, 'Missing expected exception' + message);
2756 }
2757
2758 if (!shouldThrow && expectedException(actual, expected)) {
2759 fail(actual, expected, 'Got unwanted exception' + message);
2760 }
2761
2762 if ((shouldThrow && actual && expected &&
2763 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2764 throw actual;
2765 }
2766 }
2767
2768 // 11. Expected to throw an error:
2769 // assert.throws(block, Error_opt, message_opt);
2770
2771 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2772 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2773 };
2774
2775 // EXTENSION! This is annoying to write outside this module.
2776 assert.doesNotThrow = function(block, /*optional*/message) {
2777 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2778 };
2779
2780 assert.ifError = function(err) { if (err) {throw err;}};
2781
2782 var objectKeys = Object.keys || function (obj) {
2783 var keys = [];
2784 for (var key in obj) {
2785 if (hasOwn.call(obj, key)) keys.push(key);
2786 }
2787 return keys;
2788 };
2789
2790 },{"util/":29}],6:[function(require,module,exports){
2791
2792 },{}],7:[function(require,module,exports){
2793 /*!
2794 * The buffer module from node.js, for the browser.
2795 *
2796 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2797 * @license MIT
2798 */
2799
2800 var base64 = require('base64-js')
2801 var ieee754 = require('ieee754')
2802 var isArray = require('is-array')
2803
2804 exports.Buffer = Buffer
2805 exports.SlowBuffer = SlowBuffer
2806 exports.INSPECT_MAX_BYTES = 50
2807 Buffer.poolSize = 8192 // not used by this implementation
2808
2809 var rootParent = {}
2810
2811 /**
2812 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2813 * === true Use Uint8Array implementation (fastest)
2814 * === false Use Object implementation (most compatible, even IE6)
2815 *
2816 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2817 * Opera 11.6+, iOS 4.2+.
2818 *
2819 * Due to various browser bugs, sometimes the Object implementation will be used even
2820 * when the browser supports typed arrays.
2821 *
2822 * Note:
2823 *
2824 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2825 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2826 *
2827 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2828 * on objects.
2829 *
2830 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2831 *
2832 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2833 * incorrect length in some situations.
2834
2835 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2836 * get the Object implementation, which is slower but behaves correctly.
2837 */
2838 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2839 function Bar () {}
2840 try {
2841 var arr = new Uint8Array(1)
2842 arr.foo = function () { return 42 }
2843 arr.constructor = Bar
2844 return arr.foo() === 42 && // typed array instances can be augmented
2845 arr.constructor === Bar && // constructor can be set
2846 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2847 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2848 } catch (e) {
2849 return false
2850 }
2851 })()
2852
2853 function kMaxLength () {
2854 return Buffer.TYPED_ARRAY_SUPPORT
2855 ? 0x7fffffff
2856 : 0x3fffffff
2857 }
2858
2859 /**
2860 * Class: Buffer
2861 * =============
2862 *
2863 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2864 * with function properties for all the node `Buffer` API functions. We use
2865 * `Uint8Array` so that square bracket notation works as expected -- it returns
2866 * a single octet.
2867 *
2868 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2869 * prototype.
2870 */
2871 function Buffer (arg) {
2872 if (!(this instanceof Buffer)) {
2873 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2874 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2875 return new Buffer(arg)
2876 }
2877
2878 this.length = 0
2879 this.parent = undefined
2880
2881 // Common case.
2882 if (typeof arg === 'number') {
2883 return fromNumber(this, arg)
2884 }
2885
2886 // Slightly less common case.
2887 if (typeof arg === 'string') {
2888 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2889 }
2890
2891 // Unusual.
2892 return fromObject(this, arg)
2893 }
2894
2895 function fromNumber (that, length) {
2896 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2897 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2898 for (var i = 0; i < length; i++) {
2899 that[i] = 0
2900 }
2901 }
2902 return that
2903 }
2904
2905 function fromString (that, string, encoding) {
2906 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2907
2908 // Assumption: byteLength() return value is always < kMaxLength.
2909 var length = byteLength(string, encoding) | 0
2910 that = allocate(that, length)
2911
2912 that.write(string, encoding)
2913 return that
2914 }
2915
2916 function fromObject (that, object) {
2917 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2918
2919 if (isArray(object)) return fromArray(that, object)
2920
2921 if (object == null) {
2922 throw new TypeError('must start with number, buffer, array or string')
2923 }
2924
2925 if (typeof ArrayBuffer !== 'undefined') {
2926 if (object.buffer instanceof ArrayBuffer) {
2927 return fromTypedArray(that, object)
2928 }
2929 if (object instanceof ArrayBuffer) {
2930 return fromArrayBuffer(that, object)
2931 }
2932 }
2933
2934 if (object.length) return fromArrayLike(that, object)
2935
2936 return fromJsonObject(that, object)
2937 }
2938
2939 function fromBuffer (that, buffer) {
2940 var length = checked(buffer.length) | 0
2941 that = allocate(that, length)
2942 buffer.copy(that, 0, 0, length)
2943 return that
2944 }
2945
2946 function fromArray (that, array) {
2947 var length = checked(array.length) | 0
2948 that = allocate(that, length)
2949 for (var i = 0; i < length; i += 1) {
2950 that[i] = array[i] & 255
2951 }
2952 return that
2953 }
2954
2955 // Duplicate of fromArray() to keep fromArray() monomorphic.
2956 function fromTypedArray (that, array) {
2957 var length = checked(array.length) | 0
2958 that = allocate(that, length)
2959 // Truncating the elements is probably not what people expect from typed
2960 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2961 // of the old Buffer constructor.
2962 for (var i = 0; i < length; i += 1) {
2963 that[i] = array[i] & 255
2964 }
2965 return that
2966 }
2967
2968 function fromArrayBuffer (that, array) {
2969 if (Buffer.TYPED_ARRAY_SUPPORT) {
2970 // Return an augmented `Uint8Array` instance, for best performance
2971 array.byteLength
2972 that = Buffer._augment(new Uint8Array(array))
2973 } else {
2974 // Fallback: Return an object instance of the Buffer class
2975 that = fromTypedArray(that, new Uint8Array(array))
2976 }
2977 return that
2978 }
2979
2980 function fromArrayLike (that, array) {
2981 var length = checked(array.length) | 0
2982 that = allocate(that, length)
2983 for (var i = 0; i < length; i += 1) {
2984 that[i] = array[i] & 255
2985 }
2986 return that
2987 }
2988
2989 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2990 // Returns a zero-length buffer for inputs that don't conform to the spec.
2991 function fromJsonObject (that, object) {
2992 var array
2993 var length = 0
2994
2995 if (object.type === 'Buffer' && isArray(object.data)) {
2996 array = object.data
2997 length = checked(array.length) | 0
2998 }
2999 that = allocate(that, length)
3000
3001 for (var i = 0; i < length; i += 1) {
3002 that[i] = array[i] & 255
3003 }
3004 return that
3005 }
3006
3007 function allocate (that, length) {
3008 if (Buffer.TYPED_ARRAY_SUPPORT) {
3009 // Return an augmented `Uint8Array` instance, for best performance
3010 that = Buffer._augment(new Uint8Array(length))
3011 } else {
3012 // Fallback: Return an object instance of the Buffer class
3013 that.length = length
3014 that._isBuffer = true
3015 }
3016
3017 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
3018 if (fromPool) that.parent = rootParent
3019
3020 return that
3021 }
3022
3023 function checked (length) {
3024 // Note: cannot use `length < kMaxLength` here because that fails when
3025 // length is NaN (which is otherwise coerced to zero.)
3026 if (length >= kMaxLength()) {
3027 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
3028 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3029 }
3030 return length | 0
3031 }
3032
3033 function SlowBuffer (subject, encoding) {
3034 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3035
3036 var buf = new Buffer(subject, encoding)
3037 delete buf.parent
3038 return buf
3039 }
3040
3041 Buffer.isBuffer = function isBuffer (b) {
3042 return !!(b != null && b._isBuffer)
3043 }
3044
3045 Buffer.compare = function compare (a, b) {
3046 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
3047 throw new TypeError('Arguments must be Buffers')
3048 }
3049
3050 if (a === b) return 0
3051
3052 var x = a.length
3053 var y = b.length
3054
3055 var i = 0
3056 var len = Math.min(x, y)
3057 while (i < len) {
3058 if (a[i] !== b[i]) break
3059
3060 ++i
3061 }
3062
3063 if (i !== len) {
3064 x = a[i]
3065 y = b[i]
3066 }
3067
3068 if (x < y) return -1
3069 if (y < x) return 1
3070 return 0
3071 }
3072
3073 Buffer.isEncoding = function isEncoding (encoding) {
3074 switch (String(encoding).toLowerCase()) {
3075 case 'hex':
3076 case 'utf8':
3077 case 'utf-8':
3078 case 'ascii':
3079 case 'binary':
3080 case 'base64':
3081 case 'raw':
3082 case 'ucs2':
3083 case 'ucs-2':
3084 case 'utf16le':
3085 case 'utf-16le':
3086 return true
3087 default:
3088 return false
3089 }
3090 }
3091
3092 Buffer.concat = function concat (list, length) {
3093 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3094
3095 if (list.length === 0) {
3096 return new Buffer(0)
3097 }
3098
3099 var i
3100 if (length === undefined) {
3101 length = 0
3102 for (i = 0; i < list.length; i++) {
3103 length += list[i].length
3104 }
3105 }
3106
3107 var buf = new Buffer(length)
3108 var pos = 0
3109 for (i = 0; i < list.length; i++) {
3110 var item = list[i]
3111 item.copy(buf, pos)
3112 pos += item.length
3113 }
3114 return buf
3115 }
3116
3117 function byteLength (string, encoding) {
3118 if (typeof string !== 'string') string = '' + string
3119
3120 var len = string.length
3121 if (len === 0) return 0
3122
3123 // Use a for loop to avoid recursion
3124 var loweredCase = false
3125 for (;;) {
3126 switch (encoding) {
3127 case 'ascii':
3128 case 'binary':
3129 // Deprecated
3130 case 'raw':
3131 case 'raws':
3132 return len
3133 case 'utf8':
3134 case 'utf-8':
3135 return utf8ToBytes(string).length
3136 case 'ucs2':
3137 case 'ucs-2':
3138 case 'utf16le':
3139 case 'utf-16le':
3140 return len * 2
3141 case 'hex':
3142 return len >>> 1
3143 case 'base64':
3144 return base64ToBytes(string).length
3145 default:
3146 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3147 encoding = ('' + encoding).toLowerCase()
3148 loweredCase = true
3149 }
3150 }
3151 }
3152 Buffer.byteLength = byteLength
3153
3154 // pre-set for values that may exist in the future
3155 Buffer.prototype.length = undefined
3156 Buffer.prototype.parent = undefined
3157
3158 function slowToString (encoding, start, end) {
3159 var loweredCase = false
3160
3161 start = start | 0
3162 end = end === undefined || end === Infinity ? this.length : end | 0
3163
3164 if (!encoding) encoding = 'utf8'
3165 if (start < 0) start = 0
3166 if (end > this.length) end = this.length
3167 if (end <= start) return ''
3168
3169 while (true) {
3170 switch (encoding) {
3171 case 'hex':
3172 return hexSlice(this, start, end)
3173
3174 case 'utf8':
3175 case 'utf-8':
3176 return utf8Slice(this, start, end)
3177
3178 case 'ascii':
3179 return asciiSlice(this, start, end)
3180
3181 case 'binary':
3182 return binarySlice(this, start, end)
3183
3184 case 'base64':
3185 return base64Slice(this, start, end)
3186
3187 case 'ucs2':
3188 case 'ucs-2':
3189 case 'utf16le':
3190 case 'utf-16le':
3191 return utf16leSlice(this, start, end)
3192
3193 default:
3194 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3195 encoding = (encoding + '').toLowerCase()
3196 loweredCase = true
3197 }
3198 }
3199 }
3200
3201 Buffer.prototype.toString = function toString () {
3202 var length = this.length | 0
3203 if (length === 0) return ''
3204 if (arguments.length === 0) return utf8Slice(this, 0, length)
3205 return slowToString.apply(this, arguments)
3206 }
3207
3208 Buffer.prototype.equals = function equals (b) {
3209 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3210 if (this === b) return true
3211 return Buffer.compare(this, b) === 0
3212 }
3213
3214 Buffer.prototype.inspect = function inspect () {
3215 var str = ''
3216 var max = exports.INSPECT_MAX_BYTES
3217 if (this.length > 0) {
3218 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3219 if (this.length > max) str += ' ... '
3220 }
3221 return '<Buffer ' + str + '>'
3222 }
3223
3224 Buffer.prototype.compare = function compare (b) {
3225 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3226 if (this === b) return 0
3227 return Buffer.compare(this, b)
3228 }
3229
3230 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3231 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3232 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3233 byteOffset >>= 0
3234
3235 if (this.length === 0) return -1
3236 if (byteOffset >= this.length) return -1
3237
3238 // Negative offsets start from the end of the buffer
3239 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3240
3241 if (typeof val === 'string') {
3242 if (val.length === 0) return -1 // special case: looking for empty string always fails
3243 return String.prototype.indexOf.call(this, val, byteOffset)
3244 }
3245 if (Buffer.isBuffer(val)) {
3246 return arrayIndexOf(this, val, byteOffset)
3247 }
3248 if (typeof val === 'number') {
3249 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3250 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3251 }
3252 return arrayIndexOf(this, [ val ], byteOffset)
3253 }
3254
3255 function arrayIndexOf (arr, val, byteOffset) {
3256 var foundIndex = -1
3257 for (var i = 0; byteOffset + i < arr.length; i++) {
3258 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3259 if (foundIndex === -1) foundIndex = i
3260 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3261 } else {
3262 foundIndex = -1
3263 }
3264 }
3265 return -1
3266 }
3267
3268 throw new TypeError('val must be string, number or Buffer')
3269 }
3270
3271 // `get` is deprecated
3272 Buffer.prototype.get = function get (offset) {
3273 console.log('.get() is deprecated. Access using array indexes instead.')
3274 return this.readUInt8(offset)
3275 }
3276
3277 // `set` is deprecated
3278 Buffer.prototype.set = function set (v, offset) {
3279 console.log('.set() is deprecated. Access using array indexes instead.')
3280 return this.writeUInt8(v, offset)
3281 }
3282
3283 function hexWrite (buf, string, offset, length) {
3284 offset = Number(offset) || 0
3285 var remaining = buf.length - offset
3286 if (!length) {
3287 length = remaining
3288 } else {
3289 length = Number(length)
3290 if (length > remaining) {
3291 length = remaining
3292 }
3293 }
3294
3295 // must be an even number of digits
3296 var strLen = string.length
3297 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3298
3299 if (length > strLen / 2) {
3300 length = strLen / 2
3301 }
3302 for (var i = 0; i < length; i++) {
3303 var parsed = parseInt(string.substr(i * 2, 2), 16)
3304 if (isNaN(parsed)) throw new Error('Invalid hex string')
3305 buf[offset + i] = parsed
3306 }
3307 return i
3308 }
3309
3310 function utf8Write (buf, string, offset, length) {
3311 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3312 }
3313
3314 function asciiWrite (buf, string, offset, length) {
3315 return blitBuffer(asciiToBytes(string), buf, offset, length)
3316 }
3317
3318 function binaryWrite (buf, string, offset, length) {
3319 return asciiWrite(buf, string, offset, length)
3320 }
3321
3322 function base64Write (buf, string, offset, length) {
3323 return blitBuffer(base64ToBytes(string), buf, offset, length)
3324 }
3325
3326 function ucs2Write (buf, string, offset, length) {
3327 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3328 }
3329
3330 Buffer.prototype.write = function write (string, offset, length, encoding) {
3331 // Buffer#write(string)
3332 if (offset === undefined) {
3333 encoding = 'utf8'
3334 length = this.length
3335 offset = 0
3336 // Buffer#write(string, encoding)
3337 } else if (length === undefined && typeof offset === 'string') {
3338 encoding = offset
3339 length = this.length
3340 offset = 0
3341 // Buffer#write(string, offset[, length][, encoding])
3342 } else if (isFinite(offset)) {
3343 offset = offset | 0
3344 if (isFinite(length)) {
3345 length = length | 0
3346 if (encoding === undefined) encoding = 'utf8'
3347 } else {
3348 encoding = length
3349 length = undefined
3350 }
3351 // legacy write(string, encoding, offset, length) - remove in v0.13
3352 } else {
3353 var swap = encoding
3354 encoding = offset
3355 offset = length | 0
3356 length = swap
3357 }
3358
3359 var remaining = this.length - offset
3360 if (length === undefined || length > remaining) length = remaining
3361
3362 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3363 throw new RangeError('attempt to write outside buffer bounds')
3364 }
3365
3366 if (!encoding) encoding = 'utf8'
3367
3368 var loweredCase = false
3369 for (;;) {
3370 switch (encoding) {
3371 case 'hex':
3372 return hexWrite(this, string, offset, length)
3373
3374 case 'utf8':
3375 case 'utf-8':
3376 return utf8Write(this, string, offset, length)
3377
3378 case 'ascii':
3379 return asciiWrite(this, string, offset, length)
3380
3381 case 'binary':
3382 return binaryWrite(this, string, offset, length)
3383
3384 case 'base64':
3385 // Warning: maxLength not taken into account in base64Write
3386 return base64Write(this, string, offset, length)
3387
3388 case 'ucs2':
3389 case 'ucs-2':
3390 case 'utf16le':
3391 case 'utf-16le':
3392 return ucs2Write(this, string, offset, length)
3393
3394 default:
3395 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3396 encoding = ('' + encoding).toLowerCase()
3397 loweredCase = true
3398 }
3399 }
3400 }
3401
3402 Buffer.prototype.toJSON = function toJSON () {
3403 return {
3404 type: 'Buffer',
3405 data: Array.prototype.slice.call(this._arr || this, 0)
3406 }
3407 }
3408
3409 function base64Slice (buf, start, end) {
3410 if (start === 0 && end === buf.length) {
3411 return base64.fromByteArray(buf)
3412 } else {
3413 return base64.fromByteArray(buf.slice(start, end))
3414 }
3415 }
3416
3417 function utf8Slice (buf, start, end) {
3418 end = Math.min(buf.length, end)
3419 var firstByte
3420 var secondByte
3421 var thirdByte
3422 var fourthByte
3423 var bytesPerSequence
3424 var tempCodePoint
3425 var codePoint
3426 var res = []
3427 var i = start
3428
3429 for (; i < end; i += bytesPerSequence) {
3430 firstByte = buf[i]
3431 codePoint = 0xFFFD
3432
3433 if (firstByte > 0xEF) {
3434 bytesPerSequence = 4
3435 } else if (firstByte > 0xDF) {
3436 bytesPerSequence = 3
3437 } else if (firstByte > 0xBF) {
3438 bytesPerSequence = 2
3439 } else {
3440 bytesPerSequence = 1
3441 }
3442
3443 if (i + bytesPerSequence <= end) {
3444 switch (bytesPerSequence) {
3445 case 1:
3446 if (firstByte < 0x80) {
3447 codePoint = firstByte
3448 }
3449 break
3450 case 2:
3451 secondByte = buf[i + 1]
3452 if ((secondByte & 0xC0) === 0x80) {
3453 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3454 if (tempCodePoint > 0x7F) {
3455 codePoint = tempCodePoint
3456 }
3457 }
3458 break
3459 case 3:
3460 secondByte = buf[i + 1]
3461 thirdByte = buf[i + 2]
3462 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3463 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3464 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3465 codePoint = tempCodePoint
3466 }
3467 }
3468 break
3469 case 4:
3470 secondByte = buf[i + 1]
3471 thirdByte = buf[i + 2]
3472 fourthByte = buf[i + 3]
3473 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3474 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3475 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3476 codePoint = tempCodePoint
3477 }
3478 }
3479 }
3480 }
3481
3482 if (codePoint === 0xFFFD) {
3483 // we generated an invalid codePoint so make sure to only advance by 1 byte
3484 bytesPerSequence = 1
3485 } else if (codePoint > 0xFFFF) {
3486 // encode to utf16 (surrogate pair dance)
3487 codePoint -= 0x10000
3488 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3489 codePoint = 0xDC00 | codePoint & 0x3FF
3490 }
3491
3492 res.push(codePoint)
3493 }
3494
3495 return String.fromCharCode.apply(String, res)
3496 }
3497
3498 function asciiSlice (buf, start, end) {
3499 var ret = ''
3500 end = Math.min(buf.length, end)
3501
3502 for (var i = start; i < end; i++) {
3503 ret += String.fromCharCode(buf[i] & 0x7F)
3504 }
3505 return ret
3506 }
3507
3508 function binarySlice (buf, start, end) {
3509 var ret = ''
3510 end = Math.min(buf.length, end)
3511
3512 for (var i = start; i < end; i++) {
3513 ret += String.fromCharCode(buf[i])
3514 }
3515 return ret
3516 }
3517
3518 function hexSlice (buf, start, end) {
3519 var len = buf.length
3520
3521 if (!start || start < 0) start = 0
3522 if (!end || end < 0 || end > len) end = len
3523
3524 var out = ''
3525 for (var i = start; i < end; i++) {
3526 out += toHex(buf[i])
3527 }
3528 return out
3529 }
3530
3531 function utf16leSlice (buf, start, end) {
3532 var bytes = buf.slice(start, end)
3533 var res = ''
3534 for (var i = 0; i < bytes.length; i += 2) {
3535 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3536 }
3537 return res
3538 }
3539
3540 Buffer.prototype.slice = function slice (start, end) {
3541 var len = this.length
3542 start = ~~start
3543 end = end === undefined ? len : ~~end
3544
3545 if (start < 0) {
3546 start += len
3547 if (start < 0) start = 0
3548 } else if (start > len) {
3549 start = len
3550 }
3551
3552 if (end < 0) {
3553 end += len
3554 if (end < 0) end = 0
3555 } else if (end > len) {
3556 end = len
3557 }
3558
3559 if (end < start) end = start
3560
3561 var newBuf
3562 if (Buffer.TYPED_ARRAY_SUPPORT) {
3563 newBuf = Buffer._augment(this.subarray(start, end))
3564 } else {
3565 var sliceLen = end - start
3566 newBuf = new Buffer(sliceLen, undefined)
3567 for (var i = 0; i < sliceLen; i++) {
3568 newBuf[i] = this[i + start]
3569 }
3570 }
3571
3572 if (newBuf.length) newBuf.parent = this.parent || this
3573
3574 return newBuf
3575 }
3576
3577 /*
3578 * Need to make sure that buffer isn't trying to write out of bounds.
3579 */
3580 function checkOffset (offset, ext, length) {
3581 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3582 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3583 }
3584
3585 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3586 offset = offset | 0
3587 byteLength = byteLength | 0
3588 if (!noAssert) checkOffset(offset, byteLength, this.length)
3589
3590 var val = this[offset]
3591 var mul = 1
3592 var i = 0
3593 while (++i < byteLength && (mul *= 0x100)) {
3594 val += this[offset + i] * mul
3595 }
3596
3597 return val
3598 }
3599
3600 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3601 offset = offset | 0
3602 byteLength = byteLength | 0
3603 if (!noAssert) {
3604 checkOffset(offset, byteLength, this.length)
3605 }
3606
3607 var val = this[offset + --byteLength]
3608 var mul = 1
3609 while (byteLength > 0 && (mul *= 0x100)) {
3610 val += this[offset + --byteLength] * mul
3611 }
3612
3613 return val
3614 }
3615
3616 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3617 if (!noAssert) checkOffset(offset, 1, this.length)
3618 return this[offset]
3619 }
3620
3621 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3622 if (!noAssert) checkOffset(offset, 2, this.length)
3623 return this[offset] | (this[offset + 1] << 8)
3624 }
3625
3626 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3627 if (!noAssert) checkOffset(offset, 2, this.length)
3628 return (this[offset] << 8) | this[offset + 1]
3629 }
3630
3631 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3632 if (!noAssert) checkOffset(offset, 4, this.length)
3633
3634 return ((this[offset]) |
3635 (this[offset + 1] << 8) |
3636 (this[offset + 2] << 16)) +
3637 (this[offset + 3] * 0x1000000)
3638 }
3639
3640 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3641 if (!noAssert) checkOffset(offset, 4, this.length)
3642
3643 return (this[offset] * 0x1000000) +
3644 ((this[offset + 1] << 16) |
3645 (this[offset + 2] << 8) |
3646 this[offset + 3])
3647 }
3648
3649 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3650 offset = offset | 0
3651 byteLength = byteLength | 0
3652 if (!noAssert) checkOffset(offset, byteLength, this.length)
3653
3654 var val = this[offset]
3655 var mul = 1
3656 var i = 0
3657 while (++i < byteLength && (mul *= 0x100)) {
3658 val += this[offset + i] * mul
3659 }
3660 mul *= 0x80
3661
3662 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3663
3664 return val
3665 }
3666
3667 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3668 offset = offset | 0
3669 byteLength = byteLength | 0
3670 if (!noAssert) checkOffset(offset, byteLength, this.length)
3671
3672 var i = byteLength
3673 var mul = 1
3674 var val = this[offset + --i]
3675 while (i > 0 && (mul *= 0x100)) {
3676 val += this[offset + --i] * mul
3677 }
3678 mul *= 0x80
3679
3680 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3681
3682 return val
3683 }
3684
3685 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3686 if (!noAssert) checkOffset(offset, 1, this.length)
3687 if (!(this[offset] & 0x80)) return (this[offset])
3688 return ((0xff - this[offset] + 1) * -1)
3689 }
3690
3691 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3692 if (!noAssert) checkOffset(offset, 2, this.length)
3693 var val = this[offset] | (this[offset + 1] << 8)
3694 return (val & 0x8000) ? val | 0xFFFF0000 : val
3695 }
3696
3697 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3698 if (!noAssert) checkOffset(offset, 2, this.length)
3699 var val = this[offset + 1] | (this[offset] << 8)
3700 return (val & 0x8000) ? val | 0xFFFF0000 : val
3701 }
3702
3703 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3704 if (!noAssert) checkOffset(offset, 4, this.length)
3705
3706 return (this[offset]) |
3707 (this[offset + 1] << 8) |
3708 (this[offset + 2] << 16) |
3709 (this[offset + 3] << 24)
3710 }
3711
3712 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3713 if (!noAssert) checkOffset(offset, 4, this.length)
3714
3715 return (this[offset] << 24) |
3716 (this[offset + 1] << 16) |
3717 (this[offset + 2] << 8) |
3718 (this[offset + 3])
3719 }
3720
3721 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3722 if (!noAssert) checkOffset(offset, 4, this.length)
3723 return ieee754.read(this, offset, true, 23, 4)
3724 }
3725
3726 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3727 if (!noAssert) checkOffset(offset, 4, this.length)
3728 return ieee754.read(this, offset, false, 23, 4)
3729 }
3730
3731 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3732 if (!noAssert) checkOffset(offset, 8, this.length)
3733 return ieee754.read(this, offset, true, 52, 8)
3734 }
3735
3736 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3737 if (!noAssert) checkOffset(offset, 8, this.length)
3738 return ieee754.read(this, offset, false, 52, 8)
3739 }
3740
3741 function checkInt (buf, value, offset, ext, max, min) {
3742 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3743 if (value > max || value < min) throw new RangeError('value is out of bounds')
3744 if (offset + ext > buf.length) throw new RangeError('index out of range')
3745 }
3746
3747 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3748 value = +value
3749 offset = offset | 0
3750 byteLength = byteLength | 0
3751 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3752
3753 var mul = 1
3754 var i = 0
3755 this[offset] = value & 0xFF
3756 while (++i < byteLength && (mul *= 0x100)) {
3757 this[offset + i] = (value / mul) & 0xFF
3758 }
3759
3760 return offset + byteLength
3761 }
3762
3763 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3764 value = +value
3765 offset = offset | 0
3766 byteLength = byteLength | 0
3767 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3768
3769 var i = byteLength - 1
3770 var mul = 1
3771 this[offset + i] = value & 0xFF
3772 while (--i >= 0 && (mul *= 0x100)) {
3773 this[offset + i] = (value / mul) & 0xFF
3774 }
3775
3776 return offset + byteLength
3777 }
3778
3779 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3780 value = +value
3781 offset = offset | 0
3782 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3783 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3784 this[offset] = value
3785 return offset + 1
3786 }
3787
3788 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3789 if (value < 0) value = 0xffff + value + 1
3790 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3791 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3792 (littleEndian ? i : 1 - i) * 8
3793 }
3794 }
3795
3796 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3797 value = +value
3798 offset = offset | 0
3799 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3800 if (Buffer.TYPED_ARRAY_SUPPORT) {
3801 this[offset] = value
3802 this[offset + 1] = (value >>> 8)
3803 } else {
3804 objectWriteUInt16(this, value, offset, true)
3805 }
3806 return offset + 2
3807 }
3808
3809 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3810 value = +value
3811 offset = offset | 0
3812 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3813 if (Buffer.TYPED_ARRAY_SUPPORT) {
3814 this[offset] = (value >>> 8)
3815 this[offset + 1] = value
3816 } else {
3817 objectWriteUInt16(this, value, offset, false)
3818 }
3819 return offset + 2
3820 }
3821
3822 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3823 if (value < 0) value = 0xffffffff + value + 1
3824 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3825 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3826 }
3827 }
3828
3829 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3830 value = +value
3831 offset = offset | 0
3832 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3833 if (Buffer.TYPED_ARRAY_SUPPORT) {
3834 this[offset + 3] = (value >>> 24)
3835 this[offset + 2] = (value >>> 16)
3836 this[offset + 1] = (value >>> 8)
3837 this[offset] = value
3838 } else {
3839 objectWriteUInt32(this, value, offset, true)
3840 }
3841 return offset + 4
3842 }
3843
3844 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3845 value = +value
3846 offset = offset | 0
3847 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3848 if (Buffer.TYPED_ARRAY_SUPPORT) {
3849 this[offset] = (value >>> 24)
3850 this[offset + 1] = (value >>> 16)
3851 this[offset + 2] = (value >>> 8)
3852 this[offset + 3] = value
3853 } else {
3854 objectWriteUInt32(this, value, offset, false)
3855 }
3856 return offset + 4
3857 }
3858
3859 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3860 value = +value
3861 offset = offset | 0
3862 if (!noAssert) {
3863 var limit = Math.pow(2, 8 * byteLength - 1)
3864
3865 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3866 }
3867
3868 var i = 0
3869 var mul = 1
3870 var sub = value < 0 ? 1 : 0
3871 this[offset] = value & 0xFF
3872 while (++i < byteLength && (mul *= 0x100)) {
3873 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3874 }
3875
3876 return offset + byteLength
3877 }
3878
3879 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3880 value = +value
3881 offset = offset | 0
3882 if (!noAssert) {
3883 var limit = Math.pow(2, 8 * byteLength - 1)
3884
3885 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3886 }
3887
3888 var i = byteLength - 1
3889 var mul = 1
3890 var sub = value < 0 ? 1 : 0
3891 this[offset + i] = value & 0xFF
3892 while (--i >= 0 && (mul *= 0x100)) {
3893 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3894 }
3895
3896 return offset + byteLength
3897 }
3898
3899 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3900 value = +value
3901 offset = offset | 0
3902 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3903 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3904 if (value < 0) value = 0xff + value + 1
3905 this[offset] = value
3906 return offset + 1
3907 }
3908
3909 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3910 value = +value
3911 offset = offset | 0
3912 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3913 if (Buffer.TYPED_ARRAY_SUPPORT) {
3914 this[offset] = value
3915 this[offset + 1] = (value >>> 8)
3916 } else {
3917 objectWriteUInt16(this, value, offset, true)
3918 }
3919 return offset + 2
3920 }
3921
3922 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3923 value = +value
3924 offset = offset | 0
3925 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3926 if (Buffer.TYPED_ARRAY_SUPPORT) {
3927 this[offset] = (value >>> 8)
3928 this[offset + 1] = value
3929 } else {
3930 objectWriteUInt16(this, value, offset, false)
3931 }
3932 return offset + 2
3933 }
3934
3935 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3936 value = +value
3937 offset = offset | 0
3938 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3939 if (Buffer.TYPED_ARRAY_SUPPORT) {
3940 this[offset] = value
3941 this[offset + 1] = (value >>> 8)
3942 this[offset + 2] = (value >>> 16)
3943 this[offset + 3] = (value >>> 24)
3944 } else {
3945 objectWriteUInt32(this, value, offset, true)
3946 }
3947 return offset + 4
3948 }
3949
3950 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3951 value = +value
3952 offset = offset | 0
3953 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3954 if (value < 0) value = 0xffffffff + value + 1
3955 if (Buffer.TYPED_ARRAY_SUPPORT) {
3956 this[offset] = (value >>> 24)
3957 this[offset + 1] = (value >>> 16)
3958 this[offset + 2] = (value >>> 8)
3959 this[offset + 3] = value
3960 } else {
3961 objectWriteUInt32(this, value, offset, false)
3962 }
3963 return offset + 4
3964 }
3965
3966 function checkIEEE754 (buf, value, offset, ext, max, min) {
3967 if (value > max || value < min) throw new RangeError('value is out of bounds')
3968 if (offset + ext > buf.length) throw new RangeError('index out of range')
3969 if (offset < 0) throw new RangeError('index out of range')
3970 }
3971
3972 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3973 if (!noAssert) {
3974 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3975 }
3976 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3977 return offset + 4
3978 }
3979
3980 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3981 return writeFloat(this, value, offset, true, noAssert)
3982 }
3983
3984 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3985 return writeFloat(this, value, offset, false, noAssert)
3986 }
3987
3988 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3989 if (!noAssert) {
3990 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3991 }
3992 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3993 return offset + 8
3994 }
3995
3996 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3997 return writeDouble(this, value, offset, true, noAssert)
3998 }
3999
4000 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
4001 return writeDouble(this, value, offset, false, noAssert)
4002 }
4003
4004 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
4005 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
4006 if (!start) start = 0
4007 if (!end && end !== 0) end = this.length
4008 if (targetStart >= target.length) targetStart = target.length
4009 if (!targetStart) targetStart = 0
4010 if (end > 0 && end < start) end = start
4011
4012 // Copy 0 bytes; we're done
4013 if (end === start) return 0
4014 if (target.length === 0 || this.length === 0) return 0
4015
4016 // Fatal error conditions
4017 if (targetStart < 0) {
4018 throw new RangeError('targetStart out of bounds')
4019 }
4020 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
4021 if (end < 0) throw new RangeError('sourceEnd out of bounds')
4022
4023 // Are we oob?
4024 if (end > this.length) end = this.length
4025 if (target.length - targetStart < end - start) {
4026 end = target.length - targetStart + start
4027 }
4028
4029 var len = end - start
4030 var i
4031
4032 if (this === target && start < targetStart && targetStart < end) {
4033 // descending copy from end
4034 for (i = len - 1; i >= 0; i--) {
4035 target[i + targetStart] = this[i + start]
4036 }
4037 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
4038 // ascending copy from start
4039 for (i = 0; i < len; i++) {
4040 target[i + targetStart] = this[i + start]
4041 }
4042 } else {
4043 target._set(this.subarray(start, start + len), targetStart)
4044 }
4045
4046 return len
4047 }
4048
4049 // fill(value, start=0, end=buffer.length)
4050 Buffer.prototype.fill = function fill (value, start, end) {
4051 if (!value) value = 0
4052 if (!start) start = 0
4053 if (!end) end = this.length
4054
4055 if (end < start) throw new RangeError('end < start')
4056
4057 // Fill 0 bytes; we're done
4058 if (end === start) return
4059 if (this.length === 0) return
4060
4061 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4062 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
4063
4064 var i
4065 if (typeof value === 'number') {
4066 for (i = start; i < end; i++) {
4067 this[i] = value
4068 }
4069 } else {
4070 var bytes = utf8ToBytes(value.toString())
4071 var len = bytes.length
4072 for (i = start; i < end; i++) {
4073 this[i] = bytes[i % len]
4074 }
4075 }
4076
4077 return this
4078 }
4079
4080 /**
4081 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4082 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4083 */
4084 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4085 if (typeof Uint8Array !== 'undefined') {
4086 if (Buffer.TYPED_ARRAY_SUPPORT) {
4087 return (new Buffer(this)).buffer
4088 } else {
4089 var buf = new Uint8Array(this.length)
4090 for (var i = 0, len = buf.length; i < len; i += 1) {
4091 buf[i] = this[i]
4092 }
4093 return buf.buffer
4094 }
4095 } else {
4096 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4097 }
4098 }
4099
4100 // HELPER FUNCTIONS
4101 // ================
4102
4103 var BP = Buffer.prototype
4104
4105 /**
4106 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4107 */
4108 Buffer._augment = function _augment (arr) {
4109 arr.constructor = Buffer
4110 arr._isBuffer = true
4111
4112 // save reference to original Uint8Array set method before overwriting
4113 arr._set = arr.set
4114
4115 // deprecated
4116 arr.get = BP.get
4117 arr.set = BP.set
4118
4119 arr.write = BP.write
4120 arr.toString = BP.toString
4121 arr.toLocaleString = BP.toString
4122 arr.toJSON = BP.toJSON
4123 arr.equals = BP.equals
4124 arr.compare = BP.compare
4125 arr.indexOf = BP.indexOf
4126 arr.copy = BP.copy
4127 arr.slice = BP.slice
4128 arr.readUIntLE = BP.readUIntLE
4129 arr.readUIntBE = BP.readUIntBE
4130 arr.readUInt8 = BP.readUInt8
4131 arr.readUInt16LE = BP.readUInt16LE
4132 arr.readUInt16BE = BP.readUInt16BE
4133 arr.readUInt32LE = BP.readUInt32LE
4134 arr.readUInt32BE = BP.readUInt32BE
4135 arr.readIntLE = BP.readIntLE
4136 arr.readIntBE = BP.readIntBE
4137 arr.readInt8 = BP.readInt8
4138 arr.readInt16LE = BP.readInt16LE
4139 arr.readInt16BE = BP.readInt16BE
4140 arr.readInt32LE = BP.readInt32LE
4141 arr.readInt32BE = BP.readInt32BE
4142 arr.readFloatLE = BP.readFloatLE
4143 arr.readFloatBE = BP.readFloatBE
4144 arr.readDoubleLE = BP.readDoubleLE
4145 arr.readDoubleBE = BP.readDoubleBE
4146 arr.writeUInt8 = BP.writeUInt8
4147 arr.writeUIntLE = BP.writeUIntLE
4148 arr.writeUIntBE = BP.writeUIntBE
4149 arr.writeUInt16LE = BP.writeUInt16LE
4150 arr.writeUInt16BE = BP.writeUInt16BE
4151 arr.writeUInt32LE = BP.writeUInt32LE
4152 arr.writeUInt32BE = BP.writeUInt32BE
4153 arr.writeIntLE = BP.writeIntLE
4154 arr.writeIntBE = BP.writeIntBE
4155 arr.writeInt8 = BP.writeInt8
4156 arr.writeInt16LE = BP.writeInt16LE
4157 arr.writeInt16BE = BP.writeInt16BE
4158 arr.writeInt32LE = BP.writeInt32LE
4159 arr.writeInt32BE = BP.writeInt32BE
4160 arr.writeFloatLE = BP.writeFloatLE
4161 arr.writeFloatBE = BP.writeFloatBE
4162 arr.writeDoubleLE = BP.writeDoubleLE
4163 arr.writeDoubleBE = BP.writeDoubleBE
4164 arr.fill = BP.fill
4165 arr.inspect = BP.inspect
4166 arr.toArrayBuffer = BP.toArrayBuffer
4167
4168 return arr
4169 }
4170
4171 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4172
4173 function base64clean (str) {
4174 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4175 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4176 // Node converts strings with length < 2 to ''
4177 if (str.length < 2) return ''
4178 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4179 while (str.length % 4 !== 0) {
4180 str = str + '='
4181 }
4182 return str
4183 }
4184
4185 function stringtrim (str) {
4186 if (str.trim) return str.trim()
4187 return str.replace(/^\s+|\s+$/g, '')
4188 }
4189
4190 function toHex (n) {
4191 if (n < 16) return '0' + n.toString(16)
4192 return n.toString(16)
4193 }
4194
4195 function utf8ToBytes (string, units) {
4196 units = units || Infinity
4197 var codePoint
4198 var length = string.length
4199 var leadSurrogate = null
4200 var bytes = []
4201
4202 for (var i = 0; i < length; i++) {
4203 codePoint = string.charCodeAt(i)
4204
4205 // is surrogate component
4206 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4207 // last char was a lead
4208 if (!leadSurrogate) {
4209 // no lead yet
4210 if (codePoint > 0xDBFF) {
4211 // unexpected trail
4212 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4213 continue
4214
4215 } else if (i + 1 === length) {
4216 // unpaired lead
4217 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4218 continue
4219 }
4220
4221 // valid lead
4222 leadSurrogate = codePoint
4223
4224 continue
4225 }
4226
4227 // 2 leads in a row
4228 if (codePoint < 0xDC00) {
4229 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4230 leadSurrogate = codePoint
4231 continue
4232 }
4233
4234 // valid surrogate pair
4235 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4236
4237 } else if (leadSurrogate) {
4238 // valid bmp char, but last char was a lead
4239 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4240 }
4241
4242 leadSurrogate = null
4243
4244 // encode utf8
4245 if (codePoint < 0x80) {
4246 if ((units -= 1) < 0) break
4247 bytes.push(codePoint)
4248 } else if (codePoint < 0x800) {
4249 if ((units -= 2) < 0) break
4250 bytes.push(
4251 codePoint >> 0x6 | 0xC0,
4252 codePoint & 0x3F | 0x80
4253 )
4254 } else if (codePoint < 0x10000) {
4255 if ((units -= 3) < 0) break
4256 bytes.push(
4257 codePoint >> 0xC | 0xE0,
4258 codePoint >> 0x6 & 0x3F | 0x80,
4259 codePoint & 0x3F | 0x80
4260 )
4261 } else if (codePoint < 0x110000) {
4262 if ((units -= 4) < 0) break
4263 bytes.push(
4264 codePoint >> 0x12 | 0xF0,
4265 codePoint >> 0xC & 0x3F | 0x80,
4266 codePoint >> 0x6 & 0x3F | 0x80,
4267 codePoint & 0x3F | 0x80
4268 )
4269 } else {
4270 throw new Error('Invalid code point')
4271 }
4272 }
4273
4274 return bytes
4275 }
4276
4277 function asciiToBytes (str) {
4278 var byteArray = []
4279 for (var i = 0; i < str.length; i++) {
4280 // Node's code seems to be doing this and not & 0x7F..
4281 byteArray.push(str.charCodeAt(i) & 0xFF)
4282 }
4283 return byteArray
4284 }
4285
4286 function utf16leToBytes (str, units) {
4287 var c, hi, lo
4288 var byteArray = []
4289 for (var i = 0; i < str.length; i++) {
4290 if ((units -= 2) < 0) break
4291
4292 c = str.charCodeAt(i)
4293 hi = c >> 8
4294 lo = c % 256
4295 byteArray.push(lo)
4296 byteArray.push(hi)
4297 }
4298
4299 return byteArray
4300 }
4301
4302 function base64ToBytes (str) {
4303 return base64.toByteArray(base64clean(str))
4304 }
4305
4306 function blitBuffer (src, dst, offset, length) {
4307 for (var i = 0; i < length; i++) {
4308 if ((i + offset >= dst.length) || (i >= src.length)) break
4309 dst[i + offset] = src[i]
4310 }
4311 return i
4312 }
4313
4314 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4315 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4316
4317 ;(function (exports) {
4318 'use strict';
4319
4320 var Arr = (typeof Uint8Array !== 'undefined')
4321 ? Uint8Array
4322 : Array
4323
4324 var PLUS = '+'.charCodeAt(0)
4325 var SLASH = '/'.charCodeAt(0)
4326 var NUMBER = '0'.charCodeAt(0)
4327 var LOWER = 'a'.charCodeAt(0)
4328 var UPPER = 'A'.charCodeAt(0)
4329 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4330 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4331
4332 function decode (elt) {
4333 var code = elt.charCodeAt(0)
4334 if (code === PLUS ||
4335 code === PLUS_URL_SAFE)
4336 return 62 // '+'
4337 if (code === SLASH ||
4338 code === SLASH_URL_SAFE)
4339 return 63 // '/'
4340 if (code < NUMBER)
4341 return -1 //no match
4342 if (code < NUMBER + 10)
4343 return code - NUMBER + 26 + 26
4344 if (code < UPPER + 26)
4345 return code - UPPER
4346 if (code < LOWER + 26)
4347 return code - LOWER + 26
4348 }
4349
4350 function b64ToByteArray (b64) {
4351 var i, j, l, tmp, placeHolders, arr
4352
4353 if (b64.length % 4 > 0) {
4354 throw new Error('Invalid string. Length must be a multiple of 4')
4355 }
4356
4357 // the number of equal signs (place holders)
4358 // if there are two placeholders, than the two characters before it
4359 // represent one byte
4360 // if there is only one, then the three characters before it represent 2 bytes
4361 // this is just a cheap hack to not do indexOf twice
4362 var len = b64.length
4363 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4364
4365 // base64 is 4/3 + up to two characters of the original data
4366 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4367
4368 // if there are placeholders, only get up to the last complete 4 chars
4369 l = placeHolders > 0 ? b64.length - 4 : b64.length
4370
4371 var L = 0
4372
4373 function push (v) {
4374 arr[L++] = v
4375 }
4376
4377 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4378 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4379 push((tmp & 0xFF0000) >> 16)
4380 push((tmp & 0xFF00) >> 8)
4381 push(tmp & 0xFF)
4382 }
4383
4384 if (placeHolders === 2) {
4385 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4386 push(tmp & 0xFF)
4387 } else if (placeHolders === 1) {
4388 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4389 push((tmp >> 8) & 0xFF)
4390 push(tmp & 0xFF)
4391 }
4392
4393 return arr
4394 }
4395
4396 function uint8ToBase64 (uint8) {
4397 var i,
4398 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4399 output = "",
4400 temp, length
4401
4402 function encode (num) {
4403 return lookup.charAt(num)
4404 }
4405
4406 function tripletToBase64 (num) {
4407 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4408 }
4409
4410 // go through the array every three bytes, we'll deal with trailing stuff later
4411 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4412 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4413 output += tripletToBase64(temp)
4414 }
4415
4416 // pad the end with zeros, but make sure to not forget the extra bytes
4417 switch (extraBytes) {
4418 case 1:
4419 temp = uint8[uint8.length - 1]
4420 output += encode(temp >> 2)
4421 output += encode((temp << 4) & 0x3F)
4422 output += '=='
4423 break
4424 case 2:
4425 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4426 output += encode(temp >> 10)
4427 output += encode((temp >> 4) & 0x3F)
4428 output += encode((temp << 2) & 0x3F)
4429 output += '='
4430 break
4431 }
4432
4433 return output
4434 }
4435
4436 exports.toByteArray = b64ToByteArray
4437 exports.fromByteArray = uint8ToBase64
4438 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4439
4440 },{}],9:[function(require,module,exports){
4441 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4442 var e, m
4443 var eLen = nBytes * 8 - mLen - 1
4444 var eMax = (1 << eLen) - 1
4445 var eBias = eMax >> 1
4446 var nBits = -7
4447 var i = isLE ? (nBytes - 1) : 0
4448 var d = isLE ? -1 : 1
4449 var s = buffer[offset + i]
4450
4451 i += d
4452
4453 e = s & ((1 << (-nBits)) - 1)
4454 s >>= (-nBits)
4455 nBits += eLen
4456 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4457
4458 m = e & ((1 << (-nBits)) - 1)
4459 e >>= (-nBits)
4460 nBits += mLen
4461 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4462
4463 if (e === 0) {
4464 e = 1 - eBias
4465 } else if (e === eMax) {
4466 return m ? NaN : ((s ? -1 : 1) * Infinity)
4467 } else {
4468 m = m + Math.pow(2, mLen)
4469 e = e - eBias
4470 }
4471 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4472 }
4473
4474 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4475 var e, m, c
4476 var eLen = nBytes * 8 - mLen - 1
4477 var eMax = (1 << eLen) - 1
4478 var eBias = eMax >> 1
4479 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4480 var i = isLE ? 0 : (nBytes - 1)
4481 var d = isLE ? 1 : -1
4482 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4483
4484 value = Math.abs(value)
4485
4486 if (isNaN(value) || value === Infinity) {
4487 m = isNaN(value) ? 1 : 0
4488 e = eMax
4489 } else {
4490 e = Math.floor(Math.log(value) / Math.LN2)
4491 if (value * (c = Math.pow(2, -e)) < 1) {
4492 e--
4493 c *= 2
4494 }
4495 if (e + eBias >= 1) {
4496 value += rt / c
4497 } else {
4498 value += rt * Math.pow(2, 1 - eBias)
4499 }
4500 if (value * c >= 2) {
4501 e++
4502 c /= 2
4503 }
4504
4505 if (e + eBias >= eMax) {
4506 m = 0
4507 e = eMax
4508 } else if (e + eBias >= 1) {
4509 m = (value * c - 1) * Math.pow(2, mLen)
4510 e = e + eBias
4511 } else {
4512 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4513 e = 0
4514 }
4515 }
4516
4517 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4518
4519 e = (e << mLen) | m
4520 eLen += mLen
4521 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4522
4523 buffer[offset + i - d] |= s * 128
4524 }
4525
4526 },{}],10:[function(require,module,exports){
4527
4528 /**
4529 * isArray
4530 */
4531
4532 var isArray = Array.isArray;
4533
4534 /**
4535 * toString
4536 */
4537
4538 var str = Object.prototype.toString;
4539
4540 /**
4541 * Whether or not the given `val`
4542 * is an array.
4543 *
4544 * example:
4545 *
4546 * isArray([]);
4547 * // > true
4548 * isArray(arguments);
4549 * // > false
4550 * isArray('');
4551 * // > false
4552 *
4553 * @param {mixed} val
4554 * @return {bool}
4555 */
4556
4557 module.exports = isArray || function (val) {
4558 return !! val && '[object Array]' == str.call(val);
4559 };
4560
4561 },{}],11:[function(require,module,exports){
4562 // Copyright Joyent, Inc. and other Node contributors.
4563 //
4564 // Permission is hereby granted, free of charge, to any person obtaining a
4565 // copy of this software and associated documentation files (the
4566 // "Software"), to deal in the Software without restriction, including
4567 // without limitation the rights to use, copy, modify, merge, publish,
4568 // distribute, sublicense, and/or sell copies of the Software, and to permit
4569 // persons to whom the Software is furnished to do so, subject to the
4570 // following conditions:
4571 //
4572 // The above copyright notice and this permission notice shall be included
4573 // in all copies or substantial portions of the Software.
4574 //
4575 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4576 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4577 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4578 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4579 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4580 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4581 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4582
4583 function EventEmitter() {
4584 this._events = this._events || {};
4585 this._maxListeners = this._maxListeners || undefined;
4586 }
4587 module.exports = EventEmitter;
4588
4589 // Backwards-compat with node 0.10.x
4590 EventEmitter.EventEmitter = EventEmitter;
4591
4592 EventEmitter.prototype._events = undefined;
4593 EventEmitter.prototype._maxListeners = undefined;
4594
4595 // By default EventEmitters will print a warning if more than 10 listeners are
4596 // added to it. This is a useful default which helps finding memory leaks.
4597 EventEmitter.defaultMaxListeners = 10;
4598
4599 // Obviously not all Emitters should be limited to 10. This function allows
4600 // that to be increased. Set to zero for unlimited.
4601 EventEmitter.prototype.setMaxListeners = function(n) {
4602 if (!isNumber(n) || n < 0 || isNaN(n))
4603 throw TypeError('n must be a positive number');
4604 this._maxListeners = n;
4605 return this;
4606 };
4607
4608 EventEmitter.prototype.emit = function(type) {
4609 var er, handler, len, args, i, listeners;
4610
4611 if (!this._events)
4612 this._events = {};
4613
4614 // If there is no 'error' event listener then throw.
4615 if (type === 'error') {
4616 if (!this._events.error ||
4617 (isObject(this._events.error) && !this._events.error.length)) {
4618 er = arguments[1];
4619 if (er instanceof Error) {
4620 throw er; // Unhandled 'error' event
4621 }
4622 throw TypeError('Uncaught, unspecified "error" event.');
4623 }
4624 }
4625
4626 handler = this._events[type];
4627
4628 if (isUndefined(handler))
4629 return false;
4630
4631 if (isFunction(handler)) {
4632 switch (arguments.length) {
4633 // fast cases
4634 case 1:
4635 handler.call(this);
4636 break;
4637 case 2:
4638 handler.call(this, arguments[1]);
4639 break;
4640 case 3:
4641 handler.call(this, arguments[1], arguments[2]);
4642 break;
4643 // slower
4644 default:
4645 len = arguments.length;
4646 args = new Array(len - 1);
4647 for (i = 1; i < len; i++)
4648 args[i - 1] = arguments[i];
4649 handler.apply(this, args);
4650 }
4651 } else if (isObject(handler)) {
4652 len = arguments.length;
4653 args = new Array(len - 1);
4654 for (i = 1; i < len; i++)
4655 args[i - 1] = arguments[i];
4656
4657 listeners = handler.slice();
4658 len = listeners.length;
4659 for (i = 0; i < len; i++)
4660 listeners[i].apply(this, args);
4661 }
4662
4663 return true;
4664 };
4665
4666 EventEmitter.prototype.addListener = function(type, listener) {
4667 var m;
4668
4669 if (!isFunction(listener))
4670 throw TypeError('listener must be a function');
4671
4672 if (!this._events)
4673 this._events = {};
4674
4675 // To avoid recursion in the case that type === "newListener"! Before
4676 // adding it to the listeners, first emit "newListener".
4677 if (this._events.newListener)
4678 this.emit('newListener', type,
4679 isFunction(listener.listener) ?
4680 listener.listener : listener);
4681
4682 if (!this._events[type])
4683 // Optimize the case of one listener. Don't need the extra array object.
4684 this._events[type] = listener;
4685 else if (isObject(this._events[type]))
4686 // If we've already got an array, just append.
4687 this._events[type].push(listener);
4688 else
4689 // Adding the second element, need to change to array.
4690 this._events[type] = [this._events[type], listener];
4691
4692 // Check for listener leak
4693 if (isObject(this._events[type]) && !this._events[type].warned) {
4694 var m;
4695 if (!isUndefined(this._maxListeners)) {
4696 m = this._maxListeners;
4697 } else {
4698 m = EventEmitter.defaultMaxListeners;
4699 }
4700
4701 if (m && m > 0 && this._events[type].length > m) {
4702 this._events[type].warned = true;
4703 console.error('(node) warning: possible EventEmitter memory ' +
4704 'leak detected. %d listeners added. ' +
4705 'Use emitter.setMaxListeners() to increase limit.',
4706 this._events[type].length);
4707 if (typeof console.trace === 'function') {
4708 // not supported in IE 10
4709 console.trace();
4710 }
4711 }
4712 }
4713
4714 return this;
4715 };
4716
4717 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4718
4719 EventEmitter.prototype.once = function(type, listener) {
4720 if (!isFunction(listener))
4721 throw TypeError('listener must be a function');
4722
4723 var fired = false;
4724
4725 function g() {
4726 this.removeListener(type, g);
4727
4728 if (!fired) {
4729 fired = true;
4730 listener.apply(this, arguments);
4731 }
4732 }
4733
4734 g.listener = listener;
4735 this.on(type, g);
4736
4737 return this;
4738 };
4739
4740 // emits a 'removeListener' event iff the listener was removed
4741 EventEmitter.prototype.removeListener = function(type, listener) {
4742 var list, position, length, i;
4743
4744 if (!isFunction(listener))
4745 throw TypeError('listener must be a function');
4746
4747 if (!this._events || !this._events[type])
4748 return this;
4749
4750 list = this._events[type];
4751 length = list.length;
4752 position = -1;
4753
4754 if (list === listener ||
4755 (isFunction(list.listener) && list.listener === listener)) {
4756 delete this._events[type];
4757 if (this._events.removeListener)
4758 this.emit('removeListener', type, listener);
4759
4760 } else if (isObject(list)) {
4761 for (i = length; i-- > 0;) {
4762 if (list[i] === listener ||
4763 (list[i].listener && list[i].listener === listener)) {
4764 position = i;
4765 break;
4766 }
4767 }
4768
4769 if (position < 0)
4770 return this;
4771
4772 if (list.length === 1) {
4773 list.length = 0;
4774 delete this._events[type];
4775 } else {
4776 list.splice(position, 1);
4777 }
4778
4779 if (this._events.removeListener)
4780 this.emit('removeListener', type, listener);
4781 }
4782
4783 return this;
4784 };
4785
4786 EventEmitter.prototype.removeAllListeners = function(type) {
4787 var key, listeners;
4788
4789 if (!this._events)
4790 return this;
4791
4792 // not listening for removeListener, no need to emit
4793 if (!this._events.removeListener) {
4794 if (arguments.length === 0)
4795 this._events = {};
4796 else if (this._events[type])
4797 delete this._events[type];
4798 return this;
4799 }
4800
4801 // emit removeListener for all listeners on all events
4802 if (arguments.length === 0) {
4803 for (key in this._events) {
4804 if (key === 'removeListener') continue;
4805 this.removeAllListeners(key);
4806 }
4807 this.removeAllListeners('removeListener');
4808 this._events = {};
4809 return this;
4810 }
4811
4812 listeners = this._events[type];
4813
4814 if (isFunction(listeners)) {
4815 this.removeListener(type, listeners);
4816 } else {
4817 // LIFO order
4818 while (listeners.length)
4819 this.removeListener(type, listeners[listeners.length - 1]);
4820 }
4821 delete this._events[type];
4822
4823 return this;
4824 };
4825
4826 EventEmitter.prototype.listeners = function(type) {
4827 var ret;
4828 if (!this._events || !this._events[type])
4829 ret = [];
4830 else if (isFunction(this._events[type]))
4831 ret = [this._events[type]];
4832 else
4833 ret = this._events[type].slice();
4834 return ret;
4835 };
4836
4837 EventEmitter.listenerCount = function(emitter, type) {
4838 var ret;
4839 if (!emitter._events || !emitter._events[type])
4840 ret = 0;
4841 else if (isFunction(emitter._events[type]))
4842 ret = 1;
4843 else
4844 ret = emitter._events[type].length;
4845 return ret;
4846 };
4847
4848 function isFunction(arg) {
4849 return typeof arg === 'function';
4850 }
4851
4852 function isNumber(arg) {
4853 return typeof arg === 'number';
4854 }
4855
4856 function isObject(arg) {
4857 return typeof arg === 'object' && arg !== null;
4858 }
4859
4860 function isUndefined(arg) {
4861 return arg === void 0;
4862 }
4863
4864 },{}],12:[function(require,module,exports){
4865 if (typeof Object.create === 'function') {
4866 // implementation from standard node.js 'util' module
4867 module.exports = function inherits(ctor, superCtor) {
4868 ctor.super_ = superCtor
4869 ctor.prototype = Object.create(superCtor.prototype, {
4870 constructor: {
4871 value: ctor,
4872 enumerable: false,
4873 writable: true,
4874 configurable: true
4875 }
4876 });
4877 };
4878 } else {
4879 // old school shim for old browsers
4880 module.exports = function inherits(ctor, superCtor) {
4881 ctor.super_ = superCtor
4882 var TempCtor = function () {}
4883 TempCtor.prototype = superCtor.prototype
4884 ctor.prototype = new TempCtor()
4885 ctor.prototype.constructor = ctor
4886 }
4887 }
4888
4889 },{}],13:[function(require,module,exports){
4890 module.exports = Array.isArray || function (arr) {
4891 return Object.prototype.toString.call(arr) == '[object Array]';
4892 };
4893
4894 },{}],14:[function(require,module,exports){
4895 // shim for using process in browser
4896
4897 var process = module.exports = {};
4898 var queue = [];
4899 var draining = false;
4900 var currentQueue;
4901 var queueIndex = -1;
4902
4903 function cleanUpNextTick() {
4904 draining = false;
4905 if (currentQueue.length) {
4906 queue = currentQueue.concat(queue);
4907 } else {
4908 queueIndex = -1;
4909 }
4910 if (queue.length) {
4911 drainQueue();
4912 }
4913 }
4914
4915 function drainQueue() {
4916 if (draining) {
4917 return;
4918 }
4919 var timeout = setTimeout(cleanUpNextTick);
4920 draining = true;
4921
4922 var len = queue.length;
4923 while(len) {
4924 currentQueue = queue;
4925 queue = [];
4926 while (++queueIndex < len) {
4927 currentQueue[queueIndex].run();
4928 }
4929 queueIndex = -1;
4930 len = queue.length;
4931 }
4932 currentQueue = null;
4933 draining = false;
4934 clearTimeout(timeout);
4935 }
4936
4937 process.nextTick = function (fun) {
4938 var args = new Array(arguments.length - 1);
4939 if (arguments.length > 1) {
4940 for (var i = 1; i < arguments.length; i++) {
4941 args[i - 1] = arguments[i];
4942 }
4943 }
4944 queue.push(new Item(fun, args));
4945 if (queue.length === 1 && !draining) {
4946 setTimeout(drainQueue, 0);
4947 }
4948 };
4949
4950 // v8 likes predictible objects
4951 function Item(fun, array) {
4952 this.fun = fun;
4953 this.array = array;
4954 }
4955 Item.prototype.run = function () {
4956 this.fun.apply(null, this.array);
4957 };
4958 process.title = 'browser';
4959 process.browser = true;
4960 process.env = {};
4961 process.argv = [];
4962 process.version = ''; // empty string to avoid regexp issues
4963 process.versions = {};
4964
4965 function noop() {}
4966
4967 process.on = noop;
4968 process.addListener = noop;
4969 process.once = noop;
4970 process.off = noop;
4971 process.removeListener = noop;
4972 process.removeAllListeners = noop;
4973 process.emit = noop;
4974
4975 process.binding = function (name) {
4976 throw new Error('process.binding is not supported');
4977 };
4978
4979 // TODO(shtylman)
4980 process.cwd = function () { return '/' };
4981 process.chdir = function (dir) {
4982 throw new Error('process.chdir is not supported');
4983 };
4984 process.umask = function() { return 0; };
4985
4986 },{}],15:[function(require,module,exports){
4987 module.exports = require("./lib/_stream_duplex.js")
4988
4989 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4990 (function (process){
4991 // Copyright Joyent, Inc. and other Node contributors.
4992 //
4993 // Permission is hereby granted, free of charge, to any person obtaining a
4994 // copy of this software and associated documentation files (the
4995 // "Software"), to deal in the Software without restriction, including
4996 // without limitation the rights to use, copy, modify, merge, publish,
4997 // distribute, sublicense, and/or sell copies of the Software, and to permit
4998 // persons to whom the Software is furnished to do so, subject to the
4999 // following conditions:
5000 //
5001 // The above copyright notice and this permission notice shall be included
5002 // in all copies or substantial portions of the Software.
5003 //
5004 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5005 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5006 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5007 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5008 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5009 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5010 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5011
5012 // a duplex stream is just a stream that is both readable and writable.
5013 // Since JS doesn't have multiple prototypal inheritance, this class
5014 // prototypally inherits from Readable, and then parasitically from
5015 // Writable.
5016
5017 module.exports = Duplex;
5018
5019 /*<replacement>*/
5020 var objectKeys = Object.keys || function (obj) {
5021 var keys = [];
5022 for (var key in obj) keys.push(key);
5023 return keys;
5024 }
5025 /*</replacement>*/
5026
5027
5028 /*<replacement>*/
5029 var util = require('core-util-is');
5030 util.inherits = require('inherits');
5031 /*</replacement>*/
5032
5033 var Readable = require('./_stream_readable');
5034 var Writable = require('./_stream_writable');
5035
5036 util.inherits(Duplex, Readable);
5037
5038 forEach(objectKeys(Writable.prototype), function(method) {
5039 if (!Duplex.prototype[method])
5040 Duplex.prototype[method] = Writable.prototype[method];
5041 });
5042
5043 function Duplex(options) {
5044 if (!(this instanceof Duplex))
5045 return new Duplex(options);
5046
5047 Readable.call(this, options);
5048 Writable.call(this, options);
5049
5050 if (options && options.readable === false)
5051 this.readable = false;
5052
5053 if (options && options.writable === false)
5054 this.writable = false;
5055
5056 this.allowHalfOpen = true;
5057 if (options && options.allowHalfOpen === false)
5058 this.allowHalfOpen = false;
5059
5060 this.once('end', onend);
5061 }
5062
5063 // the no-half-open enforcer
5064 function onend() {
5065 // if we allow half-open state, or if the writable side ended,
5066 // then we're ok.
5067 if (this.allowHalfOpen || this._writableState.ended)
5068 return;
5069
5070 // no more data can be written.
5071 // But allow more writes to happen in this tick.
5072 process.nextTick(this.end.bind(this));
5073 }
5074
5075 function forEach (xs, f) {
5076 for (var i = 0, l = xs.length; i < l; i++) {
5077 f(xs[i], i);
5078 }
5079 }
5080
5081 }).call(this,require('_process'))
5082 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5083 // Copyright Joyent, Inc. and other Node contributors.
5084 //
5085 // Permission is hereby granted, free of charge, to any person obtaining a
5086 // copy of this software and associated documentation files (the
5087 // "Software"), to deal in the Software without restriction, including
5088 // without limitation the rights to use, copy, modify, merge, publish,
5089 // distribute, sublicense, and/or sell copies of the Software, and to permit
5090 // persons to whom the Software is furnished to do so, subject to the
5091 // following conditions:
5092 //
5093 // The above copyright notice and this permission notice shall be included
5094 // in all copies or substantial portions of the Software.
5095 //
5096 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5097 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5098 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5099 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5100 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5101 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5102 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5103
5104 // a passthrough stream.
5105 // basically just the most minimal sort of Transform stream.
5106 // Every written chunk gets output as-is.
5107
5108 module.exports = PassThrough;
5109
5110 var Transform = require('./_stream_transform');
5111
5112 /*<replacement>*/
5113 var util = require('core-util-is');
5114 util.inherits = require('inherits');
5115 /*</replacement>*/
5116
5117 util.inherits(PassThrough, Transform);
5118
5119 function PassThrough(options) {
5120 if (!(this instanceof PassThrough))
5121 return new PassThrough(options);
5122
5123 Transform.call(this, options);
5124 }
5125
5126 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5127 cb(null, chunk);
5128 };
5129
5130 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5131 (function (process){
5132 // Copyright Joyent, Inc. and other Node contributors.
5133 //
5134 // Permission is hereby granted, free of charge, to any person obtaining a
5135 // copy of this software and associated documentation files (the
5136 // "Software"), to deal in the Software without restriction, including
5137 // without limitation the rights to use, copy, modify, merge, publish,
5138 // distribute, sublicense, and/or sell copies of the Software, and to permit
5139 // persons to whom the Software is furnished to do so, subject to the
5140 // following conditions:
5141 //
5142 // The above copyright notice and this permission notice shall be included
5143 // in all copies or substantial portions of the Software.
5144 //
5145 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5146 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5147 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5148 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5149 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5150 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5151 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5152
5153 module.exports = Readable;
5154
5155 /*<replacement>*/
5156 var isArray = require('isarray');
5157 /*</replacement>*/
5158
5159
5160 /*<replacement>*/
5161 var Buffer = require('buffer').Buffer;
5162 /*</replacement>*/
5163
5164 Readable.ReadableState = ReadableState;
5165
5166 var EE = require('events').EventEmitter;
5167
5168 /*<replacement>*/
5169 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5170 return emitter.listeners(type).length;
5171 };
5172 /*</replacement>*/
5173
5174 var Stream = require('stream');
5175
5176 /*<replacement>*/
5177 var util = require('core-util-is');
5178 util.inherits = require('inherits');
5179 /*</replacement>*/
5180
5181 var StringDecoder;
5182
5183
5184 /*<replacement>*/
5185 var debug = require('util');
5186 if (debug && debug.debuglog) {
5187 debug = debug.debuglog('stream');
5188 } else {
5189 debug = function () {};
5190 }
5191 /*</replacement>*/
5192
5193
5194 util.inherits(Readable, Stream);
5195
5196 function ReadableState(options, stream) {
5197 var Duplex = require('./_stream_duplex');
5198
5199 options = options || {};
5200
5201 // the point at which it stops calling _read() to fill the buffer
5202 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5203 var hwm = options.highWaterMark;
5204 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5205 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5206
5207 // cast to ints.
5208 this.highWaterMark = ~~this.highWaterMark;
5209
5210 this.buffer = [];
5211 this.length = 0;
5212 this.pipes = null;
5213 this.pipesCount = 0;
5214 this.flowing = null;
5215 this.ended = false;
5216 this.endEmitted = false;
5217 this.reading = false;
5218
5219 // a flag to be able to tell if the onwrite cb is called immediately,
5220 // or on a later tick. We set this to true at first, because any
5221 // actions that shouldn't happen until "later" should generally also
5222 // not happen before the first write call.
5223 this.sync = true;
5224
5225 // whenever we return null, then we set a flag to say
5226 // that we're awaiting a 'readable' event emission.
5227 this.needReadable = false;
5228 this.emittedReadable = false;
5229 this.readableListening = false;
5230
5231
5232 // object stream flag. Used to make read(n) ignore n and to
5233 // make all the buffer merging and length checks go away
5234 this.objectMode = !!options.objectMode;
5235
5236 if (stream instanceof Duplex)
5237 this.objectMode = this.objectMode || !!options.readableObjectMode;
5238
5239 // Crypto is kind of old and crusty. Historically, its default string
5240 // encoding is 'binary' so we have to make this configurable.
5241 // Everything else in the universe uses 'utf8', though.
5242 this.defaultEncoding = options.defaultEncoding || 'utf8';
5243
5244 // when piping, we only care about 'readable' events that happen
5245 // after read()ing all the bytes and not getting any pushback.
5246 this.ranOut = false;
5247
5248 // the number of writers that are awaiting a drain event in .pipe()s
5249 this.awaitDrain = 0;
5250
5251 // if true, a maybeReadMore has been scheduled
5252 this.readingMore = false;
5253
5254 this.decoder = null;
5255 this.encoding = null;
5256 if (options.encoding) {
5257 if (!StringDecoder)
5258 StringDecoder = require('string_decoder/').StringDecoder;
5259 this.decoder = new StringDecoder(options.encoding);
5260 this.encoding = options.encoding;
5261 }
5262 }
5263
5264 function Readable(options) {
5265 var Duplex = require('./_stream_duplex');
5266
5267 if (!(this instanceof Readable))
5268 return new Readable(options);
5269
5270 this._readableState = new ReadableState(options, this);
5271
5272 // legacy
5273 this.readable = true;
5274
5275 Stream.call(this);
5276 }
5277
5278 // Manually shove something into the read() buffer.
5279 // This returns true if the highWaterMark has not been hit yet,
5280 // similar to how Writable.write() returns true if you should
5281 // write() some more.
5282 Readable.prototype.push = function(chunk, encoding) {
5283 var state = this._readableState;
5284
5285 if (util.isString(chunk) && !state.objectMode) {
5286 encoding = encoding || state.defaultEncoding;
5287 if (encoding !== state.encoding) {
5288 chunk = new Buffer(chunk, encoding);
5289 encoding = '';
5290 }
5291 }
5292
5293 return readableAddChunk(this, state, chunk, encoding, false);
5294 };
5295
5296 // Unshift should *always* be something directly out of read()
5297 Readable.prototype.unshift = function(chunk) {
5298 var state = this._readableState;
5299 return readableAddChunk(this, state, chunk, '', true);
5300 };
5301
5302 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5303 var er = chunkInvalid(state, chunk);
5304 if (er) {
5305 stream.emit('error', er);
5306 } else if (util.isNullOrUndefined(chunk)) {
5307 state.reading = false;
5308 if (!state.ended)
5309 onEofChunk(stream, state);
5310 } else if (state.objectMode || chunk && chunk.length > 0) {
5311 if (state.ended && !addToFront) {
5312 var e = new Error('stream.push() after EOF');
5313 stream.emit('error', e);
5314 } else if (state.endEmitted && addToFront) {
5315 var e = new Error('stream.unshift() after end event');
5316 stream.emit('error', e);
5317 } else {
5318 if (state.decoder && !addToFront && !encoding)
5319 chunk = state.decoder.write(chunk);
5320
5321 if (!addToFront)
5322 state.reading = false;
5323
5324 // if we want the data now, just emit it.
5325 if (state.flowing && state.length === 0 && !state.sync) {
5326 stream.emit('data', chunk);
5327 stream.read(0);
5328 } else {
5329 // update the buffer info.
5330 state.length += state.objectMode ? 1 : chunk.length;
5331 if (addToFront)
5332 state.buffer.unshift(chunk);
5333 else
5334 state.buffer.push(chunk);
5335
5336 if (state.needReadable)
5337 emitReadable(stream);
5338 }
5339
5340 maybeReadMore(stream, state);
5341 }
5342 } else if (!addToFront) {
5343 state.reading = false;
5344 }
5345
5346 return needMoreData(state);
5347 }
5348
5349
5350
5351 // if it's past the high water mark, we can push in some more.
5352 // Also, if we have no data yet, we can stand some
5353 // more bytes. This is to work around cases where hwm=0,
5354 // such as the repl. Also, if the push() triggered a
5355 // readable event, and the user called read(largeNumber) such that
5356 // needReadable was set, then we ought to push more, so that another
5357 // 'readable' event will be triggered.
5358 function needMoreData(state) {
5359 return !state.ended &&
5360 (state.needReadable ||
5361 state.length < state.highWaterMark ||
5362 state.length === 0);
5363 }
5364
5365 // backwards compatibility.
5366 Readable.prototype.setEncoding = function(enc) {
5367 if (!StringDecoder)
5368 StringDecoder = require('string_decoder/').StringDecoder;
5369 this._readableState.decoder = new StringDecoder(enc);
5370 this._readableState.encoding = enc;
5371 return this;
5372 };
5373
5374 // Don't raise the hwm > 128MB
5375 var MAX_HWM = 0x800000;
5376 function roundUpToNextPowerOf2(n) {
5377 if (n >= MAX_HWM) {
5378 n = MAX_HWM;
5379 } else {
5380 // Get the next highest power of 2
5381 n--;
5382 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5383 n++;
5384 }
5385 return n;
5386 }
5387
5388 function howMuchToRead(n, state) {
5389 if (state.length === 0 && state.ended)
5390 return 0;
5391
5392 if (state.objectMode)
5393 return n === 0 ? 0 : 1;
5394
5395 if (isNaN(n) || util.isNull(n)) {
5396 // only flow one buffer at a time
5397 if (state.flowing && state.buffer.length)
5398 return state.buffer[0].length;
5399 else
5400 return state.length;
5401 }
5402
5403 if (n <= 0)
5404 return 0;
5405
5406 // If we're asking for more than the target buffer level,
5407 // then raise the water mark. Bump up to the next highest
5408 // power of 2, to prevent increasing it excessively in tiny
5409 // amounts.
5410 if (n > state.highWaterMark)
5411 state.highWaterMark = roundUpToNextPowerOf2(n);
5412
5413 // don't have that much. return null, unless we've ended.
5414 if (n > state.length) {
5415 if (!state.ended) {
5416 state.needReadable = true;
5417 return 0;
5418 } else
5419 return state.length;
5420 }
5421
5422 return n;
5423 }
5424
5425 // you can override either this method, or the async _read(n) below.
5426 Readable.prototype.read = function(n) {
5427 debug('read', n);
5428 var state = this._readableState;
5429 var nOrig = n;
5430
5431 if (!util.isNumber(n) || n > 0)
5432 state.emittedReadable = false;
5433
5434 // if we're doing read(0) to trigger a readable event, but we
5435 // already have a bunch of data in the buffer, then just trigger
5436 // the 'readable' event and move on.
5437 if (n === 0 &&
5438 state.needReadable &&
5439 (state.length >= state.highWaterMark || state.ended)) {
5440 debug('read: emitReadable', state.length, state.ended);
5441 if (state.length === 0 && state.ended)
5442 endReadable(this);
5443 else
5444 emitReadable(this);
5445 return null;
5446 }
5447
5448 n = howMuchToRead(n, state);
5449
5450 // if we've ended, and we're now clear, then finish it up.
5451 if (n === 0 && state.ended) {
5452 if (state.length === 0)
5453 endReadable(this);
5454 return null;
5455 }
5456
5457 // All the actual chunk generation logic needs to be
5458 // *below* the call to _read. The reason is that in certain
5459 // synthetic stream cases, such as passthrough streams, _read
5460 // may be a completely synchronous operation which may change
5461 // the state of the read buffer, providing enough data when
5462 // before there was *not* enough.
5463 //
5464 // So, the steps are:
5465 // 1. Figure out what the state of things will be after we do
5466 // a read from the buffer.
5467 //
5468 // 2. If that resulting state will trigger a _read, then call _read.
5469 // Note that this may be asynchronous, or synchronous. Yes, it is
5470 // deeply ugly to write APIs this way, but that still doesn't mean
5471 // that the Readable class should behave improperly, as streams are
5472 // designed to be sync/async agnostic.
5473 // Take note if the _read call is sync or async (ie, if the read call
5474 // has returned yet), so that we know whether or not it's safe to emit
5475 // 'readable' etc.
5476 //
5477 // 3. Actually pull the requested chunks out of the buffer and return.
5478
5479 // if we need a readable event, then we need to do some reading.
5480 var doRead = state.needReadable;
5481 debug('need readable', doRead);
5482
5483 // if we currently have less than the highWaterMark, then also read some
5484 if (state.length === 0 || state.length - n < state.highWaterMark) {
5485 doRead = true;
5486 debug('length less than watermark', doRead);
5487 }
5488
5489 // however, if we've ended, then there's no point, and if we're already
5490 // reading, then it's unnecessary.
5491 if (state.ended || state.reading) {
5492 doRead = false;
5493 debug('reading or ended', doRead);
5494 }
5495
5496 if (doRead) {
5497 debug('do read');
5498 state.reading = true;
5499 state.sync = true;
5500 // if the length is currently zero, then we *need* a readable event.
5501 if (state.length === 0)
5502 state.needReadable = true;
5503 // call internal read method
5504 this._read(state.highWaterMark);
5505 state.sync = false;
5506 }
5507
5508 // If _read pushed data synchronously, then `reading` will be false,
5509 // and we need to re-evaluate how much data we can return to the user.
5510 if (doRead && !state.reading)
5511 n = howMuchToRead(nOrig, state);
5512
5513 var ret;
5514 if (n > 0)
5515 ret = fromList(n, state);
5516 else
5517 ret = null;
5518
5519 if (util.isNull(ret)) {
5520 state.needReadable = true;
5521 n = 0;
5522 }
5523
5524 state.length -= n;
5525
5526 // If we have nothing in the buffer, then we want to know
5527 // as soon as we *do* get something into the buffer.
5528 if (state.length === 0 && !state.ended)
5529 state.needReadable = true;
5530
5531 // If we tried to read() past the EOF, then emit end on the next tick.
5532 if (nOrig !== n && state.ended && state.length === 0)
5533 endReadable(this);
5534
5535 if (!util.isNull(ret))
5536 this.emit('data', ret);
5537
5538 return ret;
5539 };
5540
5541 function chunkInvalid(state, chunk) {
5542 var er = null;
5543 if (!util.isBuffer(chunk) &&
5544 !util.isString(chunk) &&
5545 !util.isNullOrUndefined(chunk) &&
5546 !state.objectMode) {
5547 er = new TypeError('Invalid non-string/buffer chunk');
5548 }
5549 return er;
5550 }
5551
5552
5553 function onEofChunk(stream, state) {
5554 if (state.decoder && !state.ended) {
5555 var chunk = state.decoder.end();
5556 if (chunk && chunk.length) {
5557 state.buffer.push(chunk);
5558 state.length += state.objectMode ? 1 : chunk.length;
5559 }
5560 }
5561 state.ended = true;
5562
5563 // emit 'readable' now to make sure it gets picked up.
5564 emitReadable(stream);
5565 }
5566
5567 // Don't emit readable right away in sync mode, because this can trigger
5568 // another read() call => stack overflow. This way, it might trigger
5569 // a nextTick recursion warning, but that's not so bad.
5570 function emitReadable(stream) {
5571 var state = stream._readableState;
5572 state.needReadable = false;
5573 if (!state.emittedReadable) {
5574 debug('emitReadable', state.flowing);
5575 state.emittedReadable = true;
5576 if (state.sync)
5577 process.nextTick(function() {
5578 emitReadable_(stream);
5579 });
5580 else
5581 emitReadable_(stream);
5582 }
5583 }
5584
5585 function emitReadable_(stream) {
5586 debug('emit readable');
5587 stream.emit('readable');
5588 flow(stream);
5589 }
5590
5591
5592 // at this point, the user has presumably seen the 'readable' event,
5593 // and called read() to consume some data. that may have triggered
5594 // in turn another _read(n) call, in which case reading = true if
5595 // it's in progress.
5596 // However, if we're not ended, or reading, and the length < hwm,
5597 // then go ahead and try to read some more preemptively.
5598 function maybeReadMore(stream, state) {
5599 if (!state.readingMore) {
5600 state.readingMore = true;
5601 process.nextTick(function() {
5602 maybeReadMore_(stream, state);
5603 });
5604 }
5605 }
5606
5607 function maybeReadMore_(stream, state) {
5608 var len = state.length;
5609 while (!state.reading && !state.flowing && !state.ended &&
5610 state.length < state.highWaterMark) {
5611 debug('maybeReadMore read 0');
5612 stream.read(0);
5613 if (len === state.length)
5614 // didn't get any data, stop spinning.
5615 break;
5616 else
5617 len = state.length;
5618 }
5619 state.readingMore = false;
5620 }
5621
5622 // abstract method. to be overridden in specific implementation classes.
5623 // call cb(er, data) where data is <= n in length.
5624 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5625 // arbitrary, and perhaps not very meaningful.
5626 Readable.prototype._read = function(n) {
5627 this.emit('error', new Error('not implemented'));
5628 };
5629
5630 Readable.prototype.pipe = function(dest, pipeOpts) {
5631 var src = this;
5632 var state = this._readableState;
5633
5634 switch (state.pipesCount) {
5635 case 0:
5636 state.pipes = dest;
5637 break;
5638 case 1:
5639 state.pipes = [state.pipes, dest];
5640 break;
5641 default:
5642 state.pipes.push(dest);
5643 break;
5644 }
5645 state.pipesCount += 1;
5646 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5647
5648 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5649 dest !== process.stdout &&
5650 dest !== process.stderr;
5651
5652 var endFn = doEnd ? onend : cleanup;
5653 if (state.endEmitted)
5654 process.nextTick(endFn);
5655 else
5656 src.once('end', endFn);
5657
5658 dest.on('unpipe', onunpipe);
5659 function onunpipe(readable) {
5660 debug('onunpipe');
5661 if (readable === src) {
5662 cleanup();
5663 }
5664 }
5665
5666 function onend() {
5667 debug('onend');
5668 dest.end();
5669 }
5670
5671 // when the dest drains, it reduces the awaitDrain counter
5672 // on the source. This would be more elegant with a .once()
5673 // handler in flow(), but adding and removing repeatedly is
5674 // too slow.
5675 var ondrain = pipeOnDrain(src);
5676 dest.on('drain', ondrain);
5677
5678 function cleanup() {
5679 debug('cleanup');
5680 // cleanup event handlers once the pipe is broken
5681 dest.removeListener('close', onclose);
5682 dest.removeListener('finish', onfinish);
5683 dest.removeListener('drain', ondrain);
5684 dest.removeListener('error', onerror);
5685 dest.removeListener('unpipe', onunpipe);
5686 src.removeListener('end', onend);
5687 src.removeListener('end', cleanup);
5688 src.removeListener('data', ondata);
5689
5690 // if the reader is waiting for a drain event from this
5691 // specific writer, then it would cause it to never start
5692 // flowing again.
5693 // So, if this is awaiting a drain, then we just call it now.
5694 // If we don't know, then assume that we are waiting for one.
5695 if (state.awaitDrain &&
5696 (!dest._writableState || dest._writableState.needDrain))
5697 ondrain();
5698 }
5699
5700 src.on('data', ondata);
5701 function ondata(chunk) {
5702 debug('ondata');
5703 var ret = dest.write(chunk);
5704 if (false === ret) {
5705 debug('false write response, pause',
5706 src._readableState.awaitDrain);
5707 src._readableState.awaitDrain++;
5708 src.pause();
5709 }
5710 }
5711
5712 // if the dest has an error, then stop piping into it.
5713 // however, don't suppress the throwing behavior for this.
5714 function onerror(er) {
5715 debug('onerror', er);
5716 unpipe();
5717 dest.removeListener('error', onerror);
5718 if (EE.listenerCount(dest, 'error') === 0)
5719 dest.emit('error', er);
5720 }
5721 // This is a brutally ugly hack to make sure that our error handler
5722 // is attached before any userland ones. NEVER DO THIS.
5723 if (!dest._events || !dest._events.error)
5724 dest.on('error', onerror);
5725 else if (isArray(dest._events.error))
5726 dest._events.error.unshift(onerror);
5727 else
5728 dest._events.error = [onerror, dest._events.error];
5729
5730
5731
5732 // Both close and finish should trigger unpipe, but only once.
5733 function onclose() {
5734 dest.removeListener('finish', onfinish);
5735 unpipe();
5736 }
5737 dest.once('close', onclose);
5738 function onfinish() {
5739 debug('onfinish');
5740 dest.removeListener('close', onclose);
5741 unpipe();
5742 }
5743 dest.once('finish', onfinish);
5744
5745 function unpipe() {
5746 debug('unpipe');
5747 src.unpipe(dest);
5748 }
5749
5750 // tell the dest that it's being piped to
5751 dest.emit('pipe', src);
5752
5753 // start the flow if it hasn't been started already.
5754 if (!state.flowing) {
5755 debug('pipe resume');
5756 src.resume();
5757 }
5758
5759 return dest;
5760 };
5761
5762 function pipeOnDrain(src) {
5763 return function() {
5764 var state = src._readableState;
5765 debug('pipeOnDrain', state.awaitDrain);
5766 if (state.awaitDrain)
5767 state.awaitDrain--;
5768 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5769 state.flowing = true;
5770 flow(src);
5771 }
5772 };
5773 }
5774
5775
5776 Readable.prototype.unpipe = function(dest) {
5777 var state = this._readableState;
5778
5779 // if we're not piping anywhere, then do nothing.
5780 if (state.pipesCount === 0)
5781 return this;
5782
5783 // just one destination. most common case.
5784 if (state.pipesCount === 1) {
5785 // passed in one, but it's not the right one.
5786 if (dest && dest !== state.pipes)
5787 return this;
5788
5789 if (!dest)
5790 dest = state.pipes;
5791
5792 // got a match.
5793 state.pipes = null;
5794 state.pipesCount = 0;
5795 state.flowing = false;
5796 if (dest)
5797 dest.emit('unpipe', this);
5798 return this;
5799 }
5800
5801 // slow case. multiple pipe destinations.
5802
5803 if (!dest) {
5804 // remove all.
5805 var dests = state.pipes;
5806 var len = state.pipesCount;
5807 state.pipes = null;
5808 state.pipesCount = 0;
5809 state.flowing = false;
5810
5811 for (var i = 0; i < len; i++)
5812 dests[i].emit('unpipe', this);
5813 return this;
5814 }
5815
5816 // try to find the right one.
5817 var i = indexOf(state.pipes, dest);
5818 if (i === -1)
5819 return this;
5820
5821 state.pipes.splice(i, 1);
5822 state.pipesCount -= 1;
5823 if (state.pipesCount === 1)
5824 state.pipes = state.pipes[0];
5825
5826 dest.emit('unpipe', this);
5827
5828 return this;
5829 };
5830
5831 // set up data events if they are asked for
5832 // Ensure readable listeners eventually get something
5833 Readable.prototype.on = function(ev, fn) {
5834 var res = Stream.prototype.on.call(this, ev, fn);
5835
5836 // If listening to data, and it has not explicitly been paused,
5837 // then call resume to start the flow of data on the next tick.
5838 if (ev === 'data' && false !== this._readableState.flowing) {
5839 this.resume();
5840 }
5841
5842 if (ev === 'readable' && this.readable) {
5843 var state = this._readableState;
5844 if (!state.readableListening) {
5845 state.readableListening = true;
5846 state.emittedReadable = false;
5847 state.needReadable = true;
5848 if (!state.reading) {
5849 var self = this;
5850 process.nextTick(function() {
5851 debug('readable nexttick read 0');
5852 self.read(0);
5853 });
5854 } else if (state.length) {
5855 emitReadable(this, state);
5856 }
5857 }
5858 }
5859
5860 return res;
5861 };
5862 Readable.prototype.addListener = Readable.prototype.on;
5863
5864 // pause() and resume() are remnants of the legacy readable stream API
5865 // If the user uses them, then switch into old mode.
5866 Readable.prototype.resume = function() {
5867 var state = this._readableState;
5868 if (!state.flowing) {
5869 debug('resume');
5870 state.flowing = true;
5871 if (!state.reading) {
5872 debug('resume read 0');
5873 this.read(0);
5874 }
5875 resume(this, state);
5876 }
5877 return this;
5878 };
5879
5880 function resume(stream, state) {
5881 if (!state.resumeScheduled) {
5882 state.resumeScheduled = true;
5883 process.nextTick(function() {
5884 resume_(stream, state);
5885 });
5886 }
5887 }
5888
5889 function resume_(stream, state) {
5890 state.resumeScheduled = false;
5891 stream.emit('resume');
5892 flow(stream);
5893 if (state.flowing && !state.reading)
5894 stream.read(0);
5895 }
5896
5897 Readable.prototype.pause = function() {
5898 debug('call pause flowing=%j', this._readableState.flowing);
5899 if (false !== this._readableState.flowing) {
5900 debug('pause');
5901 this._readableState.flowing = false;
5902 this.emit('pause');
5903 }
5904 return this;
5905 };
5906
5907 function flow(stream) {
5908 var state = stream._readableState;
5909 debug('flow', state.flowing);
5910 if (state.flowing) {
5911 do {
5912 var chunk = stream.read();
5913 } while (null !== chunk && state.flowing);
5914 }
5915 }
5916
5917 // wrap an old-style stream as the async data source.
5918 // This is *not* part of the readable stream interface.
5919 // It is an ugly unfortunate mess of history.
5920 Readable.prototype.wrap = function(stream) {
5921 var state = this._readableState;
5922 var paused = false;
5923
5924 var self = this;
5925 stream.on('end', function() {
5926 debug('wrapped end');
5927 if (state.decoder && !state.ended) {
5928 var chunk = state.decoder.end();
5929 if (chunk && chunk.length)
5930 self.push(chunk);
5931 }
5932
5933 self.push(null);
5934 });
5935
5936 stream.on('data', function(chunk) {
5937 debug('wrapped data');
5938 if (state.decoder)
5939 chunk = state.decoder.write(chunk);
5940 if (!chunk || !state.objectMode && !chunk.length)
5941 return;
5942
5943 var ret = self.push(chunk);
5944 if (!ret) {
5945 paused = true;
5946 stream.pause();
5947 }
5948 });
5949
5950 // proxy all the other methods.
5951 // important when wrapping filters and duplexes.
5952 for (var i in stream) {
5953 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5954 this[i] = function(method) { return function() {
5955 return stream[method].apply(stream, arguments);
5956 }}(i);
5957 }
5958 }
5959
5960 // proxy certain important events.
5961 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5962 forEach(events, function(ev) {
5963 stream.on(ev, self.emit.bind(self, ev));
5964 });
5965
5966 // when we try to consume some more bytes, simply unpause the
5967 // underlying stream.
5968 self._read = function(n) {
5969 debug('wrapped _read', n);
5970 if (paused) {
5971 paused = false;
5972 stream.resume();
5973 }
5974 };
5975
5976 return self;
5977 };
5978
5979
5980
5981 // exposed for testing purposes only.
5982 Readable._fromList = fromList;
5983
5984 // Pluck off n bytes from an array of buffers.
5985 // Length is the combined lengths of all the buffers in the list.
5986 function fromList(n, state) {
5987 var list = state.buffer;
5988 var length = state.length;
5989 var stringMode = !!state.decoder;
5990 var objectMode = !!state.objectMode;
5991 var ret;
5992
5993 // nothing in the list, definitely empty.
5994 if (list.length === 0)
5995 return null;
5996
5997 if (length === 0)
5998 ret = null;
5999 else if (objectMode)
6000 ret = list.shift();
6001 else if (!n || n >= length) {
6002 // read it all, truncate the array.
6003 if (stringMode)
6004 ret = list.join('');
6005 else
6006 ret = Buffer.concat(list, length);
6007 list.length = 0;
6008 } else {
6009 // read just some of it.
6010 if (n < list[0].length) {
6011 // just take a part of the first list item.
6012 // slice is the same for buffers and strings.
6013 var buf = list[0];
6014 ret = buf.slice(0, n);
6015 list[0] = buf.slice(n);
6016 } else if (n === list[0].length) {
6017 // first list is a perfect match
6018 ret = list.shift();
6019 } else {
6020 // complex case.
6021 // we have enough to cover it, but it spans past the first buffer.
6022 if (stringMode)
6023 ret = '';
6024 else
6025 ret = new Buffer(n);
6026
6027 var c = 0;
6028 for (var i = 0, l = list.length; i < l && c < n; i++) {
6029 var buf = list[0];
6030 var cpy = Math.min(n - c, buf.length);
6031
6032 if (stringMode)
6033 ret += buf.slice(0, cpy);
6034 else
6035 buf.copy(ret, c, 0, cpy);
6036
6037 if (cpy < buf.length)
6038 list[0] = buf.slice(cpy);
6039 else
6040 list.shift();
6041
6042 c += cpy;
6043 }
6044 }
6045 }
6046
6047 return ret;
6048 }
6049
6050 function endReadable(stream) {
6051 var state = stream._readableState;
6052
6053 // If we get here before consuming all the bytes, then that is a
6054 // bug in node. Should never happen.
6055 if (state.length > 0)
6056 throw new Error('endReadable called on non-empty stream');
6057
6058 if (!state.endEmitted) {
6059 state.ended = true;
6060 process.nextTick(function() {
6061 // Check that we didn't get one last unshift.
6062 if (!state.endEmitted && state.length === 0) {
6063 state.endEmitted = true;
6064 stream.readable = false;
6065 stream.emit('end');
6066 }
6067 });
6068 }
6069 }
6070
6071 function forEach (xs, f) {
6072 for (var i = 0, l = xs.length; i < l; i++) {
6073 f(xs[i], i);
6074 }
6075 }
6076
6077 function indexOf (xs, x) {
6078 for (var i = 0, l = xs.length; i < l; i++) {
6079 if (xs[i] === x) return i;
6080 }
6081 return -1;
6082 }
6083
6084 }).call(this,require('_process'))
6085 },{"./_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){
6086 // Copyright Joyent, Inc. and other Node contributors.
6087 //
6088 // Permission is hereby granted, free of charge, to any person obtaining a
6089 // copy of this software and associated documentation files (the
6090 // "Software"), to deal in the Software without restriction, including
6091 // without limitation the rights to use, copy, modify, merge, publish,
6092 // distribute, sublicense, and/or sell copies of the Software, and to permit
6093 // persons to whom the Software is furnished to do so, subject to the
6094 // following conditions:
6095 //
6096 // The above copyright notice and this permission notice shall be included
6097 // in all copies or substantial portions of the Software.
6098 //
6099 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6100 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6101 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6102 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6103 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6104 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6105 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6106
6107
6108 // a transform stream is a readable/writable stream where you do
6109 // something with the data. Sometimes it's called a "filter",
6110 // but that's not a great name for it, since that implies a thing where
6111 // some bits pass through, and others are simply ignored. (That would
6112 // be a valid example of a transform, of course.)
6113 //
6114 // While the output is causally related to the input, it's not a
6115 // necessarily symmetric or synchronous transformation. For example,
6116 // a zlib stream might take multiple plain-text writes(), and then
6117 // emit a single compressed chunk some time in the future.
6118 //
6119 // Here's how this works:
6120 //
6121 // The Transform stream has all the aspects of the readable and writable
6122 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6123 // internally, and returns false if there's a lot of pending writes
6124 // buffered up. When you call read(), that calls _read(n) until
6125 // there's enough pending readable data buffered up.
6126 //
6127 // In a transform stream, the written data is placed in a buffer. When
6128 // _read(n) is called, it transforms the queued up data, calling the
6129 // buffered _write cb's as it consumes chunks. If consuming a single
6130 // written chunk would result in multiple output chunks, then the first
6131 // outputted bit calls the readcb, and subsequent chunks just go into
6132 // the read buffer, and will cause it to emit 'readable' if necessary.
6133 //
6134 // This way, back-pressure is actually determined by the reading side,
6135 // since _read has to be called to start processing a new chunk. However,
6136 // a pathological inflate type of transform can cause excessive buffering
6137 // here. For example, imagine a stream where every byte of input is
6138 // interpreted as an integer from 0-255, and then results in that many
6139 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6140 // 1kb of data being output. In this case, you could write a very small
6141 // amount of input, and end up with a very large amount of output. In
6142 // such a pathological inflating mechanism, there'd be no way to tell
6143 // the system to stop doing the transform. A single 4MB write could
6144 // cause the system to run out of memory.
6145 //
6146 // However, even in such a pathological case, only a single written chunk
6147 // would be consumed, and then the rest would wait (un-transformed) until
6148 // the results of the previous transformed chunk were consumed.
6149
6150 module.exports = Transform;
6151
6152 var Duplex = require('./_stream_duplex');
6153
6154 /*<replacement>*/
6155 var util = require('core-util-is');
6156 util.inherits = require('inherits');
6157 /*</replacement>*/
6158
6159 util.inherits(Transform, Duplex);
6160
6161
6162 function TransformState(options, stream) {
6163 this.afterTransform = function(er, data) {
6164 return afterTransform(stream, er, data);
6165 };
6166
6167 this.needTransform = false;
6168 this.transforming = false;
6169 this.writecb = null;
6170 this.writechunk = null;
6171 }
6172
6173 function afterTransform(stream, er, data) {
6174 var ts = stream._transformState;
6175 ts.transforming = false;
6176
6177 var cb = ts.writecb;
6178
6179 if (!cb)
6180 return stream.emit('error', new Error('no writecb in Transform class'));
6181
6182 ts.writechunk = null;
6183 ts.writecb = null;
6184
6185 if (!util.isNullOrUndefined(data))
6186 stream.push(data);
6187
6188 if (cb)
6189 cb(er);
6190
6191 var rs = stream._readableState;
6192 rs.reading = false;
6193 if (rs.needReadable || rs.length < rs.highWaterMark) {
6194 stream._read(rs.highWaterMark);
6195 }
6196 }
6197
6198
6199 function Transform(options) {
6200 if (!(this instanceof Transform))
6201 return new Transform(options);
6202
6203 Duplex.call(this, options);
6204
6205 this._transformState = new TransformState(options, this);
6206
6207 // when the writable side finishes, then flush out anything remaining.
6208 var stream = this;
6209
6210 // start out asking for a readable event once data is transformed.
6211 this._readableState.needReadable = true;
6212
6213 // we have implemented the _read method, and done the other things
6214 // that Readable wants before the first _read call, so unset the
6215 // sync guard flag.
6216 this._readableState.sync = false;
6217
6218 this.once('prefinish', function() {
6219 if (util.isFunction(this._flush))
6220 this._flush(function(er) {
6221 done(stream, er);
6222 });
6223 else
6224 done(stream);
6225 });
6226 }
6227
6228 Transform.prototype.push = function(chunk, encoding) {
6229 this._transformState.needTransform = false;
6230 return Duplex.prototype.push.call(this, chunk, encoding);
6231 };
6232
6233 // This is the part where you do stuff!
6234 // override this function in implementation classes.
6235 // 'chunk' is an input chunk.
6236 //
6237 // Call `push(newChunk)` to pass along transformed output
6238 // to the readable side. You may call 'push' zero or more times.
6239 //
6240 // Call `cb(err)` when you are done with this chunk. If you pass
6241 // an error, then that'll put the hurt on the whole operation. If you
6242 // never call cb(), then you'll never get another chunk.
6243 Transform.prototype._transform = function(chunk, encoding, cb) {
6244 throw new Error('not implemented');
6245 };
6246
6247 Transform.prototype._write = function(chunk, encoding, cb) {
6248 var ts = this._transformState;
6249 ts.writecb = cb;
6250 ts.writechunk = chunk;
6251 ts.writeencoding = encoding;
6252 if (!ts.transforming) {
6253 var rs = this._readableState;
6254 if (ts.needTransform ||
6255 rs.needReadable ||
6256 rs.length < rs.highWaterMark)
6257 this._read(rs.highWaterMark);
6258 }
6259 };
6260
6261 // Doesn't matter what the args are here.
6262 // _transform does all the work.
6263 // That we got here means that the readable side wants more data.
6264 Transform.prototype._read = function(n) {
6265 var ts = this._transformState;
6266
6267 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6268 ts.transforming = true;
6269 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6270 } else {
6271 // mark that we need a transform, so that any data that comes in
6272 // will get processed, now that we've asked for it.
6273 ts.needTransform = true;
6274 }
6275 };
6276
6277
6278 function done(stream, er) {
6279 if (er)
6280 return stream.emit('error', er);
6281
6282 // if there's nothing in the write buffer, then that means
6283 // that nothing more will ever be provided
6284 var ws = stream._writableState;
6285 var ts = stream._transformState;
6286
6287 if (ws.length)
6288 throw new Error('calling transform done when ws.length != 0');
6289
6290 if (ts.transforming)
6291 throw new Error('calling transform done when still transforming');
6292
6293 return stream.push(null);
6294 }
6295
6296 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6297 (function (process){
6298 // Copyright Joyent, Inc. and other Node contributors.
6299 //
6300 // Permission is hereby granted, free of charge, to any person obtaining a
6301 // copy of this software and associated documentation files (the
6302 // "Software"), to deal in the Software without restriction, including
6303 // without limitation the rights to use, copy, modify, merge, publish,
6304 // distribute, sublicense, and/or sell copies of the Software, and to permit
6305 // persons to whom the Software is furnished to do so, subject to the
6306 // following conditions:
6307 //
6308 // The above copyright notice and this permission notice shall be included
6309 // in all copies or substantial portions of the Software.
6310 //
6311 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6312 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6313 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6314 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6315 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6316 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6317 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6318
6319 // A bit simpler than readable streams.
6320 // Implement an async ._write(chunk, cb), and it'll handle all
6321 // the drain event emission and buffering.
6322
6323 module.exports = Writable;
6324
6325 /*<replacement>*/
6326 var Buffer = require('buffer').Buffer;
6327 /*</replacement>*/
6328
6329 Writable.WritableState = WritableState;
6330
6331
6332 /*<replacement>*/
6333 var util = require('core-util-is');
6334 util.inherits = require('inherits');
6335 /*</replacement>*/
6336
6337 var Stream = require('stream');
6338
6339 util.inherits(Writable, Stream);
6340
6341 function WriteReq(chunk, encoding, cb) {
6342 this.chunk = chunk;
6343 this.encoding = encoding;
6344 this.callback = cb;
6345 }
6346
6347 function WritableState(options, stream) {
6348 var Duplex = require('./_stream_duplex');
6349
6350 options = options || {};
6351
6352 // the point at which write() starts returning false
6353 // Note: 0 is a valid value, means that we always return false if
6354 // the entire buffer is not flushed immediately on write()
6355 var hwm = options.highWaterMark;
6356 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6357 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6358
6359 // object stream flag to indicate whether or not this stream
6360 // contains buffers or objects.
6361 this.objectMode = !!options.objectMode;
6362
6363 if (stream instanceof Duplex)
6364 this.objectMode = this.objectMode || !!options.writableObjectMode;
6365
6366 // cast to ints.
6367 this.highWaterMark = ~~this.highWaterMark;
6368
6369 this.needDrain = false;
6370 // at the start of calling end()
6371 this.ending = false;
6372 // when end() has been called, and returned
6373 this.ended = false;
6374 // when 'finish' is emitted
6375 this.finished = false;
6376
6377 // should we decode strings into buffers before passing to _write?
6378 // this is here so that some node-core streams can optimize string
6379 // handling at a lower level.
6380 var noDecode = options.decodeStrings === false;
6381 this.decodeStrings = !noDecode;
6382
6383 // Crypto is kind of old and crusty. Historically, its default string
6384 // encoding is 'binary' so we have to make this configurable.
6385 // Everything else in the universe uses 'utf8', though.
6386 this.defaultEncoding = options.defaultEncoding || 'utf8';
6387
6388 // not an actual buffer we keep track of, but a measurement
6389 // of how much we're waiting to get pushed to some underlying
6390 // socket or file.
6391 this.length = 0;
6392
6393 // a flag to see when we're in the middle of a write.
6394 this.writing = false;
6395
6396 // when true all writes will be buffered until .uncork() call
6397 this.corked = 0;
6398
6399 // a flag to be able to tell if the onwrite cb is called immediately,
6400 // or on a later tick. We set this to true at first, because any
6401 // actions that shouldn't happen until "later" should generally also
6402 // not happen before the first write call.
6403 this.sync = true;
6404
6405 // a flag to know if we're processing previously buffered items, which
6406 // may call the _write() callback in the same tick, so that we don't
6407 // end up in an overlapped onwrite situation.
6408 this.bufferProcessing = false;
6409
6410 // the callback that's passed to _write(chunk,cb)
6411 this.onwrite = function(er) {
6412 onwrite(stream, er);
6413 };
6414
6415 // the callback that the user supplies to write(chunk,encoding,cb)
6416 this.writecb = null;
6417
6418 // the amount that is being written when _write is called.
6419 this.writelen = 0;
6420
6421 this.buffer = [];
6422
6423 // number of pending user-supplied write callbacks
6424 // this must be 0 before 'finish' can be emitted
6425 this.pendingcb = 0;
6426
6427 // emit prefinish if the only thing we're waiting for is _write cbs
6428 // This is relevant for synchronous Transform streams
6429 this.prefinished = false;
6430
6431 // True if the error was already emitted and should not be thrown again
6432 this.errorEmitted = false;
6433 }
6434
6435 function Writable(options) {
6436 var Duplex = require('./_stream_duplex');
6437
6438 // Writable ctor is applied to Duplexes, though they're not
6439 // instanceof Writable, they're instanceof Readable.
6440 if (!(this instanceof Writable) && !(this instanceof Duplex))
6441 return new Writable(options);
6442
6443 this._writableState = new WritableState(options, this);
6444
6445 // legacy.
6446 this.writable = true;
6447
6448 Stream.call(this);
6449 }
6450
6451 // Otherwise people can pipe Writable streams, which is just wrong.
6452 Writable.prototype.pipe = function() {
6453 this.emit('error', new Error('Cannot pipe. Not readable.'));
6454 };
6455
6456
6457 function writeAfterEnd(stream, state, cb) {
6458 var er = new Error('write after end');
6459 // TODO: defer error events consistently everywhere, not just the cb
6460 stream.emit('error', er);
6461 process.nextTick(function() {
6462 cb(er);
6463 });
6464 }
6465
6466 // If we get something that is not a buffer, string, null, or undefined,
6467 // and we're not in objectMode, then that's an error.
6468 // Otherwise stream chunks are all considered to be of length=1, and the
6469 // watermarks determine how many objects to keep in the buffer, rather than
6470 // how many bytes or characters.
6471 function validChunk(stream, state, chunk, cb) {
6472 var valid = true;
6473 if (!util.isBuffer(chunk) &&
6474 !util.isString(chunk) &&
6475 !util.isNullOrUndefined(chunk) &&
6476 !state.objectMode) {
6477 var er = new TypeError('Invalid non-string/buffer chunk');
6478 stream.emit('error', er);
6479 process.nextTick(function() {
6480 cb(er);
6481 });
6482 valid = false;
6483 }
6484 return valid;
6485 }
6486
6487 Writable.prototype.write = function(chunk, encoding, cb) {
6488 var state = this._writableState;
6489 var ret = false;
6490
6491 if (util.isFunction(encoding)) {
6492 cb = encoding;
6493 encoding = null;
6494 }
6495
6496 if (util.isBuffer(chunk))
6497 encoding = 'buffer';
6498 else if (!encoding)
6499 encoding = state.defaultEncoding;
6500
6501 if (!util.isFunction(cb))
6502 cb = function() {};
6503
6504 if (state.ended)
6505 writeAfterEnd(this, state, cb);
6506 else if (validChunk(this, state, chunk, cb)) {
6507 state.pendingcb++;
6508 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6509 }
6510
6511 return ret;
6512 };
6513
6514 Writable.prototype.cork = function() {
6515 var state = this._writableState;
6516
6517 state.corked++;
6518 };
6519
6520 Writable.prototype.uncork = function() {
6521 var state = this._writableState;
6522
6523 if (state.corked) {
6524 state.corked--;
6525
6526 if (!state.writing &&
6527 !state.corked &&
6528 !state.finished &&
6529 !state.bufferProcessing &&
6530 state.buffer.length)
6531 clearBuffer(this, state);
6532 }
6533 };
6534
6535 function decodeChunk(state, chunk, encoding) {
6536 if (!state.objectMode &&
6537 state.decodeStrings !== false &&
6538 util.isString(chunk)) {
6539 chunk = new Buffer(chunk, encoding);
6540 }
6541 return chunk;
6542 }
6543
6544 // if we're already writing something, then just put this
6545 // in the queue, and wait our turn. Otherwise, call _write
6546 // If we return false, then we need a drain event, so set that flag.
6547 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6548 chunk = decodeChunk(state, chunk, encoding);
6549 if (util.isBuffer(chunk))
6550 encoding = 'buffer';
6551 var len = state.objectMode ? 1 : chunk.length;
6552
6553 state.length += len;
6554
6555 var ret = state.length < state.highWaterMark;
6556 // we must ensure that previous needDrain will not be reset to false.
6557 if (!ret)
6558 state.needDrain = true;
6559
6560 if (state.writing || state.corked)
6561 state.buffer.push(new WriteReq(chunk, encoding, cb));
6562 else
6563 doWrite(stream, state, false, len, chunk, encoding, cb);
6564
6565 return ret;
6566 }
6567
6568 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6569 state.writelen = len;
6570 state.writecb = cb;
6571 state.writing = true;
6572 state.sync = true;
6573 if (writev)
6574 stream._writev(chunk, state.onwrite);
6575 else
6576 stream._write(chunk, encoding, state.onwrite);
6577 state.sync = false;
6578 }
6579
6580 function onwriteError(stream, state, sync, er, cb) {
6581 if (sync)
6582 process.nextTick(function() {
6583 state.pendingcb--;
6584 cb(er);
6585 });
6586 else {
6587 state.pendingcb--;
6588 cb(er);
6589 }
6590
6591 stream._writableState.errorEmitted = true;
6592 stream.emit('error', er);
6593 }
6594
6595 function onwriteStateUpdate(state) {
6596 state.writing = false;
6597 state.writecb = null;
6598 state.length -= state.writelen;
6599 state.writelen = 0;
6600 }
6601
6602 function onwrite(stream, er) {
6603 var state = stream._writableState;
6604 var sync = state.sync;
6605 var cb = state.writecb;
6606
6607 onwriteStateUpdate(state);
6608
6609 if (er)
6610 onwriteError(stream, state, sync, er, cb);
6611 else {
6612 // Check if we're actually ready to finish, but don't emit yet
6613 var finished = needFinish(stream, state);
6614
6615 if (!finished &&
6616 !state.corked &&
6617 !state.bufferProcessing &&
6618 state.buffer.length) {
6619 clearBuffer(stream, state);
6620 }
6621
6622 if (sync) {
6623 process.nextTick(function() {
6624 afterWrite(stream, state, finished, cb);
6625 });
6626 } else {
6627 afterWrite(stream, state, finished, cb);
6628 }
6629 }
6630 }
6631
6632 function afterWrite(stream, state, finished, cb) {
6633 if (!finished)
6634 onwriteDrain(stream, state);
6635 state.pendingcb--;
6636 cb();
6637 finishMaybe(stream, state);
6638 }
6639
6640 // Must force callback to be called on nextTick, so that we don't
6641 // emit 'drain' before the write() consumer gets the 'false' return
6642 // value, and has a chance to attach a 'drain' listener.
6643 function onwriteDrain(stream, state) {
6644 if (state.length === 0 && state.needDrain) {
6645 state.needDrain = false;
6646 stream.emit('drain');
6647 }
6648 }
6649
6650
6651 // if there's something in the buffer waiting, then process it
6652 function clearBuffer(stream, state) {
6653 state.bufferProcessing = true;
6654
6655 if (stream._writev && state.buffer.length > 1) {
6656 // Fast case, write everything using _writev()
6657 var cbs = [];
6658 for (var c = 0; c < state.buffer.length; c++)
6659 cbs.push(state.buffer[c].callback);
6660
6661 // count the one we are adding, as well.
6662 // TODO(isaacs) clean this up
6663 state.pendingcb++;
6664 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6665 for (var i = 0; i < cbs.length; i++) {
6666 state.pendingcb--;
6667 cbs[i](err);
6668 }
6669 });
6670
6671 // Clear buffer
6672 state.buffer = [];
6673 } else {
6674 // Slow case, write chunks one-by-one
6675 for (var c = 0; c < state.buffer.length; c++) {
6676 var entry = state.buffer[c];
6677 var chunk = entry.chunk;
6678 var encoding = entry.encoding;
6679 var cb = entry.callback;
6680 var len = state.objectMode ? 1 : chunk.length;
6681
6682 doWrite(stream, state, false, len, chunk, encoding, cb);
6683
6684 // if we didn't call the onwrite immediately, then
6685 // it means that we need to wait until it does.
6686 // also, that means that the chunk and cb are currently
6687 // being processed, so move the buffer counter past them.
6688 if (state.writing) {
6689 c++;
6690 break;
6691 }
6692 }
6693
6694 if (c < state.buffer.length)
6695 state.buffer = state.buffer.slice(c);
6696 else
6697 state.buffer.length = 0;
6698 }
6699
6700 state.bufferProcessing = false;
6701 }
6702
6703 Writable.prototype._write = function(chunk, encoding, cb) {
6704 cb(new Error('not implemented'));
6705
6706 };
6707
6708 Writable.prototype._writev = null;
6709
6710 Writable.prototype.end = function(chunk, encoding, cb) {
6711 var state = this._writableState;
6712
6713 if (util.isFunction(chunk)) {
6714 cb = chunk;
6715 chunk = null;
6716 encoding = null;
6717 } else if (util.isFunction(encoding)) {
6718 cb = encoding;
6719 encoding = null;
6720 }
6721
6722 if (!util.isNullOrUndefined(chunk))
6723 this.write(chunk, encoding);
6724
6725 // .end() fully uncorks
6726 if (state.corked) {
6727 state.corked = 1;
6728 this.uncork();
6729 }
6730
6731 // ignore unnecessary end() calls.
6732 if (!state.ending && !state.finished)
6733 endWritable(this, state, cb);
6734 };
6735
6736
6737 function needFinish(stream, state) {
6738 return (state.ending &&
6739 state.length === 0 &&
6740 !state.finished &&
6741 !state.writing);
6742 }
6743
6744 function prefinish(stream, state) {
6745 if (!state.prefinished) {
6746 state.prefinished = true;
6747 stream.emit('prefinish');
6748 }
6749 }
6750
6751 function finishMaybe(stream, state) {
6752 var need = needFinish(stream, state);
6753 if (need) {
6754 if (state.pendingcb === 0) {
6755 prefinish(stream, state);
6756 state.finished = true;
6757 stream.emit('finish');
6758 } else
6759 prefinish(stream, state);
6760 }
6761 return need;
6762 }
6763
6764 function endWritable(stream, state, cb) {
6765 state.ending = true;
6766 finishMaybe(stream, state);
6767 if (cb) {
6768 if (state.finished)
6769 process.nextTick(cb);
6770 else
6771 stream.once('finish', cb);
6772 }
6773 state.ended = true;
6774 }
6775
6776 }).call(this,require('_process'))
6777 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6778 (function (Buffer){
6779 // Copyright Joyent, Inc. and other Node contributors.
6780 //
6781 // Permission is hereby granted, free of charge, to any person obtaining a
6782 // copy of this software and associated documentation files (the
6783 // "Software"), to deal in the Software without restriction, including
6784 // without limitation the rights to use, copy, modify, merge, publish,
6785 // distribute, sublicense, and/or sell copies of the Software, and to permit
6786 // persons to whom the Software is furnished to do so, subject to the
6787 // following conditions:
6788 //
6789 // The above copyright notice and this permission notice shall be included
6790 // in all copies or substantial portions of the Software.
6791 //
6792 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6793 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6794 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6795 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6796 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6797 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6798 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6799
6800 // NOTE: These type checking functions intentionally don't use `instanceof`
6801 // because it is fragile and can be easily faked with `Object.create()`.
6802 function isArray(ar) {
6803 return Array.isArray(ar);
6804 }
6805 exports.isArray = isArray;
6806
6807 function isBoolean(arg) {
6808 return typeof arg === 'boolean';
6809 }
6810 exports.isBoolean = isBoolean;
6811
6812 function isNull(arg) {
6813 return arg === null;
6814 }
6815 exports.isNull = isNull;
6816
6817 function isNullOrUndefined(arg) {
6818 return arg == null;
6819 }
6820 exports.isNullOrUndefined = isNullOrUndefined;
6821
6822 function isNumber(arg) {
6823 return typeof arg === 'number';
6824 }
6825 exports.isNumber = isNumber;
6826
6827 function isString(arg) {
6828 return typeof arg === 'string';
6829 }
6830 exports.isString = isString;
6831
6832 function isSymbol(arg) {
6833 return typeof arg === 'symbol';
6834 }
6835 exports.isSymbol = isSymbol;
6836
6837 function isUndefined(arg) {
6838 return arg === void 0;
6839 }
6840 exports.isUndefined = isUndefined;
6841
6842 function isRegExp(re) {
6843 return isObject(re) && objectToString(re) === '[object RegExp]';
6844 }
6845 exports.isRegExp = isRegExp;
6846
6847 function isObject(arg) {
6848 return typeof arg === 'object' && arg !== null;
6849 }
6850 exports.isObject = isObject;
6851
6852 function isDate(d) {
6853 return isObject(d) && objectToString(d) === '[object Date]';
6854 }
6855 exports.isDate = isDate;
6856
6857 function isError(e) {
6858 return isObject(e) &&
6859 (objectToString(e) === '[object Error]' || e instanceof Error);
6860 }
6861 exports.isError = isError;
6862
6863 function isFunction(arg) {
6864 return typeof arg === 'function';
6865 }
6866 exports.isFunction = isFunction;
6867
6868 function isPrimitive(arg) {
6869 return arg === null ||
6870 typeof arg === 'boolean' ||
6871 typeof arg === 'number' ||
6872 typeof arg === 'string' ||
6873 typeof arg === 'symbol' || // ES6 symbol
6874 typeof arg === 'undefined';
6875 }
6876 exports.isPrimitive = isPrimitive;
6877
6878 function isBuffer(arg) {
6879 return Buffer.isBuffer(arg);
6880 }
6881 exports.isBuffer = isBuffer;
6882
6883 function objectToString(o) {
6884 return Object.prototype.toString.call(o);
6885 }
6886 }).call(this,require("buffer").Buffer)
6887 },{"buffer":7}],22:[function(require,module,exports){
6888 module.exports = require("./lib/_stream_passthrough.js")
6889
6890 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6891 exports = module.exports = require('./lib/_stream_readable.js');
6892 exports.Stream = require('stream');
6893 exports.Readable = exports;
6894 exports.Writable = require('./lib/_stream_writable.js');
6895 exports.Duplex = require('./lib/_stream_duplex.js');
6896 exports.Transform = require('./lib/_stream_transform.js');
6897 exports.PassThrough = require('./lib/_stream_passthrough.js');
6898
6899 },{"./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){
6900 module.exports = require("./lib/_stream_transform.js")
6901
6902 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6903 module.exports = require("./lib/_stream_writable.js")
6904
6905 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6906 // Copyright Joyent, Inc. and other Node contributors.
6907 //
6908 // Permission is hereby granted, free of charge, to any person obtaining a
6909 // copy of this software and associated documentation files (the
6910 // "Software"), to deal in the Software without restriction, including
6911 // without limitation the rights to use, copy, modify, merge, publish,
6912 // distribute, sublicense, and/or sell copies of the Software, and to permit
6913 // persons to whom the Software is furnished to do so, subject to the
6914 // following conditions:
6915 //
6916 // The above copyright notice and this permission notice shall be included
6917 // in all copies or substantial portions of the Software.
6918 //
6919 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6920 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6921 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6922 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6923 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6924 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6925 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6926
6927 module.exports = Stream;
6928
6929 var EE = require('events').EventEmitter;
6930 var inherits = require('inherits');
6931
6932 inherits(Stream, EE);
6933 Stream.Readable = require('readable-stream/readable.js');
6934 Stream.Writable = require('readable-stream/writable.js');
6935 Stream.Duplex = require('readable-stream/duplex.js');
6936 Stream.Transform = require('readable-stream/transform.js');
6937 Stream.PassThrough = require('readable-stream/passthrough.js');
6938
6939 // Backwards-compat with node 0.4.x
6940 Stream.Stream = Stream;
6941
6942
6943
6944 // old-style streams. Note that the pipe method (the only relevant
6945 // part of this class) is overridden in the Readable class.
6946
6947 function Stream() {
6948 EE.call(this);
6949 }
6950
6951 Stream.prototype.pipe = function(dest, options) {
6952 var source = this;
6953
6954 function ondata(chunk) {
6955 if (dest.writable) {
6956 if (false === dest.write(chunk) && source.pause) {
6957 source.pause();
6958 }
6959 }
6960 }
6961
6962 source.on('data', ondata);
6963
6964 function ondrain() {
6965 if (source.readable && source.resume) {
6966 source.resume();
6967 }
6968 }
6969
6970 dest.on('drain', ondrain);
6971
6972 // If the 'end' option is not supplied, dest.end() will be called when
6973 // source gets the 'end' or 'close' events. Only dest.end() once.
6974 if (!dest._isStdio && (!options || options.end !== false)) {
6975 source.on('end', onend);
6976 source.on('close', onclose);
6977 }
6978
6979 var didOnEnd = false;
6980 function onend() {
6981 if (didOnEnd) return;
6982 didOnEnd = true;
6983
6984 dest.end();
6985 }
6986
6987
6988 function onclose() {
6989 if (didOnEnd) return;
6990 didOnEnd = true;
6991
6992 if (typeof dest.destroy === 'function') dest.destroy();
6993 }
6994
6995 // don't leave dangling pipes when there are errors.
6996 function onerror(er) {
6997 cleanup();
6998 if (EE.listenerCount(this, 'error') === 0) {
6999 throw er; // Unhandled stream error in pipe.
7000 }
7001 }
7002
7003 source.on('error', onerror);
7004 dest.on('error', onerror);
7005
7006 // remove all the event listeners that were added.
7007 function cleanup() {
7008 source.removeListener('data', ondata);
7009 dest.removeListener('drain', ondrain);
7010
7011 source.removeListener('end', onend);
7012 source.removeListener('close', onclose);
7013
7014 source.removeListener('error', onerror);
7015 dest.removeListener('error', onerror);
7016
7017 source.removeListener('end', cleanup);
7018 source.removeListener('close', cleanup);
7019
7020 dest.removeListener('close', cleanup);
7021 }
7022
7023 source.on('end', cleanup);
7024 source.on('close', cleanup);
7025
7026 dest.on('close', cleanup);
7027
7028 dest.emit('pipe', source);
7029
7030 // Allow for unix-like usage: A.pipe(B).pipe(C)
7031 return dest;
7032 };
7033
7034 },{"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){
7035 // Copyright Joyent, Inc. and other Node contributors.
7036 //
7037 // Permission is hereby granted, free of charge, to any person obtaining a
7038 // copy of this software and associated documentation files (the
7039 // "Software"), to deal in the Software without restriction, including
7040 // without limitation the rights to use, copy, modify, merge, publish,
7041 // distribute, sublicense, and/or sell copies of the Software, and to permit
7042 // persons to whom the Software is furnished to do so, subject to the
7043 // following conditions:
7044 //
7045 // The above copyright notice and this permission notice shall be included
7046 // in all copies or substantial portions of the Software.
7047 //
7048 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7049 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7050 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7051 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7052 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7053 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7054 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7055
7056 var Buffer = require('buffer').Buffer;
7057
7058 var isBufferEncoding = Buffer.isEncoding
7059 || function(encoding) {
7060 switch (encoding && encoding.toLowerCase()) {
7061 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;
7062 default: return false;
7063 }
7064 }
7065
7066
7067 function assertEncoding(encoding) {
7068 if (encoding && !isBufferEncoding(encoding)) {
7069 throw new Error('Unknown encoding: ' + encoding);
7070 }
7071 }
7072
7073 // StringDecoder provides an interface for efficiently splitting a series of
7074 // buffers into a series of JS strings without breaking apart multi-byte
7075 // characters. CESU-8 is handled as part of the UTF-8 encoding.
7076 //
7077 // @TODO Handling all encodings inside a single object makes it very difficult
7078 // to reason about this code, so it should be split up in the future.
7079 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7080 // points as used by CESU-8.
7081 var StringDecoder = exports.StringDecoder = function(encoding) {
7082 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7083 assertEncoding(encoding);
7084 switch (this.encoding) {
7085 case 'utf8':
7086 // CESU-8 represents each of Surrogate Pair by 3-bytes
7087 this.surrogateSize = 3;
7088 break;
7089 case 'ucs2':
7090 case 'utf16le':
7091 // UTF-16 represents each of Surrogate Pair by 2-bytes
7092 this.surrogateSize = 2;
7093 this.detectIncompleteChar = utf16DetectIncompleteChar;
7094 break;
7095 case 'base64':
7096 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7097 this.surrogateSize = 3;
7098 this.detectIncompleteChar = base64DetectIncompleteChar;
7099 break;
7100 default:
7101 this.write = passThroughWrite;
7102 return;
7103 }
7104
7105 // Enough space to store all bytes of a single character. UTF-8 needs 4
7106 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7107 this.charBuffer = new Buffer(6);
7108 // Number of bytes received for the current incomplete multi-byte character.
7109 this.charReceived = 0;
7110 // Number of bytes expected for the current incomplete multi-byte character.
7111 this.charLength = 0;
7112 };
7113
7114
7115 // write decodes the given buffer and returns it as JS string that is
7116 // guaranteed to not contain any partial multi-byte characters. Any partial
7117 // character found at the end of the buffer is buffered up, and will be
7118 // returned when calling write again with the remaining bytes.
7119 //
7120 // Note: Converting a Buffer containing an orphan surrogate to a String
7121 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7122 // Buffer#write) will replace incomplete surrogates with the unicode
7123 // replacement character. See https://codereview.chromium.org/121173009/ .
7124 StringDecoder.prototype.write = function(buffer) {
7125 var charStr = '';
7126 // if our last write ended with an incomplete multibyte character
7127 while (this.charLength) {
7128 // determine how many remaining bytes this buffer has to offer for this char
7129 var available = (buffer.length >= this.charLength - this.charReceived) ?
7130 this.charLength - this.charReceived :
7131 buffer.length;
7132
7133 // add the new bytes to the char buffer
7134 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7135 this.charReceived += available;
7136
7137 if (this.charReceived < this.charLength) {
7138 // still not enough chars in this buffer? wait for more ...
7139 return '';
7140 }
7141
7142 // remove bytes belonging to the current character from the buffer
7143 buffer = buffer.slice(available, buffer.length);
7144
7145 // get the character that was split
7146 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7147
7148 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7149 var charCode = charStr.charCodeAt(charStr.length - 1);
7150 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7151 this.charLength += this.surrogateSize;
7152 charStr = '';
7153 continue;
7154 }
7155 this.charReceived = this.charLength = 0;
7156
7157 // if there are no more bytes in this buffer, just emit our char
7158 if (buffer.length === 0) {
7159 return charStr;
7160 }
7161 break;
7162 }
7163
7164 // determine and set charLength / charReceived
7165 this.detectIncompleteChar(buffer);
7166
7167 var end = buffer.length;
7168 if (this.charLength) {
7169 // buffer the incomplete character bytes we got
7170 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7171 end -= this.charReceived;
7172 }
7173
7174 charStr += buffer.toString(this.encoding, 0, end);
7175
7176 var end = charStr.length - 1;
7177 var charCode = charStr.charCodeAt(end);
7178 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7179 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7180 var size = this.surrogateSize;
7181 this.charLength += size;
7182 this.charReceived += size;
7183 this.charBuffer.copy(this.charBuffer, size, 0, size);
7184 buffer.copy(this.charBuffer, 0, 0, size);
7185 return charStr.substring(0, end);
7186 }
7187
7188 // or just emit the charStr
7189 return charStr;
7190 };
7191
7192 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7193 // the end of the given buffer. If so, it sets this.charLength to the byte
7194 // length that character, and sets this.charReceived to the number of bytes
7195 // that are available for this character.
7196 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7197 // determine how many bytes we have to check at the end of this buffer
7198 var i = (buffer.length >= 3) ? 3 : buffer.length;
7199
7200 // Figure out if one of the last i bytes of our buffer announces an
7201 // incomplete char.
7202 for (; i > 0; i--) {
7203 var c = buffer[buffer.length - i];
7204
7205 // See http://en.wikipedia.org/wiki/UTF-8#Description
7206
7207 // 110XXXXX
7208 if (i == 1 && c >> 5 == 0x06) {
7209 this.charLength = 2;
7210 break;
7211 }
7212
7213 // 1110XXXX
7214 if (i <= 2 && c >> 4 == 0x0E) {
7215 this.charLength = 3;
7216 break;
7217 }
7218
7219 // 11110XXX
7220 if (i <= 3 && c >> 3 == 0x1E) {
7221 this.charLength = 4;
7222 break;
7223 }
7224 }
7225 this.charReceived = i;
7226 };
7227
7228 StringDecoder.prototype.end = function(buffer) {
7229 var res = '';
7230 if (buffer && buffer.length)
7231 res = this.write(buffer);
7232
7233 if (this.charReceived) {
7234 var cr = this.charReceived;
7235 var buf = this.charBuffer;
7236 var enc = this.encoding;
7237 res += buf.slice(0, cr).toString(enc);
7238 }
7239
7240 return res;
7241 };
7242
7243 function passThroughWrite(buffer) {
7244 return buffer.toString(this.encoding);
7245 }
7246
7247 function utf16DetectIncompleteChar(buffer) {
7248 this.charReceived = buffer.length % 2;
7249 this.charLength = this.charReceived ? 2 : 0;
7250 }
7251
7252 function base64DetectIncompleteChar(buffer) {
7253 this.charReceived = buffer.length % 3;
7254 this.charLength = this.charReceived ? 3 : 0;
7255 }
7256
7257 },{"buffer":7}],28:[function(require,module,exports){
7258 module.exports = function isBuffer(arg) {
7259 return arg && typeof arg === 'object'
7260 && typeof arg.copy === 'function'
7261 && typeof arg.fill === 'function'
7262 && typeof arg.readUInt8 === 'function';
7263 }
7264 },{}],29:[function(require,module,exports){
7265 (function (process,global){
7266 // Copyright Joyent, Inc. and other Node contributors.
7267 //
7268 // Permission is hereby granted, free of charge, to any person obtaining a
7269 // copy of this software and associated documentation files (the
7270 // "Software"), to deal in the Software without restriction, including
7271 // without limitation the rights to use, copy, modify, merge, publish,
7272 // distribute, sublicense, and/or sell copies of the Software, and to permit
7273 // persons to whom the Software is furnished to do so, subject to the
7274 // following conditions:
7275 //
7276 // The above copyright notice and this permission notice shall be included
7277 // in all copies or substantial portions of the Software.
7278 //
7279 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7280 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7281 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7282 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7283 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7284 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7285 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7286
7287 var formatRegExp = /%[sdj%]/g;
7288 exports.format = function(f) {
7289 if (!isString(f)) {
7290 var objects = [];
7291 for (var i = 0; i < arguments.length; i++) {
7292 objects.push(inspect(arguments[i]));
7293 }
7294 return objects.join(' ');
7295 }
7296
7297 var i = 1;
7298 var args = arguments;
7299 var len = args.length;
7300 var str = String(f).replace(formatRegExp, function(x) {
7301 if (x === '%%') return '%';
7302 if (i >= len) return x;
7303 switch (x) {
7304 case '%s': return String(args[i++]);
7305 case '%d': return Number(args[i++]);
7306 case '%j':
7307 try {
7308 return JSON.stringify(args[i++]);
7309 } catch (_) {
7310 return '[Circular]';
7311 }
7312 default:
7313 return x;
7314 }
7315 });
7316 for (var x = args[i]; i < len; x = args[++i]) {
7317 if (isNull(x) || !isObject(x)) {
7318 str += ' ' + x;
7319 } else {
7320 str += ' ' + inspect(x);
7321 }
7322 }
7323 return str;
7324 };
7325
7326
7327 // Mark that a method should not be used.
7328 // Returns a modified function which warns once by default.
7329 // If --no-deprecation is set, then it is a no-op.
7330 exports.deprecate = function(fn, msg) {
7331 // Allow for deprecating things in the process of starting up.
7332 if (isUndefined(global.process)) {
7333 return function() {
7334 return exports.deprecate(fn, msg).apply(this, arguments);
7335 };
7336 }
7337
7338 if (process.noDeprecation === true) {
7339 return fn;
7340 }
7341
7342 var warned = false;
7343 function deprecated() {
7344 if (!warned) {
7345 if (process.throwDeprecation) {
7346 throw new Error(msg);
7347 } else if (process.traceDeprecation) {
7348 console.trace(msg);
7349 } else {
7350 console.error(msg);
7351 }
7352 warned = true;
7353 }
7354 return fn.apply(this, arguments);
7355 }
7356
7357 return deprecated;
7358 };
7359
7360
7361 var debugs = {};
7362 var debugEnviron;
7363 exports.debuglog = function(set) {
7364 if (isUndefined(debugEnviron))
7365 debugEnviron = process.env.NODE_DEBUG || '';
7366 set = set.toUpperCase();
7367 if (!debugs[set]) {
7368 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7369 var pid = process.pid;
7370 debugs[set] = function() {
7371 var msg = exports.format.apply(exports, arguments);
7372 console.error('%s %d: %s', set, pid, msg);
7373 };
7374 } else {
7375 debugs[set] = function() {};
7376 }
7377 }
7378 return debugs[set];
7379 };
7380
7381
7382 /**
7383 * Echos the value of a value. Trys to print the value out
7384 * in the best way possible given the different types.
7385 *
7386 * @param {Object} obj The object to print out.
7387 * @param {Object} opts Optional options object that alters the output.
7388 */
7389 /* legacy: obj, showHidden, depth, colors*/
7390 function inspect(obj, opts) {
7391 // default options
7392 var ctx = {
7393 seen: [],
7394 stylize: stylizeNoColor
7395 };
7396 // legacy...
7397 if (arguments.length >= 3) ctx.depth = arguments[2];
7398 if (arguments.length >= 4) ctx.colors = arguments[3];
7399 if (isBoolean(opts)) {
7400 // legacy...
7401 ctx.showHidden = opts;
7402 } else if (opts) {
7403 // got an "options" object
7404 exports._extend(ctx, opts);
7405 }
7406 // set default options
7407 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7408 if (isUndefined(ctx.depth)) ctx.depth = 2;
7409 if (isUndefined(ctx.colors)) ctx.colors = false;
7410 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7411 if (ctx.colors) ctx.stylize = stylizeWithColor;
7412 return formatValue(ctx, obj, ctx.depth);
7413 }
7414 exports.inspect = inspect;
7415
7416
7417 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7418 inspect.colors = {
7419 'bold' : [1, 22],
7420 'italic' : [3, 23],
7421 'underline' : [4, 24],
7422 'inverse' : [7, 27],
7423 'white' : [37, 39],
7424 'grey' : [90, 39],
7425 'black' : [30, 39],
7426 'blue' : [34, 39],
7427 'cyan' : [36, 39],
7428 'green' : [32, 39],
7429 'magenta' : [35, 39],
7430 'red' : [31, 39],
7431 'yellow' : [33, 39]
7432 };
7433
7434 // Don't use 'blue' not visible on cmd.exe
7435 inspect.styles = {
7436 'special': 'cyan',
7437 'number': 'yellow',
7438 'boolean': 'yellow',
7439 'undefined': 'grey',
7440 'null': 'bold',
7441 'string': 'green',
7442 'date': 'magenta',
7443 // "name": intentionally not styling
7444 'regexp': 'red'
7445 };
7446
7447
7448 function stylizeWithColor(str, styleType) {
7449 var style = inspect.styles[styleType];
7450
7451 if (style) {
7452 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7453 '\u001b[' + inspect.colors[style][1] + 'm';
7454 } else {
7455 return str;
7456 }
7457 }
7458
7459
7460 function stylizeNoColor(str, styleType) {
7461 return str;
7462 }
7463
7464
7465 function arrayToHash(array) {
7466 var hash = {};
7467
7468 array.forEach(function(val, idx) {
7469 hash[val] = true;
7470 });
7471
7472 return hash;
7473 }
7474
7475
7476 function formatValue(ctx, value, recurseTimes) {
7477 // Provide a hook for user-specified inspect functions.
7478 // Check that value is an object with an inspect function on it
7479 if (ctx.customInspect &&
7480 value &&
7481 isFunction(value.inspect) &&
7482 // Filter out the util module, it's inspect function is special
7483 value.inspect !== exports.inspect &&
7484 // Also filter out any prototype objects using the circular check.
7485 !(value.constructor && value.constructor.prototype === value)) {
7486 var ret = value.inspect(recurseTimes, ctx);
7487 if (!isString(ret)) {
7488 ret = formatValue(ctx, ret, recurseTimes);
7489 }
7490 return ret;
7491 }
7492
7493 // Primitive types cannot have properties
7494 var primitive = formatPrimitive(ctx, value);
7495 if (primitive) {
7496 return primitive;
7497 }
7498
7499 // Look up the keys of the object.
7500 var keys = Object.keys(value);
7501 var visibleKeys = arrayToHash(keys);
7502
7503 if (ctx.showHidden) {
7504 keys = Object.getOwnPropertyNames(value);
7505 }
7506
7507 // IE doesn't make error fields non-enumerable
7508 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7509 if (isError(value)
7510 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7511 return formatError(value);
7512 }
7513
7514 // Some type of object without properties can be shortcutted.
7515 if (keys.length === 0) {
7516 if (isFunction(value)) {
7517 var name = value.name ? ': ' + value.name : '';
7518 return ctx.stylize('[Function' + name + ']', 'special');
7519 }
7520 if (isRegExp(value)) {
7521 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7522 }
7523 if (isDate(value)) {
7524 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7525 }
7526 if (isError(value)) {
7527 return formatError(value);
7528 }
7529 }
7530
7531 var base = '', array = false, braces = ['{', '}'];
7532
7533 // Make Array say that they are Array
7534 if (isArray(value)) {
7535 array = true;
7536 braces = ['[', ']'];
7537 }
7538
7539 // Make functions say that they are functions
7540 if (isFunction(value)) {
7541 var n = value.name ? ': ' + value.name : '';
7542 base = ' [Function' + n + ']';
7543 }
7544
7545 // Make RegExps say that they are RegExps
7546 if (isRegExp(value)) {
7547 base = ' ' + RegExp.prototype.toString.call(value);
7548 }
7549
7550 // Make dates with properties first say the date
7551 if (isDate(value)) {
7552 base = ' ' + Date.prototype.toUTCString.call(value);
7553 }
7554
7555 // Make error with message first say the error
7556 if (isError(value)) {
7557 base = ' ' + formatError(value);
7558 }
7559
7560 if (keys.length === 0 && (!array || value.length == 0)) {
7561 return braces[0] + base + braces[1];
7562 }
7563
7564 if (recurseTimes < 0) {
7565 if (isRegExp(value)) {
7566 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7567 } else {
7568 return ctx.stylize('[Object]', 'special');
7569 }
7570 }
7571
7572 ctx.seen.push(value);
7573
7574 var output;
7575 if (array) {
7576 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7577 } else {
7578 output = keys.map(function(key) {
7579 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7580 });
7581 }
7582
7583 ctx.seen.pop();
7584
7585 return reduceToSingleString(output, base, braces);
7586 }
7587
7588
7589 function formatPrimitive(ctx, value) {
7590 if (isUndefined(value))
7591 return ctx.stylize('undefined', 'undefined');
7592 if (isString(value)) {
7593 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7594 .replace(/'/g, "\\'")
7595 .replace(/\\"/g, '"') + '\'';
7596 return ctx.stylize(simple, 'string');
7597 }
7598 if (isNumber(value))
7599 return ctx.stylize('' + value, 'number');
7600 if (isBoolean(value))
7601 return ctx.stylize('' + value, 'boolean');
7602 // For some reason typeof null is "object", so special case here.
7603 if (isNull(value))
7604 return ctx.stylize('null', 'null');
7605 }
7606
7607
7608 function formatError(value) {
7609 return '[' + Error.prototype.toString.call(value) + ']';
7610 }
7611
7612
7613 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7614 var output = [];
7615 for (var i = 0, l = value.length; i < l; ++i) {
7616 if (hasOwnProperty(value, String(i))) {
7617 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7618 String(i), true));
7619 } else {
7620 output.push('');
7621 }
7622 }
7623 keys.forEach(function(key) {
7624 if (!key.match(/^\d+$/)) {
7625 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7626 key, true));
7627 }
7628 });
7629 return output;
7630 }
7631
7632
7633 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7634 var name, str, desc;
7635 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7636 if (desc.get) {
7637 if (desc.set) {
7638 str = ctx.stylize('[Getter/Setter]', 'special');
7639 } else {
7640 str = ctx.stylize('[Getter]', 'special');
7641 }
7642 } else {
7643 if (desc.set) {
7644 str = ctx.stylize('[Setter]', 'special');
7645 }
7646 }
7647 if (!hasOwnProperty(visibleKeys, key)) {
7648 name = '[' + key + ']';
7649 }
7650 if (!str) {
7651 if (ctx.seen.indexOf(desc.value) < 0) {
7652 if (isNull(recurseTimes)) {
7653 str = formatValue(ctx, desc.value, null);
7654 } else {
7655 str = formatValue(ctx, desc.value, recurseTimes - 1);
7656 }
7657 if (str.indexOf('\n') > -1) {
7658 if (array) {
7659 str = str.split('\n').map(function(line) {
7660 return ' ' + line;
7661 }).join('\n').substr(2);
7662 } else {
7663 str = '\n' + str.split('\n').map(function(line) {
7664 return ' ' + line;
7665 }).join('\n');
7666 }
7667 }
7668 } else {
7669 str = ctx.stylize('[Circular]', 'special');
7670 }
7671 }
7672 if (isUndefined(name)) {
7673 if (array && key.match(/^\d+$/)) {
7674 return str;
7675 }
7676 name = JSON.stringify('' + key);
7677 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7678 name = name.substr(1, name.length - 2);
7679 name = ctx.stylize(name, 'name');
7680 } else {
7681 name = name.replace(/'/g, "\\'")
7682 .replace(/\\"/g, '"')
7683 .replace(/(^"|"$)/g, "'");
7684 name = ctx.stylize(name, 'string');
7685 }
7686 }
7687
7688 return name + ': ' + str;
7689 }
7690
7691
7692 function reduceToSingleString(output, base, braces) {
7693 var numLinesEst = 0;
7694 var length = output.reduce(function(prev, cur) {
7695 numLinesEst++;
7696 if (cur.indexOf('\n') >= 0) numLinesEst++;
7697 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7698 }, 0);
7699
7700 if (length > 60) {
7701 return braces[0] +
7702 (base === '' ? '' : base + '\n ') +
7703 ' ' +
7704 output.join(',\n ') +
7705 ' ' +
7706 braces[1];
7707 }
7708
7709 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7710 }
7711
7712
7713 // NOTE: These type checking functions intentionally don't use `instanceof`
7714 // because it is fragile and can be easily faked with `Object.create()`.
7715 function isArray(ar) {
7716 return Array.isArray(ar);
7717 }
7718 exports.isArray = isArray;
7719
7720 function isBoolean(arg) {
7721 return typeof arg === 'boolean';
7722 }
7723 exports.isBoolean = isBoolean;
7724
7725 function isNull(arg) {
7726 return arg === null;
7727 }
7728 exports.isNull = isNull;
7729
7730 function isNullOrUndefined(arg) {
7731 return arg == null;
7732 }
7733 exports.isNullOrUndefined = isNullOrUndefined;
7734
7735 function isNumber(arg) {
7736 return typeof arg === 'number';
7737 }
7738 exports.isNumber = isNumber;
7739
7740 function isString(arg) {
7741 return typeof arg === 'string';
7742 }
7743 exports.isString = isString;
7744
7745 function isSymbol(arg) {
7746 return typeof arg === 'symbol';
7747 }
7748 exports.isSymbol = isSymbol;
7749
7750 function isUndefined(arg) {
7751 return arg === void 0;
7752 }
7753 exports.isUndefined = isUndefined;
7754
7755 function isRegExp(re) {
7756 return isObject(re) && objectToString(re) === '[object RegExp]';
7757 }
7758 exports.isRegExp = isRegExp;
7759
7760 function isObject(arg) {
7761 return typeof arg === 'object' && arg !== null;
7762 }
7763 exports.isObject = isObject;
7764
7765 function isDate(d) {
7766 return isObject(d) && objectToString(d) === '[object Date]';
7767 }
7768 exports.isDate = isDate;
7769
7770 function isError(e) {
7771 return isObject(e) &&
7772 (objectToString(e) === '[object Error]' || e instanceof Error);
7773 }
7774 exports.isError = isError;
7775
7776 function isFunction(arg) {
7777 return typeof arg === 'function';
7778 }
7779 exports.isFunction = isFunction;
7780
7781 function isPrimitive(arg) {
7782 return arg === null ||
7783 typeof arg === 'boolean' ||
7784 typeof arg === 'number' ||
7785 typeof arg === 'string' ||
7786 typeof arg === 'symbol' || // ES6 symbol
7787 typeof arg === 'undefined';
7788 }
7789 exports.isPrimitive = isPrimitive;
7790
7791 exports.isBuffer = require('./support/isBuffer');
7792
7793 function objectToString(o) {
7794 return Object.prototype.toString.call(o);
7795 }
7796
7797
7798 function pad(n) {
7799 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7800 }
7801
7802
7803 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7804 'Oct', 'Nov', 'Dec'];
7805
7806 // 26 Feb 16:19:34
7807 function timestamp() {
7808 var d = new Date();
7809 var time = [pad(d.getHours()),
7810 pad(d.getMinutes()),
7811 pad(d.getSeconds())].join(':');
7812 return [d.getDate(), months[d.getMonth()], time].join(' ');
7813 }
7814
7815
7816 // log is just a thin wrapper to console.log that prepends a timestamp
7817 exports.log = function() {
7818 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7819 };
7820
7821
7822 /**
7823 * Inherit the prototype methods from one constructor into another.
7824 *
7825 * The Function.prototype.inherits from lang.js rewritten as a standalone
7826 * function (not on Function.prototype). NOTE: If this file is to be loaded
7827 * during bootstrapping this function needs to be rewritten using some native
7828 * functions as prototype setup using normal JavaScript does not work as
7829 * expected during bootstrapping (see mirror.js in r114903).
7830 *
7831 * @param {function} ctor Constructor function which needs to inherit the
7832 * prototype.
7833 * @param {function} superCtor Constructor function to inherit prototype from.
7834 */
7835 exports.inherits = require('inherits');
7836
7837 exports._extend = function(origin, add) {
7838 // Don't do anything if add isn't an object
7839 if (!add || !isObject(add)) return origin;
7840
7841 var keys = Object.keys(add);
7842 var i = keys.length;
7843 while (i--) {
7844 origin[keys[i]] = add[keys[i]];
7845 }
7846 return origin;
7847 };
7848
7849 function hasOwnProperty(obj, prop) {
7850 return Object.prototype.hasOwnProperty.call(obj, prop);
7851 }
7852
7853 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7854 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7855 // Base58 encoding/decoding
7856 // Originally written by Mike Hearn for BitcoinJ
7857 // Copyright (c) 2011 Google Inc
7858 // Ported to JavaScript by Stefan Thomas
7859 // Merged Buffer refactorings from base58-native by Stephen Pair
7860 // Copyright (c) 2013 BitPay Inc
7861
7862 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7863 var ALPHABET_MAP = {}
7864 for(var i = 0; i < ALPHABET.length; i++) {
7865 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7866 }
7867 var BASE = 58
7868
7869 function encode(buffer) {
7870 if (buffer.length === 0) return ''
7871
7872 var i, j, digits = [0]
7873 for (i = 0; i < buffer.length; i++) {
7874 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7875
7876 digits[0] += buffer[i]
7877
7878 var carry = 0
7879 for (j = 0; j < digits.length; ++j) {
7880 digits[j] += carry
7881
7882 carry = (digits[j] / BASE) | 0
7883 digits[j] %= BASE
7884 }
7885
7886 while (carry) {
7887 digits.push(carry % BASE)
7888
7889 carry = (carry / BASE) | 0
7890 }
7891 }
7892
7893 // deal with leading zeros
7894 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7895
7896 // convert digits to a string
7897 var stringOutput = ""
7898 for (var i = digits.length - 1; i >= 0; i--) {
7899 stringOutput = stringOutput + ALPHABET[digits[i]]
7900 }
7901 return stringOutput
7902 }
7903
7904 function decode(string) {
7905 if (string.length === 0) return []
7906
7907 var i, j, bytes = [0]
7908 for (i = 0; i < string.length; i++) {
7909 var c = string[i]
7910 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7911
7912 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7913 bytes[0] += ALPHABET_MAP[c]
7914
7915 var carry = 0
7916 for (j = 0; j < bytes.length; ++j) {
7917 bytes[j] += carry
7918
7919 carry = bytes[j] >> 8
7920 bytes[j] &= 0xff
7921 }
7922
7923 while (carry) {
7924 bytes.push(carry & 0xff)
7925
7926 carry >>= 8
7927 }
7928 }
7929
7930 // deal with leading zeros
7931 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7932
7933 return bytes.reverse()
7934 }
7935
7936 module.exports = {
7937 encode: encode,
7938 decode: decode
7939 }
7940
7941 },{}],31:[function(require,module,exports){
7942 (function (Buffer){
7943 'use strict'
7944
7945 var base58 = require('bs58')
7946 var createHash = require('create-hash')
7947
7948 // SHA256(SHA256(buffer))
7949 function sha256x2 (buffer) {
7950 buffer = createHash('sha256').update(buffer).digest()
7951 return createHash('sha256').update(buffer).digest()
7952 }
7953
7954 // Encode a buffer as a base58-check encoded string
7955 function encode (payload) {
7956 var checksum = sha256x2(payload).slice(0, 4)
7957
7958 return base58.encode(Buffer.concat([
7959 payload,
7960 checksum
7961 ]))
7962 }
7963
7964 // Decode a base58-check encoded string to a buffer
7965 function decode (string) {
7966 var buffer = new Buffer(base58.decode(string))
7967
7968 var payload = buffer.slice(0, -4)
7969 var checksum = buffer.slice(-4)
7970 var newChecksum = sha256x2(payload).slice(0, 4)
7971
7972 for (var i = 0; i < newChecksum.length; ++i) {
7973 if (newChecksum[i] === checksum[i]) continue
7974
7975 throw new Error('Invalid checksum')
7976 }
7977
7978 return payload
7979 }
7980
7981 module.exports = {
7982 encode: encode,
7983 decode: decode
7984 }
7985
7986 }).call(this,require("buffer").Buffer)
7987 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7988 (function (Buffer){
7989 'use strict';
7990 var inherits = require('inherits')
7991 var md5 = require('./md5')
7992 var rmd160 = require('ripemd160')
7993 var sha = require('sha.js')
7994
7995 var Transform = require('stream').Transform
7996
7997 function HashNoConstructor(hash) {
7998 Transform.call(this)
7999
8000 this._hash = hash
8001 this.buffers = []
8002 }
8003
8004 inherits(HashNoConstructor, Transform)
8005
8006 HashNoConstructor.prototype._transform = function (data, _, next) {
8007 this.buffers.push(data)
8008
8009 next()
8010 }
8011
8012 HashNoConstructor.prototype._flush = function (next) {
8013 this.push(this.digest())
8014 next()
8015 }
8016
8017 HashNoConstructor.prototype.update = function (data, enc) {
8018 if (typeof data === 'string') {
8019 data = new Buffer(data, enc)
8020 }
8021
8022 this.buffers.push(data)
8023 return this
8024 }
8025
8026 HashNoConstructor.prototype.digest = function (enc) {
8027 var buf = Buffer.concat(this.buffers)
8028 var r = this._hash(buf)
8029 this.buffers = null
8030
8031 return enc ? r.toString(enc) : r
8032 }
8033
8034 function Hash(hash) {
8035 Transform.call(this)
8036
8037 this._hash = hash
8038 }
8039
8040 inherits(Hash, Transform)
8041
8042 Hash.prototype._transform = function (data, enc, next) {
8043 if (enc) data = new Buffer(data, enc)
8044
8045 this._hash.update(data)
8046
8047 next()
8048 }
8049
8050 Hash.prototype._flush = function (next) {
8051 this.push(this._hash.digest())
8052 this._hash = null
8053
8054 next()
8055 }
8056
8057 Hash.prototype.update = function (data, enc) {
8058 if (typeof data === 'string') {
8059 data = new Buffer(data, enc)
8060 }
8061
8062 this._hash.update(data)
8063 return this
8064 }
8065
8066 Hash.prototype.digest = function (enc) {
8067 var outData = this._hash.digest()
8068
8069 return enc ? outData.toString(enc) : outData
8070 }
8071
8072 module.exports = function createHash (alg) {
8073 if ('md5' === alg) return new HashNoConstructor(md5)
8074 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8075
8076 return new Hash(sha(alg))
8077 }
8078
8079 }).call(this,require("buffer").Buffer)
8080 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
8081 (function (Buffer){
8082 'use strict';
8083 var intSize = 4;
8084 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8085 var chrsz = 8;
8086
8087 function toArray(buf, bigEndian) {
8088 if ((buf.length % intSize) !== 0) {
8089 var len = buf.length + (intSize - (buf.length % intSize));
8090 buf = Buffer.concat([buf, zeroBuffer], len);
8091 }
8092
8093 var arr = [];
8094 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8095 for (var i = 0; i < buf.length; i += intSize) {
8096 arr.push(fn.call(buf, i));
8097 }
8098 return arr;
8099 }
8100
8101 function toBuffer(arr, size, bigEndian) {
8102 var buf = new Buffer(size);
8103 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8104 for (var i = 0; i < arr.length; i++) {
8105 fn.call(buf, arr[i], i * 4, true);
8106 }
8107 return buf;
8108 }
8109
8110 function hash(buf, fn, hashSize, bigEndian) {
8111 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8112 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8113 return toBuffer(arr, hashSize, bigEndian);
8114 }
8115 exports.hash = hash;
8116 }).call(this,require("buffer").Buffer)
8117 },{"buffer":7}],34:[function(require,module,exports){
8118 'use strict';
8119 /*
8120 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8121 * Digest Algorithm, as defined in RFC 1321.
8122 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8123 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8124 * Distributed under the BSD License
8125 * See http://pajhome.org.uk/crypt/md5 for more info.
8126 */
8127
8128 var helpers = require('./helpers');
8129
8130 /*
8131 * Calculate the MD5 of an array of little-endian words, and a bit length
8132 */
8133 function core_md5(x, len)
8134 {
8135 /* append padding */
8136 x[len >> 5] |= 0x80 << ((len) % 32);
8137 x[(((len + 64) >>> 9) << 4) + 14] = len;
8138
8139 var a = 1732584193;
8140 var b = -271733879;
8141 var c = -1732584194;
8142 var d = 271733878;
8143
8144 for(var i = 0; i < x.length; i += 16)
8145 {
8146 var olda = a;
8147 var oldb = b;
8148 var oldc = c;
8149 var oldd = d;
8150
8151 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8152 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8153 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8154 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8155 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8156 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8157 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8158 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8159 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8160 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8161 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8162 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8163 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8164 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8165 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8166 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8167
8168 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8169 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8170 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8171 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8172 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8173 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8174 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8175 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8176 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8177 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8178 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8179 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8180 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8181 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8182 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8183 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8184
8185 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8186 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8187 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8188 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8189 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8190 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8191 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8192 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8193 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8194 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8195 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8196 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8197 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8198 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8199 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8200 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8201
8202 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8203 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8204 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8205 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8206 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8207 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8208 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8209 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8210 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8211 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8212 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8213 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8214 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8215 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8216 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8217 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8218
8219 a = safe_add(a, olda);
8220 b = safe_add(b, oldb);
8221 c = safe_add(c, oldc);
8222 d = safe_add(d, oldd);
8223 }
8224 return Array(a, b, c, d);
8225
8226 }
8227
8228 /*
8229 * These functions implement the four basic operations the algorithm uses.
8230 */
8231 function md5_cmn(q, a, b, x, s, t)
8232 {
8233 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8234 }
8235 function md5_ff(a, b, c, d, x, s, t)
8236 {
8237 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8238 }
8239 function md5_gg(a, b, c, d, x, s, t)
8240 {
8241 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8242 }
8243 function md5_hh(a, b, c, d, x, s, t)
8244 {
8245 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8246 }
8247 function md5_ii(a, b, c, d, x, s, t)
8248 {
8249 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8250 }
8251
8252 /*
8253 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8254 * to work around bugs in some JS interpreters.
8255 */
8256 function safe_add(x, y)
8257 {
8258 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8259 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8260 return (msw << 16) | (lsw & 0xFFFF);
8261 }
8262
8263 /*
8264 * Bitwise rotate a 32-bit number to the left.
8265 */
8266 function bit_rol(num, cnt)
8267 {
8268 return (num << cnt) | (num >>> (32 - cnt));
8269 }
8270
8271 module.exports = function md5(buf) {
8272 return helpers.hash(buf, core_md5, 16);
8273 };
8274 },{"./helpers":33}],35:[function(require,module,exports){
8275 arguments[4][12][0].apply(exports,arguments)
8276 },{"dup":12}],36:[function(require,module,exports){
8277 (function (Buffer){
8278 /*
8279 CryptoJS v3.1.2
8280 code.google.com/p/crypto-js
8281 (c) 2009-2013 by Jeff Mott. All rights reserved.
8282 code.google.com/p/crypto-js/wiki/License
8283 */
8284 /** @preserve
8285 (c) 2012 by Cédric Mesnil. All rights reserved.
8286
8287 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8288
8289 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8290 - 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.
8291
8292 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8293 */
8294
8295 // constants table
8296 var zl = [
8297 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8298 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8299 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8300 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8301 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8302 ]
8303
8304 var zr = [
8305 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8306 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8307 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8308 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8309 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8310 ]
8311
8312 var sl = [
8313 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8314 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8315 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8316 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8317 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8318 ]
8319
8320 var sr = [
8321 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8322 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8323 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8324 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8325 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8326 ]
8327
8328 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8329 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8330
8331 function bytesToWords (bytes) {
8332 var words = []
8333 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8334 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8335 }
8336 return words
8337 }
8338
8339 function wordsToBytes (words) {
8340 var bytes = []
8341 for (var b = 0; b < words.length * 32; b += 8) {
8342 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8343 }
8344 return bytes
8345 }
8346
8347 function processBlock (H, M, offset) {
8348 // swap endian
8349 for (var i = 0; i < 16; i++) {
8350 var offset_i = offset + i
8351 var M_offset_i = M[offset_i]
8352
8353 // Swap
8354 M[offset_i] = (
8355 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8356 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8357 )
8358 }
8359
8360 // Working variables
8361 var al, bl, cl, dl, el
8362 var ar, br, cr, dr, er
8363
8364 ar = al = H[0]
8365 br = bl = H[1]
8366 cr = cl = H[2]
8367 dr = dl = H[3]
8368 er = el = H[4]
8369
8370 // computation
8371 var t
8372 for (i = 0; i < 80; i += 1) {
8373 t = (al + M[offset + zl[i]]) | 0
8374 if (i < 16) {
8375 t += f1(bl, cl, dl) + hl[0]
8376 } else if (i < 32) {
8377 t += f2(bl, cl, dl) + hl[1]
8378 } else if (i < 48) {
8379 t += f3(bl, cl, dl) + hl[2]
8380 } else if (i < 64) {
8381 t += f4(bl, cl, dl) + hl[3]
8382 } else {// if (i<80) {
8383 t += f5(bl, cl, dl) + hl[4]
8384 }
8385 t = t | 0
8386 t = rotl(t, sl[i])
8387 t = (t + el) | 0
8388 al = el
8389 el = dl
8390 dl = rotl(cl, 10)
8391 cl = bl
8392 bl = t
8393
8394 t = (ar + M[offset + zr[i]]) | 0
8395 if (i < 16) {
8396 t += f5(br, cr, dr) + hr[0]
8397 } else if (i < 32) {
8398 t += f4(br, cr, dr) + hr[1]
8399 } else if (i < 48) {
8400 t += f3(br, cr, dr) + hr[2]
8401 } else if (i < 64) {
8402 t += f2(br, cr, dr) + hr[3]
8403 } else {// if (i<80) {
8404 t += f1(br, cr, dr) + hr[4]
8405 }
8406
8407 t = t | 0
8408 t = rotl(t, sr[i])
8409 t = (t + er) | 0
8410 ar = er
8411 er = dr
8412 dr = rotl(cr, 10)
8413 cr = br
8414 br = t
8415 }
8416
8417 // intermediate hash value
8418 t = (H[1] + cl + dr) | 0
8419 H[1] = (H[2] + dl + er) | 0
8420 H[2] = (H[3] + el + ar) | 0
8421 H[3] = (H[4] + al + br) | 0
8422 H[4] = (H[0] + bl + cr) | 0
8423 H[0] = t
8424 }
8425
8426 function f1 (x, y, z) {
8427 return ((x) ^ (y) ^ (z))
8428 }
8429
8430 function f2 (x, y, z) {
8431 return (((x) & (y)) | ((~x) & (z)))
8432 }
8433
8434 function f3 (x, y, z) {
8435 return (((x) | (~(y))) ^ (z))
8436 }
8437
8438 function f4 (x, y, z) {
8439 return (((x) & (z)) | ((y) & (~(z))))
8440 }
8441
8442 function f5 (x, y, z) {
8443 return ((x) ^ ((y) | (~(z))))
8444 }
8445
8446 function rotl (x, n) {
8447 return (x << n) | (x >>> (32 - n))
8448 }
8449
8450 function ripemd160 (message) {
8451 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8452
8453 if (typeof message === 'string') {
8454 message = new Buffer(message, 'utf8')
8455 }
8456
8457 var m = bytesToWords(message)
8458
8459 var nBitsLeft = message.length * 8
8460 var nBitsTotal = message.length * 8
8461
8462 // Add padding
8463 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8464 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8465 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8466 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8467 )
8468
8469 for (var i = 0; i < m.length; i += 16) {
8470 processBlock(H, m, i)
8471 }
8472
8473 // swap endian
8474 for (i = 0; i < 5; i++) {
8475 // shortcut
8476 var H_i = H[i]
8477
8478 // Swap
8479 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8480 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8481 }
8482
8483 var digestbytes = wordsToBytes(H)
8484 return new Buffer(digestbytes)
8485 }
8486
8487 module.exports = ripemd160
8488
8489 }).call(this,require("buffer").Buffer)
8490 },{"buffer":7}],37:[function(require,module,exports){
8491 (function (Buffer){
8492 // prototype class for hash functions
8493 function Hash (blockSize, finalSize) {
8494 this._block = new Buffer(blockSize)
8495 this._finalSize = finalSize
8496 this._blockSize = blockSize
8497 this._len = 0
8498 this._s = 0
8499 }
8500
8501 Hash.prototype.update = function (data, enc) {
8502 if (typeof data === 'string') {
8503 enc = enc || 'utf8'
8504 data = new Buffer(data, enc)
8505 }
8506
8507 var l = this._len += data.length
8508 var s = this._s || 0
8509 var f = 0
8510 var buffer = this._block
8511
8512 while (s < l) {
8513 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8514 var ch = (t - f)
8515
8516 for (var i = 0; i < ch; i++) {
8517 buffer[(s % this._blockSize) + i] = data[i + f]
8518 }
8519
8520 s += ch
8521 f += ch
8522
8523 if ((s % this._blockSize) === 0) {
8524 this._update(buffer)
8525 }
8526 }
8527 this._s = s
8528
8529 return this
8530 }
8531
8532 Hash.prototype.digest = function (enc) {
8533 // Suppose the length of the message M, in bits, is l
8534 var l = this._len * 8
8535
8536 // Append the bit 1 to the end of the message
8537 this._block[this._len % this._blockSize] = 0x80
8538
8539 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8540 this._block.fill(0, this._len % this._blockSize + 1)
8541
8542 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8543 this._update(this._block)
8544 this._block.fill(0)
8545 }
8546
8547 // to this append the block which is equal to the number l written in binary
8548 // TODO: handle case where l is > Math.pow(2, 29)
8549 this._block.writeInt32BE(l, this._blockSize - 4)
8550
8551 var hash = this._update(this._block) || this._hash()
8552
8553 return enc ? hash.toString(enc) : hash
8554 }
8555
8556 Hash.prototype._update = function () {
8557 throw new Error('_update must be implemented by subclass')
8558 }
8559
8560 module.exports = Hash
8561
8562 }).call(this,require("buffer").Buffer)
8563 },{"buffer":7}],38:[function(require,module,exports){
8564 var exports = module.exports = function SHA (algorithm) {
8565 algorithm = algorithm.toLowerCase()
8566
8567 var Algorithm = exports[algorithm]
8568 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8569
8570 return new Algorithm()
8571 }
8572
8573 exports.sha = require('./sha')
8574 exports.sha1 = require('./sha1')
8575 exports.sha224 = require('./sha224')
8576 exports.sha256 = require('./sha256')
8577 exports.sha384 = require('./sha384')
8578 exports.sha512 = require('./sha512')
8579
8580 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8581 (function (Buffer){
8582 /*
8583 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8584 * in FIPS PUB 180-1
8585 * This source code is derived from sha1.js of the same repository.
8586 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8587 * operation was added.
8588 */
8589
8590 var inherits = require('inherits')
8591 var Hash = require('./hash')
8592
8593 var W = new Array(80)
8594
8595 function Sha () {
8596 this.init()
8597 this._w = W
8598
8599 Hash.call(this, 64, 56)
8600 }
8601
8602 inherits(Sha, Hash)
8603
8604 Sha.prototype.init = function () {
8605 this._a = 0x67452301 | 0
8606 this._b = 0xefcdab89 | 0
8607 this._c = 0x98badcfe | 0
8608 this._d = 0x10325476 | 0
8609 this._e = 0xc3d2e1f0 | 0
8610
8611 return this
8612 }
8613
8614 /*
8615 * Bitwise rotate a 32-bit number to the left.
8616 */
8617 function rol (num, cnt) {
8618 return (num << cnt) | (num >>> (32 - cnt))
8619 }
8620
8621 Sha.prototype._update = function (M) {
8622 var W = this._w
8623
8624 var a = this._a
8625 var b = this._b
8626 var c = this._c
8627 var d = this._d
8628 var e = this._e
8629
8630 var j = 0, k
8631
8632 /*
8633 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8634 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8635 */
8636 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8637 function loop (w, f) {
8638 W[j] = w
8639
8640 var t = rol(a, 5) + f + e + w + k
8641
8642 e = d
8643 d = c
8644 c = rol(b, 30)
8645 b = a
8646 a = t
8647 j++
8648 }
8649
8650 k = 1518500249
8651 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8652 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8653 k = 1859775393
8654 while (j < 40) loop(calcW(), b ^ c ^ d)
8655 k = -1894007588
8656 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8657 k = -899497514
8658 while (j < 80) loop(calcW(), b ^ c ^ d)
8659
8660 this._a = (a + this._a) | 0
8661 this._b = (b + this._b) | 0
8662 this._c = (c + this._c) | 0
8663 this._d = (d + this._d) | 0
8664 this._e = (e + this._e) | 0
8665 }
8666
8667 Sha.prototype._hash = function () {
8668 var H = new Buffer(20)
8669
8670 H.writeInt32BE(this._a | 0, 0)
8671 H.writeInt32BE(this._b | 0, 4)
8672 H.writeInt32BE(this._c | 0, 8)
8673 H.writeInt32BE(this._d | 0, 12)
8674 H.writeInt32BE(this._e | 0, 16)
8675
8676 return H
8677 }
8678
8679 module.exports = Sha
8680
8681
8682 }).call(this,require("buffer").Buffer)
8683 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8684 (function (Buffer){
8685 /*
8686 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8687 * in FIPS PUB 180-1
8688 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8689 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8690 * Distributed under the BSD License
8691 * See http://pajhome.org.uk/crypt/md5 for details.
8692 */
8693
8694 var inherits = require('inherits')
8695 var Hash = require('./hash')
8696
8697 var W = new Array(80)
8698
8699 function Sha1 () {
8700 this.init()
8701 this._w = W
8702
8703 Hash.call(this, 64, 56)
8704 }
8705
8706 inherits(Sha1, Hash)
8707
8708 Sha1.prototype.init = function () {
8709 this._a = 0x67452301 | 0
8710 this._b = 0xefcdab89 | 0
8711 this._c = 0x98badcfe | 0
8712 this._d = 0x10325476 | 0
8713 this._e = 0xc3d2e1f0 | 0
8714
8715 return this
8716 }
8717
8718 /*
8719 * Bitwise rotate a 32-bit number to the left.
8720 */
8721 function rol (num, cnt) {
8722 return (num << cnt) | (num >>> (32 - cnt))
8723 }
8724
8725 Sha1.prototype._update = function (M) {
8726 var W = this._w
8727
8728 var a = this._a
8729 var b = this._b
8730 var c = this._c
8731 var d = this._d
8732 var e = this._e
8733
8734 var j = 0, k
8735
8736 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8737 function loop (w, f) {
8738 W[j] = w
8739
8740 var t = rol(a, 5) + f + e + w + k
8741
8742 e = d
8743 d = c
8744 c = rol(b, 30)
8745 b = a
8746 a = t
8747 j++
8748 }
8749
8750 k = 1518500249
8751 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8752 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8753 k = 1859775393
8754 while (j < 40) loop(calcW(), b ^ c ^ d)
8755 k = -1894007588
8756 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8757 k = -899497514
8758 while (j < 80) loop(calcW(), b ^ c ^ d)
8759
8760 this._a = (a + this._a) | 0
8761 this._b = (b + this._b) | 0
8762 this._c = (c + this._c) | 0
8763 this._d = (d + this._d) | 0
8764 this._e = (e + this._e) | 0
8765 }
8766
8767 Sha1.prototype._hash = function () {
8768 var H = new Buffer(20)
8769
8770 H.writeInt32BE(this._a | 0, 0)
8771 H.writeInt32BE(this._b | 0, 4)
8772 H.writeInt32BE(this._c | 0, 8)
8773 H.writeInt32BE(this._d | 0, 12)
8774 H.writeInt32BE(this._e | 0, 16)
8775
8776 return H
8777 }
8778
8779 module.exports = Sha1
8780
8781 }).call(this,require("buffer").Buffer)
8782 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8783 (function (Buffer){
8784 /**
8785 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8786 * in FIPS 180-2
8787 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8788 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8789 *
8790 */
8791
8792 var inherits = require('inherits')
8793 var Sha256 = require('./sha256')
8794 var Hash = require('./hash')
8795
8796 var W = new Array(64)
8797
8798 function Sha224 () {
8799 this.init()
8800
8801 this._w = W // new Array(64)
8802
8803 Hash.call(this, 64, 56)
8804 }
8805
8806 inherits(Sha224, Sha256)
8807
8808 Sha224.prototype.init = function () {
8809 this._a = 0xc1059ed8 | 0
8810 this._b = 0x367cd507 | 0
8811 this._c = 0x3070dd17 | 0
8812 this._d = 0xf70e5939 | 0
8813 this._e = 0xffc00b31 | 0
8814 this._f = 0x68581511 | 0
8815 this._g = 0x64f98fa7 | 0
8816 this._h = 0xbefa4fa4 | 0
8817
8818 return this
8819 }
8820
8821 Sha224.prototype._hash = function () {
8822 var H = new Buffer(28)
8823
8824 H.writeInt32BE(this._a, 0)
8825 H.writeInt32BE(this._b, 4)
8826 H.writeInt32BE(this._c, 8)
8827 H.writeInt32BE(this._d, 12)
8828 H.writeInt32BE(this._e, 16)
8829 H.writeInt32BE(this._f, 20)
8830 H.writeInt32BE(this._g, 24)
8831
8832 return H
8833 }
8834
8835 module.exports = Sha224
8836
8837 }).call(this,require("buffer").Buffer)
8838 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8839 (function (Buffer){
8840 /**
8841 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8842 * in FIPS 180-2
8843 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8844 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8845 *
8846 */
8847
8848 var inherits = require('inherits')
8849 var Hash = require('./hash')
8850
8851 var K = [
8852 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8853 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8854 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8855 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8856 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8857 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8858 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8859 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8860 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8861 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8862 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8863 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8864 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8865 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8866 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8867 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8868 ]
8869
8870 var W = new Array(64)
8871
8872 function Sha256 () {
8873 this.init()
8874
8875 this._w = W // new Array(64)
8876
8877 Hash.call(this, 64, 56)
8878 }
8879
8880 inherits(Sha256, Hash)
8881
8882 Sha256.prototype.init = function () {
8883 this._a = 0x6a09e667 | 0
8884 this._b = 0xbb67ae85 | 0
8885 this._c = 0x3c6ef372 | 0
8886 this._d = 0xa54ff53a | 0
8887 this._e = 0x510e527f | 0
8888 this._f = 0x9b05688c | 0
8889 this._g = 0x1f83d9ab | 0
8890 this._h = 0x5be0cd19 | 0
8891
8892 return this
8893 }
8894
8895 function S (X, n) {
8896 return (X >>> n) | (X << (32 - n))
8897 }
8898
8899 function R (X, n) {
8900 return (X >>> n)
8901 }
8902
8903 function Ch (x, y, z) {
8904 return ((x & y) ^ ((~x) & z))
8905 }
8906
8907 function Maj (x, y, z) {
8908 return ((x & y) ^ (x & z) ^ (y & z))
8909 }
8910
8911 function Sigma0256 (x) {
8912 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8913 }
8914
8915 function Sigma1256 (x) {
8916 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8917 }
8918
8919 function Gamma0256 (x) {
8920 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8921 }
8922
8923 function Gamma1256 (x) {
8924 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8925 }
8926
8927 Sha256.prototype._update = function (M) {
8928 var W = this._w
8929
8930 var a = this._a | 0
8931 var b = this._b | 0
8932 var c = this._c | 0
8933 var d = this._d | 0
8934 var e = this._e | 0
8935 var f = this._f | 0
8936 var g = this._g | 0
8937 var h = this._h | 0
8938
8939 var j = 0
8940
8941 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8942 function loop (w) {
8943 W[j] = w
8944
8945 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8946 var T2 = Sigma0256(a) + Maj(a, b, c)
8947
8948 h = g
8949 g = f
8950 f = e
8951 e = d + T1
8952 d = c
8953 c = b
8954 b = a
8955 a = T1 + T2
8956
8957 j++
8958 }
8959
8960 while (j < 16) loop(M.readInt32BE(j * 4))
8961 while (j < 64) loop(calcW())
8962
8963 this._a = (a + this._a) | 0
8964 this._b = (b + this._b) | 0
8965 this._c = (c + this._c) | 0
8966 this._d = (d + this._d) | 0
8967 this._e = (e + this._e) | 0
8968 this._f = (f + this._f) | 0
8969 this._g = (g + this._g) | 0
8970 this._h = (h + this._h) | 0
8971 }
8972
8973 Sha256.prototype._hash = function () {
8974 var H = new Buffer(32)
8975
8976 H.writeInt32BE(this._a, 0)
8977 H.writeInt32BE(this._b, 4)
8978 H.writeInt32BE(this._c, 8)
8979 H.writeInt32BE(this._d, 12)
8980 H.writeInt32BE(this._e, 16)
8981 H.writeInt32BE(this._f, 20)
8982 H.writeInt32BE(this._g, 24)
8983 H.writeInt32BE(this._h, 28)
8984
8985 return H
8986 }
8987
8988 module.exports = Sha256
8989
8990 }).call(this,require("buffer").Buffer)
8991 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8992 (function (Buffer){
8993 var inherits = require('inherits')
8994 var SHA512 = require('./sha512')
8995 var Hash = require('./hash')
8996
8997 var W = new Array(160)
8998
8999 function Sha384 () {
9000 this.init()
9001 this._w = W
9002
9003 Hash.call(this, 128, 112)
9004 }
9005
9006 inherits(Sha384, SHA512)
9007
9008 Sha384.prototype.init = function () {
9009 this._a = 0xcbbb9d5d | 0
9010 this._b = 0x629a292a | 0
9011 this._c = 0x9159015a | 0
9012 this._d = 0x152fecd8 | 0
9013 this._e = 0x67332667 | 0
9014 this._f = 0x8eb44a87 | 0
9015 this._g = 0xdb0c2e0d | 0
9016 this._h = 0x47b5481d | 0
9017
9018 this._al = 0xc1059ed8 | 0
9019 this._bl = 0x367cd507 | 0
9020 this._cl = 0x3070dd17 | 0
9021 this._dl = 0xf70e5939 | 0
9022 this._el = 0xffc00b31 | 0
9023 this._fl = 0x68581511 | 0
9024 this._gl = 0x64f98fa7 | 0
9025 this._hl = 0xbefa4fa4 | 0
9026
9027 return this
9028 }
9029
9030 Sha384.prototype._hash = function () {
9031 var H = new Buffer(48)
9032
9033 function writeInt64BE (h, l, offset) {
9034 H.writeInt32BE(h, offset)
9035 H.writeInt32BE(l, offset + 4)
9036 }
9037
9038 writeInt64BE(this._a, this._al, 0)
9039 writeInt64BE(this._b, this._bl, 8)
9040 writeInt64BE(this._c, this._cl, 16)
9041 writeInt64BE(this._d, this._dl, 24)
9042 writeInt64BE(this._e, this._el, 32)
9043 writeInt64BE(this._f, this._fl, 40)
9044
9045 return H
9046 }
9047
9048 module.exports = Sha384
9049
9050 }).call(this,require("buffer").Buffer)
9051 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
9052 (function (Buffer){
9053 var inherits = require('inherits')
9054 var Hash = require('./hash')
9055
9056 var K = [
9057 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9058 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9059 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9060 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9061 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9062 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9063 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9064 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9065 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9066 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9067 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9068 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9069 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9070 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9071 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9072 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9073 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9074 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9075 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9076 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9077 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9078 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9079 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9080 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9081 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9082 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9083 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9084 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9085 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9086 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9087 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9088 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9089 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9090 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9091 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9092 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9093 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9094 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9095 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9096 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9097 ]
9098
9099 var W = new Array(160)
9100
9101 function Sha512 () {
9102 this.init()
9103 this._w = W
9104
9105 Hash.call(this, 128, 112)
9106 }
9107
9108 inherits(Sha512, Hash)
9109
9110 Sha512.prototype.init = function () {
9111 this._a = 0x6a09e667 | 0
9112 this._b = 0xbb67ae85 | 0
9113 this._c = 0x3c6ef372 | 0
9114 this._d = 0xa54ff53a | 0
9115 this._e = 0x510e527f | 0
9116 this._f = 0x9b05688c | 0
9117 this._g = 0x1f83d9ab | 0
9118 this._h = 0x5be0cd19 | 0
9119
9120 this._al = 0xf3bcc908 | 0
9121 this._bl = 0x84caa73b | 0
9122 this._cl = 0xfe94f82b | 0
9123 this._dl = 0x5f1d36f1 | 0
9124 this._el = 0xade682d1 | 0
9125 this._fl = 0x2b3e6c1f | 0
9126 this._gl = 0xfb41bd6b | 0
9127 this._hl = 0x137e2179 | 0
9128
9129 return this
9130 }
9131
9132 function S (X, Xl, n) {
9133 return (X >>> n) | (Xl << (32 - n))
9134 }
9135
9136 function Ch (x, y, z) {
9137 return ((x & y) ^ ((~x) & z))
9138 }
9139
9140 function Maj (x, y, z) {
9141 return ((x & y) ^ (x & z) ^ (y & z))
9142 }
9143
9144 Sha512.prototype._update = function (M) {
9145 var W = this._w
9146
9147 var a = this._a | 0
9148 var b = this._b | 0
9149 var c = this._c | 0
9150 var d = this._d | 0
9151 var e = this._e | 0
9152 var f = this._f | 0
9153 var g = this._g | 0
9154 var h = this._h | 0
9155
9156 var al = this._al | 0
9157 var bl = this._bl | 0
9158 var cl = this._cl | 0
9159 var dl = this._dl | 0
9160 var el = this._el | 0
9161 var fl = this._fl | 0
9162 var gl = this._gl | 0
9163 var hl = this._hl | 0
9164
9165 var i = 0, j = 0
9166 var Wi, Wil
9167 function calcW () {
9168 var x = W[j - 15 * 2]
9169 var xl = W[j - 15 * 2 + 1]
9170 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9171 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9172
9173 x = W[j - 2 * 2]
9174 xl = W[j - 2 * 2 + 1]
9175 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9176 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9177
9178 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9179 var Wi7 = W[j - 7 * 2]
9180 var Wi7l = W[j - 7 * 2 + 1]
9181
9182 var Wi16 = W[j - 16 * 2]
9183 var Wi16l = W[j - 16 * 2 + 1]
9184
9185 Wil = gamma0l + Wi7l
9186 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9187 Wil = Wil + gamma1l
9188 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9189 Wil = Wil + Wi16l
9190 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9191 }
9192
9193 function loop () {
9194 W[j] = Wi
9195 W[j + 1] = Wil
9196
9197 var maj = Maj(a, b, c)
9198 var majl = Maj(al, bl, cl)
9199
9200 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9201 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9202 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9203 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9204
9205 // t1 = h + sigma1 + ch + K[i] + W[i]
9206 var Ki = K[j]
9207 var Kil = K[j + 1]
9208
9209 var ch = Ch(e, f, g)
9210 var chl = Ch(el, fl, gl)
9211
9212 var t1l = hl + sigma1l
9213 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9214 t1l = t1l + chl
9215 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9216 t1l = t1l + Kil
9217 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9218 t1l = t1l + Wil
9219 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9220
9221 // t2 = sigma0 + maj
9222 var t2l = sigma0l + majl
9223 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9224
9225 h = g
9226 hl = gl
9227 g = f
9228 gl = fl
9229 f = e
9230 fl = el
9231 el = (dl + t1l) | 0
9232 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9233 d = c
9234 dl = cl
9235 c = b
9236 cl = bl
9237 b = a
9238 bl = al
9239 al = (t1l + t2l) | 0
9240 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9241
9242 i++
9243 j += 2
9244 }
9245
9246 while (i < 16) {
9247 Wi = M.readInt32BE(j * 4)
9248 Wil = M.readInt32BE(j * 4 + 4)
9249
9250 loop()
9251 }
9252
9253 while (i < 80) {
9254 calcW()
9255 loop()
9256 }
9257
9258 this._al = (this._al + al) | 0
9259 this._bl = (this._bl + bl) | 0
9260 this._cl = (this._cl + cl) | 0
9261 this._dl = (this._dl + dl) | 0
9262 this._el = (this._el + el) | 0
9263 this._fl = (this._fl + fl) | 0
9264 this._gl = (this._gl + gl) | 0
9265 this._hl = (this._hl + hl) | 0
9266
9267 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9268 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9269 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9270 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9271 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9272 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9273 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9274 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9275 }
9276
9277 Sha512.prototype._hash = function () {
9278 var H = new Buffer(64)
9279
9280 function writeInt64BE (h, l, offset) {
9281 H.writeInt32BE(h, offset)
9282 H.writeInt32BE(l, offset + 4)
9283 }
9284
9285 writeInt64BE(this._a, this._al, 0)
9286 writeInt64BE(this._b, this._bl, 8)
9287 writeInt64BE(this._c, this._cl, 16)
9288 writeInt64BE(this._d, this._dl, 24)
9289 writeInt64BE(this._e, this._el, 32)
9290 writeInt64BE(this._f, this._fl, 40)
9291 writeInt64BE(this._g, this._gl, 48)
9292 writeInt64BE(this._h, this._hl, 56)
9293
9294 return H
9295 }
9296
9297 module.exports = Sha512
9298
9299 }).call(this,require("buffer").Buffer)
9300 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9301 (function (Buffer){
9302 'use strict';
9303 var createHash = require('create-hash/browser');
9304 var inherits = require('inherits')
9305
9306 var Transform = require('stream').Transform
9307
9308 var ZEROS = new Buffer(128)
9309 ZEROS.fill(0)
9310
9311 function Hmac(alg, key) {
9312 Transform.call(this)
9313
9314 if (typeof key === 'string') {
9315 key = new Buffer(key)
9316 }
9317
9318 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9319
9320 this._alg = alg
9321 this._key = key
9322
9323 if (key.length > blocksize) {
9324 key = createHash(alg).update(key).digest()
9325
9326 } else if (key.length < blocksize) {
9327 key = Buffer.concat([key, ZEROS], blocksize)
9328 }
9329
9330 var ipad = this._ipad = new Buffer(blocksize)
9331 var opad = this._opad = new Buffer(blocksize)
9332
9333 for (var i = 0; i < blocksize; i++) {
9334 ipad[i] = key[i] ^ 0x36
9335 opad[i] = key[i] ^ 0x5C
9336 }
9337
9338 this._hash = createHash(alg).update(ipad)
9339 }
9340
9341 inherits(Hmac, Transform)
9342
9343 Hmac.prototype.update = function (data, enc) {
9344 this._hash.update(data, enc)
9345
9346 return this
9347 }
9348
9349 Hmac.prototype._transform = function (data, _, next) {
9350 this._hash.update(data)
9351
9352 next()
9353 }
9354
9355 Hmac.prototype._flush = function (next) {
9356 this.push(this.digest())
9357
9358 next()
9359 }
9360
9361 Hmac.prototype.digest = function (enc) {
9362 var h = this._hash.digest()
9363
9364 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9365 }
9366
9367 module.exports = function createHmac(alg, key) {
9368 return new Hmac(alg, key)
9369 }
9370
9371 }).call(this,require("buffer").Buffer)
9372 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9373 arguments[4][12][0].apply(exports,arguments)
9374 },{"dup":12}],47:[function(require,module,exports){
9375 var assert = require('assert')
9376 var BigInteger = require('bigi')
9377
9378 var Point = require('./point')
9379
9380 function Curve(p, a, b, Gx, Gy, n, h) {
9381 this.p = p
9382 this.a = a
9383 this.b = b
9384 this.G = Point.fromAffine(this, Gx, Gy)
9385 this.n = n
9386 this.h = h
9387
9388 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9389
9390 // result caching
9391 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9392 }
9393
9394 Curve.prototype.pointFromX = function(isOdd, x) {
9395 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9396 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9397
9398 var y = beta
9399 if (beta.isEven() ^ !isOdd) {
9400 y = this.p.subtract(y) // -y % p
9401 }
9402
9403 return Point.fromAffine(this, x, y)
9404 }
9405
9406 Curve.prototype.isInfinity = function(Q) {
9407 if (Q === this.infinity) return true
9408
9409 return Q.z.signum() === 0 && Q.y.signum() !== 0
9410 }
9411
9412 Curve.prototype.isOnCurve = function(Q) {
9413 if (this.isInfinity(Q)) return true
9414
9415 var x = Q.affineX
9416 var y = Q.affineY
9417 var a = this.a
9418 var b = this.b
9419 var p = this.p
9420
9421 // Check that xQ and yQ are integers in the interval [0, p - 1]
9422 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9423 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9424
9425 // and check that y^2 = x^3 + ax + b (mod p)
9426 var lhs = y.square().mod(p)
9427 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9428 return lhs.equals(rhs)
9429 }
9430
9431 /**
9432 * Validate an elliptic curve point.
9433 *
9434 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9435 */
9436 Curve.prototype.validate = function(Q) {
9437 // Check Q != O
9438 assert(!this.isInfinity(Q), 'Point is at infinity')
9439 assert(this.isOnCurve(Q), 'Point is not on the curve')
9440
9441 // Check nQ = O (where Q is a scalar multiple of G)
9442 var nQ = Q.multiply(this.n)
9443 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9444
9445 return true
9446 }
9447
9448 module.exports = Curve
9449
9450 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9451 module.exports={
9452 "secp128r1": {
9453 "p": "fffffffdffffffffffffffffffffffff",
9454 "a": "fffffffdfffffffffffffffffffffffc",
9455 "b": "e87579c11079f43dd824993c2cee5ed3",
9456 "n": "fffffffe0000000075a30d1b9038a115",
9457 "h": "01",
9458 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9459 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9460 },
9461 "secp160k1": {
9462 "p": "fffffffffffffffffffffffffffffffeffffac73",
9463 "a": "00",
9464 "b": "07",
9465 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9466 "h": "01",
9467 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9468 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9469 },
9470 "secp160r1": {
9471 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9472 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9473 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9474 "n": "0100000000000000000001f4c8f927aed3ca752257",
9475 "h": "01",
9476 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9477 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9478 },
9479 "secp192k1": {
9480 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9481 "a": "00",
9482 "b": "03",
9483 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9484 "h": "01",
9485 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9486 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9487 },
9488 "secp192r1": {
9489 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9490 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9491 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9492 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9493 "h": "01",
9494 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9495 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9496 },
9497 "secp256k1": {
9498 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9499 "a": "00",
9500 "b": "07",
9501 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9502 "h": "01",
9503 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9504 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9505 },
9506 "secp256r1": {
9507 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9508 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9509 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9510 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9511 "h": "01",
9512 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9513 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9514 }
9515 }
9516
9517 },{}],49:[function(require,module,exports){
9518 var Point = require('./point')
9519 var Curve = require('./curve')
9520
9521 var getCurveByName = require('./names')
9522
9523 module.exports = {
9524 Curve: Curve,
9525 Point: Point,
9526 getCurveByName: getCurveByName
9527 }
9528
9529 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9530 var BigInteger = require('bigi')
9531
9532 var curves = require('./curves')
9533 var Curve = require('./curve')
9534
9535 function getCurveByName(name) {
9536 var curve = curves[name]
9537 if (!curve) return null
9538
9539 var p = new BigInteger(curve.p, 16)
9540 var a = new BigInteger(curve.a, 16)
9541 var b = new BigInteger(curve.b, 16)
9542 var n = new BigInteger(curve.n, 16)
9543 var h = new BigInteger(curve.h, 16)
9544 var Gx = new BigInteger(curve.Gx, 16)
9545 var Gy = new BigInteger(curve.Gy, 16)
9546
9547 return new Curve(p, a, b, Gx, Gy, n, h)
9548 }
9549
9550 module.exports = getCurveByName
9551
9552 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9553 (function (Buffer){
9554 var assert = require('assert')
9555 var BigInteger = require('bigi')
9556
9557 var THREE = BigInteger.valueOf(3)
9558
9559 function Point(curve, x, y, z) {
9560 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9561
9562 this.curve = curve
9563 this.x = x
9564 this.y = y
9565 this.z = z
9566 this._zInv = null
9567
9568 this.compressed = true
9569 }
9570
9571 Object.defineProperty(Point.prototype, 'zInv', {
9572 get: function() {
9573 if (this._zInv === null) {
9574 this._zInv = this.z.modInverse(this.curve.p)
9575 }
9576
9577 return this._zInv
9578 }
9579 })
9580
9581 Object.defineProperty(Point.prototype, 'affineX', {
9582 get: function() {
9583 return this.x.multiply(this.zInv).mod(this.curve.p)
9584 }
9585 })
9586
9587 Object.defineProperty(Point.prototype, 'affineY', {
9588 get: function() {
9589 return this.y.multiply(this.zInv).mod(this.curve.p)
9590 }
9591 })
9592
9593 Point.fromAffine = function(curve, x, y) {
9594 return new Point(curve, x, y, BigInteger.ONE)
9595 }
9596
9597 Point.prototype.equals = function(other) {
9598 if (other === this) return true
9599 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9600 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9601
9602 // u = Y2 * Z1 - Y1 * Z2
9603 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9604
9605 if (u.signum() !== 0) return false
9606
9607 // v = X2 * Z1 - X1 * Z2
9608 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9609
9610 return v.signum() === 0
9611 }
9612
9613 Point.prototype.negate = function() {
9614 var y = this.curve.p.subtract(this.y)
9615
9616 return new Point(this.curve, this.x, y, this.z)
9617 }
9618
9619 Point.prototype.add = function(b) {
9620 if (this.curve.isInfinity(this)) return b
9621 if (this.curve.isInfinity(b)) return this
9622
9623 var x1 = this.x
9624 var y1 = this.y
9625 var x2 = b.x
9626 var y2 = b.y
9627
9628 // u = Y2 * Z1 - Y1 * Z2
9629 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9630 // v = X2 * Z1 - X1 * Z2
9631 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9632
9633 if (v.signum() === 0) {
9634 if (u.signum() === 0) {
9635 return this.twice() // this == b, so double
9636 }
9637
9638 return this.curve.infinity // this = -b, so infinity
9639 }
9640
9641 var v2 = v.square()
9642 var v3 = v2.multiply(v)
9643 var x1v2 = x1.multiply(v2)
9644 var zu2 = u.square().multiply(this.z)
9645
9646 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9647 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9648 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9649 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)
9650 // z3 = v^3 * z1 * z2
9651 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9652
9653 return new Point(this.curve, x3, y3, z3)
9654 }
9655
9656 Point.prototype.twice = function() {
9657 if (this.curve.isInfinity(this)) return this
9658 if (this.y.signum() === 0) return this.curve.infinity
9659
9660 var x1 = this.x
9661 var y1 = this.y
9662
9663 var y1z1 = y1.multiply(this.z)
9664 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9665 var a = this.curve.a
9666
9667 // w = 3 * x1^2 + a * z1^2
9668 var w = x1.square().multiply(THREE)
9669
9670 if (a.signum() !== 0) {
9671 w = w.add(this.z.square().multiply(a))
9672 }
9673
9674 w = w.mod(this.curve.p)
9675 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9676 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9677 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9678 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9679 // z3 = 8 * (y1 * z1)^3
9680 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9681
9682 return new Point(this.curve, x3, y3, z3)
9683 }
9684
9685 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9686 // TODO: modularize the multiplication algorithm
9687 Point.prototype.multiply = function(k) {
9688 if (this.curve.isInfinity(this)) return this
9689 if (k.signum() === 0) return this.curve.infinity
9690
9691 var e = k
9692 var h = e.multiply(THREE)
9693
9694 var neg = this.negate()
9695 var R = this
9696
9697 for (var i = h.bitLength() - 2; i > 0; --i) {
9698 R = R.twice()
9699
9700 var hBit = h.testBit(i)
9701 var eBit = e.testBit(i)
9702
9703 if (hBit != eBit) {
9704 R = R.add(hBit ? this : neg)
9705 }
9706 }
9707
9708 return R
9709 }
9710
9711 // Compute this*j + x*k (simultaneous multiplication)
9712 Point.prototype.multiplyTwo = function(j, x, k) {
9713 var i
9714
9715 if (j.bitLength() > k.bitLength())
9716 i = j.bitLength() - 1
9717 else
9718 i = k.bitLength() - 1
9719
9720 var R = this.curve.infinity
9721 var both = this.add(x)
9722
9723 while (i >= 0) {
9724 R = R.twice()
9725
9726 var jBit = j.testBit(i)
9727 var kBit = k.testBit(i)
9728
9729 if (jBit) {
9730 if (kBit) {
9731 R = R.add(both)
9732
9733 } else {
9734 R = R.add(this)
9735 }
9736
9737 } else {
9738 if (kBit) {
9739 R = R.add(x)
9740 }
9741 }
9742 --i
9743 }
9744
9745 return R
9746 }
9747
9748 Point.prototype.getEncoded = function(compressed) {
9749 if (compressed == undefined) compressed = this.compressed
9750 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9751
9752 var x = this.affineX
9753 var y = this.affineY
9754
9755 var buffer
9756
9757 // Determine size of q in bytes
9758 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9759
9760 // 0x02/0x03 | X
9761 if (compressed) {
9762 buffer = new Buffer(1 + byteLength)
9763 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9764
9765 // 0x04 | X | Y
9766 } else {
9767 buffer = new Buffer(1 + byteLength + byteLength)
9768 buffer.writeUInt8(0x04, 0)
9769
9770 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9771 }
9772
9773 x.toBuffer(byteLength).copy(buffer, 1)
9774
9775 return buffer
9776 }
9777
9778 Point.decodeFrom = function(curve, buffer) {
9779 var type = buffer.readUInt8(0)
9780 var compressed = (type !== 4)
9781
9782 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9783 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9784
9785 var Q
9786 if (compressed) {
9787 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9788 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9789
9790 var isOdd = (type === 0x03)
9791 Q = curve.pointFromX(isOdd, x)
9792
9793 } else {
9794 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9795
9796 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9797 Q = Point.fromAffine(curve, x, y)
9798 }
9799
9800 Q.compressed = compressed
9801 return Q
9802 }
9803
9804 Point.prototype.toString = function () {
9805 if (this.curve.isInfinity(this)) return '(INFINITY)'
9806
9807 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9808 }
9809
9810 module.exports = Point
9811
9812 }).call(this,require("buffer").Buffer)
9813 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9814 (function (process,global,Buffer){
9815 'use strict';
9816
9817 var crypto = global.crypto || global.msCrypto
9818 if(crypto && crypto.getRandomValues) {
9819 module.exports = randomBytes;
9820 } else {
9821 module.exports = oldBrowser;
9822 }
9823 function randomBytes(size, cb) {
9824 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9825 /* This will not work in older browsers.
9826 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9827 */
9828
9829 crypto.getRandomValues(bytes);
9830 if (typeof cb === 'function') {
9831 return process.nextTick(function () {
9832 cb(null, bytes);
9833 });
9834 }
9835 return bytes;
9836 }
9837 function oldBrowser() {
9838 throw new Error(
9839 'secure random number generation not supported by this browser\n'+
9840 'use chrome, FireFox or Internet Explorer 11'
9841 )
9842 }
9843
9844 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9845 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9846 (function (Buffer){
9847 'use strict';
9848
9849 function getFunctionName(fn) {
9850 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9851 }
9852
9853 function getTypeTypeName(type) {
9854 if (nativeTypes.Function(type)) {
9855 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9856 }
9857 if (nativeTypes.Object(type)) return JSON.stringify(type);
9858
9859 return type;
9860 }
9861
9862 function getValueTypeName(value) {
9863 if (nativeTypes.Null(value)) return '';
9864
9865 return getFunctionName(value.constructor);
9866 }
9867
9868 function tfErrorString(type, value) {
9869 var typeTypeName = getTypeTypeName(type);
9870 var valueTypeName = getValueTypeName(value);
9871
9872 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9873 }
9874
9875 function tfPropertyErrorString(type, name, value) {
9876 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9877 }
9878
9879 var nativeTypes = {
9880 Array: (function (_Array) {
9881 function Array(_x) {
9882 return _Array.apply(this, arguments);
9883 }
9884
9885 Array.toString = function () {
9886 return _Array.toString();
9887 };
9888
9889 return Array;
9890 })(function (value) {
9891 return value !== null && value !== undefined && value.constructor === Array;
9892 }),
9893 Boolean: function Boolean(value) {
9894 return typeof value === 'boolean';
9895 },
9896 Buffer: (function (_Buffer) {
9897 function Buffer(_x2) {
9898 return _Buffer.apply(this, arguments);
9899 }
9900
9901 Buffer.toString = function () {
9902 return _Buffer.toString();
9903 };
9904
9905 return Buffer;
9906 })(function (value) {
9907 return Buffer.isBuffer(value);
9908 }),
9909 Function: function Function(value) {
9910 return typeof value === 'function';
9911 },
9912 Null: function Null(value) {
9913 return value === undefined || value === null;
9914 },
9915 Number: function Number(value) {
9916 return typeof value === 'number';
9917 },
9918 Object: function Object(value) {
9919 return typeof value === 'object';
9920 },
9921 String: function String(value) {
9922 return typeof value === 'string';
9923 },
9924 '': function _() {
9925 return true;
9926 }
9927 };
9928
9929 function tJSON(type) {
9930 return type && type.toJSON ? type.toJSON() : type;
9931 }
9932
9933 function sJSON(type) {
9934 var json = tJSON(type);
9935 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9936 }
9937
9938 var otherTypes = {
9939 arrayOf: function arrayOf(type) {
9940 function arrayOf(value, strict) {
9941 try {
9942 return nativeTypes.Array(value) && value.every(function (x) {
9943 return typeforce(type, x, strict);
9944 });
9945 } catch (e) {
9946 return false;
9947 }
9948 }
9949 arrayOf.toJSON = function () {
9950 return [tJSON(type)];
9951 };
9952
9953 return arrayOf;
9954 },
9955
9956 maybe: function maybe(type) {
9957 function maybe(value, strict) {
9958 return nativeTypes.Null(value) || typeforce(type, value, strict);
9959 }
9960 maybe.toJSON = function () {
9961 return '?' + sJSON(type);
9962 };
9963
9964 return maybe;
9965 },
9966
9967 object: function object(type) {
9968 function object(value, strict) {
9969 typeforce(nativeTypes.Object, value, strict);
9970
9971 var propertyName, propertyType, propertyValue;
9972
9973 try {
9974 for (propertyName in type) {
9975 propertyType = type[propertyName];
9976 propertyValue = value[propertyName];
9977
9978 typeforce(propertyType, propertyValue, strict);
9979 }
9980 } catch (e) {
9981 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9982 }
9983
9984 if (strict) {
9985 for (propertyName in value) {
9986 if (type[propertyName]) continue;
9987
9988 throw new TypeError('Unexpected property "' + propertyName + '"');
9989 }
9990 }
9991
9992 return true;
9993 }
9994 object.toJSON = function () {
9995 return type;
9996 };
9997
9998 return object;
9999 },
10000
10001 oneOf: function oneOf() {
10002 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
10003 types[_key] = arguments[_key];
10004 }
10005
10006 function oneOf(value, strict) {
10007 return types.some(function (type) {
10008 try {
10009 return typeforce(type, value, strict);
10010 } catch (e) {
10011 return false;
10012 }
10013 });
10014 }
10015 oneOf.toJSON = function () {
10016 return types.map(sJSON).join('|');
10017 };
10018
10019 return oneOf;
10020 },
10021
10022 quacksLike: function quacksLike(type) {
10023 function quacksLike(value, strict) {
10024 return type === getValueTypeName(value);
10025 }
10026 quacksLike.toJSON = function () {
10027 return type;
10028 };
10029
10030 return quacksLike;
10031 },
10032
10033 tuple: function tuple() {
10034 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
10035 types[_key2] = arguments[_key2];
10036 }
10037
10038 function tuple(value, strict) {
10039 return types.every(function (type, i) {
10040 return typeforce(type, value[i], strict);
10041 });
10042 }
10043 tuple.toJSON = function () {
10044 return '(' + types.map(sJSON).join(', ') + ')';
10045 };
10046
10047 return tuple;
10048 },
10049
10050 value: function value(expected) {
10051 function value(actual) {
10052 return actual === expected;
10053 }
10054 value.toJSON = function () {
10055 return expected;
10056 };
10057
10058 return value;
10059 }
10060 };
10061
10062 function compile(type) {
10063 if (nativeTypes.String(type)) {
10064 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10065
10066 return nativeTypes[type] || otherTypes.quacksLike(type);
10067 } else if (type && nativeTypes.Object(type)) {
10068 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10069
10070 var compiled = {};
10071
10072 for (var propertyName in type) {
10073 compiled[propertyName] = compile(type[propertyName]);
10074 }
10075
10076 return otherTypes.object(compiled);
10077 } else if (nativeTypes.Function(type)) {
10078 return type;
10079 }
10080
10081 return otherTypes.value(type);
10082 }
10083
10084 function typeforce(_x3, _x4, _x5) {
10085 var _again = true;
10086
10087 _function: while (_again) {
10088 var type = _x3,
10089 value = _x4,
10090 strict = _x5;
10091 _again = false;
10092
10093 if (nativeTypes.Function(type)) {
10094 if (type(value, strict)) return true;
10095
10096 throw new TypeError(tfErrorString(type, value));
10097 }
10098
10099 // JIT
10100 _x3 = compile(type);
10101 _x4 = value;
10102 _x5 = strict;
10103 _again = true;
10104 continue _function;
10105 }
10106 }
10107
10108 // assign all types to typeforce function
10109 var typeName;
10110 Object.keys(nativeTypes).forEach(function (typeName) {
10111 var nativeType = nativeTypes[typeName];
10112 nativeType.toJSON = function () {
10113 return typeName;
10114 };
10115
10116 typeforce[typeName] = nativeType;
10117 });
10118
10119 for (typeName in otherTypes) {
10120 typeforce[typeName] = otherTypes[typeName];
10121 }
10122
10123 module.exports = typeforce;
10124 module.exports.compile = compile;
10125 }).call(this,require("buffer").Buffer)
10126 },{"buffer":7}],54:[function(require,module,exports){
10127 (function (Buffer){
10128 var assert = require('assert')
10129 var base58check = require('bs58check')
10130 var typeForce = require('typeforce')
10131 var networks = require('./networks')
10132 var scripts = require('./scripts')
10133
10134 function findScriptTypeByVersion (version) {
10135 for (var networkName in networks) {
10136 var network = networks[networkName]
10137
10138 if (version === network.pubKeyHash) return 'pubkeyhash'
10139 if (version === network.scriptHash) return 'scripthash'
10140 }
10141 }
10142
10143 function Address (hash, version) {
10144 typeForce('Buffer', hash)
10145
10146 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10147 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10148
10149 this.hash = hash
10150 this.version = version
10151 }
10152
10153 Address.fromBase58Check = function (string) {
10154 var payload = base58check.decode(string)
10155 var version = payload.readUInt8(0)
10156 var hash = payload.slice(1)
10157
10158 return new Address(hash, version)
10159 }
10160
10161 Address.fromOutputScript = function (script, network) {
10162 network = network || networks.bitcoin
10163
10164 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10165 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10166
10167 assert(false, script.toASM() + ' has no matching Address')
10168 }
10169
10170 Address.prototype.toBase58Check = function () {
10171 var payload = new Buffer(21)
10172 payload.writeUInt8(this.version, 0)
10173 this.hash.copy(payload, 1)
10174
10175 return base58check.encode(payload)
10176 }
10177
10178 Address.prototype.toOutputScript = function () {
10179 var scriptType = findScriptTypeByVersion(this.version)
10180
10181 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10182 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10183
10184 assert(false, this.toString() + ' has no matching Script')
10185 }
10186
10187 Address.prototype.toString = Address.prototype.toBase58Check
10188
10189 module.exports = Address
10190
10191 }).call(this,require("buffer").Buffer)
10192 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10193 var bs58check = require('bs58check')
10194
10195 function decode () {
10196 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10197
10198 return bs58check.decode.apply(undefined, arguments)
10199 }
10200
10201 function encode () {
10202 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10203
10204 return bs58check.encode.apply(undefined, arguments)
10205 }
10206
10207 module.exports = {
10208 decode: decode,
10209 encode: encode
10210 }
10211
10212 },{"bs58check":31}],56:[function(require,module,exports){
10213 (function (Buffer){
10214 var assert = require('assert')
10215 var bufferutils = require('./bufferutils')
10216 var crypto = require('./crypto')
10217
10218 var Transaction = require('./transaction')
10219
10220 function Block () {
10221 this.version = 1
10222 this.prevHash = null
10223 this.merkleRoot = null
10224 this.timestamp = 0
10225 this.bits = 0
10226 this.nonce = 0
10227 }
10228
10229 Block.fromBuffer = function (buffer) {
10230 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10231
10232 var offset = 0
10233 function readSlice (n) {
10234 offset += n
10235 return buffer.slice(offset - n, offset)
10236 }
10237
10238 function readUInt32 () {
10239 var i = buffer.readUInt32LE(offset)
10240 offset += 4
10241 return i
10242 }
10243
10244 var block = new Block()
10245 block.version = readUInt32()
10246 block.prevHash = readSlice(32)
10247 block.merkleRoot = readSlice(32)
10248 block.timestamp = readUInt32()
10249 block.bits = readUInt32()
10250 block.nonce = readUInt32()
10251
10252 if (buffer.length === 80) return block
10253
10254 function readVarInt () {
10255 var vi = bufferutils.readVarInt(buffer, offset)
10256 offset += vi.size
10257 return vi.number
10258 }
10259
10260 // FIXME: poor performance
10261 function readTransaction () {
10262 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10263
10264 offset += tx.toBuffer().length
10265 return tx
10266 }
10267
10268 var nTransactions = readVarInt()
10269 block.transactions = []
10270
10271 for (var i = 0; i < nTransactions; ++i) {
10272 var tx = readTransaction()
10273 block.transactions.push(tx)
10274 }
10275
10276 return block
10277 }
10278
10279 Block.fromHex = function (hex) {
10280 return Block.fromBuffer(new Buffer(hex, 'hex'))
10281 }
10282
10283 Block.prototype.getHash = function () {
10284 return crypto.hash256(this.toBuffer(true))
10285 }
10286
10287 Block.prototype.getId = function () {
10288 return bufferutils.reverse(this.getHash()).toString('hex')
10289 }
10290
10291 Block.prototype.getUTCDate = function () {
10292 var date = new Date(0) // epoch
10293 date.setUTCSeconds(this.timestamp)
10294
10295 return date
10296 }
10297
10298 Block.prototype.toBuffer = function (headersOnly) {
10299 var buffer = new Buffer(80)
10300
10301 var offset = 0
10302 function writeSlice (slice) {
10303 slice.copy(buffer, offset)
10304 offset += slice.length
10305 }
10306
10307 function writeUInt32 (i) {
10308 buffer.writeUInt32LE(i, offset)
10309 offset += 4
10310 }
10311
10312 writeUInt32(this.version)
10313 writeSlice(this.prevHash)
10314 writeSlice(this.merkleRoot)
10315 writeUInt32(this.timestamp)
10316 writeUInt32(this.bits)
10317 writeUInt32(this.nonce)
10318
10319 if (headersOnly || !this.transactions) return buffer
10320
10321 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10322 var txBuffers = this.transactions.map(function (tx) {
10323 return tx.toBuffer()
10324 })
10325
10326 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10327 }
10328
10329 Block.prototype.toHex = function (headersOnly) {
10330 return this.toBuffer(headersOnly).toString('hex')
10331 }
10332
10333 module.exports = Block
10334
10335 }).call(this,require("buffer").Buffer)
10336 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10337 (function (Buffer){
10338 var assert = require('assert')
10339 var opcodes = require('./opcodes')
10340
10341 // https://github.com/feross/buffer/blob/master/index.js#L1127
10342 function verifuint (value, max) {
10343 assert(typeof value === 'number', 'cannot write a non-number as a number')
10344 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10345 assert(value <= max, 'value is larger than maximum value for type')
10346 assert(Math.floor(value) === value, 'value has a fractional component')
10347 }
10348
10349 function pushDataSize (i) {
10350 return i < opcodes.OP_PUSHDATA1 ? 1
10351 : i < 0xff ? 2
10352 : i < 0xffff ? 3
10353 : 5
10354 }
10355
10356 function readPushDataInt (buffer, offset) {
10357 var opcode = buffer.readUInt8(offset)
10358 var number, size
10359
10360 // ~6 bit
10361 if (opcode < opcodes.OP_PUSHDATA1) {
10362 number = opcode
10363 size = 1
10364
10365 // 8 bit
10366 } else if (opcode === opcodes.OP_PUSHDATA1) {
10367 if (offset + 2 > buffer.length) return null
10368 number = buffer.readUInt8(offset + 1)
10369 size = 2
10370
10371 // 16 bit
10372 } else if (opcode === opcodes.OP_PUSHDATA2) {
10373 if (offset + 3 > buffer.length) return null
10374 number = buffer.readUInt16LE(offset + 1)
10375 size = 3
10376
10377 // 32 bit
10378 } else {
10379 if (offset + 5 > buffer.length) return null
10380 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10381
10382 number = buffer.readUInt32LE(offset + 1)
10383 size = 5
10384 }
10385
10386 return {
10387 opcode: opcode,
10388 number: number,
10389 size: size
10390 }
10391 }
10392
10393 function readUInt64LE (buffer, offset) {
10394 var a = buffer.readUInt32LE(offset)
10395 var b = buffer.readUInt32LE(offset + 4)
10396 b *= 0x100000000
10397
10398 verifuint(b + a, 0x001fffffffffffff)
10399
10400 return b + a
10401 }
10402
10403 function readVarInt (buffer, offset) {
10404 var t = buffer.readUInt8(offset)
10405 var number, size
10406
10407 // 8 bit
10408 if (t < 253) {
10409 number = t
10410 size = 1
10411
10412 // 16 bit
10413 } else if (t < 254) {
10414 number = buffer.readUInt16LE(offset + 1)
10415 size = 3
10416
10417 // 32 bit
10418 } else if (t < 255) {
10419 number = buffer.readUInt32LE(offset + 1)
10420 size = 5
10421
10422 // 64 bit
10423 } else {
10424 number = readUInt64LE(buffer, offset + 1)
10425 size = 9
10426 }
10427
10428 return {
10429 number: number,
10430 size: size
10431 }
10432 }
10433
10434 function writePushDataInt (buffer, number, offset) {
10435 var size = pushDataSize(number)
10436
10437 // ~6 bit
10438 if (size === 1) {
10439 buffer.writeUInt8(number, offset)
10440
10441 // 8 bit
10442 } else if (size === 2) {
10443 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10444 buffer.writeUInt8(number, offset + 1)
10445
10446 // 16 bit
10447 } else if (size === 3) {
10448 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10449 buffer.writeUInt16LE(number, offset + 1)
10450
10451 // 32 bit
10452 } else {
10453 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10454 buffer.writeUInt32LE(number, offset + 1)
10455 }
10456
10457 return size
10458 }
10459
10460 function writeUInt64LE (buffer, value, offset) {
10461 verifuint(value, 0x001fffffffffffff)
10462
10463 buffer.writeInt32LE(value & -1, offset)
10464 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10465 }
10466
10467 function varIntSize (i) {
10468 return i < 253 ? 1
10469 : i < 0x10000 ? 3
10470 : i < 0x100000000 ? 5
10471 : 9
10472 }
10473
10474 function writeVarInt (buffer, number, offset) {
10475 var size = varIntSize(number)
10476
10477 // 8 bit
10478 if (size === 1) {
10479 buffer.writeUInt8(number, offset)
10480
10481 // 16 bit
10482 } else if (size === 3) {
10483 buffer.writeUInt8(253, offset)
10484 buffer.writeUInt16LE(number, offset + 1)
10485
10486 // 32 bit
10487 } else if (size === 5) {
10488 buffer.writeUInt8(254, offset)
10489 buffer.writeUInt32LE(number, offset + 1)
10490
10491 // 64 bit
10492 } else {
10493 buffer.writeUInt8(255, offset)
10494 writeUInt64LE(buffer, number, offset + 1)
10495 }
10496
10497 return size
10498 }
10499
10500 function varIntBuffer (i) {
10501 var size = varIntSize(i)
10502 var buffer = new Buffer(size)
10503 writeVarInt(buffer, i, 0)
10504
10505 return buffer
10506 }
10507
10508 function reverse (buffer) {
10509 var buffer2 = new Buffer(buffer)
10510 Array.prototype.reverse.call(buffer2)
10511 return buffer2
10512 }
10513
10514 module.exports = {
10515 pushDataSize: pushDataSize,
10516 readPushDataInt: readPushDataInt,
10517 readUInt64LE: readUInt64LE,
10518 readVarInt: readVarInt,
10519 reverse: reverse,
10520 varIntBuffer: varIntBuffer,
10521 varIntSize: varIntSize,
10522 writePushDataInt: writePushDataInt,
10523 writeUInt64LE: writeUInt64LE,
10524 writeVarInt: writeVarInt
10525 }
10526
10527 }).call(this,require("buffer").Buffer)
10528 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10529 var createHash = require('create-hash')
10530
10531 function hash160 (buffer) {
10532 return ripemd160(sha256(buffer))
10533 }
10534
10535 function hash256 (buffer) {
10536 return sha256(sha256(buffer))
10537 }
10538
10539 function ripemd160 (buffer) {
10540 return createHash('rmd160').update(buffer).digest()
10541 }
10542
10543 function sha1 (buffer) {
10544 return createHash('sha1').update(buffer).digest()
10545 }
10546
10547 function sha256 (buffer) {
10548 return createHash('sha256').update(buffer).digest()
10549 }
10550
10551 // FIXME: Name not consistent with others
10552 var createHmac = require('create-hmac')
10553
10554 function HmacSHA256 (buffer, secret) {
10555 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10556 return createHmac('sha256', secret).update(buffer).digest()
10557 }
10558
10559 function HmacSHA512 (buffer, secret) {
10560 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10561 return createHmac('sha512', secret).update(buffer).digest()
10562 }
10563
10564 module.exports = {
10565 ripemd160: ripemd160,
10566 sha1: sha1,
10567 sha256: sha256,
10568 hash160: hash160,
10569 hash256: hash256,
10570 HmacSHA256: HmacSHA256,
10571 HmacSHA512: HmacSHA512
10572 }
10573
10574 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10575 (function (Buffer){
10576 var assert = require('assert')
10577 var createHmac = require('create-hmac')
10578 var typeForce = require('typeforce')
10579
10580 var BigInteger = require('bigi')
10581 var ECSignature = require('./ecsignature')
10582
10583 var ZERO = new Buffer([0])
10584 var ONE = new Buffer([1])
10585
10586 // https://tools.ietf.org/html/rfc6979#section-3.2
10587 function deterministicGenerateK (curve, hash, d, checkSig) {
10588 typeForce('Buffer', hash)
10589 typeForce('BigInteger', d)
10590
10591 // FIXME: remove/uncomment for 2.0.0
10592 // typeForce('Function', checkSig)
10593
10594 if (typeof checkSig !== 'function') {
10595 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10596
10597 checkSig = function (k) {
10598 var G = curve.G
10599 var n = curve.n
10600 var e = BigInteger.fromBuffer(hash)
10601
10602 var Q = G.multiply(k)
10603
10604 if (curve.isInfinity(Q))
10605 return false
10606
10607 var r = Q.affineX.mod(n)
10608 if (r.signum() === 0)
10609 return false
10610
10611 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10612 if (s.signum() === 0)
10613 return false
10614
10615 return true
10616 }
10617 }
10618
10619 // sanity check
10620 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10621
10622 var x = d.toBuffer(32)
10623 var k = new Buffer(32)
10624 var v = new Buffer(32)
10625
10626 // Step A, ignored as hash already provided
10627 // Step B
10628 v.fill(1)
10629
10630 // Step C
10631 k.fill(0)
10632
10633 // Step D
10634 k = createHmac('sha256', k)
10635 .update(v)
10636 .update(ZERO)
10637 .update(x)
10638 .update(hash)
10639 .digest()
10640
10641 // Step E
10642 v = createHmac('sha256', k).update(v).digest()
10643
10644 // Step F
10645 k = createHmac('sha256', k)
10646 .update(v)
10647 .update(ONE)
10648 .update(x)
10649 .update(hash)
10650 .digest()
10651
10652 // Step G
10653 v = createHmac('sha256', k).update(v).digest()
10654
10655 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10656 // Step H2b
10657 v = createHmac('sha256', k).update(v).digest()
10658
10659 var T = BigInteger.fromBuffer(v)
10660
10661 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10662 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10663 k = createHmac('sha256', k)
10664 .update(v)
10665 .update(ZERO)
10666 .digest()
10667
10668 v = createHmac('sha256', k).update(v).digest()
10669
10670 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10671 // Step H2b again
10672 v = createHmac('sha256', k).update(v).digest()
10673 T = BigInteger.fromBuffer(v)
10674 }
10675
10676 return T
10677 }
10678
10679 function sign (curve, hash, d) {
10680 var r, s
10681
10682 var e = BigInteger.fromBuffer(hash)
10683 var n = curve.n
10684 var G = curve.G
10685
10686 deterministicGenerateK(curve, hash, d, function (k) {
10687 var Q = G.multiply(k)
10688
10689 if (curve.isInfinity(Q))
10690 return false
10691
10692 r = Q.affineX.mod(n)
10693 if (r.signum() === 0)
10694 return false
10695
10696 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10697 if (s.signum() === 0)
10698 return false
10699
10700 return true
10701 })
10702
10703 var N_OVER_TWO = n.shiftRight(1)
10704
10705 // enforce low S values, see bip62: 'low s values in signatures'
10706 if (s.compareTo(N_OVER_TWO) > 0) {
10707 s = n.subtract(s)
10708 }
10709
10710 return new ECSignature(r, s)
10711 }
10712
10713 function verifyRaw (curve, e, signature, Q) {
10714 var n = curve.n
10715 var G = curve.G
10716
10717 var r = signature.r
10718 var s = signature.s
10719
10720 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10721 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10722 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10723
10724 // c = s^-1 mod n
10725 var c = s.modInverse(n)
10726
10727 // 1.4.4 Compute u1 = es^−1 mod n
10728 // u2 = rs^−1 mod n
10729 var u1 = e.multiply(c).mod(n)
10730 var u2 = r.multiply(c).mod(n)
10731
10732 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10733 var R = G.multiplyTwo(u1, Q, u2)
10734 var v = R.affineX.mod(n)
10735
10736 // 1.4.5 (cont.) Enforce R is not at infinity
10737 if (curve.isInfinity(R)) return false
10738
10739 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10740 return v.equals(r)
10741 }
10742
10743 function verify (curve, hash, signature, Q) {
10744 // 1.4.2 H = Hash(M), already done by the user
10745 // 1.4.3 e = H
10746 var e = BigInteger.fromBuffer(hash)
10747
10748 return verifyRaw(curve, e, signature, Q)
10749 }
10750
10751 /**
10752 * Recover a public key from a signature.
10753 *
10754 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10755 * Key Recovery Operation".
10756 *
10757 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10758 */
10759 function recoverPubKey (curve, e, signature, i) {
10760 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10761
10762 var n = curve.n
10763 var G = curve.G
10764
10765 var r = signature.r
10766 var s = signature.s
10767
10768 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10769 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10770
10771 // A set LSB signifies that the y-coordinate is odd
10772 var isYOdd = i & 1
10773
10774 // The more significant bit specifies whether we should use the
10775 // first or second candidate key.
10776 var isSecondKey = i >> 1
10777
10778 // 1.1 Let x = r + jn
10779 var x = isSecondKey ? r.add(n) : r
10780 var R = curve.pointFromX(isYOdd, x)
10781
10782 // 1.4 Check that nR is at infinity
10783 var nR = R.multiply(n)
10784 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10785
10786 // Compute -e from e
10787 var eNeg = e.negate().mod(n)
10788
10789 // 1.6.1 Compute Q = r^-1 (sR - eG)
10790 // Q = r^-1 (sR + -eG)
10791 var rInv = r.modInverse(n)
10792
10793 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10794 curve.validate(Q)
10795
10796 return Q
10797 }
10798
10799 /**
10800 * Calculate pubkey extraction parameter.
10801 *
10802 * When extracting a pubkey from a signature, we have to
10803 * distinguish four different cases. Rather than putting this
10804 * burden on the verifier, Bitcoin includes a 2-bit value with the
10805 * signature.
10806 *
10807 * This function simply tries all four cases and returns the value
10808 * that resulted in a successful pubkey recovery.
10809 */
10810 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10811 for (var i = 0; i < 4; i++) {
10812 var Qprime = recoverPubKey(curve, e, signature, i)
10813
10814 // 1.6.2 Verify Q
10815 if (Qprime.equals(Q)) {
10816 return i
10817 }
10818 }
10819
10820 throw new Error('Unable to find valid recovery factor')
10821 }
10822
10823 module.exports = {
10824 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10825 deterministicGenerateK: deterministicGenerateK,
10826 recoverPubKey: recoverPubKey,
10827 sign: sign,
10828 verify: verify,
10829 verifyRaw: verifyRaw
10830 }
10831
10832 }).call(this,require("buffer").Buffer)
10833 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10834 (function (Buffer){
10835 var assert = require('assert')
10836 var base58check = require('bs58check')
10837 var ecdsa = require('./ecdsa')
10838 var networks = require('./networks')
10839 var randomBytes = require('randombytes')
10840 var typeForce = require('typeforce')
10841
10842 var BigInteger = require('bigi')
10843 var ECPubKey = require('./ecpubkey')
10844
10845 var ecurve = require('ecurve')
10846 var secp256k1 = ecurve.getCurveByName('secp256k1')
10847
10848 function ECKey (d, compressed) {
10849 assert(d.signum() > 0, 'Private key must be greater than 0')
10850 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10851
10852 var Q = ECKey.curve.G.multiply(d)
10853
10854 this.d = d
10855 this.pub = new ECPubKey(Q, compressed)
10856 }
10857
10858 // Constants
10859 ECKey.curve = secp256k1
10860
10861 // Static constructors
10862 ECKey.fromWIF = function (string) {
10863 var payload = base58check.decode(string)
10864 var compressed = false
10865
10866 // Ignore the version byte
10867 payload = payload.slice(1)
10868
10869 if (payload.length === 33) {
10870 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10871
10872 // Truncate the compression flag
10873 payload = payload.slice(0, -1)
10874 compressed = true
10875 }
10876
10877 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10878
10879 var d = BigInteger.fromBuffer(payload)
10880 return new ECKey(d, compressed)
10881 }
10882
10883 ECKey.makeRandom = function (compressed, rng) {
10884 rng = rng || randomBytes
10885
10886 var buffer = rng(32)
10887 typeForce('Buffer', buffer)
10888 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10889
10890 var d = BigInteger.fromBuffer(buffer)
10891 d = d.mod(ECKey.curve.n)
10892
10893 return new ECKey(d, compressed)
10894 }
10895
10896 // Export functions
10897 ECKey.prototype.toWIF = function (network) {
10898 network = network || networks.bitcoin
10899
10900 var bufferLen = this.pub.compressed ? 34 : 33
10901 var buffer = new Buffer(bufferLen)
10902
10903 buffer.writeUInt8(network.wif, 0)
10904 this.d.toBuffer(32).copy(buffer, 1)
10905
10906 if (this.pub.compressed) {
10907 buffer.writeUInt8(0x01, 33)
10908 }
10909
10910 return base58check.encode(buffer)
10911 }
10912
10913 // Operations
10914 ECKey.prototype.sign = function (hash) {
10915 return ecdsa.sign(ECKey.curve, hash, this.d)
10916 }
10917
10918 module.exports = ECKey
10919
10920 }).call(this,require("buffer").Buffer)
10921 },{"./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){
10922 (function (Buffer){
10923 var crypto = require('./crypto')
10924 var ecdsa = require('./ecdsa')
10925 var typeForce = require('typeforce')
10926 var networks = require('./networks')
10927
10928 var Address = require('./address')
10929
10930 var ecurve = require('ecurve')
10931 var secp256k1 = ecurve.getCurveByName('secp256k1')
10932
10933 function ECPubKey (Q, compressed) {
10934 if (compressed === undefined) {
10935 compressed = true
10936 }
10937
10938 typeForce('Point', Q)
10939 typeForce('Boolean', compressed)
10940
10941 this.compressed = compressed
10942 this.Q = Q
10943 }
10944
10945 // Constants
10946 ECPubKey.curve = secp256k1
10947
10948 // Static constructors
10949 ECPubKey.fromBuffer = function (buffer) {
10950 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10951 return new ECPubKey(Q, Q.compressed)
10952 }
10953
10954 ECPubKey.fromHex = function (hex) {
10955 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10956 }
10957
10958 // Operations
10959 ECPubKey.prototype.getAddress = function (network) {
10960 network = network || networks.bitcoin
10961
10962 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10963 }
10964
10965 ECPubKey.prototype.verify = function (hash, signature) {
10966 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10967 }
10968
10969 // Export functions
10970 ECPubKey.prototype.toBuffer = function () {
10971 return this.Q.getEncoded(this.compressed)
10972 }
10973
10974 ECPubKey.prototype.toHex = function () {
10975 return this.toBuffer().toString('hex')
10976 }
10977
10978 module.exports = ECPubKey
10979
10980 }).call(this,require("buffer").Buffer)
10981 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10982 (function (Buffer){
10983 var assert = require('assert')
10984 var typeForce = require('typeforce')
10985
10986 var BigInteger = require('bigi')
10987
10988 function ECSignature (r, s) {
10989 typeForce('BigInteger', r)
10990 typeForce('BigInteger', s)
10991
10992 this.r = r
10993 this.s = s
10994 }
10995
10996 ECSignature.parseCompact = function (buffer) {
10997 assert.equal(buffer.length, 65, 'Invalid signature length')
10998 var i = buffer.readUInt8(0) - 27
10999
11000 // At most 3 bits
11001 assert.equal(i, i & 7, 'Invalid signature parameter')
11002 var compressed = !!(i & 4)
11003
11004 // Recovery param only
11005 i = i & 3
11006
11007 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
11008 var s = BigInteger.fromBuffer(buffer.slice(33))
11009
11010 return {
11011 compressed: compressed,
11012 i: i,
11013 signature: new ECSignature(r, s)
11014 }
11015 }
11016
11017 ECSignature.fromDER = function (buffer) {
11018 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
11019 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
11020 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
11021
11022 var rLen = buffer.readUInt8(3)
11023 assert(rLen > 0, 'R length is zero')
11024
11025 var offset = 4 + rLen
11026 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
11027
11028 var sLen = buffer.readUInt8(offset + 1)
11029 assert(sLen > 0, 'S length is zero')
11030
11031 var rB = buffer.slice(4, offset)
11032 var sB = buffer.slice(offset + 2)
11033 offset += 2 + sLen
11034
11035 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
11036 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
11037 }
11038
11039 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
11040 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
11041 }
11042
11043 assert.equal(offset, buffer.length, 'Invalid DER encoding')
11044 var r = BigInteger.fromDERInteger(rB)
11045 var s = BigInteger.fromDERInteger(sB)
11046
11047 assert(r.signum() >= 0, 'R value is negative')
11048 assert(s.signum() >= 0, 'S value is negative')
11049
11050 return new ECSignature(r, s)
11051 }
11052
11053 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11054 ECSignature.parseScriptSignature = function (buffer) {
11055 var hashType = buffer.readUInt8(buffer.length - 1)
11056 var hashTypeMod = hashType & ~0x80
11057
11058 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11059
11060 return {
11061 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11062 hashType: hashType
11063 }
11064 }
11065
11066 ECSignature.prototype.toCompact = function (i, compressed) {
11067 if (compressed) {
11068 i += 4
11069 }
11070
11071 i += 27
11072
11073 var buffer = new Buffer(65)
11074 buffer.writeUInt8(i, 0)
11075
11076 this.r.toBuffer(32).copy(buffer, 1)
11077 this.s.toBuffer(32).copy(buffer, 33)
11078
11079 return buffer
11080 }
11081
11082 ECSignature.prototype.toDER = function () {
11083 var rBa = this.r.toDERInteger()
11084 var sBa = this.s.toDERInteger()
11085
11086 var sequence = []
11087
11088 // INTEGER
11089 sequence.push(0x02, rBa.length)
11090 sequence = sequence.concat(rBa)
11091
11092 // INTEGER
11093 sequence.push(0x02, sBa.length)
11094 sequence = sequence.concat(sBa)
11095
11096 // SEQUENCE
11097 sequence.unshift(0x30, sequence.length)
11098
11099 return new Buffer(sequence)
11100 }
11101
11102 ECSignature.prototype.toScriptSignature = function (hashType) {
11103 var hashTypeMod = hashType & ~0x80
11104 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11105
11106 var hashTypeBuffer = new Buffer(1)
11107 hashTypeBuffer.writeUInt8(hashType, 0)
11108
11109 return Buffer.concat([this.toDER(), hashTypeBuffer])
11110 }
11111
11112 module.exports = ECSignature
11113
11114 }).call(this,require("buffer").Buffer)
11115 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11116 (function (Buffer){
11117 var assert = require('assert')
11118 var base58check = require('bs58check')
11119 var bcrypto = require('./crypto')
11120 var createHmac = require('create-hmac')
11121 var typeForce = require('typeforce')
11122 var networks = require('./networks')
11123
11124 var BigInteger = require('bigi')
11125 var ECKey = require('./eckey')
11126 var ECPubKey = require('./ecpubkey')
11127
11128 var ecurve = require('ecurve')
11129 var curve = ecurve.getCurveByName('secp256k1')
11130
11131 function findBIP32NetworkByVersion (version) {
11132 for (var name in networks) {
11133 var network = networks[name]
11134
11135 if (version === network.bip32.private || version === network.bip32.public) {
11136 return network
11137 }
11138 }
11139
11140 assert(false, 'Could not find network for ' + version.toString(16))
11141 }
11142
11143 function HDNode (K, chainCode, network) {
11144 network = network || networks.bitcoin
11145
11146 typeForce('Buffer', chainCode)
11147
11148 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11149 assert(network.bip32, 'Unknown BIP32 constants for network')
11150
11151 this.chainCode = chainCode
11152 this.depth = 0
11153 this.index = 0
11154 this.parentFingerprint = 0x00000000
11155 this.network = network
11156
11157 if (K instanceof BigInteger) {
11158 this.privKey = new ECKey(K, true)
11159 this.pubKey = this.privKey.pub
11160 } else if (K instanceof ECKey) {
11161 assert(K.pub.compressed, 'ECKey must be compressed')
11162 this.privKey = K
11163 this.pubKey = K.pub
11164 } else if (K instanceof ECPubKey) {
11165 assert(K.compressed, 'ECPubKey must be compressed')
11166 this.pubKey = K
11167 } else {
11168 this.pubKey = new ECPubKey(K, true)
11169 }
11170 }
11171
11172 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11173 HDNode.HIGHEST_BIT = 0x80000000
11174 HDNode.LENGTH = 78
11175
11176 HDNode.fromSeedBuffer = function (seed, network) {
11177 typeForce('Buffer', seed)
11178
11179 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11180 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11181
11182 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11183 var IL = I.slice(0, 32)
11184 var IR = I.slice(32)
11185
11186 // In case IL is 0 or >= n, the master key is invalid
11187 // This is handled by `new ECKey` in the HDNode constructor
11188 var pIL = BigInteger.fromBuffer(IL)
11189
11190 return new HDNode(pIL, IR, network)
11191 }
11192
11193 HDNode.fromSeedHex = function (hex, network) {
11194 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11195 }
11196
11197 HDNode.fromBase58 = function (string, network) {
11198 return HDNode.fromBuffer(base58check.decode(string), network, true)
11199 }
11200
11201 // FIXME: remove in 2.x.y
11202 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11203 if (!__ignoreDeprecation) {
11204 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11205 }
11206
11207 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11208
11209 // 4 byte: version bytes
11210 var version = buffer.readUInt32BE(0)
11211
11212 if (network) {
11213 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11214
11215 // auto-detect
11216 } else {
11217 network = findBIP32NetworkByVersion(version)
11218 }
11219
11220 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11221 var depth = buffer.readUInt8(4)
11222
11223 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11224 var parentFingerprint = buffer.readUInt32BE(5)
11225 if (depth === 0) {
11226 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11227 }
11228
11229 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11230 // This is encoded in MSB order. (0x00000000 if master key)
11231 var index = buffer.readUInt32BE(9)
11232 assert(depth > 0 || index === 0, 'Invalid index')
11233
11234 // 32 bytes: the chain code
11235 var chainCode = buffer.slice(13, 45)
11236 var data, hd
11237
11238 // 33 bytes: private key data (0x00 + k)
11239 if (version === network.bip32.private) {
11240 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11241 data = buffer.slice(46, 78)
11242 var d = BigInteger.fromBuffer(data)
11243 hd = new HDNode(d, chainCode, network)
11244
11245 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11246 } else {
11247 data = buffer.slice(45, 78)
11248 var Q = ecurve.Point.decodeFrom(curve, data)
11249 assert.equal(Q.compressed, true, 'Invalid public key')
11250
11251 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11252 // If not, the extended public key is invalid.
11253 curve.validate(Q)
11254
11255 hd = new HDNode(Q, chainCode, network)
11256 }
11257
11258 hd.depth = depth
11259 hd.index = index
11260 hd.parentFingerprint = parentFingerprint
11261
11262 return hd
11263 }
11264
11265 // FIXME: remove in 2.x.y
11266 HDNode.fromHex = function (hex, network) {
11267 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11268 }
11269
11270 HDNode.prototype.getIdentifier = function () {
11271 return bcrypto.hash160(this.pubKey.toBuffer())
11272 }
11273
11274 HDNode.prototype.getFingerprint = function () {
11275 return this.getIdentifier().slice(0, 4)
11276 }
11277
11278 HDNode.prototype.getAddress = function () {
11279 return this.pubKey.getAddress(this.network)
11280 }
11281
11282 HDNode.prototype.neutered = function () {
11283 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11284 neutered.depth = this.depth
11285 neutered.index = this.index
11286 neutered.parentFingerprint = this.parentFingerprint
11287
11288 return neutered
11289 }
11290
11291 HDNode.prototype.toBase58 = function (isPrivate) {
11292 return base58check.encode(this.toBuffer(isPrivate, true))
11293 }
11294
11295 // FIXME: remove in 2.x.y
11296 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11297 if (isPrivate === undefined) {
11298 isPrivate = !!this.privKey
11299
11300 // FIXME: remove in 2.x.y
11301 } else {
11302 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11303 }
11304
11305 if (!__ignoreDeprecation) {
11306 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11307 }
11308
11309 // Version
11310 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11311 var buffer = new Buffer(HDNode.LENGTH)
11312
11313 // 4 bytes: version bytes
11314 buffer.writeUInt32BE(version, 0)
11315
11316 // Depth
11317 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11318 buffer.writeUInt8(this.depth, 4)
11319
11320 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11321 buffer.writeUInt32BE(this.parentFingerprint, 5)
11322
11323 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11324 // This is encoded in Big endian. (0x00000000 if master key)
11325 buffer.writeUInt32BE(this.index, 9)
11326
11327 // 32 bytes: the chain code
11328 this.chainCode.copy(buffer, 13)
11329
11330 // 33 bytes: the public key or private key data
11331 if (isPrivate) {
11332 // FIXME: remove in 2.x.y
11333 assert(this.privKey, 'Missing private key')
11334
11335 // 0x00 + k for private keys
11336 buffer.writeUInt8(0, 45)
11337 this.privKey.d.toBuffer(32).copy(buffer, 46)
11338 } else {
11339 // X9.62 encoding for public keys
11340 this.pubKey.toBuffer().copy(buffer, 45)
11341 }
11342
11343 return buffer
11344 }
11345
11346 // FIXME: remove in 2.x.y
11347 HDNode.prototype.toHex = function (isPrivate) {
11348 return this.toBuffer(isPrivate).toString('hex')
11349 }
11350
11351 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11352 HDNode.prototype.derive = function (index) {
11353 var isHardened = index >= HDNode.HIGHEST_BIT
11354 var indexBuffer = new Buffer(4)
11355 indexBuffer.writeUInt32BE(index, 0)
11356
11357 var data
11358
11359 // Hardened child
11360 if (isHardened) {
11361 assert(this.privKey, 'Could not derive hardened child key')
11362
11363 // data = 0x00 || ser256(kpar) || ser32(index)
11364 data = Buffer.concat([
11365 this.privKey.d.toBuffer(33),
11366 indexBuffer
11367 ])
11368
11369 // Normal child
11370 } else {
11371 // data = serP(point(kpar)) || ser32(index)
11372 // = serP(Kpar) || ser32(index)
11373 data = Buffer.concat([
11374 this.pubKey.toBuffer(),
11375 indexBuffer
11376 ])
11377 }
11378
11379 var I = createHmac('sha512', this.chainCode).update(data).digest()
11380 var IL = I.slice(0, 32)
11381 var IR = I.slice(32)
11382
11383 var pIL = BigInteger.fromBuffer(IL)
11384
11385 // In case parse256(IL) >= n, proceed with the next value for i
11386 if (pIL.compareTo(curve.n) >= 0) {
11387 return this.derive(index + 1)
11388 }
11389
11390 // Private parent key -> private child key
11391 var hd
11392 if (this.privKey) {
11393 // ki = parse256(IL) + kpar (mod n)
11394 var ki = pIL.add(this.privKey.d).mod(curve.n)
11395
11396 // In case ki == 0, proceed with the next value for i
11397 if (ki.signum() === 0) {
11398 return this.derive(index + 1)
11399 }
11400
11401 hd = new HDNode(ki, IR, this.network)
11402
11403 // Public parent key -> public child key
11404 } else {
11405 // Ki = point(parse256(IL)) + Kpar
11406 // = G*IL + Kpar
11407 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11408
11409 // In case Ki is the point at infinity, proceed with the next value for i
11410 if (curve.isInfinity(Ki)) {
11411 return this.derive(index + 1)
11412 }
11413
11414 hd = new HDNode(Ki, IR, this.network)
11415 }
11416
11417 hd.depth = this.depth + 1
11418 hd.index = index
11419 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11420
11421 return hd
11422 }
11423
11424 HDNode.prototype.deriveHardened = function (index) {
11425 // Only derives hardened private keys by default
11426 return this.derive(index + HDNode.HIGHEST_BIT)
11427 }
11428
11429 HDNode.prototype.toString = HDNode.prototype.toBase58
11430
11431 module.exports = HDNode
11432
11433 }).call(this,require("buffer").Buffer)
11434 },{"./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){
11435 module.exports = {
11436 Address: require('./address'),
11437 base58check: require('./base58check'),
11438 Block: require('./block'),
11439 bufferutils: require('./bufferutils'),
11440 crypto: require('./crypto'),
11441 ecdsa: require('./ecdsa'),
11442 ECKey: require('./eckey'),
11443 ECPubKey: require('./ecpubkey'),
11444 ECSignature: require('./ecsignature'),
11445 Message: require('./message'),
11446 opcodes: require('./opcodes'),
11447 HDNode: require('./hdnode'),
11448 Script: require('./script'),
11449 scripts: require('./scripts'),
11450 Transaction: require('./transaction'),
11451 TransactionBuilder: require('./transaction_builder'),
11452 networks: require('./networks'),
11453 Wallet: require('./wallet')
11454 }
11455
11456 },{"./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){
11457 (function (Buffer){
11458 var bufferutils = require('./bufferutils')
11459 var crypto = require('./crypto')
11460 var ecdsa = require('./ecdsa')
11461 var networks = require('./networks')
11462
11463 var BigInteger = require('bigi')
11464 var ECPubKey = require('./ecpubkey')
11465 var ECSignature = require('./ecsignature')
11466
11467 var ecurve = require('ecurve')
11468 var ecparams = ecurve.getCurveByName('secp256k1')
11469
11470 function magicHash (message, network) {
11471 var magicPrefix = new Buffer(network.magicPrefix)
11472 var messageBuffer = new Buffer(message)
11473 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11474
11475 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11476 return crypto.hash256(buffer)
11477 }
11478
11479 function sign (privKey, message, network) {
11480 network = network || networks.bitcoin
11481
11482 var hash = magicHash(message, network)
11483 var signature = privKey.sign(hash)
11484 var e = BigInteger.fromBuffer(hash)
11485 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11486
11487 return signature.toCompact(i, privKey.pub.compressed)
11488 }
11489
11490 // TODO: network could be implied from address
11491 function verify (address, signature, message, network) {
11492 if (!Buffer.isBuffer(signature)) {
11493 signature = new Buffer(signature, 'base64')
11494 }
11495
11496 network = network || networks.bitcoin
11497
11498 var hash = magicHash(message, network)
11499 var parsed = ECSignature.parseCompact(signature)
11500 var e = BigInteger.fromBuffer(hash)
11501 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11502
11503 var pubKey = new ECPubKey(Q, parsed.compressed)
11504 return pubKey.getAddress(network).toString() === address.toString()
11505 }
11506
11507 module.exports = {
11508 magicHash: magicHash,
11509 sign: sign,
11510 verify: verify
11511 }
11512
11513 }).call(this,require("buffer").Buffer)
11514 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11515 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11516 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11517
11518 var networks = {
11519 bitcoin: {
11520 magicPrefix: '\x18Bitcoin Signed Message:\n',
11521 bip32: {
11522 public: 0x0488b21e,
11523 private: 0x0488ade4
11524 },
11525 pubKeyHash: 0x00,
11526 scriptHash: 0x05,
11527 wif: 0x80,
11528 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11529 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11530 estimateFee: estimateFee('bitcoin')
11531 },
11532 testnet: {
11533 magicPrefix: '\x18Bitcoin Signed Message:\n',
11534 bip32: {
11535 public: 0x043587cf,
11536 private: 0x04358394
11537 },
11538 pubKeyHash: 0x6f,
11539 scriptHash: 0xc4,
11540 wif: 0xef,
11541 dustThreshold: 546,
11542 feePerKb: 10000,
11543 estimateFee: estimateFee('testnet')
11544 },
11545 litecoin: {
11546 magicPrefix: '\x19Litecoin Signed Message:\n',
11547 bip32: {
11548 public: 0x019da462,
11549 private: 0x019d9cfe
11550 },
11551 pubKeyHash: 0x30,
11552 scriptHash: 0x05,
11553 wif: 0xb0,
11554 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11555 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11556 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11557 estimateFee: estimateFee('litecoin')
11558 },
11559 dogecoin: {
11560 magicPrefix: '\x19Dogecoin Signed Message:\n',
11561 bip32: {
11562 public: 0x02facafd,
11563 private: 0x02fac398
11564 },
11565 pubKeyHash: 0x1e,
11566 scriptHash: 0x16,
11567 wif: 0x9e,
11568 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11569 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11570 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11571 estimateFee: estimateFee('dogecoin')
11572 },
11573 viacoin: {
11574 magicPrefix: '\x18Viacoin Signed Message:\n',
11575 bip32: {
11576 public: 0x0488b21e,
11577 private: 0x0488ade4
11578 },
11579 pubKeyHash: 0x47,
11580 scriptHash: 0x21,
11581 wif: 0xc7,
11582 dustThreshold: 560,
11583 dustSoftThreshold: 100000,
11584 feePerKb: 100000, //
11585 estimateFee: estimateFee('viacoin')
11586 },
11587 viacointestnet: {
11588 magicPrefix: '\x18Viacoin Signed Message:\n',
11589 bip32: {
11590 public: 0x043587cf,
11591 private: 0x04358394
11592 },
11593 pubKeyHash: 0x7f,
11594 scriptHash: 0xc4,
11595 wif: 0xff,
11596 dustThreshold: 560,
11597 dustSoftThreshold: 100000,
11598 feePerKb: 100000,
11599 estimateFee: estimateFee('viacointestnet')
11600 },
11601 gamerscoin: {
11602 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11603 bip32: {
11604 public: 0x019da462,
11605 private: 0x019d9cfe
11606 },
11607 pubKeyHash: 0x26,
11608 scriptHash: 0x05,
11609 wif: 0xA6,
11610 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11611 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11612 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11613 estimateFee: estimateFee('gamerscoin')
11614 },
11615 jumbucks: {
11616 magicPrefix: '\x19Jumbucks Signed Message:\n',
11617 bip32: {
11618 public: 0x037a689a,
11619 private: 0x037a6460
11620 },
11621 pubKeyHash: 0x2b,
11622 scriptHash: 0x05,
11623 wif: 0xab,
11624 dustThreshold: 0,
11625 dustSoftThreshold: 10000,
11626 feePerKb: 10000,
11627 estimateFee: estimateFee('jumbucks')
11628 },
11629 zetacoin: {
11630 magicPrefix: '\x18Zetacoin Signed Message:\n',
11631 bip32: {
11632 public: 0x0488b21e,
11633 private: 0x0488ade4
11634 },
11635 pubKeyHash: 0x50,
11636 scriptHash: 0x09,
11637 wif: 0xe0,
11638 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11639 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11640 estimateFee: estimateFee('zetacoin')
11641 }
11642 }
11643
11644 function estimateFee (type) {
11645 return function (tx) {
11646 var network = networks[type]
11647 var baseFee = network.feePerKb
11648 var byteSize = tx.toBuffer().length
11649
11650 var fee = baseFee * Math.ceil(byteSize / 1000)
11651 if (network.dustSoftThreshold === undefined) return fee
11652
11653 tx.outs.forEach(function (e) {
11654 if (e.value < network.dustSoftThreshold) {
11655 fee += baseFee
11656 }
11657 })
11658
11659 return fee
11660 }
11661 }
11662
11663 module.exports = networks
11664
11665 },{}],67:[function(require,module,exports){
11666 module.exports = {
11667 // push value
11668 OP_FALSE: 0,
11669 OP_0: 0,
11670 OP_PUSHDATA1: 76,
11671 OP_PUSHDATA2: 77,
11672 OP_PUSHDATA4: 78,
11673 OP_1NEGATE: 79,
11674 OP_RESERVED: 80,
11675 OP_1: 81,
11676 OP_TRUE: 81,
11677 OP_2: 82,
11678 OP_3: 83,
11679 OP_4: 84,
11680 OP_5: 85,
11681 OP_6: 86,
11682 OP_7: 87,
11683 OP_8: 88,
11684 OP_9: 89,
11685 OP_10: 90,
11686 OP_11: 91,
11687 OP_12: 92,
11688 OP_13: 93,
11689 OP_14: 94,
11690 OP_15: 95,
11691 OP_16: 96,
11692
11693 // control
11694 OP_NOP: 97,
11695 OP_VER: 98,
11696 OP_IF: 99,
11697 OP_NOTIF: 100,
11698 OP_VERIF: 101,
11699 OP_VERNOTIF: 102,
11700 OP_ELSE: 103,
11701 OP_ENDIF: 104,
11702 OP_VERIFY: 105,
11703 OP_RETURN: 106,
11704
11705 // stack ops
11706 OP_TOALTSTACK: 107,
11707 OP_FROMALTSTACK: 108,
11708 OP_2DROP: 109,
11709 OP_2DUP: 110,
11710 OP_3DUP: 111,
11711 OP_2OVER: 112,
11712 OP_2ROT: 113,
11713 OP_2SWAP: 114,
11714 OP_IFDUP: 115,
11715 OP_DEPTH: 116,
11716 OP_DROP: 117,
11717 OP_DUP: 118,
11718 OP_NIP: 119,
11719 OP_OVER: 120,
11720 OP_PICK: 121,
11721 OP_ROLL: 122,
11722 OP_ROT: 123,
11723 OP_SWAP: 124,
11724 OP_TUCK: 125,
11725
11726 // splice ops
11727 OP_CAT: 126,
11728 OP_SUBSTR: 127,
11729 OP_LEFT: 128,
11730 OP_RIGHT: 129,
11731 OP_SIZE: 130,
11732
11733 // bit logic
11734 OP_INVERT: 131,
11735 OP_AND: 132,
11736 OP_OR: 133,
11737 OP_XOR: 134,
11738 OP_EQUAL: 135,
11739 OP_EQUALVERIFY: 136,
11740 OP_RESERVED1: 137,
11741 OP_RESERVED2: 138,
11742
11743 // numeric
11744 OP_1ADD: 139,
11745 OP_1SUB: 140,
11746 OP_2MUL: 141,
11747 OP_2DIV: 142,
11748 OP_NEGATE: 143,
11749 OP_ABS: 144,
11750 OP_NOT: 145,
11751 OP_0NOTEQUAL: 146,
11752
11753 OP_ADD: 147,
11754 OP_SUB: 148,
11755 OP_MUL: 149,
11756 OP_DIV: 150,
11757 OP_MOD: 151,
11758 OP_LSHIFT: 152,
11759 OP_RSHIFT: 153,
11760
11761 OP_BOOLAND: 154,
11762 OP_BOOLOR: 155,
11763 OP_NUMEQUAL: 156,
11764 OP_NUMEQUALVERIFY: 157,
11765 OP_NUMNOTEQUAL: 158,
11766 OP_LESSTHAN: 159,
11767 OP_GREATERTHAN: 160,
11768 OP_LESSTHANOREQUAL: 161,
11769 OP_GREATERTHANOREQUAL: 162,
11770 OP_MIN: 163,
11771 OP_MAX: 164,
11772
11773 OP_WITHIN: 165,
11774
11775 // crypto
11776 OP_RIPEMD160: 166,
11777 OP_SHA1: 167,
11778 OP_SHA256: 168,
11779 OP_HASH160: 169,
11780 OP_HASH256: 170,
11781 OP_CODESEPARATOR: 171,
11782 OP_CHECKSIG: 172,
11783 OP_CHECKSIGVERIFY: 173,
11784 OP_CHECKMULTISIG: 174,
11785 OP_CHECKMULTISIGVERIFY: 175,
11786
11787 // expansion
11788 OP_NOP1: 176,
11789 OP_NOP2: 177,
11790 OP_NOP3: 178,
11791 OP_NOP4: 179,
11792 OP_NOP5: 180,
11793 OP_NOP6: 181,
11794 OP_NOP7: 182,
11795 OP_NOP8: 183,
11796 OP_NOP9: 184,
11797 OP_NOP10: 185,
11798
11799 // template matching params
11800 OP_PUBKEYHASH: 253,
11801 OP_PUBKEY: 254,
11802 OP_INVALIDOPCODE: 255
11803 }
11804
11805 },{}],68:[function(require,module,exports){
11806 (function (Buffer){
11807 var assert = require('assert')
11808 var bufferutils = require('./bufferutils')
11809 var crypto = require('./crypto')
11810 var typeForce = require('typeforce')
11811 var opcodes = require('./opcodes')
11812
11813 function Script (buffer, chunks) {
11814 typeForce('Buffer', buffer)
11815 typeForce('Array', chunks)
11816
11817 this.buffer = buffer
11818 this.chunks = chunks
11819 }
11820
11821 Script.fromASM = function (asm) {
11822 var strChunks = asm.split(' ')
11823 var chunks = strChunks.map(function (strChunk) {
11824 // opcode
11825 if (strChunk in opcodes) {
11826 return opcodes[strChunk]
11827
11828 // data chunk
11829 } else {
11830 return new Buffer(strChunk, 'hex')
11831 }
11832 })
11833
11834 return Script.fromChunks(chunks)
11835 }
11836
11837 Script.fromBuffer = function (buffer) {
11838 var chunks = []
11839 var i = 0
11840
11841 while (i < buffer.length) {
11842 var opcode = buffer.readUInt8(i)
11843
11844 // data chunk
11845 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11846 var d = bufferutils.readPushDataInt(buffer, i)
11847
11848 // did reading a pushDataInt fail? return non-chunked script
11849 if (d === null) return new Script(buffer, [])
11850 i += d.size
11851
11852 // attempt to read too much data?
11853 if (i + d.number > buffer.length) return new Script(buffer, [])
11854
11855 var data = buffer.slice(i, i + d.number)
11856 i += d.number
11857
11858 chunks.push(data)
11859
11860 // opcode
11861 } else {
11862 chunks.push(opcode)
11863
11864 i += 1
11865 }
11866 }
11867
11868 return new Script(buffer, chunks)
11869 }
11870
11871 Script.fromChunks = function (chunks) {
11872 typeForce('Array', chunks)
11873
11874 var bufferSize = chunks.reduce(function (accum, chunk) {
11875 // data chunk
11876 if (Buffer.isBuffer(chunk)) {
11877 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11878 }
11879
11880 // opcode
11881 return accum + 1
11882 }, 0.0)
11883
11884 var buffer = new Buffer(bufferSize)
11885 var offset = 0
11886
11887 chunks.forEach(function (chunk) {
11888 // data chunk
11889 if (Buffer.isBuffer(chunk)) {
11890 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11891
11892 chunk.copy(buffer, offset)
11893 offset += chunk.length
11894
11895 // opcode
11896 } else {
11897 buffer.writeUInt8(chunk, offset)
11898 offset += 1
11899 }
11900 })
11901
11902 assert.equal(offset, buffer.length, 'Could not decode chunks')
11903 return new Script(buffer, chunks)
11904 }
11905
11906 Script.fromHex = function (hex) {
11907 return Script.fromBuffer(new Buffer(hex, 'hex'))
11908 }
11909
11910 Script.EMPTY = Script.fromChunks([])
11911
11912 Script.prototype.getHash = function () {
11913 return crypto.hash160(this.buffer)
11914 }
11915
11916 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11917 Script.prototype.without = function (needle) {
11918 return Script.fromChunks(this.chunks.filter(function (op) {
11919 return op !== needle
11920 }))
11921 }
11922
11923 var reverseOps = []
11924 for (var op in opcodes) {
11925 var code = opcodes[op]
11926 reverseOps[code] = op
11927 }
11928
11929 Script.prototype.toASM = function () {
11930 return this.chunks.map(function (chunk) {
11931 // data chunk
11932 if (Buffer.isBuffer(chunk)) {
11933 return chunk.toString('hex')
11934
11935 // opcode
11936 } else {
11937 return reverseOps[chunk]
11938 }
11939 }).join(' ')
11940 }
11941
11942 Script.prototype.toBuffer = function () {
11943 return this.buffer
11944 }
11945
11946 Script.prototype.toHex = function () {
11947 return this.toBuffer().toString('hex')
11948 }
11949
11950 module.exports = Script
11951
11952 }).call(this,require("buffer").Buffer)
11953 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11954 (function (Buffer){
11955 var assert = require('assert')
11956 var ops = require('./opcodes')
11957 var typeForce = require('typeforce')
11958
11959 var ecurve = require('ecurve')
11960 var curve = ecurve.getCurveByName('secp256k1')
11961
11962 var ECSignature = require('./ecsignature')
11963 var Script = require('./script')
11964
11965 function isCanonicalPubKey (buffer) {
11966 if (!Buffer.isBuffer(buffer)) return false
11967
11968 try {
11969 ecurve.Point.decodeFrom(curve, buffer)
11970 } catch (e) {
11971 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11972 throw e
11973
11974 return false
11975 }
11976
11977 return true
11978 }
11979
11980 function isCanonicalSignature (buffer) {
11981 if (!Buffer.isBuffer(buffer)) return false
11982
11983 try {
11984 ECSignature.parseScriptSignature(buffer)
11985 } catch (e) {
11986 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/))) {
11987 throw e
11988 }
11989
11990 return false
11991 }
11992
11993 return true
11994 }
11995
11996 function isPubKeyHashInput (script) {
11997 return script.chunks.length === 2 &&
11998 isCanonicalSignature(script.chunks[0]) &&
11999 isCanonicalPubKey(script.chunks[1])
12000 }
12001
12002 function isPubKeyHashOutput (script) {
12003 return script.chunks.length === 5 &&
12004 script.chunks[0] === ops.OP_DUP &&
12005 script.chunks[1] === ops.OP_HASH160 &&
12006 Buffer.isBuffer(script.chunks[2]) &&
12007 script.chunks[2].length === 20 &&
12008 script.chunks[3] === ops.OP_EQUALVERIFY &&
12009 script.chunks[4] === ops.OP_CHECKSIG
12010 }
12011
12012 function isPubKeyInput (script) {
12013 return script.chunks.length === 1 &&
12014 isCanonicalSignature(script.chunks[0])
12015 }
12016
12017 function isPubKeyOutput (script) {
12018 return script.chunks.length === 2 &&
12019 isCanonicalPubKey(script.chunks[0]) &&
12020 script.chunks[1] === ops.OP_CHECKSIG
12021 }
12022
12023 function isScriptHashInput (script, allowIncomplete) {
12024 if (script.chunks.length < 2) return false
12025
12026 var lastChunk = script.chunks[script.chunks.length - 1]
12027 if (!Buffer.isBuffer(lastChunk)) return false
12028
12029 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
12030 var redeemScript = Script.fromBuffer(lastChunk)
12031
12032 // is redeemScript a valid script?
12033 if (redeemScript.chunks.length === 0) return false
12034
12035 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
12036 }
12037
12038 function isScriptHashOutput (script) {
12039 return script.chunks.length === 3 &&
12040 script.chunks[0] === ops.OP_HASH160 &&
12041 Buffer.isBuffer(script.chunks[1]) &&
12042 script.chunks[1].length === 20 &&
12043 script.chunks[2] === ops.OP_EQUAL
12044 }
12045
12046 // allowIncomplete is to account for combining signatures
12047 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
12048 function isMultisigInput (script, allowIncomplete) {
12049 if (script.chunks.length < 2) return false
12050 if (script.chunks[0] !== ops.OP_0) return false
12051
12052 if (allowIncomplete) {
12053 return script.chunks.slice(1).every(function (chunk) {
12054 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12055 })
12056 }
12057
12058 return script.chunks.slice(1).every(isCanonicalSignature)
12059 }
12060
12061 function isMultisigOutput (script) {
12062 if (script.chunks.length < 4) return false
12063 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
12064
12065 var mOp = script.chunks[0]
12066 if (mOp === ops.OP_0) return false
12067 if (mOp < ops.OP_1) return false
12068 if (mOp > ops.OP_16) return false
12069
12070 var nOp = script.chunks[script.chunks.length - 2]
12071 if (nOp === ops.OP_0) return false
12072 if (nOp < ops.OP_1) return false
12073 if (nOp > ops.OP_16) return false
12074
12075 var m = mOp - (ops.OP_1 - 1)
12076 var n = nOp - (ops.OP_1 - 1)
12077 if (n < m) return false
12078
12079 var pubKeys = script.chunks.slice(1, -2)
12080 if (n < pubKeys.length) return false
12081
12082 return pubKeys.every(isCanonicalPubKey)
12083 }
12084
12085 function isNullDataOutput (script) {
12086 return script.chunks[0] === ops.OP_RETURN
12087 }
12088
12089 function classifyOutput (script) {
12090 typeForce('Script', script)
12091
12092 if (isPubKeyHashOutput(script)) {
12093 return 'pubkeyhash'
12094 } else if (isScriptHashOutput(script)) {
12095 return 'scripthash'
12096 } else if (isMultisigOutput(script)) {
12097 return 'multisig'
12098 } else if (isPubKeyOutput(script)) {
12099 return 'pubkey'
12100 } else if (isNullDataOutput(script)) {
12101 return 'nulldata'
12102 }
12103
12104 return 'nonstandard'
12105 }
12106
12107 function classifyInput (script, allowIncomplete) {
12108 typeForce('Script', script)
12109
12110 if (isPubKeyHashInput(script)) {
12111 return 'pubkeyhash'
12112 } else if (isMultisigInput(script, allowIncomplete)) {
12113 return 'multisig'
12114 } else if (isScriptHashInput(script, allowIncomplete)) {
12115 return 'scripthash'
12116 } else if (isPubKeyInput(script)) {
12117 return 'pubkey'
12118 }
12119
12120 return 'nonstandard'
12121 }
12122
12123 // Standard Script Templates
12124 // {pubKey} OP_CHECKSIG
12125 function pubKeyOutput (pubKey) {
12126 return Script.fromChunks([
12127 pubKey.toBuffer(),
12128 ops.OP_CHECKSIG
12129 ])
12130 }
12131
12132 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12133 function pubKeyHashOutput (hash) {
12134 typeForce('Buffer', hash)
12135
12136 return Script.fromChunks([
12137 ops.OP_DUP,
12138 ops.OP_HASH160,
12139 hash,
12140 ops.OP_EQUALVERIFY,
12141 ops.OP_CHECKSIG
12142 ])
12143 }
12144
12145 // OP_HASH160 {scriptHash} OP_EQUAL
12146 function scriptHashOutput (hash) {
12147 typeForce('Buffer', hash)
12148
12149 return Script.fromChunks([
12150 ops.OP_HASH160,
12151 hash,
12152 ops.OP_EQUAL
12153 ])
12154 }
12155
12156 // m [pubKeys ...] n OP_CHECKMULTISIG
12157 function multisigOutput (m, pubKeys) {
12158 typeForce(['ECPubKey'], pubKeys)
12159
12160 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12161
12162 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12163 return pubKey.toBuffer()
12164 })
12165 var n = pubKeys.length
12166
12167 return Script.fromChunks([].concat(
12168 (ops.OP_1 - 1) + m,
12169 pubKeyBuffers,
12170 (ops.OP_1 - 1) + n,
12171 ops.OP_CHECKMULTISIG
12172 ))
12173 }
12174
12175 // {signature}
12176 function pubKeyInput (signature) {
12177 typeForce('Buffer', signature)
12178
12179 return Script.fromChunks([signature])
12180 }
12181
12182 // {signature} {pubKey}
12183 function pubKeyHashInput (signature, pubKey) {
12184 typeForce('Buffer', signature)
12185
12186 return Script.fromChunks([signature, pubKey.toBuffer()])
12187 }
12188
12189 // <scriptSig> {serialized scriptPubKey script}
12190 function scriptHashInput (scriptSig, scriptPubKey) {
12191 return Script.fromChunks([].concat(
12192 scriptSig.chunks,
12193 scriptPubKey.toBuffer()
12194 ))
12195 }
12196
12197 // OP_0 [signatures ...]
12198 function multisigInput (signatures, scriptPubKey) {
12199 if (scriptPubKey) {
12200 assert(isMultisigOutput(scriptPubKey))
12201
12202 var mOp = scriptPubKey.chunks[0]
12203 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12204 var m = mOp - (ops.OP_1 - 1)
12205 var n = nOp - (ops.OP_1 - 1)
12206
12207 assert(signatures.length >= m, 'Not enough signatures provided')
12208 assert(signatures.length <= n, 'Too many signatures provided')
12209 }
12210
12211 return Script.fromChunks([].concat(ops.OP_0, signatures))
12212 }
12213
12214 function nullDataOutput (data) {
12215 return Script.fromChunks([ops.OP_RETURN, data])
12216 }
12217
12218 module.exports = {
12219 isCanonicalPubKey: isCanonicalPubKey,
12220 isCanonicalSignature: isCanonicalSignature,
12221 isPubKeyHashInput: isPubKeyHashInput,
12222 isPubKeyHashOutput: isPubKeyHashOutput,
12223 isPubKeyInput: isPubKeyInput,
12224 isPubKeyOutput: isPubKeyOutput,
12225 isScriptHashInput: isScriptHashInput,
12226 isScriptHashOutput: isScriptHashOutput,
12227 isMultisigInput: isMultisigInput,
12228 isMultisigOutput: isMultisigOutput,
12229 isNullDataOutput: isNullDataOutput,
12230 classifyOutput: classifyOutput,
12231 classifyInput: classifyInput,
12232 pubKeyOutput: pubKeyOutput,
12233 pubKeyHashOutput: pubKeyHashOutput,
12234 scriptHashOutput: scriptHashOutput,
12235 multisigOutput: multisigOutput,
12236 pubKeyInput: pubKeyInput,
12237 pubKeyHashInput: pubKeyHashInput,
12238 scriptHashInput: scriptHashInput,
12239 multisigInput: multisigInput,
12240 dataOutput: function (data) {
12241 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12242 return nullDataOutput(data)
12243 },
12244 nullDataOutput: nullDataOutput
12245 }
12246
12247 }).call(this,require("buffer").Buffer)
12248 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12249 (function (Buffer){
12250 var assert = require('assert')
12251 var bufferutils = require('./bufferutils')
12252 var crypto = require('./crypto')
12253 var typeForce = require('typeforce')
12254 var opcodes = require('./opcodes')
12255 var scripts = require('./scripts')
12256
12257 var Address = require('./address')
12258 var ECSignature = require('./ecsignature')
12259 var Script = require('./script')
12260
12261 function Transaction () {
12262 this.version = 1
12263 this.locktime = 0
12264 this.ins = []
12265 this.outs = []
12266 }
12267
12268 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12269 Transaction.SIGHASH_ALL = 0x01
12270 Transaction.SIGHASH_NONE = 0x02
12271 Transaction.SIGHASH_SINGLE = 0x03
12272 Transaction.SIGHASH_ANYONECANPAY = 0x80
12273
12274 Transaction.fromBuffer = function (buffer, __disableAssert) {
12275 var offset = 0
12276 function readSlice (n) {
12277 offset += n
12278 return buffer.slice(offset - n, offset)
12279 }
12280
12281 function readUInt32 () {
12282 var i = buffer.readUInt32LE(offset)
12283 offset += 4
12284 return i
12285 }
12286
12287 function readUInt64 () {
12288 var i = bufferutils.readUInt64LE(buffer, offset)
12289 offset += 8
12290 return i
12291 }
12292
12293 function readVarInt () {
12294 var vi = bufferutils.readVarInt(buffer, offset)
12295 offset += vi.size
12296 return vi.number
12297 }
12298
12299 function readScript () {
12300 return Script.fromBuffer(readSlice(readVarInt()))
12301 }
12302
12303 function readGenerationScript () {
12304 return new Script(readSlice(readVarInt()), [])
12305 }
12306
12307 var tx = new Transaction()
12308 tx.version = readUInt32()
12309
12310 var vinLen = readVarInt()
12311 for (var i = 0; i < vinLen; ++i) {
12312 var hash = readSlice(32)
12313
12314 if (Transaction.isCoinbaseHash(hash)) {
12315 tx.ins.push({
12316 hash: hash,
12317 index: readUInt32(),
12318 script: readGenerationScript(),
12319 sequence: readUInt32()
12320 })
12321 } else {
12322 tx.ins.push({
12323 hash: hash,
12324 index: readUInt32(),
12325 script: readScript(),
12326 sequence: readUInt32()
12327 })
12328 }
12329 }
12330
12331 var voutLen = readVarInt()
12332 for (i = 0; i < voutLen; ++i) {
12333 tx.outs.push({
12334 value: readUInt64(),
12335 script: readScript()
12336 })
12337 }
12338
12339 tx.locktime = readUInt32()
12340
12341 if (!__disableAssert) {
12342 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12343 }
12344
12345 return tx
12346 }
12347
12348 Transaction.fromHex = function (hex) {
12349 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12350 }
12351
12352 Transaction.isCoinbaseHash = function (buffer) {
12353 return Array.prototype.every.call(buffer, function (x) {
12354 return x === 0
12355 })
12356 }
12357
12358 /**
12359 * Create a new txIn.
12360 *
12361 * Can be called with any of:
12362 *
12363 * - A transaction and an index
12364 * - A transaction hash and an index
12365 *
12366 * Note that this method does not sign the created input.
12367 */
12368 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12369 if (sequence === undefined || sequence === null) {
12370 sequence = Transaction.DEFAULT_SEQUENCE
12371 }
12372
12373 script = script || Script.EMPTY
12374
12375 if (typeof hash === 'string') {
12376 // TxId hex is big-endian, we need little-endian
12377 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12378 } else if (hash instanceof Transaction) {
12379 hash = hash.getHash()
12380 }
12381
12382 typeForce('Buffer', hash)
12383 typeForce('Number', index)
12384 typeForce('Number', sequence)
12385 typeForce('Script', script)
12386
12387 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12388
12389 // Add the input and return the input's index
12390 return (this.ins.push({
12391 hash: hash,
12392 index: index,
12393 script: script,
12394 sequence: sequence
12395 }) - 1)
12396 }
12397
12398 /**
12399 * Create a new txOut.
12400 *
12401 * Can be called with:
12402 *
12403 * - A base58 address string and a value
12404 * - An Address object and a value
12405 * - A scriptPubKey Script and a value
12406 */
12407 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12408 // Attempt to get a valid address if it's a base58 address string
12409 if (typeof scriptPubKey === 'string') {
12410 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12411 }
12412
12413 // Attempt to get a valid script if it's an Address object
12414 if (scriptPubKey instanceof Address) {
12415 scriptPubKey = scriptPubKey.toOutputScript()
12416 }
12417
12418 typeForce('Script', scriptPubKey)
12419 typeForce('Number', value)
12420
12421 // Add the output and return the output's index
12422 return (this.outs.push({
12423 script: scriptPubKey,
12424 value: value
12425 }) - 1)
12426 }
12427
12428 Transaction.prototype.clone = function () {
12429 var newTx = new Transaction()
12430 newTx.version = this.version
12431 newTx.locktime = this.locktime
12432
12433 newTx.ins = this.ins.map(function (txIn) {
12434 return {
12435 hash: txIn.hash,
12436 index: txIn.index,
12437 script: txIn.script,
12438 sequence: txIn.sequence
12439 }
12440 })
12441
12442 newTx.outs = this.outs.map(function (txOut) {
12443 return {
12444 script: txOut.script,
12445 value: txOut.value
12446 }
12447 })
12448
12449 return newTx
12450 }
12451
12452 /**
12453 * Hash transaction for signing a specific input.
12454 *
12455 * Bitcoin uses a different hash for each signed transaction input. This
12456 * method copies the transaction, makes the necessary changes based on the
12457 * hashType, serializes and finally hashes the result. This hash can then be
12458 * used to sign the transaction input in question.
12459 */
12460 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12461 // FIXME: remove in 2.x.y
12462 if (arguments[0] instanceof Script) {
12463 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12464
12465 // swap the arguments (must be stored in tmp, arguments is special)
12466 var tmp = arguments[0]
12467 inIndex = arguments[1]
12468 prevOutScript = tmp
12469 }
12470
12471 typeForce('Number', inIndex)
12472 typeForce('Script', prevOutScript)
12473 typeForce('Number', hashType)
12474
12475 assert(inIndex >= 0, 'Invalid vin index')
12476 assert(inIndex < this.ins.length, 'Invalid vin index')
12477
12478 var txTmp = this.clone()
12479 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12480
12481 // Blank out other inputs' signatures
12482 txTmp.ins.forEach(function (txIn) {
12483 txIn.script = Script.EMPTY
12484 })
12485 txTmp.ins[inIndex].script = hashScript
12486
12487 var hashTypeModifier = hashType & 0x1f
12488
12489 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12490 assert(false, 'SIGHASH_NONE not yet supported')
12491 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12492 assert(false, 'SIGHASH_SINGLE not yet supported')
12493 }
12494
12495 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12496 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12497 }
12498
12499 var hashTypeBuffer = new Buffer(4)
12500 hashTypeBuffer.writeInt32LE(hashType, 0)
12501
12502 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12503 return crypto.hash256(buffer)
12504 }
12505
12506 Transaction.prototype.getHash = function () {
12507 return crypto.hash256(this.toBuffer())
12508 }
12509
12510 Transaction.prototype.getId = function () {
12511 // TxHash is little-endian, we need big-endian
12512 return bufferutils.reverse(this.getHash()).toString('hex')
12513 }
12514
12515 Transaction.prototype.toBuffer = function () {
12516 function scriptSize (script) {
12517 var length = script.buffer.length
12518
12519 return bufferutils.varIntSize(length) + length
12520 }
12521
12522 var buffer = new Buffer(
12523 8 +
12524 bufferutils.varIntSize(this.ins.length) +
12525 bufferutils.varIntSize(this.outs.length) +
12526 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12527 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12528 )
12529
12530 var offset = 0
12531 function writeSlice (slice) {
12532 slice.copy(buffer, offset)
12533 offset += slice.length
12534 }
12535
12536 function writeUInt32 (i) {
12537 buffer.writeUInt32LE(i, offset)
12538 offset += 4
12539 }
12540
12541 function writeUInt64 (i) {
12542 bufferutils.writeUInt64LE(buffer, i, offset)
12543 offset += 8
12544 }
12545
12546 function writeVarInt (i) {
12547 var n = bufferutils.writeVarInt(buffer, i, offset)
12548 offset += n
12549 }
12550
12551 writeUInt32(this.version)
12552 writeVarInt(this.ins.length)
12553
12554 this.ins.forEach(function (txIn) {
12555 writeSlice(txIn.hash)
12556 writeUInt32(txIn.index)
12557 writeVarInt(txIn.script.buffer.length)
12558 writeSlice(txIn.script.buffer)
12559 writeUInt32(txIn.sequence)
12560 })
12561
12562 writeVarInt(this.outs.length)
12563 this.outs.forEach(function (txOut) {
12564 writeUInt64(txOut.value)
12565 writeVarInt(txOut.script.buffer.length)
12566 writeSlice(txOut.script.buffer)
12567 })
12568
12569 writeUInt32(this.locktime)
12570
12571 return buffer
12572 }
12573
12574 Transaction.prototype.toHex = function () {
12575 return this.toBuffer().toString('hex')
12576 }
12577
12578 Transaction.prototype.setInputScript = function (index, script) {
12579 typeForce('Number', index)
12580 typeForce('Script', script)
12581
12582 this.ins[index].script = script
12583 }
12584
12585 // FIXME: remove in 2.x.y
12586 Transaction.prototype.sign = function (index, privKey, hashType) {
12587 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12588
12589 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12590 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12591
12592 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12593 this.setInputScript(index, scriptSig)
12594 }
12595
12596 // FIXME: remove in 2.x.y
12597 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12598 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12599
12600 hashType = hashType || Transaction.SIGHASH_ALL
12601
12602 var hash = this.hashForSignature(index, prevOutScript, hashType)
12603 var signature = privKey.sign(hash)
12604
12605 return signature.toScriptSignature(hashType)
12606 }
12607
12608 // FIXME: remove in 2.x.y
12609 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12610 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12611
12612 var parsed = ECSignature.parseScriptSignature(buffer)
12613 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12614
12615 return pubKey.verify(hash, parsed.signature)
12616 }
12617
12618 module.exports = Transaction
12619
12620 }).call(this,require("buffer").Buffer)
12621 },{"./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){
12622 (function (Buffer){
12623 var assert = require('assert')
12624 var ops = require('./opcodes')
12625 var scripts = require('./scripts')
12626
12627 var ECPubKey = require('./ecpubkey')
12628 var ECSignature = require('./ecsignature')
12629 var Script = require('./script')
12630 var Transaction = require('./transaction')
12631
12632 function extractInput (txIn) {
12633 var redeemScript
12634 var scriptSig = txIn.script
12635 var prevOutScript
12636 var prevOutType = scripts.classifyInput(scriptSig, true)
12637 var scriptType
12638
12639 // Re-classify if scriptHash
12640 if (prevOutType === 'scripthash') {
12641 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12642 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12643
12644 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12645 scriptType = scripts.classifyInput(scriptSig, true)
12646 } else {
12647 scriptType = prevOutType
12648 }
12649
12650 // Extract hashType, pubKeys and signatures
12651 var hashType, parsed, pubKeys, signatures
12652
12653 switch (scriptType) {
12654 case 'pubkeyhash': {
12655 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12656 hashType = parsed.hashType
12657 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12658 signatures = [parsed.signature]
12659 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12660
12661 break
12662 }
12663
12664 case 'pubkey': {
12665 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12666 hashType = parsed.hashType
12667 signatures = [parsed.signature]
12668
12669 if (redeemScript) {
12670 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12671 }
12672
12673 break
12674 }
12675
12676 case 'multisig': {
12677 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12678 if (chunk === ops.OP_0) return chunk
12679
12680 var parsed = ECSignature.parseScriptSignature(chunk)
12681 hashType = parsed.hashType
12682
12683 return parsed.signature
12684 })
12685
12686 if (redeemScript) {
12687 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12688 }
12689
12690 break
12691 }
12692 }
12693
12694 return {
12695 hashType: hashType,
12696 prevOutScript: prevOutScript,
12697 prevOutType: prevOutType,
12698 pubKeys: pubKeys,
12699 redeemScript: redeemScript,
12700 scriptType: scriptType,
12701 signatures: signatures
12702 }
12703 }
12704
12705 function TransactionBuilder () {
12706 this.prevTxMap = {}
12707 this.prevOutScripts = {}
12708 this.prevOutTypes = {}
12709
12710 this.inputs = []
12711 this.tx = new Transaction()
12712 }
12713
12714 TransactionBuilder.fromTransaction = function (transaction) {
12715 var txb = new TransactionBuilder()
12716
12717 // Copy other transaction fields
12718 txb.tx.version = transaction.version
12719 txb.tx.locktime = transaction.locktime
12720
12721 // Extract/add inputs
12722 transaction.ins.forEach(function (txIn) {
12723 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12724 })
12725
12726 // Extract/add outputs
12727 transaction.outs.forEach(function (txOut) {
12728 txb.addOutput(txOut.script, txOut.value)
12729 })
12730
12731 // Extract/add signatures
12732 txb.inputs = transaction.ins.map(function (txIn) {
12733 // TODO: remove me after testcase added
12734 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12735
12736 // Ignore empty scripts
12737 if (txIn.script.buffer.length === 0) return {}
12738
12739 return extractInput(txIn)
12740 })
12741
12742 return txb
12743 }
12744
12745 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12746 var prevOutHash
12747
12748 // txId
12749 if (typeof prevTx === 'string') {
12750 prevOutHash = new Buffer(prevTx, 'hex')
12751
12752 // TxId hex is big-endian, we want little-endian hash
12753 Array.prototype.reverse.call(prevOutHash)
12754
12755 // Transaction
12756 } else if (prevTx instanceof Transaction) {
12757 prevOutHash = prevTx.getHash()
12758 prevOutScript = prevTx.outs[index].script
12759
12760 // txHash
12761 } else {
12762 prevOutHash = prevTx
12763 }
12764
12765 var input = {}
12766 if (prevOutScript) {
12767 var prevOutType = scripts.classifyOutput(prevOutScript)
12768
12769 // if we can, extract pubKey information
12770 switch (prevOutType) {
12771 case 'multisig': {
12772 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12773 break
12774 }
12775
12776 case 'pubkey': {
12777 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12778 break
12779 }
12780 }
12781
12782 if (prevOutType !== 'scripthash') {
12783 input.scriptType = prevOutType
12784 }
12785
12786 input.prevOutScript = prevOutScript
12787 input.prevOutType = prevOutType
12788 }
12789
12790 assert(this.inputs.every(function (input2) {
12791 if (input2.hashType === undefined) return true
12792
12793 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12794 }), 'No, this would invalidate signatures')
12795
12796 var prevOut = prevOutHash.toString('hex') + ':' + index
12797 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12798
12799 var vin = this.tx.addInput(prevOutHash, index, sequence)
12800 this.inputs[vin] = input
12801 this.prevTxMap[prevOut] = vin
12802
12803 return vin
12804 }
12805
12806 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12807 assert(this.inputs.every(function (input) {
12808 if (input.hashType === undefined) return true
12809
12810 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12811 }), 'No, this would invalidate signatures')
12812
12813 return this.tx.addOutput(scriptPubKey, value)
12814 }
12815
12816 TransactionBuilder.prototype.build = function () {
12817 return this.__build(false)
12818 }
12819 TransactionBuilder.prototype.buildIncomplete = function () {
12820 return this.__build(true)
12821 }
12822
12823 var canSignTypes = {
12824 'pubkeyhash': true,
12825 'multisig': true,
12826 'pubkey': true
12827 }
12828
12829 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12830 if (!allowIncomplete) {
12831 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12832 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12833 }
12834
12835 var tx = this.tx.clone()
12836
12837 // Create script signatures from signature meta-data
12838 this.inputs.forEach(function (input, index) {
12839 var scriptType = input.scriptType
12840 var scriptSig
12841
12842 if (!allowIncomplete) {
12843 assert(!!scriptType, 'Transaction is not complete')
12844 assert(scriptType in canSignTypes, scriptType + ' not supported')
12845 assert(input.signatures, 'Transaction is missing signatures')
12846 }
12847
12848 if (input.signatures) {
12849 switch (scriptType) {
12850 case 'pubkeyhash': {
12851 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12852 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12853 break
12854 }
12855
12856 case 'multisig': {
12857 // Array.prototype.map is sparse-compatible
12858 var msSignatures = input.signatures.map(function (signature) {
12859 return signature && signature.toScriptSignature(input.hashType)
12860 })
12861
12862 // fill in blanks with OP_0
12863 if (allowIncomplete) {
12864 for (var i = 0; i < msSignatures.length; ++i) {
12865 if (msSignatures[i]) continue
12866
12867 msSignatures[i] = ops.OP_0
12868 }
12869 } else {
12870 // Array.prototype.filter returns non-sparse array
12871 msSignatures = msSignatures.filter(function (x) { return x })
12872 }
12873
12874 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12875 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12876 break
12877 }
12878
12879 case 'pubkey': {
12880 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12881 scriptSig = scripts.pubKeyInput(pkSignature)
12882 break
12883 }
12884 }
12885 }
12886
12887 // did we build a scriptSig?
12888 if (scriptSig) {
12889 // wrap as scriptHash if necessary
12890 if (input.prevOutType === 'scripthash') {
12891 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12892 }
12893
12894 tx.setInputScript(index, scriptSig)
12895 }
12896 })
12897
12898 return tx
12899 }
12900
12901 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12902 assert(index in this.inputs, 'No input at index: ' + index)
12903 hashType = hashType || Transaction.SIGHASH_ALL
12904
12905 var input = this.inputs[index]
12906 var canSign = input.hashType &&
12907 input.prevOutScript &&
12908 input.prevOutType &&
12909 input.pubKeys &&
12910 input.scriptType &&
12911 input.signatures
12912
12913 // are we almost ready to sign?
12914 if (canSign) {
12915 // if redeemScript was provided, enforce consistency
12916 if (redeemScript) {
12917 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12918 }
12919
12920 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12921
12922 // no? prepare
12923 } else {
12924 // must be pay-to-scriptHash?
12925 if (redeemScript) {
12926 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12927 if (input.prevOutScript) {
12928 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12929
12930 var scriptHash = input.prevOutScript.chunks[1]
12931 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12932 }
12933
12934 var scriptType = scripts.classifyOutput(redeemScript)
12935 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12936
12937 var pubKeys = []
12938 switch (scriptType) {
12939 case 'multisig': {
12940 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12941 break
12942 }
12943
12944 case 'pubkeyhash': {
12945 var pkh1 = redeemScript.chunks[2]
12946 var pkh2 = privKey.pub.getAddress().hash
12947
12948 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12949 pubKeys = [privKey.pub]
12950 break
12951 }
12952
12953 case 'pubkey': {
12954 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12955 break
12956 }
12957 }
12958
12959 if (!input.prevOutScript) {
12960 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12961 input.prevOutType = 'scripthash'
12962 }
12963
12964 input.pubKeys = pubKeys
12965 input.redeemScript = redeemScript
12966 input.scriptType = scriptType
12967
12968 // cannot be pay-to-scriptHash
12969 } else {
12970 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12971
12972 // can we otherwise sign this?
12973 if (input.scriptType) {
12974 assert(input.pubKeys, input.scriptType + ' not supported')
12975
12976 // we know nothin' Jon Snow, assume pubKeyHash
12977 } else {
12978 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12979 input.prevOutType = 'pubkeyhash'
12980 input.pubKeys = [privKey.pub]
12981 input.scriptType = input.prevOutType
12982 }
12983 }
12984
12985 input.hashType = hashType
12986 input.signatures = input.signatures || []
12987 }
12988
12989 var signatureScript = input.redeemScript || input.prevOutScript
12990 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12991
12992 // enforce signature order matches public keys
12993 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12994 // maintain a local copy of unmatched signatures
12995 var unmatched = input.signatures.slice()
12996
12997 input.signatures = input.pubKeys.map(function (pubKey) {
12998 var match
12999
13000 // check for any matching signatures
13001 unmatched.some(function (signature, i) {
13002 if (!pubKey.verify(signatureHash, signature)) return false
13003 match = signature
13004
13005 // remove matched signature from unmatched
13006 unmatched.splice(i, 1)
13007
13008 return true
13009 })
13010
13011 return match || undefined
13012 })
13013 }
13014
13015 // enforce in order signing of public keys
13016 assert(input.pubKeys.some(function (pubKey, i) {
13017 if (!privKey.pub.Q.equals(pubKey.Q)) return false
13018
13019 assert(!input.signatures[i], 'Signature already exists')
13020 var signature = privKey.sign(signatureHash)
13021 input.signatures[i] = signature
13022
13023 return true
13024 }, this), 'privateKey cannot sign for this input')
13025 }
13026
13027 module.exports = TransactionBuilder
13028
13029 }).call(this,require("buffer").Buffer)
13030 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
13031 (function (Buffer){
13032 var assert = require('assert')
13033 var bufferutils = require('./bufferutils')
13034 var typeForce = require('typeforce')
13035 var networks = require('./networks')
13036 var randomBytes = require('randombytes')
13037
13038 var Address = require('./address')
13039 var HDNode = require('./hdnode')
13040 var TransactionBuilder = require('./transaction_builder')
13041 var Script = require('./script')
13042
13043 function Wallet (seed, network) {
13044 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
13045
13046 seed = seed || randomBytes(32)
13047 network = network || networks.bitcoin
13048
13049 // Stored in a closure to make accidental serialization less likely
13050 var masterKey = HDNode.fromSeedBuffer(seed, network)
13051
13052 // HD first-level child derivation method should be hardened
13053 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13054 var accountZero = masterKey.deriveHardened(0)
13055 var externalAccount = accountZero.derive(0)
13056 var internalAccount = accountZero.derive(1)
13057
13058 this.addresses = []
13059 this.changeAddresses = []
13060 this.network = network
13061 this.unspents = []
13062
13063 // FIXME: remove in 2.0.0
13064 this.unspentMap = {}
13065
13066 // FIXME: remove in 2.0.0
13067 var me = this
13068 this.newMasterKey = function (seed) {
13069 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13070
13071 seed = seed || randomBytes(32)
13072 masterKey = HDNode.fromSeedBuffer(seed, network)
13073
13074 accountZero = masterKey.deriveHardened(0)
13075 externalAccount = accountZero.derive(0)
13076 internalAccount = accountZero.derive(1)
13077
13078 me.addresses = []
13079 me.changeAddresses = []
13080
13081 me.unspents = []
13082 me.unspentMap = {}
13083 }
13084
13085 this.getMasterKey = function () {
13086 return masterKey
13087 }
13088 this.getAccountZero = function () {
13089 return accountZero
13090 }
13091 this.getExternalAccount = function () {
13092 return externalAccount
13093 }
13094 this.getInternalAccount = function () {
13095 return internalAccount
13096 }
13097 }
13098
13099 Wallet.prototype.createTransaction = function (to, value, options) {
13100 // FIXME: remove in 2.0.0
13101 if (typeof options !== 'object') {
13102 if (options !== undefined) {
13103 console.warn('Non options object parameters are deprecated, use options object instead')
13104
13105 options = {
13106 fixedFee: arguments[2],
13107 changeAddress: arguments[3]
13108 }
13109 }
13110 }
13111
13112 options = options || {}
13113
13114 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13115
13116 var changeAddress = options.changeAddress
13117 var fixedFee = options.fixedFee
13118 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13119
13120 // filter by minConf, then pending and sort by descending value
13121 var unspents = this.unspents.filter(function (unspent) {
13122 return unspent.confirmations >= minConf
13123 }).filter(function (unspent) {
13124 return !unspent.pending
13125 }).sort(function (o1, o2) {
13126 return o2.value - o1.value
13127 })
13128
13129 var accum = 0
13130 var addresses = []
13131 var subTotal = value
13132
13133 var txb = new TransactionBuilder()
13134 txb.addOutput(to, value)
13135
13136 for (var i = 0; i < unspents.length; ++i) {
13137 var unspent = unspents[i]
13138 addresses.push(unspent.address)
13139
13140 txb.addInput(unspent.txHash, unspent.index)
13141
13142 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13143
13144 accum += unspent.value
13145 subTotal = value + fee
13146
13147 if (accum >= subTotal) {
13148 var change = accum - subTotal
13149
13150 if (change > this.network.dustThreshold) {
13151 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13152 }
13153
13154 break
13155 }
13156 }
13157
13158 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13159
13160 return this.signWith(txb, addresses).build()
13161 }
13162
13163 // FIXME: remove in 2.0.0
13164 Wallet.prototype.processPendingTx = function (tx) {
13165 this.__processTx(tx, true)
13166 }
13167
13168 // FIXME: remove in 2.0.0
13169 Wallet.prototype.processConfirmedTx = function (tx) {
13170 this.__processTx(tx, false)
13171 }
13172
13173 // FIXME: remove in 2.0.0
13174 Wallet.prototype.__processTx = function (tx, isPending) {
13175 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13176
13177 var txId = tx.getId()
13178 var txHash = tx.getHash()
13179
13180 tx.outs.forEach(function (txOut, i) {
13181 var address
13182
13183 try {
13184 address = Address.fromOutputScript(txOut.script, this.network).toString()
13185 } catch (e) {
13186 if (!(e.message.match(/has no matching Address/)))
13187 throw e
13188 }
13189
13190 var myAddresses = this.addresses.concat(this.changeAddresses)
13191 if (myAddresses.indexOf(address) > -1) {
13192 var lookup = txId + ':' + i
13193 if (lookup in this.unspentMap) return
13194
13195 // its unique, add it
13196 var unspent = {
13197 address: address,
13198 confirmations: 0, // no way to determine this without more information
13199 index: i,
13200 txHash: txHash,
13201 txId: txId,
13202 value: txOut.value,
13203 pending: isPending
13204 }
13205
13206 this.unspentMap[lookup] = unspent
13207 this.unspents.push(unspent)
13208 }
13209 }, this)
13210
13211 tx.ins.forEach(function (txIn) {
13212 // copy and convert to big-endian hex
13213 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13214
13215 var lookup = txInId + ':' + txIn.index
13216 if (!(lookup in this.unspentMap)) return
13217
13218 var unspent = this.unspentMap[lookup]
13219
13220 if (isPending) {
13221 unspent.pending = true
13222 unspent.spent = true
13223 } else {
13224 delete this.unspentMap[lookup]
13225
13226 this.unspents = this.unspents.filter(function (unspent2) {
13227 return unspent !== unspent2
13228 })
13229 }
13230 }, this)
13231 }
13232
13233 Wallet.prototype.generateAddress = function () {
13234 var k = this.addresses.length
13235 var address = this.getExternalAccount().derive(k).getAddress()
13236
13237 this.addresses.push(address.toString())
13238
13239 return this.getReceiveAddress()
13240 }
13241
13242 Wallet.prototype.generateChangeAddress = function () {
13243 var k = this.changeAddresses.length
13244 var address = this.getInternalAccount().derive(k).getAddress()
13245
13246 this.changeAddresses.push(address.toString())
13247
13248 return this.getChangeAddress()
13249 }
13250
13251 Wallet.prototype.getAddress = function () {
13252 if (this.addresses.length === 0) {
13253 this.generateAddress()
13254 }
13255
13256 return this.addresses[this.addresses.length - 1]
13257 }
13258
13259 Wallet.prototype.getBalance = function (minConf) {
13260 minConf = minConf || 0
13261
13262 return this.unspents.filter(function (unspent) {
13263 return unspent.confirmations >= minConf
13264
13265 // FIXME: remove spent filter in 2.0.0
13266 }).filter(function (unspent) {
13267 return !unspent.spent
13268 }).reduce(function (accum, unspent) {
13269 return accum + unspent.value
13270 }, 0)
13271 }
13272
13273 Wallet.prototype.getChangeAddress = function () {
13274 if (this.changeAddresses.length === 0) {
13275 this.generateChangeAddress()
13276 }
13277
13278 return this.changeAddresses[this.changeAddresses.length - 1]
13279 }
13280
13281 Wallet.prototype.getInternalPrivateKey = function (index) {
13282 return this.getInternalAccount().derive(index).privKey
13283 }
13284
13285 Wallet.prototype.getPrivateKey = function (index) {
13286 return this.getExternalAccount().derive(index).privKey
13287 }
13288
13289 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13290 var index
13291
13292 if ((index = this.addresses.indexOf(address)) > -1) {
13293 return this.getPrivateKey(index)
13294 }
13295
13296 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13297 return this.getInternalPrivateKey(index)
13298 }
13299
13300 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13301 }
13302
13303 Wallet.prototype.getUnspentOutputs = function (minConf) {
13304 minConf = minConf || 0
13305
13306 return this.unspents.filter(function (unspent) {
13307 return unspent.confirmations >= minConf
13308
13309 // FIXME: remove spent filter in 2.0.0
13310 }).filter(function (unspent) {
13311 return !unspent.spent
13312 }).map(function (unspent) {
13313 return {
13314 address: unspent.address,
13315 confirmations: unspent.confirmations,
13316 index: unspent.index,
13317 txId: unspent.txId,
13318 value: unspent.value,
13319
13320 // FIXME: remove in 2.0.0
13321 hash: unspent.txId,
13322 pending: unspent.pending
13323 }
13324 })
13325 }
13326
13327 Wallet.prototype.setUnspentOutputs = function (unspents) {
13328 this.unspentMap = {}
13329 this.unspents = unspents.map(function (unspent) {
13330 // FIXME: remove unspent.hash in 2.0.0
13331 var txId = unspent.txId || unspent.hash
13332 var index = unspent.index
13333
13334 // FIXME: remove in 2.0.0
13335 if (unspent.hash !== undefined) {
13336 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13337 }
13338
13339 // FIXME: remove in 2.0.0
13340 if (index === undefined) {
13341 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13342 index = unspent.outputIndex
13343 }
13344
13345 typeForce('String', txId)
13346 typeForce('Number', index)
13347 typeForce('Number', unspent.value)
13348
13349 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13350 assert.doesNotThrow(function () {
13351 Address.fromBase58Check(unspent.address)
13352 }, 'Expected Base58 Address, got ' + unspent.address)
13353 assert(isFinite(index), 'Expected finite index, got ' + index)
13354
13355 // FIXME: remove branch in 2.0.0
13356 if (unspent.confirmations !== undefined) {
13357 typeForce('Number', unspent.confirmations)
13358 }
13359
13360 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13361
13362 unspent = {
13363 address: unspent.address,
13364 confirmations: unspent.confirmations || 0,
13365 index: index,
13366 txHash: txHash,
13367 txId: txId,
13368 value: unspent.value,
13369
13370 // FIXME: remove in 2.0.0
13371 pending: unspent.pending || false
13372 }
13373
13374 // FIXME: remove in 2.0.0
13375 this.unspentMap[txId + ':' + index] = unspent
13376
13377 return unspent
13378 }, this)
13379 }
13380
13381 Wallet.prototype.signWith = function (tx, addresses) {
13382 addresses.forEach(function (address, i) {
13383 var privKey = this.getPrivateKeyForAddress(address)
13384
13385 tx.sign(i, privKey)
13386 }, this)
13387
13388 return tx
13389 }
13390
13391 function estimatePaddedFee (tx, network) {
13392 var tmpTx = tx.clone()
13393 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13394
13395 return network.estimateFee(tmpTx)
13396 }
13397
13398 // FIXME: 1.0.0 shims, remove in 2.0.0
13399 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13400 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13401
13402 module.exports = Wallet
13403
13404 }).call(this,require("buffer").Buffer)
13405 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13406 });</script>
13407 <script>bitcoin.networks.shadow = {
13408 magicPrefix: '\x19ShadowCash Signed Message:\n',
13409 bip32: {
13410 public: 0xEE80286A,
13411 private: 0xEE8031E8
13412 },
13413 pubKeyHash: 0x3f,
13414 scriptHash: 0x7d,
13415 wif: 0xbf,
13416 dustThreshold: 0,
13417 feePerKb: 1000,
13418 estimateFee: function() { return "unused in this app" },
13419 };
13420
13421 bitcoin.networks.shadowtn = {
13422 magicPrefix: '\x19ShadowCash Signed Message:\n',
13423 bip32: {
13424 public: 0x76C0FDFB,
13425 private: 0x76C1077A
13426 },
13427 pubKeyHash: 0x7f,
13428 scriptHash: 0xc4,
13429 wif: 0xff,
13430 dustThreshold: 0,
13431 feePerKb: 1000,
13432 estimateFee: function() { return "unused in this app" },
13433 };
13434
13435 bitcoin.networks.clam = {
13436 bip32: {
13437 public: 0xa8c26d64,
13438 private: 0xa8c17826
13439 },
13440 pubKeyHash: 0x89,
13441 wif: 0x85,
13442 };
13443
13444 bitcoin.networks.dash = {
13445 bip32: {
13446 public: 0x0488b21e,
13447 private: 0x0488ade4
13448 },
13449 pubKeyHash: 0x4c,
13450 scriptHash: 0x10,
13451 wif: 0xcc,
13452 };
13453
13454 bitcoin.networks.namecoin = {
13455 bip32: {
13456 public: 0x0488b21e,
13457 private: 0x0488ade4
13458 },
13459 pubKeyHash: 0x34,
13460 //scriptHash: 0x10,
13461 wif: 0x80,
13462 };
13463
13464 bitcoin.networks.peercoin = {
13465 bip32: {
13466 public: 0x0488b21e,
13467 private: 0x0488ade4
13468 },
13469 pubKeyHash: 0x37,
13470 //scriptHash: 0x10,
13471 wif: 0xb7,
13472 };
13473
13474 </script>
13475 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13476
13477 //// base.js
13478
13479 /** @fileOverview Javascript cryptography implementation.
13480 *
13481 * Crush to remove comments, shorten variable names and
13482 * generally reduce transmission size.
13483 *
13484 * @author Emily Stark
13485 * @author Mike Hamburg
13486 * @author Dan Boneh
13487 */
13488
13489 "use strict";
13490 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13491 /*global document, window, escape, unescape, module, require, Uint32Array */
13492
13493 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13494 var sjcl = {
13495 /** @namespace Symmetric ciphers. */
13496 cipher: {},
13497
13498 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13499 hash: {},
13500
13501 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13502 keyexchange: {},
13503
13504 /** @namespace Block cipher modes of operation. */
13505 mode: {},
13506
13507 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13508 misc: {},
13509
13510 /**
13511 * @namespace Bit array encoders and decoders.
13512 *
13513 * @description
13514 * The members of this namespace are functions which translate between
13515 * SJCL's bitArrays and other objects (usually strings). Because it
13516 * isn't always clear which direction is encoding and which is decoding,
13517 * the method names are "fromBits" and "toBits".
13518 */
13519 codec: {},
13520
13521 /** @namespace Exceptions. */
13522 exception: {
13523 /** @constructor Ciphertext is corrupt. */
13524 corrupt: function(message) {
13525 this.toString = function() { return "CORRUPT: "+this.message; };
13526 this.message = message;
13527 },
13528
13529 /** @constructor Invalid parameter. */
13530 invalid: function(message) {
13531 this.toString = function() { return "INVALID: "+this.message; };
13532 this.message = message;
13533 },
13534
13535 /** @constructor Bug or missing feature in SJCL. @constructor */
13536 bug: function(message) {
13537 this.toString = function() { return "BUG: "+this.message; };
13538 this.message = message;
13539 },
13540
13541 /** @constructor Something isn't ready. */
13542 notReady: function(message) {
13543 this.toString = function() { return "NOT READY: "+this.message; };
13544 this.message = message;
13545 }
13546 }
13547 };
13548
13549 if(typeof module !== 'undefined' && module.exports){
13550 module.exports = sjcl;
13551 }
13552 if (typeof define === "function") {
13553 define([], function () {
13554 return sjcl;
13555 });
13556 }
13557
13558
13559 //// bitArray.js
13560
13561 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13562 *
13563 * @author Emily Stark
13564 * @author Mike Hamburg
13565 * @author Dan Boneh
13566 */
13567
13568 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13569 *
13570 * @description
13571 * <p>
13572 * These objects are the currency accepted by SJCL's crypto functions.
13573 * </p>
13574 *
13575 * <p>
13576 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13577 * but many of them can take arguments that are not a multiple of 4 bytes.
13578 * This library encodes arrays of bits (whose size need not be a multiple of 8
13579 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13580 * array of words, 32 bits at a time. Since the words are double-precision
13581 * floating point numbers, they fit some extra data. We use this (in a private,
13582 * possibly-changing manner) to encode the number of bits actually present
13583 * in the last word of the array.
13584 * </p>
13585 *
13586 * <p>
13587 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13588 * to ciphers like AES which want arrays of words.
13589 * </p>
13590 */
13591 sjcl.bitArray = {
13592 /**
13593 * Array slices in units of bits.
13594 * @param {bitArray} a The array to slice.
13595 * @param {Number} bstart The offset to the start of the slice, in bits.
13596 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13597 * slice until the end of the array.
13598 * @return {bitArray} The requested slice.
13599 */
13600 bitSlice: function (a, bstart, bend) {
13601 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13602 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13603 },
13604
13605 /**
13606 * Extract a number packed into a bit array.
13607 * @param {bitArray} a The array to slice.
13608 * @param {Number} bstart The offset to the start of the slice, in bits.
13609 * @param {Number} length The length of the number to extract.
13610 * @return {Number} The requested slice.
13611 */
13612 extract: function(a, bstart, blength) {
13613 // FIXME: this Math.floor is not necessary at all, but for some reason
13614 // seems to suppress a bug in the Chromium JIT.
13615 var x, sh = Math.floor((-bstart-blength) & 31);
13616 if ((bstart + blength - 1 ^ bstart) & -32) {
13617 // it crosses a boundary
13618 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13619 } else {
13620 // within a single word
13621 x = a[bstart/32|0] >>> sh;
13622 }
13623 return x & ((1<<blength) - 1);
13624 },
13625
13626 /**
13627 * Concatenate two bit arrays.
13628 * @param {bitArray} a1 The first array.
13629 * @param {bitArray} a2 The second array.
13630 * @return {bitArray} The concatenation of a1 and a2.
13631 */
13632 concat: function (a1, a2) {
13633 if (a1.length === 0 || a2.length === 0) {
13634 return a1.concat(a2);
13635 }
13636
13637 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13638 if (shift === 32) {
13639 return a1.concat(a2);
13640 } else {
13641 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13642 }
13643 },
13644
13645 /**
13646 * Find the length of an array of bits.
13647 * @param {bitArray} a The array.
13648 * @return {Number} The length of a, in bits.
13649 */
13650 bitLength: function (a) {
13651 var l = a.length, x;
13652 if (l === 0) { return 0; }
13653 x = a[l - 1];
13654 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13655 },
13656
13657 /**
13658 * Truncate an array.
13659 * @param {bitArray} a The array.
13660 * @param {Number} len The length to truncate to, in bits.
13661 * @return {bitArray} A new array, truncated to len bits.
13662 */
13663 clamp: function (a, len) {
13664 if (a.length * 32 < len) { return a; }
13665 a = a.slice(0, Math.ceil(len / 32));
13666 var l = a.length;
13667 len = len & 31;
13668 if (l > 0 && len) {
13669 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13670 }
13671 return a;
13672 },
13673
13674 /**
13675 * Make a partial word for a bit array.
13676 * @param {Number} len The number of bits in the word.
13677 * @param {Number} x The bits.
13678 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13679 * @return {Number} The partial word.
13680 */
13681 partial: function (len, x, _end) {
13682 if (len === 32) { return x; }
13683 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13684 },
13685
13686 /**
13687 * Get the number of bits used by a partial word.
13688 * @param {Number} x The partial word.
13689 * @return {Number} The number of bits used by the partial word.
13690 */
13691 getPartial: function (x) {
13692 return Math.round(x/0x10000000000) || 32;
13693 },
13694
13695 /**
13696 * Compare two arrays for equality in a predictable amount of time.
13697 * @param {bitArray} a The first array.
13698 * @param {bitArray} b The second array.
13699 * @return {boolean} true if a == b; false otherwise.
13700 */
13701 equal: function (a, b) {
13702 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13703 return false;
13704 }
13705 var x = 0, i;
13706 for (i=0; i<a.length; i++) {
13707 x |= a[i]^b[i];
13708 }
13709 return (x === 0);
13710 },
13711
13712 /** Shift an array right.
13713 * @param {bitArray} a The array to shift.
13714 * @param {Number} shift The number of bits to shift.
13715 * @param {Number} [carry=0] A byte to carry in
13716 * @param {bitArray} [out=[]] An array to prepend to the output.
13717 * @private
13718 */
13719 _shiftRight: function (a, shift, carry, out) {
13720 var i, last2=0, shift2;
13721 if (out === undefined) { out = []; }
13722
13723 for (; shift >= 32; shift -= 32) {
13724 out.push(carry);
13725 carry = 0;
13726 }
13727 if (shift === 0) {
13728 return out.concat(a);
13729 }
13730
13731 for (i=0; i<a.length; i++) {
13732 out.push(carry | a[i]>>>shift);
13733 carry = a[i] << (32-shift);
13734 }
13735 last2 = a.length ? a[a.length-1] : 0;
13736 shift2 = sjcl.bitArray.getPartial(last2);
13737 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13738 return out;
13739 },
13740
13741 /** xor a block of 4 words together.
13742 * @private
13743 */
13744 _xor4: function(x,y) {
13745 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13746 },
13747
13748 /** byteswap a word array inplace.
13749 * (does not handle partial words)
13750 * @param {sjcl.bitArray} a word array
13751 * @return {sjcl.bitArray} byteswapped array
13752 */
13753 byteswapM: function(a) {
13754 var i, v, m = 0xff00;
13755 for (i = 0; i < a.length; ++i) {
13756 v = a[i];
13757 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13758 }
13759 return a;
13760 }
13761 };
13762
13763
13764 //// codecString.js
13765
13766 /** @fileOverview Bit array codec implementations.
13767 *
13768 * @author Emily Stark
13769 * @author Mike Hamburg
13770 * @author Dan Boneh
13771 */
13772
13773 /** @namespace UTF-8 strings */
13774 sjcl.codec.utf8String = {
13775 /** Convert from a bitArray to a UTF-8 string. */
13776 fromBits: function (arr) {
13777 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13778 for (i=0; i<bl/8; i++) {
13779 if ((i&3) === 0) {
13780 tmp = arr[i/4];
13781 }
13782 out += String.fromCharCode(tmp >>> 24);
13783 tmp <<= 8;
13784 }
13785 return decodeURIComponent(escape(out));
13786 },
13787
13788 /** Convert from a UTF-8 string to a bitArray. */
13789 toBits: function (str) {
13790 str = unescape(encodeURIComponent(str));
13791 var out = [], i, tmp=0;
13792 for (i=0; i<str.length; i++) {
13793 tmp = tmp << 8 | str.charCodeAt(i);
13794 if ((i&3) === 3) {
13795 out.push(tmp);
13796 tmp = 0;
13797 }
13798 }
13799 if (i&3) {
13800 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13801 }
13802 return out;
13803 }
13804 };
13805
13806
13807 //// codecHex.js
13808
13809 /** @fileOverview Bit array codec implementations.
13810 *
13811 * @author Emily Stark
13812 * @author Mike Hamburg
13813 * @author Dan Boneh
13814 */
13815
13816 /** @namespace Hexadecimal */
13817 sjcl.codec.hex = {
13818 /** Convert from a bitArray to a hex string. */
13819 fromBits: function (arr) {
13820 var out = "", i;
13821 for (i=0; i<arr.length; i++) {
13822 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13823 }
13824 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13825 },
13826 /** Convert from a hex string to a bitArray. */
13827 toBits: function (str) {
13828 var i, out=[], len;
13829 str = str.replace(/\s|0x/g, "");
13830 len = str.length;
13831 str = str + "00000000";
13832 for (i=0; i<str.length; i+=8) {
13833 out.push(parseInt(str.substr(i,8),16)^0);
13834 }
13835 return sjcl.bitArray.clamp(out, len*4);
13836 }
13837 };
13838
13839
13840 //// sha512.js
13841
13842 /** @fileOverview Javascript SHA-512 implementation.
13843 *
13844 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13845 * SJCL by Stefan Thomas.
13846 *
13847 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
13848 * Released with New BSD License
13849 *
13850 * @author Emily Stark
13851 * @author Mike Hamburg
13852 * @author Dan Boneh
13853 * @author Jeff Mott
13854 * @author Stefan Thomas
13855 */
13856
13857 /**
13858 * Context for a SHA-512 operation in progress.
13859 * @constructor
13860 * @class Secure Hash Algorithm, 512 bits.
13861 */
13862 sjcl.hash.sha512 = function (hash) {
13863 if (!this._key[0]) { this._precompute(); }
13864 if (hash) {
13865 this._h = hash._h.slice(0);
13866 this._buffer = hash._buffer.slice(0);
13867 this._length = hash._length;
13868 } else {
13869 this.reset();
13870 }
13871 };
13872
13873 /**
13874 * Hash a string or an array of words.
13875 * @static
13876 * @param {bitArray|String} data the data to hash.
13877 * @return {bitArray} The hash value, an array of 16 big-endian words.
13878 */
13879 sjcl.hash.sha512.hash = function (data) {
13880 return (new sjcl.hash.sha512()).update(data).finalize();
13881 };
13882
13883 sjcl.hash.sha512.prototype = {
13884 /**
13885 * The hash's block size, in bits.
13886 * @constant
13887 */
13888 blockSize: 1024,
13889
13890 /**
13891 * Reset the hash state.
13892 * @return this
13893 */
13894 reset:function () {
13895 this._h = this._init.slice(0);
13896 this._buffer = [];
13897 this._length = 0;
13898 return this;
13899 },
13900
13901 /**
13902 * Input several words to the hash.
13903 * @param {bitArray|String} data the data to hash.
13904 * @return this
13905 */
13906 update: function (data) {
13907 if (typeof data === "string") {
13908 data = sjcl.codec.utf8String.toBits(data);
13909 }
13910 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13911 ol = this._length,
13912 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13913 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13914 this._block(b.splice(0,32));
13915 }
13916 return this;
13917 },
13918
13919 /**
13920 * Complete hashing and output the hash value.
13921 * @return {bitArray} The hash value, an array of 16 big-endian words.
13922 */
13923 finalize:function () {
13924 var i, b = this._buffer, h = this._h;
13925
13926 // Round out and push the buffer
13927 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13928
13929 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13930 for (i = b.length + 4; i & 31; i++) {
13931 b.push(0);
13932 }
13933
13934 // append the length
13935 b.push(0);
13936 b.push(0);
13937 b.push(Math.floor(this._length / 0x100000000));
13938 b.push(this._length | 0);
13939
13940 while (b.length) {
13941 this._block(b.splice(0,32));
13942 }
13943
13944 this.reset();
13945 return h;
13946 },
13947
13948 /**
13949 * The SHA-512 initialization vector, to be precomputed.
13950 * @private
13951 */
13952 _init:[],
13953
13954 /**
13955 * Least significant 24 bits of SHA512 initialization values.
13956 *
13957 * Javascript only has 53 bits of precision, so we compute the 40 most
13958 * significant bits and add the remaining 24 bits as constants.
13959 *
13960 * @private
13961 */
13962 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13963
13964 /*
13965 _init:
13966 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13967 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13968 */
13969
13970 /**
13971 * The SHA-512 hash key, to be precomputed.
13972 * @private
13973 */
13974 _key:[],
13975
13976 /**
13977 * Least significant 24 bits of SHA512 key values.
13978 * @private
13979 */
13980 _keyr:
13981 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13982 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13983 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13984 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13985 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13986 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13987 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13988 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13989 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13990 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13991
13992 /*
13993 _key:
13994 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13995 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13996 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13997 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13998 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13999 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
14000 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
14001 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
14002 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
14003 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
14004 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
14005 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
14006 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
14007 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
14008 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
14009 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
14010 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
14011 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
14012 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
14013 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
14014 */
14015
14016 /**
14017 * Function to precompute _init and _key.
14018 * @private
14019 */
14020 _precompute: function () {
14021 // XXX: This code is for precomputing the SHA256 constants, change for
14022 // SHA512 and re-enable.
14023 var i = 0, prime = 2, factor;
14024
14025 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14026 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
14027
14028 outer: for (; i<80; prime++) {
14029 for (factor=2; factor*factor <= prime; factor++) {
14030 if (prime % factor === 0) {
14031 // not a prime
14032 continue outer;
14033 }
14034 }
14035
14036 if (i<8) {
14037 this._init[i*2] = frac(Math.pow(prime, 1/2));
14038 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
14039 }
14040 this._key[i*2] = frac(Math.pow(prime, 1/3));
14041 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
14042 i++;
14043 }
14044 },
14045
14046 /**
14047 * Perform one cycle of SHA-512.
14048 * @param {bitArray} words one block of words.
14049 * @private
14050 */
14051 _block:function (words) {
14052 var i, wrh, wrl,
14053 w = words.slice(0),
14054 h = this._h,
14055 k = this._key,
14056 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14057 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14058 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14059 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14060
14061 // Working variables
14062 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14063 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14064 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14065 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14066
14067 for (i=0; i<80; i++) {
14068 // load up the input word for this round
14069 if (i<16) {
14070 wrh = w[i * 2];
14071 wrl = w[i * 2 + 1];
14072 } else {
14073 // Gamma0
14074 var gamma0xh = w[(i-15) * 2];
14075 var gamma0xl = w[(i-15) * 2 + 1];
14076 var gamma0h =
14077 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14078 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14079 (gamma0xh >>> 7);
14080 var gamma0l =
14081 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14082 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14083 ((gamma0xh << 25) | (gamma0xl >>> 7));
14084
14085 // Gamma1
14086 var gamma1xh = w[(i-2) * 2];
14087 var gamma1xl = w[(i-2) * 2 + 1];
14088 var gamma1h =
14089 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14090 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14091 (gamma1xh >>> 6);
14092 var gamma1l =
14093 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14094 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14095 ((gamma1xh << 26) | (gamma1xl >>> 6));
14096
14097 // Shortcuts
14098 var wr7h = w[(i-7) * 2];
14099 var wr7l = w[(i-7) * 2 + 1];
14100
14101 var wr16h = w[(i-16) * 2];
14102 var wr16l = w[(i-16) * 2 + 1];
14103
14104 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14105 wrl = gamma0l + wr7l;
14106 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14107 wrl += gamma1l;
14108 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14109 wrl += wr16l;
14110 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14111 }
14112
14113 w[i*2] = wrh |= 0;
14114 w[i*2 + 1] = wrl |= 0;
14115
14116 // Ch
14117 var chh = (eh & fh) ^ (~eh & gh);
14118 var chl = (el & fl) ^ (~el & gl);
14119
14120 // Maj
14121 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14122 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14123
14124 // Sigma0
14125 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14126 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14127
14128 // Sigma1
14129 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14130 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14131
14132 // K(round)
14133 var krh = k[i*2];
14134 var krl = k[i*2+1];
14135
14136 // t1 = h + sigma1 + ch + K(round) + W(round)
14137 var t1l = hl + sigma1l;
14138 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14139 t1l += chl;
14140 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14141 t1l += krl;
14142 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14143 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14144 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14145
14146 // t2 = sigma0 + maj
14147 var t2l = sigma0l + majl;
14148 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14149
14150 // Update working variables
14151 hh = gh;
14152 hl = gl;
14153 gh = fh;
14154 gl = fl;
14155 fh = eh;
14156 fl = el;
14157 el = (dl + t1l) | 0;
14158 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14159 dh = ch;
14160 dl = cl;
14161 ch = bh;
14162 cl = bl;
14163 bh = ah;
14164 bl = al;
14165 al = (t1l + t2l) | 0;
14166 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14167 }
14168
14169 // Intermediate hash
14170 h0l = h[1] = (h0l + al) | 0;
14171 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14172 h1l = h[3] = (h1l + bl) | 0;
14173 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14174 h2l = h[5] = (h2l + cl) | 0;
14175 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14176 h3l = h[7] = (h3l + dl) | 0;
14177 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14178 h4l = h[9] = (h4l + el) | 0;
14179 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14180 h5l = h[11] = (h5l + fl) | 0;
14181 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14182 h6l = h[13] = (h6l + gl) | 0;
14183 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14184 h7l = h[15] = (h7l + hl) | 0;
14185 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14186 }
14187 };
14188
14189
14190 //// hmac.js
14191
14192 /** @fileOverview HMAC implementation.
14193 *
14194 * @author Emily Stark
14195 * @author Mike Hamburg
14196 * @author Dan Boneh
14197 */
14198
14199 /** HMAC with the specified hash function.
14200 * @constructor
14201 * @param {bitArray} key the key for HMAC.
14202 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14203 */
14204 sjcl.misc.hmac = function (key, Hash) {
14205 this._hash = Hash = Hash || sjcl.hash.sha256;
14206 var exKey = [[],[]], i,
14207 bs = Hash.prototype.blockSize / 32;
14208 this._baseHash = [new Hash(), new Hash()];
14209
14210 if (key.length > bs) {
14211 key = Hash.hash(key);
14212 }
14213
14214 for (i=0; i<bs; i++) {
14215 exKey[0][i] = key[i]^0x36363636;
14216 exKey[1][i] = key[i]^0x5C5C5C5C;
14217 }
14218
14219 this._baseHash[0].update(exKey[0]);
14220 this._baseHash[1].update(exKey[1]);
14221 this._resultHash = new Hash(this._baseHash[0]);
14222 };
14223
14224 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14225 * @param {bitArray|String} data The data to mac.
14226 */
14227 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14228 if (!this._updated) {
14229 this.update(data);
14230 return this.digest(data);
14231 } else {
14232 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14233 }
14234 };
14235
14236 sjcl.misc.hmac.prototype.reset = function () {
14237 this._resultHash = new this._hash(this._baseHash[0]);
14238 this._updated = false;
14239 };
14240
14241 sjcl.misc.hmac.prototype.update = function (data) {
14242 this._updated = true;
14243 this._resultHash.update(data);
14244 };
14245
14246 sjcl.misc.hmac.prototype.digest = function () {
14247 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14248
14249 this.reset();
14250
14251 return result;
14252 };
14253
14254
14255 //// pbkdf2.js
14256
14257
14258 /** @fileOverview Password-based key-derivation function, version 2.0.
14259 *
14260 * @author Emily Stark
14261 * @author Mike Hamburg
14262 * @author Dan Boneh
14263 */
14264
14265 /** Password-Based Key-Derivation Function, version 2.0.
14266 *
14267 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14268 *
14269 * This is the method specified by RSA's PKCS #5 standard.
14270 *
14271 * @param {bitArray|String} password The password.
14272 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14273 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14274 * @param {Number} [length] The length of the derived key. Defaults to the
14275 output size of the hash function.
14276 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14277 * @return {bitArray} the derived key.
14278 */
14279 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14280 count = count || 1000;
14281
14282 if (length < 0 || count < 0) {
14283 throw sjcl.exception.invalid("invalid params to pbkdf2");
14284 }
14285
14286 if (typeof password === "string") {
14287 password = sjcl.codec.utf8String.toBits(password);
14288 }
14289
14290 if (typeof salt === "string") {
14291 salt = sjcl.codec.utf8String.toBits(salt);
14292 }
14293
14294 Prff = Prff || sjcl.misc.hmac;
14295
14296 var prf = new Prff(password),
14297 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14298
14299 for (k = 1; 32 * out.length < (length || 1); k++) {
14300 u = ui = prf.encrypt(b.concat(salt,[k]));
14301
14302 for (i=1; i<count; i++) {
14303 ui = prf.encrypt(ui);
14304 for (j=0; j<ui.length; j++) {
14305 u[j] ^= ui[j];
14306 }
14307 }
14308
14309 out = out.concat(u);
14310 }
14311
14312 if (length) { out = b.clamp(out, length); }
14313
14314 return out;
14315 };
14316
14317
14318 //// sha256.js
14319
14320 /** @fileOverview Javascript SHA-256 implementation.
14321 *
14322 * An older version of this implementation is available in the public
14323 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14324 * Stanford University 2008-2010 and BSD-licensed for liability
14325 * reasons.
14326 *
14327 * Special thanks to Aldo Cortesi for pointing out several bugs in
14328 * this code.
14329 *
14330 * @author Emily Stark
14331 * @author Mike Hamburg
14332 * @author Dan Boneh
14333 */
14334
14335 /**
14336 * Context for a SHA-256 operation in progress.
14337 * @constructor
14338 * @class Secure Hash Algorithm, 256 bits.
14339 */
14340 sjcl.hash.sha256 = function (hash) {
14341 if (!this._key[0]) { this._precompute(); }
14342 if (hash) {
14343 this._h = hash._h.slice(0);
14344 this._buffer = hash._buffer.slice(0);
14345 this._length = hash._length;
14346 } else {
14347 this.reset();
14348 }
14349 };
14350
14351 /**
14352 * Hash a string or an array of words.
14353 * @static
14354 * @param {bitArray|String} data the data to hash.
14355 * @return {bitArray} The hash value, an array of 16 big-endian words.
14356 */
14357 sjcl.hash.sha256.hash = function (data) {
14358 return (new sjcl.hash.sha256()).update(data).finalize();
14359 };
14360
14361 sjcl.hash.sha256.prototype = {
14362 /**
14363 * The hash's block size, in bits.
14364 * @constant
14365 */
14366 blockSize: 512,
14367
14368 /**
14369 * Reset the hash state.
14370 * @return this
14371 */
14372 reset:function () {
14373 this._h = this._init.slice(0);
14374 this._buffer = [];
14375 this._length = 0;
14376 return this;
14377 },
14378
14379 /**
14380 * Input several words to the hash.
14381 * @param {bitArray|String} data the data to hash.
14382 * @return this
14383 */
14384 update: function (data) {
14385 if (typeof data === "string") {
14386 data = sjcl.codec.utf8String.toBits(data);
14387 }
14388 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14389 ol = this._length,
14390 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14391 for (i = 512+ol & -512; i <= nl; i+= 512) {
14392 this._block(b.splice(0,16));
14393 }
14394 return this;
14395 },
14396
14397 /**
14398 * Complete hashing and output the hash value.
14399 * @return {bitArray} The hash value, an array of 8 big-endian words.
14400 */
14401 finalize:function () {
14402 var i, b = this._buffer, h = this._h;
14403
14404 // Round out and push the buffer
14405 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14406
14407 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14408 for (i = b.length + 2; i & 15; i++) {
14409 b.push(0);
14410 }
14411
14412 // append the length
14413 b.push(Math.floor(this._length / 0x100000000));
14414 b.push(this._length | 0);
14415
14416 while (b.length) {
14417 this._block(b.splice(0,16));
14418 }
14419
14420 this.reset();
14421 return h;
14422 },
14423
14424 /**
14425 * The SHA-256 initialization vector, to be precomputed.
14426 * @private
14427 */
14428 _init:[],
14429 /*
14430 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14431 */
14432
14433 /**
14434 * The SHA-256 hash key, to be precomputed.
14435 * @private
14436 */
14437 _key:[],
14438 /*
14439 _key:
14440 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14441 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14442 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14443 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14444 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14445 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14446 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14447 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14448 */
14449
14450
14451 /**
14452 * Function to precompute _init and _key.
14453 * @private
14454 */
14455 _precompute: function () {
14456 var i = 0, prime = 2, factor;
14457
14458 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14459
14460 outer: for (; i<64; prime++) {
14461 for (factor=2; factor*factor <= prime; factor++) {
14462 if (prime % factor === 0) {
14463 // not a prime
14464 continue outer;
14465 }
14466 }
14467
14468 if (i<8) {
14469 this._init[i] = frac(Math.pow(prime, 1/2));
14470 }
14471 this._key[i] = frac(Math.pow(prime, 1/3));
14472 i++;
14473 }
14474 },
14475
14476 /**
14477 * Perform one cycle of SHA-256.
14478 * @param {bitArray} words one block of words.
14479 * @private
14480 */
14481 _block:function (words) {
14482 var i, tmp, a, b,
14483 w = words.slice(0),
14484 h = this._h,
14485 k = this._key,
14486 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14487 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14488
14489 /* Rationale for placement of |0 :
14490 * If a value can overflow is original 32 bits by a factor of more than a few
14491 * million (2^23 ish), there is a possibility that it might overflow the
14492 * 53-bit mantissa and lose precision.
14493 *
14494 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14495 * propagates around the loop, and on the hash state h[]. I don't believe
14496 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14497 * (for h4 anyway), and better safe than sorry.
14498 *
14499 * The clamps on h[] are necessary for the output to be correct even in the
14500 * common case and for short inputs.
14501 */
14502 for (i=0; i<64; i++) {
14503 // load up the input word for this round
14504 if (i<16) {
14505 tmp = w[i];
14506 } else {
14507 a = w[(i+1 ) & 15];
14508 b = w[(i+14) & 15];
14509 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14510 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14511 w[i&15] + w[(i+9) & 15]) | 0;
14512 }
14513
14514 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14515
14516 // shift register
14517 h7 = h6; h6 = h5; h5 = h4;
14518 h4 = h3 + tmp | 0;
14519 h3 = h2; h2 = h1; h1 = h0;
14520
14521 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14522 }
14523
14524 h[0] = h[0]+h0 | 0;
14525 h[1] = h[1]+h1 | 0;
14526 h[2] = h[2]+h2 | 0;
14527 h[3] = h[3]+h3 | 0;
14528 h[4] = h[4]+h4 | 0;
14529 h[5] = h[5]+h5 | 0;
14530 h[6] = h[6]+h6 | 0;
14531 h[7] = h[7]+h7 | 0;
14532 }
14533 };
14534 </script>
14535 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14536 WORDLISTS["english"] = [
14537 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14538 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14539 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14540 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14541 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14542 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14543 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14544 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14545 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14546 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14547 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14548 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14549 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14550 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14551 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14552 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14553 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14554 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14555 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14556 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14557 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14558 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14559 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14560 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14561 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14562 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14563 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14564 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14565 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14566 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14567 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14568 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14569 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14570 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14571 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14572 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14573 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14574 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14575 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14576 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14577 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14578 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14579 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14580 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14581 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14582 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14583 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14584 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14585 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14586 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14587 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14588 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14589 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14590 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14591 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14592 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14593 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14594 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14595 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14596 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14597 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14598 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14599 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14600 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14601 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14602 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14603 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14604 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14605 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14606 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14607 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14608 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14609 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14610 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14611 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14612 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14613 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14614 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14615 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14616 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14617 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14618 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14619 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14620 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14621 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14622 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14623 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14624 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14625 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14626 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14627 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14628 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14629 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14630 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14631 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14632 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14633 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14634 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14635 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14636 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14637 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14638 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14639 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14640 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14641 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14642 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14643 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14644 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14645 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14646 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14647 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14648 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14649 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14650 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14651 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14652 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14653 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14654 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14655 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14656 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14657 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14658 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14659 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14660 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14661 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14662 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14663 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14664 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14665 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14666 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14667 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14668 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14669 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14670 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14671 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14672 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14673 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14674 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14675 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14676 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14677 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14678 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14679 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14680 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14681 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14682 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14683 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14684 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14685 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14686 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14687 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14688 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14689 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14690 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14691 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14692 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14693 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14694 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14695 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14696 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14697 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14698 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14699 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14700 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14701 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14702 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14703 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14704 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14705 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14706 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14707 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14708 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14709 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14710 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14711 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14712 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14713 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14714 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14715 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14716 "thank","that","theme","then","theory","there","they","thing","this","thought",
14717 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14718 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14719 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14720 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14721 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14722 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14723 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14724 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14725 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14726 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14727 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14728 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14729 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14730 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14731 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14732 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14733 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14734 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14735 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14736 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14737 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14738 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14739 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14740 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14741 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14742 </script>
14743 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14744 WORDLISTS["japanese"] = [
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 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14898 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14899 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14900 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14901 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14902 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14903 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14904 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14905 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14906 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14907 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14908 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14909 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14910 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14911 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14912 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14913 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14914 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14915 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14916 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14917 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14918 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14919 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14920 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14921 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14922 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14923 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14924 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14925 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14926 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14927 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14928 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14929 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14930 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14931 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14932 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14933 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14934 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14935 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14936 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14937 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14938 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14939 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14940 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14941 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14942 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14943 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14944 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14945 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14946 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14947 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14948 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14949 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14950 </script>
14951 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14952 WORDLISTS["spanish"] = [
14953 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14954 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14955 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14956 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14957 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14958 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14959 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14960 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14961 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14962 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14963 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14964 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14965 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14966 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14967 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14968 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14969 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14970 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14971 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14972 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14973 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14974 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14975 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14976 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14977 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14978 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14979 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14980 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14981 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14982 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14983 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14984 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14985 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14986 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14987 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14988 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14989 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14990 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14991 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14992 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14993 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14994 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14995 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14996 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14997 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14998 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14999 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
15000 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
15001 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
15002 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
15003 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
15004 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
15005 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
15006 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
15007 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
15008 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
15009 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
15010 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
15011 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
15012 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
15013 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
15014 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
15015 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
15016 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
15017 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
15018 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
15019 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
15020 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
15021 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
15022 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
15023 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
15024 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
15025 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
15026 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
15027 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
15028 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
15029 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
15030 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
15031 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
15032 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
15033 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
15034 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
15035 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
15036 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
15037 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
15038 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
15039 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
15040 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
15041 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
15042 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
15043 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
15044 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
15045 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
15046 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
15047 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
15048 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
15049 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
15050 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
15051 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15052 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15053 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15054 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15055 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15056 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15057 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15058 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15059 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15060 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15061 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15062 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15063 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15064 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15065 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15066 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15067 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15068 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15069 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15070 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15071 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15072 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15073 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15074 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15075 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15076 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15077 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15078 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15079 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15080 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15081 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15082 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15083 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15084 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15085 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15086 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15087 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15088 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15089 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15090 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15091 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15092 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15093 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15094 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15095 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15096 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15097 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15098 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15099 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15100 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15101 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15102 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15103 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15104 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15105 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15106 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15107 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15108 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15109 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15110 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15111 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15112 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15113 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15114 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15115 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15116 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15117 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15118 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15119 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15120 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15121 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15122 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15123 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15124 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15125 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15126 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15127 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15128 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15129 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15130 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15131 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15132 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15133 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15134 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15135 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15136 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15137 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15138 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15139 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15140 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15141 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15142 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15143 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15144 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15145 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15146 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15147 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15148 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15149 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15150 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15151 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15152 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15153 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15154 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15155 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15156 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15157 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15158 </script>
15159 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15160 WORDLISTS["chinese_simplified"] = [
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 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15314 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15315 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
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 </script>
15367 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15368 WORDLISTS["chinese_traditional"] = [
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 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15522 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15523 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15524 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15525 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15526 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15527 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15528 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15529 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15530 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15531 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15532 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15533 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15534 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15535 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15536 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15537 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15538 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15539 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15540 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15541 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15542 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15543 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15544 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15545 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15546 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15547 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15548 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15549 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15550 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15551 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15552 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15553 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15554 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15555 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15556 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15557 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15558 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15559 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15560 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15561 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15562 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15563 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15564 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15565 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15566 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15567 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15568 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15569 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15570 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15571 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15572 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15573 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15574 </script>
15575 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15576 WORDLISTS["french"] = [
15577 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15578 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15579 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15580 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15581 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15582 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15583 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15584 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15585 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15586 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15587 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15588 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15589 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15590 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15591 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15592 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15593 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15594 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15595 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15596 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15597 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15598 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15599 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15600 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15601 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15602 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15603 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15604 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15605 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15606 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15607 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15608 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15609 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15610 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15611 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15612 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15613 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15614 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15615 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15616 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15617 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15618 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15619 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15620 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15621 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15622 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15623 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15624 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15625 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15626 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15627 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15628 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15629 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15630 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15631 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15632 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15633 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15634 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15635 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15636 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15637 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15638 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15639 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15640 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15641 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15642 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15643 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15644 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15645 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15646 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15647 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15648 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15649 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15650 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15651 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15652 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15653 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15654 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15655 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15656 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15657 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15658 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15659 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15660 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15661 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15662 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15663 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15664 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15665 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15666 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15667 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15668 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15669 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15670 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15671 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15672 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15673 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15674 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15675 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15676 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15677 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15678 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15679 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15680 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15681 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15682 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15683 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15684 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15685 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15686 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15687 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15688 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15689 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15690 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15691 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15692 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15693 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15694 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15695 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15696 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15697 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15698 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15699 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15700 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15701 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15702 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15703 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15704 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15705 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15706 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15707 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15708 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15709 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15710 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15711 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15712 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15713 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15714 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15715 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15716 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15717 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15718 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15719 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15720 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15721 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15722 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15723 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15724 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15725 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15726 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15727 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15728 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15729 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15730 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15731 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15732 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15733 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15734 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15735 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15736 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15737 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15738 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15739 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15740 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15741 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15742 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15743 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15744 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15745 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15746 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15747 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15748 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15749 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15750 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15751 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15752 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15753 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15754 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15755 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15756 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15757 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15758 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15759 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15760 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15761 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15762 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15763 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15764 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15765 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15766 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15767 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15768 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15769 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15770 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15771 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15772 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15773 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15774 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15775 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15776 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15777 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15778 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15779 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15780 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15781 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15782 </script>
15783 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15784 WORDLISTS["italian"] = [
15785 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15786 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15787 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15788 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15789 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15790 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15791 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15792 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15793 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15794 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15795 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15796 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15797 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15798 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15799 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15800 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15801 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15802 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15803 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15804 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15805 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15806 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15807 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15808 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15809 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15810 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15811 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15812 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15813 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15814 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15815 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15816 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15817 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15818 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15819 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15820 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15821 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15822 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15823 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15824 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15825 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15826 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15827 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15828 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15829 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15830 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15831 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15832 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15833 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15834 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15835 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15836 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15837 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15838 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15839 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15840 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15841 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15842 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15843 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15844 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15845 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15846 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15847 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15848 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15849 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15850 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15851 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15852 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15853 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15854 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15855 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15856 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15857 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15858 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15859 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15860 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15861 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15862 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15863 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15864 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15865 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15866 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15867 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15868 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15869 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15870 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15871 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15872 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15873 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15874 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15875 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15876 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15877 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15878 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15879 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15880 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15881 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15882 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15883 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15884 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15885 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15886 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15887 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15888 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15889 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15890 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15891 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15892 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15893 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15894 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15895 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15896 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15897 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15898 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15899 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15900 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15901 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15902 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15903 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15904 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15905 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15906 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15907 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15908 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15909 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15910 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15911 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15912 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15913 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15914 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15915 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15916 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15917 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15918 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15919 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15920 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15921 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15922 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15923 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15924 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15925 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15926 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15927 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15928 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15929 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15930 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15931 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15932 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15933 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15934 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15935 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15936 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15937 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15938 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15939 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15940 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15941 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15942 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15943 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15944 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15945 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15946 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15947 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15948 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15949 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15950 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15951 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15952 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15953 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15954 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15955 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15956 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15957 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15958 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15959 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15960 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15961 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15962 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15963 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15964 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15965 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15966 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15967 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15968 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15969 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15970 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15971 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15972 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15973 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15974 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15975 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15976 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15977 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15978 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15979 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15980 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15981 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15982 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15983 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15984 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15985 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15986 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15987 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15988 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15989 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15990 </script>
15991 <script>/*
15992 * Copyright (c) 2013 Pavol Rusnak
15993 *
15994 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15995 * this software and associated documentation files (the "Software"), to deal in
15996 * the Software without restriction, including without limitation the rights to
15997 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15998 * of the Software, and to permit persons to whom the Software is furnished to do
15999 * so, subject to the following conditions:
16000 *
16001 * The above copyright notice and this permission notice shall be included in all
16002 * copies or substantial portions of the Software.
16003 *
16004 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16005 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16006 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16007 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
16008 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
16009 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16010 */
16011
16012 /*
16013 * Javascript port from python by Ian Coleman
16014 *
16015 * Requires code from sjcl
16016 * https://github.com/bitwiseshiftleft/sjcl
16017 */
16018
16019 var Mnemonic = function(language) {
16020
16021 var PBKDF2_ROUNDS = 2048;
16022 var RADIX = 2048;
16023
16024 var self = this;
16025 var wordlist = [];
16026
16027 var hmacSHA512 = function(key) {
16028 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
16029 this.encrypt = function() {
16030 return hasher.encrypt.apply(hasher, arguments);
16031 };
16032 };
16033
16034 function init() {
16035 wordlist = WORDLISTS[language];
16036 if (wordlist.length != RADIX) {
16037 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
16038 throw err;
16039 }
16040 }
16041
16042 self.generate = function(strength) {
16043 strength = strength || 128;
16044 var r = strength % 32;
16045 if (r > 0) {
16046 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
16047 }
16048 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
16049 if (!hasStrongCrypto) {
16050 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
16051 }
16052 var buffer = new Uint8Array(strength / 8);
16053 var data = crypto.getRandomValues(buffer);
16054 return self.toMnemonic(data);
16055 }
16056
16057 self.toMnemonic = function(byteArray) {
16058 if (byteArray.length % 4 > 0) {
16059 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
16060 }
16061
16062 //h = hashlib.sha256(data).hexdigest()
16063 var data = byteArrayToWordArray(byteArray);
16064 var hash = sjcl.hash.sha256.hash(data);
16065 var h = sjcl.codec.hex.fromBits(hash);
16066
16067 // b is a binary string, eg '00111010101100...'
16068 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16069 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16070 //
16071 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16072 // c = bin(int(h, 16))[2:].zfill(256)
16073 // d = c[:len(data) * 8 / 32]
16074 var a = byteArrayToBinaryString(byteArray);
16075 var c = zfill(hexStringToBinaryString(h), 256);
16076 var d = c.substring(0, byteArray.length * 8 / 32);
16077 // b = line1 + line2
16078 var b = a + d;
16079
16080 var result = [];
16081 var blen = b.length / 11;
16082 for (var i=0; i<blen; i++) {
16083 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16084 result.push(wordlist[idx]);
16085 }
16086 return self.joinWords(result);
16087 }
16088
16089 self.check = function(mnemonic) {
16090 var mnemonic = self.splitWords(mnemonic);
16091 if (mnemonic.length % 3 > 0) {
16092 return false
16093 }
16094 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16095 var idx = [];
16096 for (var i=0; i<mnemonic.length; i++) {
16097 var word = mnemonic[i];
16098 var wordIndex = wordlist.indexOf(word);
16099 if (wordIndex == -1) {
16100 return false;
16101 }
16102 var binaryIndex = zfill(wordIndex.toString(2), 11);
16103 idx.push(binaryIndex);
16104 }
16105 var b = idx.join('');
16106 var l = b.length;
16107 //d = b[:l / 33 * 32]
16108 //h = b[-l / 33:]
16109 var d = b.substring(0, l / 33 * 32);
16110 var h = b.substring(l - l / 33, l);
16111 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
16112 var nd = binaryStringToWordArray(d);
16113 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
16114 var ndHash = sjcl.hash.sha256.hash(nd);
16115 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16116 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
16117 var nh = ndBstr.substring(0,l/33);
16118 return h == nh;
16119 }
16120
16121 self.toSeed = function(mnemonic, passphrase) {
16122 passphrase = passphrase || '';
16123 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16124 passphrase = self.normalizeString(passphrase)
16125 passphrase = "mnemonic" + passphrase;
16126 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16127 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16128 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16129 var hashHex = sjcl.codec.hex.fromBits(result);
16130 return hashHex;
16131 }
16132
16133 self.splitWords = function(mnemonic) {
16134 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16135 }
16136
16137 self.joinWords = function(words) {
16138 // Set space correctly depending on the language
16139 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16140 var space = " ";
16141 if (language == "japanese") {
16142 space = "\u3000"; // ideographic space
16143 }
16144 return words.join(space);
16145 }
16146
16147 self.normalizeString = function(str) {
16148 if (typeof str.normalize == "function") {
16149 return str.normalize("NFKD");
16150 }
16151 else {
16152 // TODO decide how to handle this in the future.
16153 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16154 return str;
16155 }
16156 }
16157
16158 function byteArrayToWordArray(data) {
16159 var a = [];
16160 for (var i=0; i<data.length/4; i++) {
16161 v = 0;
16162 v += data[i*4 + 0] << 8 * 3;
16163 v += data[i*4 + 1] << 8 * 2;
16164 v += data[i*4 + 2] << 8 * 1;
16165 v += data[i*4 + 3] << 8 * 0;
16166 a.push(v);
16167 }
16168 return a;
16169 }
16170
16171 function byteArrayToBinaryString(data) {
16172 var bin = "";
16173 for (var i=0; i<data.length; i++) {
16174 bin += zfill(data[i].toString(2), 8);
16175 }
16176 return bin;
16177 }
16178
16179 function hexStringToBinaryString(hexString) {
16180 binaryString = "";
16181 for (var i=0; i<hexString.length; i++) {
16182 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16183 }
16184 return binaryString;
16185 }
16186
16187 function binaryStringToWordArray(binary) {
16188 var aLen = binary.length / 32;
16189 var a = [];
16190 for (var i=0; i<aLen; i++) {
16191 var valueStr = binary.substring(0,32);
16192 var value = parseInt(valueStr, 2);
16193 a.push(value);
16194 binary = binary.slice(32);
16195 }
16196 return a;
16197 }
16198
16199 // Pad a numeric string on the left with zero digits until the given width
16200 // is reached.
16201 // Note this differs to the python implementation because it does not
16202 // handle numbers starting with a sign.
16203 function zfill(source, length) {
16204 source = source.toString();
16205 while (source.length < length) {
16206 source = '0' + source;
16207 }
16208 return source;
16209 }
16210
16211 init();
16212
16213 }
16214 </script>
16215 <script>window.Entropy = new (function() {
16216
16217 var matchers = {
16218 binary: /[0-1]/gi,
16219 base6: /[0-5]/gi,
16220 dice: /[1-6]/gi, // ie dice numbers
16221 base10: /[0-9]/gi,
16222 hex: /[0-9A-F]/gi,
16223 }
16224
16225 this.fromString = function(rawEntropyStr) {
16226 // Find type of entropy being used (binary, hex, dice etc)
16227 var base = getBase(rawEntropyStr);
16228 // Convert dice to base6 entropy (ie 1-6 to 0-5)
16229 if (base.str == "dice") {
16230 var newRawEntropyStr = "";
16231 for (var i=0; i<rawEntropyStr.length; i++) {
16232 var c = rawEntropyStr[i];
16233 if ("123456".indexOf(c) > -1) {
16234 newRawEntropyStr += (parseInt(c) - 1).toString();
16235 }
16236 else {
16237 newRawEntropyStr += c
16238 }
16239 }
16240 rawEntropyStr = newRawEntropyStr;
16241 base.str = "base 6 (dice)";
16242 base.matcher = matchers.base6;
16243 }
16244 var entropyParts = rawEntropyStr.match(base.matcher) || [];
16245 var entropyStr = entropyParts.join("");
16246 // Detect empty entropy
16247 if (entropyStr.length == 0) {
16248 return {
16249 binaryStr: "",
16250 hexStr: "",
16251 cleanStr: "",
16252 base: base,
16253 };
16254 }
16255 // Pull leading zeros off
16256 var leadingZeros = "";
16257 while (entropyStr[0] == "0") {
16258 leadingZeros += "0";
16259 entropyStr = entropyStr.substring(1);
16260 }
16261 // Convert leading zeros to binary equivalent
16262 var numBinLeadingZeros = Math.ceil(Math.log2(base.asInt) * leadingZeros.length);
16263 var binLeadingZeros = "";
16264 for (var i=0; i<numBinLeadingZeros; i++) {
16265 binLeadingZeros += "0";
16266 }
16267 // Convert leading zeros to hex equivalent
16268 var numHexLeadingZeros = Math.floor(numBinLeadingZeros / 4);
16269 var hexLeadingZeros = "";
16270 for (var i=0; i<numHexLeadingZeros; i++) {
16271 hexLeadingZeros += "0";
16272 }
16273 // Handle entropy of zero
16274 if (entropyStr == "") {
16275 return {
16276 binaryStr: binLeadingZeros,
16277 hexStr: hexLeadingZeros || "0",
16278 cleanStr: leadingZeros,
16279 base: base,
16280 }
16281 }
16282 // If using hex, should always be multiples of 4 bits, which can get
16283 // out of sync if first number has leading 0 bits, eg 2 in hex is 0010
16284 // which would show up as 10, thus missing 2 bits it should have.
16285 if (base.asInt == 16) {
16286 var firstDigit = parseInt(entropyStr[0], 16);
16287 if (firstDigit >= 4 && firstDigit < 8) {
16288 binLeadingZeros += "0";
16289 }
16290 else if (firstDigit >= 2 && firstDigit < 4) {
16291 binLeadingZeros += "00";
16292 }
16293 else if (firstDigit >= 1 && firstDigit < 2) {
16294 binLeadingZeros += "000";
16295 }
16296 }
16297 // Convert entropy to different foramts
16298 var entropyInt = BigInteger.parse(entropyStr, base.asInt);
16299 var entropyBin = binLeadingZeros + entropyInt.toString(2);
16300 var entropyHex = hexLeadingZeros + entropyInt.toString(16);
16301 var entropyClean = leadingZeros + entropyStr;
16302 var e = {
16303 binaryStr: entropyBin,
16304 hexStr: entropyHex,
16305 cleanStr: entropyClean,
16306 base: base,
16307 }
16308 return e;
16309 }
16310
16311 function getBase(str) {
16312 // Need to get the lowest base for the supplied entropy.
16313 // This prevents interpreting, say, dice rolls as hexadecimal.
16314 var binaryMatches = str.match(matchers.binary) || [];
16315 var base6Matches = str.match(matchers.base6) || [];
16316 var diceMatches = str.match(matchers.dice) || [];
16317 var base10Matches = str.match(matchers.base10) || [];
16318 var hexMatches = str.match(matchers.hex) || [];
16319 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
16320 if (binaryMatches.length == hexMatches.length) {
16321 return {
16322 matcher: matchers.binary,
16323 asInt: 2,
16324 str: "binary",
16325 }
16326 }
16327 if (diceMatches.length == hexMatches.length) {
16328 return {
16329 matcher: matchers.dice,
16330 asInt: 6,
16331 str: "dice",
16332 }
16333 }
16334 if (base6Matches.length == hexMatches.length) {
16335 return {
16336 matcher: matchers.base6,
16337 asInt: 6,
16338 str: "base 6",
16339 }
16340 }
16341 if (base10Matches.length == hexMatches.length) {
16342 return {
16343 matcher: matchers.base10,
16344 asInt: 10,
16345 str: "base 10",
16346 }
16347 }
16348 return {
16349 matcher: matchers.hex,
16350 asInt: 16,
16351 str: "hexadecimal",
16352 }
16353 }
16354
16355 // Polyfill for Math.log2
16356 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
16357 Math.log2 = Math.log2 || function(x) {
16358 return Math.log(x) * Math.LOG2E;
16359 };
16360
16361 })();
16362
16363
16364 // BigInteger library included here because
16365 // only the entropy library depends on it
16366 // so if entropy detection is removed so is the dependency
16367
16368
16369 /*
16370 JavaScript BigInteger library version 0.9.1
16371 http://silentmatt.com/biginteger/
16372
16373 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
16374 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
16375 Licensed under the MIT license.
16376
16377 Support for arbitrary internal representation base was added by
16378 Vitaly Magerya.
16379 */
16380
16381 /*
16382 File: biginteger.js
16383
16384 Exports:
16385
16386 <BigInteger>
16387 */
16388 (function(exports) {
16389 "use strict";
16390 /*
16391 Class: BigInteger
16392 An arbitrarily-large integer.
16393
16394 <BigInteger> objects should be considered immutable. None of the "built-in"
16395 methods modify *this* or their arguments. All properties should be
16396 considered private.
16397
16398 All the methods of <BigInteger> instances can be called "statically". The
16399 static versions are convenient if you don't already have a <BigInteger>
16400 object.
16401
16402 As an example, these calls are equivalent.
16403
16404 > BigInteger(4).multiply(5); // returns BigInteger(20);
16405 > BigInteger.multiply(4, 5); // returns BigInteger(20);
16406
16407 > var a = 42;
16408 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
16409 */
16410
16411 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
16412
16413 /*
16414 Constructor: BigInteger()
16415 Convert a value to a <BigInteger>.
16416
16417 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
16418 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
16419 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
16420 without a radix argument.
16421
16422 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
16423 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
16424 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
16425 > var n3 = BigInteger(n2); // Return n2, unchanged
16426
16427 The constructor form only takes an array and a sign. *n* must be an
16428 array of numbers in little-endian order, where each digit is between 0
16429 and BigInteger.base. The second parameter sets the sign: -1 for
16430 negative, +1 for positive, or 0 for zero. The array is *not copied and
16431 may be modified*. If the array contains only zeros, the sign parameter
16432 is ignored and is forced to zero.
16433
16434 > new BigInteger([5], -1): create a new BigInteger with value -5
16435
16436 Parameters:
16437
16438 n - Value to convert to a <BigInteger>.
16439
16440 Returns:
16441
16442 A <BigInteger> value.
16443
16444 See Also:
16445
16446 <parse>, <BigInteger>
16447 */
16448 function BigInteger(n, s, token) {
16449 if (token !== CONSTRUCT) {
16450 if (n instanceof BigInteger) {
16451 return n;
16452 }
16453 else if (typeof n === "undefined") {
16454 return ZERO;
16455 }
16456 return BigInteger.parse(n);
16457 }
16458
16459 n = n || []; // Provide the nullary constructor for subclasses.
16460 while (n.length && !n[n.length - 1]) {
16461 --n.length;
16462 }
16463 this._d = n;
16464 this._s = n.length ? (s || 1) : 0;
16465 }
16466
16467 BigInteger._construct = function(n, s) {
16468 return new BigInteger(n, s, CONSTRUCT);
16469 };
16470
16471 // Base-10 speedup hacks in parse, toString, exp10 and log functions
16472 // require base to be a power of 10. 10^7 is the largest such power
16473 // that won't cause a precision loss when digits are multiplied.
16474 var BigInteger_base = 10000000;
16475 var BigInteger_base_log10 = 7;
16476
16477 BigInteger.base = BigInteger_base;
16478 BigInteger.base_log10 = BigInteger_base_log10;
16479
16480 var ZERO = new BigInteger([], 0, CONSTRUCT);
16481 // Constant: ZERO
16482 // <BigInteger> 0.
16483 BigInteger.ZERO = ZERO;
16484
16485 var ONE = new BigInteger([1], 1, CONSTRUCT);
16486 // Constant: ONE
16487 // <BigInteger> 1.
16488 BigInteger.ONE = ONE;
16489
16490 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
16491 // Constant: M_ONE
16492 // <BigInteger> -1.
16493 BigInteger.M_ONE = M_ONE;
16494
16495 // Constant: _0
16496 // Shortcut for <ZERO>.
16497 BigInteger._0 = ZERO;
16498
16499 // Constant: _1
16500 // Shortcut for <ONE>.
16501 BigInteger._1 = ONE;
16502
16503 /*
16504 Constant: small
16505 Array of <BigIntegers> from 0 to 36.
16506
16507 These are used internally for parsing, but useful when you need a "small"
16508 <BigInteger>.
16509
16510 See Also:
16511
16512 <ZERO>, <ONE>, <_0>, <_1>
16513 */
16514 BigInteger.small = [
16515 ZERO,
16516 ONE,
16517 /* Assuming BigInteger_base > 36 */
16518 new BigInteger( [2], 1, CONSTRUCT),
16519 new BigInteger( [3], 1, CONSTRUCT),
16520 new BigInteger( [4], 1, CONSTRUCT),
16521 new BigInteger( [5], 1, CONSTRUCT),
16522 new BigInteger( [6], 1, CONSTRUCT),
16523 new BigInteger( [7], 1, CONSTRUCT),
16524 new BigInteger( [8], 1, CONSTRUCT),
16525 new BigInteger( [9], 1, CONSTRUCT),
16526 new BigInteger([10], 1, CONSTRUCT),
16527 new BigInteger([11], 1, CONSTRUCT),
16528 new BigInteger([12], 1, CONSTRUCT),
16529 new BigInteger([13], 1, CONSTRUCT),
16530 new BigInteger([14], 1, CONSTRUCT),
16531 new BigInteger([15], 1, CONSTRUCT),
16532 new BigInteger([16], 1, CONSTRUCT),
16533 new BigInteger([17], 1, CONSTRUCT),
16534 new BigInteger([18], 1, CONSTRUCT),
16535 new BigInteger([19], 1, CONSTRUCT),
16536 new BigInteger([20], 1, CONSTRUCT),
16537 new BigInteger([21], 1, CONSTRUCT),
16538 new BigInteger([22], 1, CONSTRUCT),
16539 new BigInteger([23], 1, CONSTRUCT),
16540 new BigInteger([24], 1, CONSTRUCT),
16541 new BigInteger([25], 1, CONSTRUCT),
16542 new BigInteger([26], 1, CONSTRUCT),
16543 new BigInteger([27], 1, CONSTRUCT),
16544 new BigInteger([28], 1, CONSTRUCT),
16545 new BigInteger([29], 1, CONSTRUCT),
16546 new BigInteger([30], 1, CONSTRUCT),
16547 new BigInteger([31], 1, CONSTRUCT),
16548 new BigInteger([32], 1, CONSTRUCT),
16549 new BigInteger([33], 1, CONSTRUCT),
16550 new BigInteger([34], 1, CONSTRUCT),
16551 new BigInteger([35], 1, CONSTRUCT),
16552 new BigInteger([36], 1, CONSTRUCT)
16553 ];
16554
16555 // Used for parsing/radix conversion
16556 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
16557
16558 /*
16559 Method: toString
16560 Convert a <BigInteger> to a string.
16561
16562 When *base* is greater than 10, letters are upper case.
16563
16564 Parameters:
16565
16566 base - Optional base to represent the number in (default is base 10).
16567 Must be between 2 and 36 inclusive, or an Error will be thrown.
16568
16569 Returns:
16570
16571 The string representation of the <BigInteger>.
16572 */
16573 BigInteger.prototype.toString = function(base) {
16574 base = +base || 10;
16575 if (base < 2 || base > 36) {
16576 throw new Error("illegal radix " + base + ".");
16577 }
16578 if (this._s === 0) {
16579 return "0";
16580 }
16581 if (base === 10) {
16582 var str = this._s < 0 ? "-" : "";
16583 str += this._d[this._d.length - 1].toString();
16584 for (var i = this._d.length - 2; i >= 0; i--) {
16585 var group = this._d[i].toString();
16586 while (group.length < BigInteger_base_log10) group = '0' + group;
16587 str += group;
16588 }
16589 return str;
16590 }
16591 else {
16592 var numerals = BigInteger.digits;
16593 base = BigInteger.small[base];
16594 var sign = this._s;
16595
16596 var n = this.abs();
16597 var digits = [];
16598 var digit;
16599
16600 while (n._s !== 0) {
16601 var divmod = n.divRem(base);
16602 n = divmod[0];
16603 digit = divmod[1];
16604 // TODO: This could be changed to unshift instead of reversing at the end.
16605 // Benchmark both to compare speeds.
16606 digits.push(numerals[digit.valueOf()]);
16607 }
16608 return (sign < 0 ? "-" : "") + digits.reverse().join("");
16609 }
16610 };
16611
16612 // Verify strings for parsing
16613 BigInteger.radixRegex = [
16614 /^$/,
16615 /^$/,
16616 /^[01]*$/,
16617 /^[012]*$/,
16618 /^[0-3]*$/,
16619 /^[0-4]*$/,
16620 /^[0-5]*$/,
16621 /^[0-6]*$/,
16622 /^[0-7]*$/,
16623 /^[0-8]*$/,
16624 /^[0-9]*$/,
16625 /^[0-9aA]*$/,
16626 /^[0-9abAB]*$/,
16627 /^[0-9abcABC]*$/,
16628 /^[0-9a-dA-D]*$/,
16629 /^[0-9a-eA-E]*$/,
16630 /^[0-9a-fA-F]*$/,
16631 /^[0-9a-gA-G]*$/,
16632 /^[0-9a-hA-H]*$/,
16633 /^[0-9a-iA-I]*$/,
16634 /^[0-9a-jA-J]*$/,
16635 /^[0-9a-kA-K]*$/,
16636 /^[0-9a-lA-L]*$/,
16637 /^[0-9a-mA-M]*$/,
16638 /^[0-9a-nA-N]*$/,
16639 /^[0-9a-oA-O]*$/,
16640 /^[0-9a-pA-P]*$/,
16641 /^[0-9a-qA-Q]*$/,
16642 /^[0-9a-rA-R]*$/,
16643 /^[0-9a-sA-S]*$/,
16644 /^[0-9a-tA-T]*$/,
16645 /^[0-9a-uA-U]*$/,
16646 /^[0-9a-vA-V]*$/,
16647 /^[0-9a-wA-W]*$/,
16648 /^[0-9a-xA-X]*$/,
16649 /^[0-9a-yA-Y]*$/,
16650 /^[0-9a-zA-Z]*$/
16651 ];
16652
16653 /*
16654 Function: parse
16655 Parse a string into a <BigInteger>.
16656
16657 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
16658 *base* is not provided, it will be guessed based on the leading characters
16659 of *s* as follows:
16660
16661 - "0x" or "0X": *base* = 16
16662 - "0c" or "0C": *base* = 8
16663 - "0b" or "0B": *base* = 2
16664 - else: *base* = 10
16665
16666 If no base is provided, or *base* is 10, the number can be in exponential
16667 form. For example, these are all valid:
16668
16669 > BigInteger.parse("1e9"); // Same as "1000000000"
16670 > BigInteger.parse("1.234*10^3"); // Same as 1234
16671 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
16672
16673 If any characters fall outside the range defined by the radix, an exception
16674 will be thrown.
16675
16676 Parameters:
16677
16678 s - The string to parse.
16679 base - Optional radix (default is to guess based on *s*).
16680
16681 Returns:
16682
16683 a <BigInteger> instance.
16684 */
16685 BigInteger.parse = function(s, base) {
16686 // Expands a number in exponential form to decimal form.
16687 // expandExponential("-13.441*10^5") === "1344100";
16688 // expandExponential("1.12300e-1") === "0.112300";
16689 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
16690 function expandExponential(str) {
16691 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
16692
16693 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
16694 c = +c;
16695 var l = c < 0;
16696 var i = n.length + c;
16697 x = (l ? n : f).length;
16698 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
16699 var z = (new Array(c + 1)).join("0");
16700 var r = n + f;
16701 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
16702 });
16703 }
16704
16705 s = s.toString();
16706 if (typeof base === "undefined" || +base === 10) {
16707 s = expandExponential(s);
16708 }
16709
16710 var prefixRE;
16711 if (typeof base === "undefined") {
16712 prefixRE = '0[xcb]';
16713 }
16714 else if (base == 16) {
16715 prefixRE = '0x';
16716 }
16717 else if (base == 8) {
16718 prefixRE = '0c';
16719 }
16720 else if (base == 2) {
16721 prefixRE = '0b';
16722 }
16723 else {
16724 prefixRE = '';
16725 }
16726 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
16727 if (parts) {
16728 var sign = parts[1] || "+";
16729 var baseSection = parts[2] || "";
16730 var digits = parts[3] || "";
16731
16732 if (typeof base === "undefined") {
16733 // Guess base
16734 if (baseSection === "0x" || baseSection === "0X") { // Hex
16735 base = 16;
16736 }
16737 else if (baseSection === "0c" || baseSection === "0C") { // Octal
16738 base = 8;
16739 }
16740 else if (baseSection === "0b" || baseSection === "0B") { // Binary
16741 base = 2;
16742 }
16743 else {
16744 base = 10;
16745 }
16746 }
16747 else if (base < 2 || base > 36) {
16748 throw new Error("Illegal radix " + base + ".");
16749 }
16750
16751 base = +base;
16752
16753 // Check for digits outside the range
16754 if (!(BigInteger.radixRegex[base].test(digits))) {
16755 throw new Error("Bad digit for radix " + base);
16756 }
16757
16758 // Strip leading zeros, and convert to array
16759 digits = digits.replace(/^0+/, "").split("");
16760 if (digits.length === 0) {
16761 return ZERO;
16762 }
16763
16764 // Get the sign (we know it's not zero)
16765 sign = (sign === "-") ? -1 : 1;
16766
16767 // Optimize 10
16768 if (base == 10) {
16769 var d = [];
16770 while (digits.length >= BigInteger_base_log10) {
16771 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
16772 }
16773 d.push(parseInt(digits.join(''), 10));
16774 return new BigInteger(d, sign, CONSTRUCT);
16775 }
16776
16777 // Do the conversion
16778 var d = ZERO;
16779 base = BigInteger.small[base];
16780 var small = BigInteger.small;
16781 for (var i = 0; i < digits.length; i++) {
16782 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
16783 }
16784 return new BigInteger(d._d, sign, CONSTRUCT);
16785 }
16786 else {
16787 throw new Error("Invalid BigInteger format: " + s);
16788 }
16789 };
16790
16791 /*
16792 Function: add
16793 Add two <BigIntegers>.
16794
16795 Parameters:
16796
16797 n - The number to add to *this*. Will be converted to a <BigInteger>.
16798
16799 Returns:
16800
16801 The numbers added together.
16802
16803 See Also:
16804
16805 <subtract>, <multiply>, <quotient>, <next>
16806 */
16807 BigInteger.prototype.add = function(n) {
16808 if (this._s === 0) {
16809 return BigInteger(n);
16810 }
16811
16812 n = BigInteger(n);
16813 if (n._s === 0) {
16814 return this;
16815 }
16816 if (this._s !== n._s) {
16817 n = n.negate();
16818 return this.subtract(n);
16819 }
16820
16821 var a = this._d;
16822 var b = n._d;
16823 var al = a.length;
16824 var bl = b.length;
16825 var sum = new Array(Math.max(al, bl) + 1);
16826 var size = Math.min(al, bl);
16827 var carry = 0;
16828 var digit;
16829
16830 for (var i = 0; i < size; i++) {
16831 digit = a[i] + b[i] + carry;
16832 sum[i] = digit % BigInteger_base;
16833 carry = (digit / BigInteger_base) | 0;
16834 }
16835 if (bl > al) {
16836 a = b;
16837 al = bl;
16838 }
16839 for (i = size; carry && i < al; i++) {
16840 digit = a[i] + carry;
16841 sum[i] = digit % BigInteger_base;
16842 carry = (digit / BigInteger_base) | 0;
16843 }
16844 if (carry) {
16845 sum[i] = carry;
16846 }
16847
16848 for ( ; i < al; i++) {
16849 sum[i] = a[i];
16850 }
16851
16852 return new BigInteger(sum, this._s, CONSTRUCT);
16853 };
16854
16855 /*
16856 Function: negate
16857 Get the additive inverse of a <BigInteger>.
16858
16859 Returns:
16860
16861 A <BigInteger> with the same magnatude, but with the opposite sign.
16862
16863 See Also:
16864
16865 <abs>
16866 */
16867 BigInteger.prototype.negate = function() {
16868 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
16869 };
16870
16871 /*
16872 Function: abs
16873 Get the absolute value of a <BigInteger>.
16874
16875 Returns:
16876
16877 A <BigInteger> with the same magnatude, but always positive (or zero).
16878
16879 See Also:
16880
16881 <negate>
16882 */
16883 BigInteger.prototype.abs = function() {
16884 return (this._s < 0) ? this.negate() : this;
16885 };
16886
16887 /*
16888 Function: subtract
16889 Subtract two <BigIntegers>.
16890
16891 Parameters:
16892
16893 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
16894
16895 Returns:
16896
16897 The *n* subtracted from *this*.
16898
16899 See Also:
16900
16901 <add>, <multiply>, <quotient>, <prev>
16902 */
16903 BigInteger.prototype.subtract = function(n) {
16904 if (this._s === 0) {
16905 return BigInteger(n).negate();
16906 }
16907
16908 n = BigInteger(n);
16909 if (n._s === 0) {
16910 return this;
16911 }
16912 if (this._s !== n._s) {
16913 n = n.negate();
16914 return this.add(n);
16915 }
16916
16917 var m = this;
16918 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
16919 if (this._s < 0) {
16920 m = new BigInteger(n._d, 1, CONSTRUCT);
16921 n = new BigInteger(this._d, 1, CONSTRUCT);
16922 }
16923
16924 // Both are positive => a - b
16925 var sign = m.compareAbs(n);
16926 if (sign === 0) {
16927 return ZERO;
16928 }
16929 else if (sign < 0) {
16930 // swap m and n
16931 var t = n;
16932 n = m;
16933 m = t;
16934 }
16935
16936 // a > b
16937 var a = m._d;
16938 var b = n._d;
16939 var al = a.length;
16940 var bl = b.length;
16941 var diff = new Array(al); // al >= bl since a > b
16942 var borrow = 0;
16943 var i;
16944 var digit;
16945
16946 for (i = 0; i < bl; i++) {
16947 digit = a[i] - borrow - b[i];
16948 if (digit < 0) {
16949 digit += BigInteger_base;
16950 borrow = 1;
16951 }
16952 else {
16953 borrow = 0;
16954 }
16955 diff[i] = digit;
16956 }
16957 for (i = bl; i < al; i++) {
16958 digit = a[i] - borrow;
16959 if (digit < 0) {
16960 digit += BigInteger_base;
16961 }
16962 else {
16963 diff[i++] = digit;
16964 break;
16965 }
16966 diff[i] = digit;
16967 }
16968 for ( ; i < al; i++) {
16969 diff[i] = a[i];
16970 }
16971
16972 return new BigInteger(diff, sign, CONSTRUCT);
16973 };
16974
16975 (function() {
16976 function addOne(n, sign) {
16977 var a = n._d;
16978 var sum = a.slice();
16979 var carry = true;
16980 var i = 0;
16981
16982 while (true) {
16983 var digit = (a[i] || 0) + 1;
16984 sum[i] = digit % BigInteger_base;
16985 if (digit <= BigInteger_base - 1) {
16986 break;
16987 }
16988 ++i;
16989 }
16990
16991 return new BigInteger(sum, sign, CONSTRUCT);
16992 }
16993
16994 function subtractOne(n, sign) {
16995 var a = n._d;
16996 var sum = a.slice();
16997 var borrow = true;
16998 var i = 0;
16999
17000 while (true) {
17001 var digit = (a[i] || 0) - 1;
17002 if (digit < 0) {
17003 sum[i] = digit + BigInteger_base;
17004 }
17005 else {
17006 sum[i] = digit;
17007 break;
17008 }
17009 ++i;
17010 }
17011
17012 return new BigInteger(sum, sign, CONSTRUCT);
17013 }
17014
17015 /*
17016 Function: next
17017 Get the next <BigInteger> (add one).
17018
17019 Returns:
17020
17021 *this* + 1.
17022
17023 See Also:
17024
17025 <add>, <prev>
17026 */
17027 BigInteger.prototype.next = function() {
17028 switch (this._s) {
17029 case 0:
17030 return ONE;
17031 case -1:
17032 return subtractOne(this, -1);
17033 // case 1:
17034 default:
17035 return addOne(this, 1);
17036 }
17037 };
17038
17039 /*
17040 Function: prev
17041 Get the previous <BigInteger> (subtract one).
17042
17043 Returns:
17044
17045 *this* - 1.
17046
17047 See Also:
17048
17049 <next>, <subtract>
17050 */
17051 BigInteger.prototype.prev = function() {
17052 switch (this._s) {
17053 case 0:
17054 return M_ONE;
17055 case -1:
17056 return addOne(this, -1);
17057 // case 1:
17058 default:
17059 return subtractOne(this, 1);
17060 }
17061 };
17062 })();
17063
17064 /*
17065 Function: compareAbs
17066 Compare the absolute value of two <BigIntegers>.
17067
17068 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
17069
17070 Parameters:
17071
17072 n - The number to compare to *this*. Will be converted to a <BigInteger>.
17073
17074 Returns:
17075
17076 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
17077
17078 See Also:
17079
17080 <compare>, <abs>
17081 */
17082 BigInteger.prototype.compareAbs = function(n) {
17083 if (this === n) {
17084 return 0;
17085 }
17086
17087 if (!(n instanceof BigInteger)) {
17088 if (!isFinite(n)) {
17089 return(isNaN(n) ? n : -1);
17090 }
17091 n = BigInteger(n);
17092 }
17093
17094 if (this._s === 0) {
17095 return (n._s !== 0) ? -1 : 0;
17096 }
17097 if (n._s === 0) {
17098 return 1;
17099 }
17100
17101 var l = this._d.length;
17102 var nl = n._d.length;
17103 if (l < nl) {
17104 return -1;
17105 }
17106 else if (l > nl) {
17107 return 1;
17108 }
17109
17110 var a = this._d;
17111 var b = n._d;
17112 for (var i = l-1; i >= 0; i--) {
17113 if (a[i] !== b[i]) {
17114 return a[i] < b[i] ? -1 : 1;
17115 }
17116 }
17117
17118 return 0;
17119 };
17120
17121 /*
17122 Function: compare
17123 Compare two <BigIntegers>.
17124
17125 Parameters:
17126
17127 n - The number to compare to *this*. Will be converted to a <BigInteger>.
17128
17129 Returns:
17130
17131 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
17132
17133 See Also:
17134
17135 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
17136 */
17137 BigInteger.prototype.compare = function(n) {
17138 if (this === n) {
17139 return 0;
17140 }
17141
17142 n = BigInteger(n);
17143
17144 if (this._s === 0) {
17145 return -n._s;
17146 }
17147
17148 if (this._s === n._s) { // both positive or both negative
17149 var cmp = this.compareAbs(n);
17150 return cmp * this._s;
17151 }
17152 else {
17153 return this._s;
17154 }
17155 };
17156
17157 /*
17158 Function: isUnit
17159 Return true iff *this* is either 1 or -1.
17160
17161 Returns:
17162
17163 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
17164
17165 See Also:
17166
17167 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
17168 <BigInteger.ONE>, <BigInteger.M_ONE>
17169 */
17170 BigInteger.prototype.isUnit = function() {
17171 return this === ONE ||
17172 this === M_ONE ||
17173 (this._d.length === 1 && this._d[0] === 1);
17174 };
17175
17176 /*
17177 Function: multiply
17178 Multiply two <BigIntegers>.
17179
17180 Parameters:
17181
17182 n - The number to multiply *this* by. Will be converted to a
17183 <BigInteger>.
17184
17185 Returns:
17186
17187 The numbers multiplied together.
17188
17189 See Also:
17190
17191 <add>, <subtract>, <quotient>, <square>
17192 */
17193 BigInteger.prototype.multiply = function(n) {
17194 // TODO: Consider adding Karatsuba multiplication for large numbers
17195 if (this._s === 0) {
17196 return ZERO;
17197 }
17198
17199 n = BigInteger(n);
17200 if (n._s === 0) {
17201 return ZERO;
17202 }
17203 if (this.isUnit()) {
17204 if (this._s < 0) {
17205 return n.negate();
17206 }
17207 return n;
17208 }
17209 if (n.isUnit()) {
17210 if (n._s < 0) {
17211 return this.negate();
17212 }
17213 return this;
17214 }
17215 if (this === n) {
17216 return this.square();
17217 }
17218
17219 var r = (this._d.length >= n._d.length);
17220 var a = (r ? this : n)._d; // a will be longer than b
17221 var b = (r ? n : this)._d;
17222 var al = a.length;
17223 var bl = b.length;
17224
17225 var pl = al + bl;
17226 var partial = new Array(pl);
17227 var i;
17228 for (i = 0; i < pl; i++) {
17229 partial[i] = 0;
17230 }
17231
17232 for (i = 0; i < bl; i++) {
17233 var carry = 0;
17234 var bi = b[i];
17235 var jlimit = al + i;
17236 var digit;
17237 for (var j = i; j < jlimit; j++) {
17238 digit = partial[j] + bi * a[j - i] + carry;
17239 carry = (digit / BigInteger_base) | 0;
17240 partial[j] = (digit % BigInteger_base) | 0;
17241 }
17242 if (carry) {
17243 digit = partial[j] + carry;
17244 carry = (digit / BigInteger_base) | 0;
17245 partial[j] = digit % BigInteger_base;
17246 }
17247 }
17248 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
17249 };
17250
17251 // Multiply a BigInteger by a single-digit native number
17252 // Assumes that this and n are >= 0
17253 // This is not really intended to be used outside the library itself
17254 BigInteger.prototype.multiplySingleDigit = function(n) {
17255 if (n === 0 || this._s === 0) {
17256 return ZERO;
17257 }
17258 if (n === 1) {
17259 return this;
17260 }
17261
17262 var digit;
17263 if (this._d.length === 1) {
17264 digit = this._d[0] * n;
17265 if (digit >= BigInteger_base) {
17266 return new BigInteger([(digit % BigInteger_base)|0,
17267 (digit / BigInteger_base)|0], 1, CONSTRUCT);
17268 }
17269 return new BigInteger([digit], 1, CONSTRUCT);
17270 }
17271
17272 if (n === 2) {
17273 return this.add(this);
17274 }
17275 if (this.isUnit()) {
17276 return new BigInteger([n], 1, CONSTRUCT);
17277 }
17278
17279 var a = this._d;
17280 var al = a.length;
17281
17282 var pl = al + 1;
17283 var partial = new Array(pl);
17284 for (var i = 0; i < pl; i++) {
17285 partial[i] = 0;
17286 }
17287
17288 var carry = 0;
17289 for (var j = 0; j < al; j++) {
17290 digit = n * a[j] + carry;
17291 carry = (digit / BigInteger_base) | 0;
17292 partial[j] = (digit % BigInteger_base) | 0;
17293 }
17294 if (carry) {
17295 partial[j] = carry;
17296 }
17297
17298 return new BigInteger(partial, 1, CONSTRUCT);
17299 };
17300
17301 /*
17302 Function: square
17303 Multiply a <BigInteger> by itself.
17304
17305 This is slightly faster than regular multiplication, since it removes the
17306 duplicated multiplcations.
17307
17308 Returns:
17309
17310 > this.multiply(this)
17311
17312 See Also:
17313 <multiply>
17314 */
17315 BigInteger.prototype.square = function() {
17316 // Normally, squaring a 10-digit number would take 100 multiplications.
17317 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
17318 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
17319 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
17320
17321 if (this._s === 0) {
17322 return ZERO;
17323 }
17324 if (this.isUnit()) {
17325 return ONE;
17326 }
17327
17328 var digits = this._d;
17329 var length = digits.length;
17330 var imult1 = new Array(length + length + 1);
17331 var product, carry, k;
17332 var i;
17333
17334 // Calculate diagonal
17335 for (i = 0; i < length; i++) {
17336 k = i * 2;
17337 product = digits[i] * digits[i];
17338 carry = (product / BigInteger_base) | 0;
17339 imult1[k] = product % BigInteger_base;
17340 imult1[k + 1] = carry;
17341 }
17342
17343 // Calculate repeating part
17344 for (i = 0; i < length; i++) {
17345 carry = 0;
17346 k = i * 2 + 1;
17347 for (var j = i + 1; j < length; j++, k++) {
17348 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
17349 carry = (product / BigInteger_base) | 0;
17350 imult1[k] = product % BigInteger_base;
17351 }
17352 k = length + i;
17353 var digit = carry + imult1[k];
17354 carry = (digit / BigInteger_base) | 0;
17355 imult1[k] = digit % BigInteger_base;
17356 imult1[k + 1] += carry;
17357 }
17358
17359 return new BigInteger(imult1, 1, CONSTRUCT);
17360 };
17361
17362 /*
17363 Function: quotient
17364 Divide two <BigIntegers> and truncate towards zero.
17365
17366 <quotient> throws an exception if *n* is zero.
17367
17368 Parameters:
17369
17370 n - The number to divide *this* by. Will be converted to a <BigInteger>.
17371
17372 Returns:
17373
17374 The *this* / *n*, truncated to an integer.
17375
17376 See Also:
17377
17378 <add>, <subtract>, <multiply>, <divRem>, <remainder>
17379 */
17380 BigInteger.prototype.quotient = function(n) {
17381 return this.divRem(n)[0];
17382 };
17383
17384 /*
17385 Function: divide
17386 Deprecated synonym for <quotient>.
17387 */
17388 BigInteger.prototype.divide = BigInteger.prototype.quotient;
17389
17390 /*
17391 Function: remainder
17392 Calculate the remainder of two <BigIntegers>.
17393
17394 <remainder> throws an exception if *n* is zero.
17395
17396 Parameters:
17397
17398 n - The remainder after *this* is divided *this* by *n*. Will be
17399 converted to a <BigInteger>.
17400
17401 Returns:
17402
17403 *this* % *n*.
17404
17405 See Also:
17406
17407 <divRem>, <quotient>
17408 */
17409 BigInteger.prototype.remainder = function(n) {
17410 return this.divRem(n)[1];
17411 };
17412
17413 /*
17414 Function: divRem
17415 Calculate the integer quotient and remainder of two <BigIntegers>.
17416
17417 <divRem> throws an exception if *n* is zero.
17418
17419 Parameters:
17420
17421 n - The number to divide *this* by. Will be converted to a <BigInteger>.
17422
17423 Returns:
17424
17425 A two-element array containing the quotient and the remainder.
17426
17427 > a.divRem(b)
17428
17429 is exactly equivalent to
17430
17431 > [a.quotient(b), a.remainder(b)]
17432
17433 except it is faster, because they are calculated at the same time.
17434
17435 See Also:
17436
17437 <quotient>, <remainder>
17438 */
17439 BigInteger.prototype.divRem = function(n) {
17440 n = BigInteger(n);
17441 if (n._s === 0) {
17442 throw new Error("Divide by zero");
17443 }
17444 if (this._s === 0) {
17445 return [ZERO, ZERO];
17446 }
17447 if (n._d.length === 1) {
17448 return this.divRemSmall(n._s * n._d[0]);
17449 }
17450
17451 // Test for easy cases -- |n1| <= |n2|
17452 switch (this.compareAbs(n)) {
17453 case 0: // n1 == n2
17454 return [this._s === n._s ? ONE : M_ONE, ZERO];
17455 case -1: // |n1| < |n2|
17456 return [ZERO, this];
17457 }
17458
17459 var sign = this._s * n._s;
17460 var a = n.abs();
17461 var b_digits = this._d;
17462 var b_index = b_digits.length;
17463 var digits = n._d.length;
17464 var quot = [];
17465 var guess;
17466
17467 var part = new BigInteger([], 0, CONSTRUCT);
17468
17469 while (b_index) {
17470 part._d.unshift(b_digits[--b_index]);
17471 part = new BigInteger(part._d, 1, CONSTRUCT);
17472
17473 if (part.compareAbs(n) < 0) {
17474 quot.push(0);
17475 continue;
17476 }
17477 if (part._s === 0) {
17478 guess = 0;
17479 }
17480 else {
17481 var xlen = part._d.length, ylen = a._d.length;
17482 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
17483 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
17484 if (part._d.length > a._d.length) {
17485 // The length of part._d can either match a._d length,
17486 // or exceed it by one.
17487 highx = (highx+1)*BigInteger_base;
17488 }
17489 guess = Math.ceil(highx/highy);
17490 }
17491 do {
17492 var check = a.multiplySingleDigit(guess);
17493 if (check.compareAbs(part) <= 0) {
17494 break;
17495 }
17496 guess--;
17497 } while (guess);
17498
17499 quot.push(guess);
17500 if (!guess) {
17501 continue;
17502 }
17503 var diff = part.subtract(check);
17504 part._d = diff._d.slice();
17505 }
17506
17507 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
17508 new BigInteger(part._d, this._s, CONSTRUCT)];
17509 };
17510
17511 // Throws an exception if n is outside of (-BigInteger.base, -1] or
17512 // [1, BigInteger.base). It's not necessary to call this, since the
17513 // other division functions will call it if they are able to.
17514 BigInteger.prototype.divRemSmall = function(n) {
17515 var r;
17516 n = +n;
17517 if (n === 0) {
17518 throw new Error("Divide by zero");
17519 }
17520
17521 var n_s = n < 0 ? -1 : 1;
17522 var sign = this._s * n_s;
17523 n = Math.abs(n);
17524
17525 if (n < 1 || n >= BigInteger_base) {
17526 throw new Error("Argument out of range");
17527 }
17528
17529 if (this._s === 0) {
17530 return [ZERO, ZERO];
17531 }
17532
17533 if (n === 1 || n === -1) {
17534 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
17535 }
17536
17537 // 2 <= n < BigInteger_base
17538
17539 // divide a single digit by a single digit
17540 if (this._d.length === 1) {
17541 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
17542 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
17543 if (sign < 0) {
17544 q = q.negate();
17545 }
17546 if (this._s < 0) {
17547 r = r.negate();
17548 }
17549 return [q, r];
17550 }
17551
17552 var digits = this._d.slice();
17553 var quot = new Array(digits.length);
17554 var part = 0;
17555 var diff = 0;
17556 var i = 0;
17557 var guess;
17558
17559 while (digits.length) {
17560 part = part * BigInteger_base + digits[digits.length - 1];
17561 if (part < n) {
17562 quot[i++] = 0;
17563 digits.pop();
17564 diff = BigInteger_base * diff + part;
17565 continue;
17566 }
17567 if (part === 0) {
17568 guess = 0;
17569 }
17570 else {
17571 guess = (part / n) | 0;
17572 }
17573
17574 var check = n * guess;
17575 diff = part - check;
17576 quot[i++] = guess;
17577 if (!guess) {
17578 digits.pop();
17579 continue;
17580 }
17581
17582 digits.pop();
17583 part = diff;
17584 }
17585
17586 r = new BigInteger([diff], 1, CONSTRUCT);
17587 if (this._s < 0) {
17588 r = r.negate();
17589 }
17590 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
17591 };
17592
17593 /*
17594 Function: isEven
17595 Return true iff *this* is divisible by two.
17596
17597 Note that <BigInteger.ZERO> is even.
17598
17599 Returns:
17600
17601 true if *this* is even, false otherwise.
17602
17603 See Also:
17604
17605 <isOdd>
17606 */
17607 BigInteger.prototype.isEven = function() {
17608 var digits = this._d;
17609 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
17610 };
17611
17612 /*
17613 Function: isOdd
17614 Return true iff *this* is not divisible by two.
17615
17616 Returns:
17617
17618 true if *this* is odd, false otherwise.
17619
17620 See Also:
17621
17622 <isEven>
17623 */
17624 BigInteger.prototype.isOdd = function() {
17625 return !this.isEven();
17626 };
17627
17628 /*
17629 Function: sign
17630 Get the sign of a <BigInteger>.
17631
17632 Returns:
17633
17634 * -1 if *this* < 0
17635 * 0 if *this* == 0
17636 * +1 if *this* > 0
17637
17638 See Also:
17639
17640 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
17641 */
17642 BigInteger.prototype.sign = function() {
17643 return this._s;
17644 };
17645
17646 /*
17647 Function: isPositive
17648 Return true iff *this* > 0.
17649
17650 Returns:
17651
17652 true if *this*.compare(<BigInteger.ZERO>) == 1.
17653
17654 See Also:
17655
17656 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
17657 */
17658 BigInteger.prototype.isPositive = function() {
17659 return this._s > 0;
17660 };
17661
17662 /*
17663 Function: isNegative
17664 Return true iff *this* < 0.
17665
17666 Returns:
17667
17668 true if *this*.compare(<BigInteger.ZERO>) == -1.
17669
17670 See Also:
17671
17672 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
17673 */
17674 BigInteger.prototype.isNegative = function() {
17675 return this._s < 0;
17676 };
17677
17678 /*
17679 Function: isZero
17680 Return true iff *this* == 0.
17681
17682 Returns:
17683
17684 true if *this*.compare(<BigInteger.ZERO>) == 0.
17685
17686 See Also:
17687
17688 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
17689 */
17690 BigInteger.prototype.isZero = function() {
17691 return this._s === 0;
17692 };
17693
17694 /*
17695 Function: exp10
17696 Multiply a <BigInteger> by a power of 10.
17697
17698 This is equivalent to, but faster than
17699
17700 > if (n >= 0) {
17701 > return this.multiply(BigInteger("1e" + n));
17702 > }
17703 > else { // n <= 0
17704 > return this.quotient(BigInteger("1e" + -n));
17705 > }
17706
17707 Parameters:
17708
17709 n - The power of 10 to multiply *this* by. *n* is converted to a
17710 javascipt number and must be no greater than <BigInteger.MAX_EXP>
17711 (0x7FFFFFFF), or an exception will be thrown.
17712
17713 Returns:
17714
17715 *this* * (10 ** *n*), truncated to an integer if necessary.
17716
17717 See Also:
17718
17719 <pow>, <multiply>
17720 */
17721 BigInteger.prototype.exp10 = function(n) {
17722 n = +n;
17723 if (n === 0) {
17724 return this;
17725 }
17726 if (Math.abs(n) > Number(MAX_EXP)) {
17727 throw new Error("exponent too large in BigInteger.exp10");
17728 }
17729 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
17730 if (this._s === 0) {
17731 return ZERO;
17732 }
17733 if (n > 0) {
17734 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
17735
17736 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
17737 k._d.unshift(0);
17738 }
17739 if (n == 0)
17740 return k;
17741 k._s = 1;
17742 k = k.multiplySingleDigit(Math.pow(10, n));
17743 return (this._s < 0 ? k.negate() : k);
17744 } else if (-n >= this._d.length*BigInteger_base_log10) {
17745 return ZERO;
17746 } else {
17747 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
17748
17749 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
17750 k._d.shift();
17751 }
17752 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
17753 }
17754 };
17755
17756 /*
17757 Function: pow
17758 Raise a <BigInteger> to a power.
17759
17760 In this implementation, 0**0 is 1.
17761
17762 Parameters:
17763
17764 n - The exponent to raise *this* by. *n* must be no greater than
17765 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
17766
17767 Returns:
17768
17769 *this* raised to the *nth* power.
17770
17771 See Also:
17772
17773 <modPow>
17774 */
17775 BigInteger.prototype.pow = function(n) {
17776 if (this.isUnit()) {
17777 if (this._s > 0) {
17778 return this;
17779 }
17780 else {
17781 return BigInteger(n).isOdd() ? this : this.negate();
17782 }
17783 }
17784
17785 n = BigInteger(n);
17786 if (n._s === 0) {
17787 return ONE;
17788 }
17789 else if (n._s < 0) {
17790 if (this._s === 0) {
17791 throw new Error("Divide by zero");
17792 }
17793 else {
17794 return ZERO;
17795 }
17796 }
17797 if (this._s === 0) {
17798 return ZERO;
17799 }
17800 if (n.isUnit()) {
17801 return this;
17802 }
17803
17804 if (n.compareAbs(MAX_EXP) > 0) {
17805 throw new Error("exponent too large in BigInteger.pow");
17806 }
17807 var x = this;
17808 var aux = ONE;
17809 var two = BigInteger.small[2];
17810
17811 while (n.isPositive()) {
17812 if (n.isOdd()) {
17813 aux = aux.multiply(x);
17814 if (n.isUnit()) {
17815 return aux;
17816 }
17817 }
17818 x = x.square();
17819 n = n.quotient(two);
17820 }
17821
17822 return aux;
17823 };
17824
17825 /*
17826 Function: modPow
17827 Raise a <BigInteger> to a power (mod m).
17828
17829 Because it is reduced by a modulus, <modPow> is not limited by
17830 <BigInteger.MAX_EXP> like <pow>.
17831
17832 Parameters:
17833
17834 exponent - The exponent to raise *this* by. Must be positive.
17835 modulus - The modulus.
17836
17837 Returns:
17838
17839 *this* ^ *exponent* (mod *modulus*).
17840
17841 See Also:
17842
17843 <pow>, <mod>
17844 */
17845 BigInteger.prototype.modPow = function(exponent, modulus) {
17846 var result = ONE;
17847 var base = this;
17848
17849 while (exponent.isPositive()) {
17850 if (exponent.isOdd()) {
17851 result = result.multiply(base).remainder(modulus);
17852 }
17853
17854 exponent = exponent.quotient(BigInteger.small[2]);
17855 if (exponent.isPositive()) {
17856 base = base.square().remainder(modulus);
17857 }
17858 }
17859
17860 return result;
17861 };
17862
17863 /*
17864 Function: log
17865 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
17866
17867 This is equivalent to
17868
17869 > Math.log(this.toJSValue())
17870
17871 but handles values outside of the native number range.
17872
17873 Returns:
17874
17875 log( *this* )
17876
17877 See Also:
17878
17879 <toJSValue>
17880 */
17881 BigInteger.prototype.log = function() {
17882 switch (this._s) {
17883 case 0: return -Infinity;
17884 case -1: return NaN;
17885 default: // Fall through.
17886 }
17887
17888 var l = this._d.length;
17889
17890 if (l*BigInteger_base_log10 < 30) {
17891 return Math.log(this.valueOf());
17892 }
17893
17894 var N = Math.ceil(30/BigInteger_base_log10);
17895 var firstNdigits = this._d.slice(l - N);
17896 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
17897 };
17898
17899 /*
17900 Function: valueOf
17901 Convert a <BigInteger> to a native JavaScript integer.
17902
17903 This is called automatically by JavaScipt to convert a <BigInteger> to a
17904 native value.
17905
17906 Returns:
17907
17908 > parseInt(this.toString(), 10)
17909
17910 See Also:
17911
17912 <toString>, <toJSValue>
17913 */
17914 BigInteger.prototype.valueOf = function() {
17915 return parseInt(this.toString(), 10);
17916 };
17917
17918 /*
17919 Function: toJSValue
17920 Convert a <BigInteger> to a native JavaScript integer.
17921
17922 This is the same as valueOf, but more explicitly named.
17923
17924 Returns:
17925
17926 > parseInt(this.toString(), 10)
17927
17928 See Also:
17929
17930 <toString>, <valueOf>
17931 */
17932 BigInteger.prototype.toJSValue = function() {
17933 return parseInt(this.toString(), 10);
17934 };
17935
17936 var MAX_EXP = BigInteger(0x7FFFFFFF);
17937 // Constant: MAX_EXP
17938 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
17939 BigInteger.MAX_EXP = MAX_EXP;
17940
17941 (function() {
17942 function makeUnary(fn) {
17943 return function(a) {
17944 return fn.call(BigInteger(a));
17945 };
17946 }
17947
17948 function makeBinary(fn) {
17949 return function(a, b) {
17950 return fn.call(BigInteger(a), BigInteger(b));
17951 };
17952 }
17953
17954 function makeTrinary(fn) {
17955 return function(a, b, c) {
17956 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
17957 };
17958 }
17959
17960 (function() {
17961 var i, fn;
17962 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
17963 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
17964 var trinary = ["modPow"];
17965
17966 for (i = 0; i < unary.length; i++) {
17967 fn = unary[i];
17968 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
17969 }
17970
17971 for (i = 0; i < binary.length; i++) {
17972 fn = binary[i];
17973 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
17974 }
17975
17976 for (i = 0; i < trinary.length; i++) {
17977 fn = trinary[i];
17978 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
17979 }
17980
17981 BigInteger.exp10 = function(x, n) {
17982 return BigInteger(x).exp10(n);
17983 };
17984 })();
17985 })();
17986
17987 exports.BigInteger = BigInteger;
17988 })(typeof exports !== 'undefined' ? exports : this);
17989 </script>
17990 <script>(function() {
17991
17992 // mnemonics is populated as required by getLanguage
17993 var mnemonics = { "english": new Mnemonic("english") };
17994 var mnemonic = mnemonics["english"];
17995 var seed = null
17996 var bip32RootKey = null;
17997 var bip32ExtendedKey = null;
17998 var network = bitcoin.networks.bitcoin;
17999 var addressRowTemplate = $("#address-row-template");
18000
18001 var showIndex = true;
18002 var showAddress = true;
18003 var showPubKey = true;
18004 var showPrivKey = true;
18005
18006 var entropyChangeTimeoutEvent = null;
18007 var phraseChangeTimeoutEvent = null;
18008 var rootKeyChangedTimeoutEvent = null;
18009
18010 var DOM = {};
18011 DOM.network = $(".network");
18012 DOM.phraseNetwork = $("#network-phrase");
18013 DOM.useEntropy = $(".use-entropy");
18014 DOM.entropyContainer = $(".entropy-container");
18015 DOM.entropy = $(".entropy");
18016 DOM.entropyError = $(".entropy-error");
18017 DOM.phrase = $(".phrase");
18018 DOM.passphrase = $(".passphrase");
18019 DOM.generateContainer = $(".generate-container");
18020 DOM.generate = $(".generate");
18021 DOM.seed = $(".seed");
18022 DOM.rootKey = $(".root-key");
18023 DOM.extendedPrivKey = $(".extended-priv-key");
18024 DOM.extendedPubKey = $(".extended-pub-key");
18025 DOM.bip32tab = $("#bip32-tab");
18026 DOM.bip44tab = $("#bip44-tab");
18027 DOM.bip32panel = $("#bip32");
18028 DOM.bip44panel = $("#bip44");
18029 DOM.bip32path = $("#bip32-path");
18030 DOM.bip44path = $("#bip44-path");
18031 DOM.bip44purpose = $("#bip44 .purpose");
18032 DOM.bip44coin = $("#bip44 .coin");
18033 DOM.bip44account = $("#bip44 .account");
18034 DOM.bip44change = $("#bip44 .change");
18035 DOM.strength = $(".strength");
18036 DOM.hardenedAddresses = $(".hardened-addresses");
18037 DOM.addresses = $(".addresses");
18038 DOM.rowsToAdd = $(".rows-to-add");
18039 DOM.more = $(".more");
18040 DOM.feedback = $(".feedback");
18041 DOM.tab = $(".derivation-type a");
18042 DOM.indexToggle = $(".index-toggle");
18043 DOM.addressToggle = $(".address-toggle");
18044 DOM.publicKeyToggle = $(".public-key-toggle");
18045 DOM.privateKeyToggle = $(".private-key-toggle");
18046 DOM.languages = $(".languages a");
18047
18048 function init() {
18049 // Events
18050 DOM.network.on("change", networkChanged);
18051 DOM.useEntropy.on("change", setEntropyVisibility);
18052 DOM.entropy.on("input", delayedEntropyChanged);
18053 DOM.phrase.on("input", delayedPhraseChanged);
18054 DOM.passphrase.on("input", delayedPhraseChanged);
18055 DOM.generate.on("click", generateClicked);
18056 DOM.more.on("click", showMore);
18057 DOM.rootKey.on("input", delayedRootKeyChanged);
18058 DOM.bip32path.on("input", calcForDerivationPath);
18059 DOM.bip44purpose.on("input", calcForDerivationPath);
18060 DOM.bip44coin.on("input", calcForDerivationPath);
18061 DOM.bip44account.on("input", calcForDerivationPath);
18062 DOM.bip44change.on("input", calcForDerivationPath);
18063 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
18064 DOM.hardenedAddresses.on("change", calcForDerivationPath);
18065 DOM.indexToggle.on("click", toggleIndexes);
18066 DOM.addressToggle.on("click", toggleAddresses);
18067 DOM.publicKeyToggle.on("click", togglePublicKeys);
18068 DOM.privateKeyToggle.on("click", togglePrivateKeys);
18069 DOM.languages.on("click", languageChanged);
18070 disableForms();
18071 hidePending();
18072 hideValidationError();
18073 populateNetworkSelect();
18074 }
18075
18076 // Event handlers
18077
18078 function networkChanged(e) {
18079 var networkIndex = e.target.value;
18080 networks[networkIndex].onSelect();
18081 if (seed != null) {
18082 phraseChanged();
18083 }
18084 else {
18085 rootKeyChanged();
18086 }
18087 }
18088
18089 function setEntropyVisibility() {
18090 if (isUsingOwnEntropy()) {
18091 DOM.entropyContainer.removeClass("hidden");
18092 DOM.generateContainer.addClass("hidden");
18093 DOM.phrase.prop("readonly", true);
18094 DOM.entropy.focus();
18095 entropyChanged();
18096 }
18097 else {
18098 DOM.entropyContainer.addClass("hidden");
18099 DOM.generateContainer.removeClass("hidden");
18100 DOM.phrase.prop("readonly", false);
18101 }
18102 }
18103
18104 function delayedPhraseChanged() {
18105 hideValidationError();
18106 showPending();
18107 if (phraseChangeTimeoutEvent != null) {
18108 clearTimeout(phraseChangeTimeoutEvent);
18109 }
18110 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
18111 }
18112
18113 function phraseChanged() {
18114 showPending();
18115 hideValidationError();
18116 setMnemonicLanguage();
18117 // Get the mnemonic phrase
18118 var phrase = DOM.phrase.val();
18119 var errorText = findPhraseErrors(phrase);
18120 if (errorText) {
18121 showValidationError(errorText);
18122 return;
18123 }
18124 // Calculate and display
18125 var passphrase = DOM.passphrase.val();
18126 calcBip32RootKeyFromSeed(phrase, passphrase);
18127 calcForDerivationPath();
18128 hidePending();
18129 }
18130
18131 function delayedEntropyChanged() {
18132 hideValidationError();
18133 showPending();
18134 if (entropyChangeTimeoutEvent != null) {
18135 clearTimeout(entropyChangeTimeoutEvent);
18136 }
18137 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
18138 }
18139
18140 function entropyChanged() {
18141 setMnemonicFromEntropy();
18142 phraseChanged();
18143 }
18144
18145 function delayedRootKeyChanged() {
18146 // Warn if there is an existing mnemonic or passphrase.
18147 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
18148 if (!confirm("This will clear existing mnemonic and passphrase")) {
18149 DOM.rootKey.val(bip32RootKey);
18150 return
18151 }
18152 }
18153 hideValidationError();
18154 showPending();
18155 // Clear existing mnemonic and passphrase
18156 DOM.phrase.val("");
18157 DOM.passphrase.val("");
18158 seed = null;
18159 if (rootKeyChangedTimeoutEvent != null) {
18160 clearTimeout(rootKeyChangedTimeoutEvent);
18161 }
18162 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
18163 }
18164
18165 function rootKeyChanged() {
18166 showPending();
18167 hideValidationError();
18168 // Validate the root key TODO
18169 var rootKeyBase58 = DOM.rootKey.val();
18170 var errorText = validateRootKey(rootKeyBase58);
18171 if (errorText) {
18172 showValidationError(errorText);
18173 return;
18174 }
18175 // Calculate and display
18176 calcBip32RootKeyFromBase58(rootKeyBase58);
18177 calcForDerivationPath();
18178 hidePending();
18179 }
18180
18181 function calcForDerivationPath() {
18182 showPending();
18183 hideValidationError();
18184 // Get the derivation path
18185 var derivationPath = getDerivationPath();
18186 var errorText = findDerivationPathErrors(derivationPath);
18187 if (errorText) {
18188 showValidationError(errorText);
18189 return;
18190 }
18191 calcBip32ExtendedKey(derivationPath);
18192 displayBip32Info();
18193 hidePending();
18194 }
18195
18196 function generateClicked() {
18197 if (isUsingOwnEntropy()) {
18198 return;
18199 }
18200 clearDisplay();
18201 showPending();
18202 setTimeout(function() {
18203 setMnemonicLanguage();
18204 var phrase = generateRandomPhrase();
18205 if (!phrase) {
18206 return;
18207 }
18208 phraseChanged();
18209 }, 50);
18210 }
18211
18212 function languageChanged() {
18213 setTimeout(function() {
18214 setMnemonicLanguage();
18215 if (DOM.phrase.val().length > 0) {
18216 var newPhrase = convertPhraseToNewLanguage();
18217 DOM.phrase.val(newPhrase);
18218 phraseChanged();
18219 }
18220 else {
18221 DOM.generate.trigger("click");
18222 }
18223 }, 50);
18224 }
18225
18226 function toggleIndexes() {
18227 showIndex = !showIndex;
18228 $("td.index span").toggleClass("invisible");
18229 }
18230
18231 function toggleAddresses() {
18232 showAddress = !showAddress;
18233 $("td.address span").toggleClass("invisible");
18234 }
18235
18236 function togglePublicKeys() {
18237 showPubKey = !showPubKey;
18238 $("td.pubkey span").toggleClass("invisible");
18239 }
18240
18241 function togglePrivateKeys() {
18242 showPrivKey = !showPrivKey;
18243 $("td.privkey span").toggleClass("invisible");
18244 }
18245
18246 // Private methods
18247
18248 function generateRandomPhrase() {
18249 if (!hasStrongRandom()) {
18250 var errorText = "This browser does not support strong randomness";
18251 showValidationError(errorText);
18252 return;
18253 }
18254 var numWords = parseInt(DOM.strength.val());
18255 var strength = numWords / 3 * 32;
18256 var words = mnemonic.generate(strength);
18257 DOM.phrase.val(words);
18258 return words;
18259 }
18260
18261 function calcBip32RootKeyFromSeed(phrase, passphrase) {
18262 seed = mnemonic.toSeed(phrase, passphrase);
18263 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
18264 }
18265
18266 function calcBip32RootKeyFromBase58(rootKeyBase58) {
18267 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
18268 }
18269
18270 function calcBip32ExtendedKey(path) {
18271 bip32ExtendedKey = bip32RootKey;
18272 // Derive the key from the path
18273 var pathBits = path.split("/");
18274 for (var i=0; i<pathBits.length; i++) {
18275 var bit = pathBits[i];
18276 var index = parseInt(bit);
18277 if (isNaN(index)) {
18278 continue;
18279 }
18280 var hardened = bit[bit.length-1] == "'";
18281 if (hardened) {
18282 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
18283 }
18284 else {
18285 bip32ExtendedKey = bip32ExtendedKey.derive(index);
18286 }
18287 }
18288 }
18289
18290 function showValidationError(errorText) {
18291 DOM.feedback
18292 .text(errorText)
18293 .show();
18294 }
18295
18296 function hideValidationError() {
18297 DOM.feedback
18298 .text("")
18299 .hide();
18300 }
18301
18302 function findPhraseErrors(phrase) {
18303 // TODO make this right
18304 // Preprocess the words
18305 phrase = mnemonic.normalizeString(phrase);
18306 var words = phraseToWordArray(phrase);
18307 // Check each word
18308 for (var i=0; i<words.length; i++) {
18309 var word = words[i];
18310 var language = getLanguage();
18311 if (WORDLISTS[language].indexOf(word) == -1) {
18312 console.log("Finding closest match to " + word);
18313 var nearestWord = findNearestWord(word);
18314 return word + " not in wordlist, did you mean " + nearestWord + "?";
18315 }
18316 }
18317 // Check the words are valid
18318 var properPhrase = wordArrayToPhrase(words);
18319 var isValid = mnemonic.check(properPhrase);
18320 if (!isValid) {
18321 return "Invalid mnemonic";
18322 }
18323 return false;
18324 }
18325
18326 function validateRootKey(rootKeyBase58) {
18327 try {
18328 bitcoin.HDNode.fromBase58(rootKeyBase58);
18329 }
18330 catch (e) {
18331 return "Invalid root key";
18332 }
18333 return "";
18334 }
18335
18336 function getDerivationPath() {
18337 if (DOM.bip44tab.hasClass("active")) {
18338 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
18339 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
18340 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
18341 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
18342 var path = "m/";
18343 path += purpose + "'/";
18344 path += coin + "'/";
18345 path += account + "'/";
18346 path += change;
18347 DOM.bip44path.val(path);
18348 var derivationPath = DOM.bip44path.val();
18349 console.log("Using derivation path from BIP44 tab: " + derivationPath);
18350 return derivationPath;
18351 }
18352 else if (DOM.bip32tab.hasClass("active")) {
18353 var derivationPath = DOM.bip32path.val();
18354 console.log("Using derivation path from BIP32 tab: " + derivationPath);
18355 return derivationPath;
18356 }
18357 else {
18358 console.log("Unknown derivation path");
18359 }
18360 }
18361
18362 function findDerivationPathErrors(path) {
18363 // TODO is not perfect but is better than nothing
18364 // Inspired by
18365 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
18366 // and
18367 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
18368 var maxDepth = 255; // TODO verify this!!
18369 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
18370 if (path[0] != "m") {
18371 return "First character must be 'm'";
18372 }
18373 if (path.length > 1) {
18374 if (path[1] != "/") {
18375 return "Separator must be '/'";
18376 }
18377 var indexes = path.split("/");
18378 if (indexes.length > maxDepth) {
18379 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
18380 }
18381 for (var depth = 1; depth<indexes.length; depth++) {
18382 var index = indexes[depth];
18383 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
18384 if (invalidChars.length > 0) {
18385 return "Invalid characters " + invalidChars + " found at depth " + depth;
18386 }
18387 var indexValue = parseInt(index.replace("'", ""));
18388 if (isNaN(depth)) {
18389 return "Invalid number at depth " + depth;
18390 }
18391 if (indexValue > maxIndexValue) {
18392 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
18393 }
18394 }
18395 }
18396 return false;
18397 }
18398
18399 function displayBip32Info() {
18400 // Display the key
18401 DOM.seed.val(seed);
18402 var rootKey = bip32RootKey.toBase58();
18403 DOM.rootKey.val(rootKey);
18404 var extendedPrivKey = bip32ExtendedKey.toBase58();
18405 DOM.extendedPrivKey.val(extendedPrivKey);
18406 var extendedPubKey = bip32ExtendedKey.toBase58(false);
18407 DOM.extendedPubKey.val(extendedPubKey);
18408 // Display the addresses and privkeys
18409 clearAddressesList();
18410 displayAddresses(0, 20);
18411 }
18412
18413 function displayAddresses(start, total) {
18414 for (var i=0; i<total; i++) {
18415 var index = i + start;
18416 new TableRow(index);
18417 }
18418 }
18419
18420 function TableRow(index) {
18421
18422 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
18423
18424 function init() {
18425 calculateValues();
18426 }
18427
18428 function calculateValues() {
18429 setTimeout(function() {
18430 var key = "";
18431 if (useHardenedAddresses) {
18432 key = bip32ExtendedKey.deriveHardened(index);
18433 }
18434 else {
18435 key = bip32ExtendedKey.derive(index);
18436 }
18437 var address = key.getAddress().toString();
18438 var privkey = key.privKey.toWIF(network);
18439 var pubkey = key.pubKey.toHex();
18440 var indexText = getDerivationPath() + "/" + index;
18441 if (useHardenedAddresses) {
18442 indexText = indexText + "'";
18443 }
18444 addAddressToList(indexText, address, pubkey, privkey);
18445 }, 50)
18446 }
18447
18448 init();
18449
18450 }
18451
18452 function showMore() {
18453 var start = DOM.addresses.children().length;
18454 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
18455 if (isNaN(rowsToAdd)) {
18456 rowsToAdd = 20;
18457 DOM.rowsToAdd.val("20");
18458 }
18459 if (rowsToAdd > 200) {
18460 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
18461 msg += "Do you want to continue?";
18462 if (!confirm(msg)) {
18463 return;
18464 }
18465 }
18466 displayAddresses(start, rowsToAdd);
18467 }
18468
18469 function clearDisplay() {
18470 clearAddressesList();
18471 clearKey();
18472 hideValidationError();
18473 }
18474
18475 function clearAddressesList() {
18476 DOM.addresses.empty();
18477 }
18478
18479 function clearKey() {
18480 DOM.rootKey.val("");
18481 DOM.extendedPrivKey.val("");
18482 DOM.extendedPubKey.val("");
18483 }
18484
18485 function addAddressToList(indexText, address, pubkey, privkey) {
18486 var row = $(addressRowTemplate.html());
18487 // Elements
18488 var indexCell = row.find(".index span");
18489 var addressCell = row.find(".address span");
18490 var pubkeyCell = row.find(".pubkey span");
18491 var privkeyCell = row.find(".privkey span");
18492 // Content
18493 indexCell.text(indexText);
18494 addressCell.text(address);
18495 pubkeyCell.text(pubkey);
18496 privkeyCell.text(privkey);
18497 // Visibility
18498 if (!showIndex) {
18499 indexCell.addClass("invisible");
18500 }
18501 if (!showAddress) {
18502 addressCell.addClass("invisible");
18503 }
18504 if (!showPubKey) {
18505 pubkeyCell.addClass("invisible");
18506 }
18507 if (!showPrivKey) {
18508 privkeyCell.addClass("invisible");
18509 }
18510 DOM.addresses.append(row);
18511 }
18512
18513 function hasStrongRandom() {
18514 return 'crypto' in window && window['crypto'] !== null;
18515 }
18516
18517 function disableForms() {
18518 $("form").on("submit", function(e) {
18519 e.preventDefault();
18520 });
18521 }
18522
18523 function parseIntNoNaN(val, defaultVal) {
18524 var v = parseInt(val);
18525 if (isNaN(v)) {
18526 return defaultVal;
18527 }
18528 return v;
18529 }
18530
18531 function showPending() {
18532 DOM.feedback
18533 .text("Calculating...")
18534 .show();
18535 }
18536
18537 function findNearestWord(word) {
18538 var language = getLanguage();
18539 var words = WORDLISTS[language];
18540 var minDistance = 99;
18541 var closestWord = words[0];
18542 for (var i=0; i<words.length; i++) {
18543 var comparedTo = words[i];
18544 var distance = Levenshtein.get(word, comparedTo);
18545 if (distance < minDistance) {
18546 closestWord = comparedTo;
18547 minDistance = distance;
18548 }
18549 }
18550 return closestWord;
18551 }
18552
18553 function hidePending() {
18554 DOM.feedback
18555 .text("")
18556 .hide();
18557 }
18558
18559 function populateNetworkSelect() {
18560 for (var i=0; i<networks.length; i++) {
18561 var network = networks[i];
18562 var option = $("<option>");
18563 option.attr("value", i);
18564 option.text(network.name);
18565 DOM.phraseNetwork.append(option);
18566 }
18567 }
18568
18569 function getLanguage() {
18570 var defaultLanguage = "english";
18571 // Try to get from existing phrase
18572 var language = getLanguageFromPhrase();
18573 // Try to get from url if not from phrase
18574 if (language.length == 0) {
18575 language = getLanguageFromUrl();
18576 }
18577 // Default to English if no other option
18578 if (language.length == 0) {
18579 language = defaultLanguage;
18580 }
18581 return language;
18582 }
18583
18584 function getLanguageFromPhrase(phrase) {
18585 // Check if how many words from existing phrase match a language.
18586 var language = "";
18587 if (!phrase) {
18588 phrase = DOM.phrase.val();
18589 }
18590 if (phrase.length > 0) {
18591 var words = phraseToWordArray(phrase);
18592 var languageMatches = {};
18593 for (l in WORDLISTS) {
18594 // Track how many words match in this language
18595 languageMatches[l] = 0;
18596 for (var i=0; i<words.length; i++) {
18597 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
18598 if (wordInLanguage) {
18599 languageMatches[l]++;
18600 }
18601 }
18602 // Find languages with most word matches.
18603 // This is made difficult due to commonalities between Chinese
18604 // simplified vs traditional.
18605 var mostMatches = 0;
18606 var mostMatchedLanguages = [];
18607 for (var l in languageMatches) {
18608 var numMatches = languageMatches[l];
18609 if (numMatches > mostMatches) {
18610 mostMatches = numMatches;
18611 mostMatchedLanguages = [l];
18612 }
18613 else if (numMatches == mostMatches) {
18614 mostMatchedLanguages.push(l);
18615 }
18616 }
18617 }
18618 if (mostMatchedLanguages.length > 0) {
18619 // Use first language and warn if multiple detected
18620 language = mostMatchedLanguages[0];
18621 if (mostMatchedLanguages.length > 1) {
18622 console.warn("Multiple possible languages");
18623 console.warn(mostMatchedLanguages);
18624 }
18625 }
18626 }
18627 return language;
18628 }
18629
18630 function getLanguageFromUrl() {
18631 for (var language in WORDLISTS) {
18632 if (window.location.hash.indexOf(language) > -1) {
18633 return language;
18634 }
18635 }
18636 return "";
18637 }
18638
18639 function setMnemonicLanguage() {
18640 var language = getLanguage();
18641 // Load the bip39 mnemonic generator for this language if required
18642 if (!(language in mnemonics)) {
18643 mnemonics[language] = new Mnemonic(language);
18644 }
18645 mnemonic = mnemonics[language];
18646 }
18647
18648 function convertPhraseToNewLanguage() {
18649 var oldLanguage = getLanguageFromPhrase();
18650 var newLanguage = getLanguageFromUrl();
18651 var oldPhrase = DOM.phrase.val();
18652 var oldWords = phraseToWordArray(oldPhrase);
18653 var newWords = [];
18654 for (var i=0; i<oldWords.length; i++) {
18655 var oldWord = oldWords[i];
18656 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
18657 var newWord = WORDLISTS[newLanguage][index];
18658 newWords.push(newWord);
18659 }
18660 newPhrase = wordArrayToPhrase(newWords);
18661 return newPhrase;
18662 }
18663
18664 // TODO look at jsbip39 - mnemonic.splitWords
18665 function phraseToWordArray(phrase) {
18666 var words = phrase.split(/\s/g);
18667 var noBlanks = [];
18668 for (var i=0; i<words.length; i++) {
18669 var word = words[i];
18670 if (word.length > 0) {
18671 noBlanks.push(word);
18672 }
18673 }
18674 return noBlanks;
18675 }
18676
18677 // TODO look at jsbip39 - mnemonic.joinWords
18678 function wordArrayToPhrase(words) {
18679 var phrase = words.join(" ");
18680 var language = getLanguageFromPhrase(phrase);
18681 if (language == "japanese") {
18682 phrase = words.join("\u3000");
18683 }
18684 return phrase;
18685 }
18686
18687 function isUsingOwnEntropy() {
18688 return DOM.useEntropy.prop("checked");
18689 }
18690
18691 function setMnemonicFromEntropy() {
18692 hideEntropyError();
18693 // Work out minimum base for entropy
18694 var entropyStr = DOM.entropy.val();
18695 var entropy = Entropy.fromString(entropyStr);
18696 if (entropy.hexStr.length == 0) {
18697 return;
18698 }
18699 // Show entropy details
18700 var extraBits = 32 - (entropy.binaryStr.length % 32);
18701 var extraChars = Math.ceil(extraBits * Math.log(2) / Math.log(entropy.base.asInt));
18702 var strength = "an extremely weak";
18703 if (entropy.hexStr.length >= 8) {
18704 strength = "a very weak";
18705 }
18706 if (entropy.hexStr.length >= 12) {
18707 strength = "a weak";
18708 }
18709 if (entropy.hexStr.length >= 24) {
18710 strength = "a strong";
18711 }
18712 if (entropy.hexStr.length >= 32) {
18713 strength = "a very strong";
18714 }
18715 if (entropy.hexStr.length >= 40) {
18716 strength = "an extremely strong";
18717 }
18718 if (entropy.hexStr.length >=48) {
18719 strength = "an even stronger"
18720 }
18721 var msg = "Have " + entropy.binaryStr.length + " bits of entropy, " + extraChars + " more " + entropy.base.str + " chars required to generate " + strength + " mnemonic: " + entropy.cleanStr;
18722 showEntropyError(msg);
18723 // Discard trailing entropy
18724 var hexStr = entropy.hexStr.substring(0, Math.floor(entropy.hexStr.length / 8) * 8);
18725 // Convert entropy string to numeric array
18726 var entropyArr = [];
18727 for (var i=0; i<hexStr.length / 2; i++) {
18728 var entropyByte = parseInt(hexStr[i*2].concat(hexStr[i*2+1]), 16);
18729 entropyArr.push(entropyByte)
18730 }
18731 // Convert entropy array to mnemonic
18732 var phrase = mnemonic.toMnemonic(entropyArr);
18733 // Set the mnemonic in the UI
18734 DOM.phrase.val(phrase);
18735 }
18736
18737 function hideEntropyError() {
18738 DOM.entropyError.addClass("hidden");
18739 }
18740
18741 function showEntropyError(msg) {
18742 DOM.entropyError.text(msg);
18743 DOM.entropyError.removeClass("hidden");
18744 }
18745
18746 var networks = [
18747 {
18748 name: "Bitcoin",
18749 onSelect: function() {
18750 network = bitcoin.networks.bitcoin;
18751 DOM.bip44coin.val(0);
18752 },
18753 },
18754 {
18755 name: "Bitcoin Testnet",
18756 onSelect: function() {
18757 network = bitcoin.networks.testnet;
18758 DOM.bip44coin.val(1);
18759 },
18760 },
18761 {
18762 name: "Litecoin",
18763 onSelect: function() {
18764 network = bitcoin.networks.litecoin;
18765 DOM.bip44coin.val(2);
18766 },
18767 },
18768 {
18769 name: "Dogecoin",
18770 onSelect: function() {
18771 network = bitcoin.networks.dogecoin;
18772 DOM.bip44coin.val(3);
18773 },
18774 },
18775 {
18776 name: "ShadowCash",
18777 onSelect: function() {
18778 network = bitcoin.networks.shadow;
18779 DOM.bip44coin.val(35);
18780 },
18781 },
18782 {
18783 name: "ShadowCash Testnet",
18784 onSelect: function() {
18785 network = bitcoin.networks.shadowtn;
18786 DOM.bip44coin.val(1);
18787 },
18788 },
18789 {
18790 name: "Viacoin",
18791 onSelect: function() {
18792 network = bitcoin.networks.viacoin;
18793 DOM.bip44coin.val(14);
18794 },
18795 },
18796 {
18797 name: "Viacoin Testnet",
18798 onSelect: function() {
18799 network = bitcoin.networks.viacointestnet;
18800 DOM.bip44coin.val(1);
18801 },
18802 },
18803 {
18804 name: "Jumbucks",
18805 onSelect: function() {
18806 network = bitcoin.networks.jumbucks;
18807 DOM.bip44coin.val(26);
18808 },
18809 },
18810 {
18811 name: "CLAM",
18812 onSelect: function() {
18813 network = bitcoin.networks.clam;
18814 DOM.bip44coin.val(23);
18815 },
18816 },
18817 {
18818 name: "DASH",
18819 onSelect: function() {
18820 network = bitcoin.networks.dash;
18821 DOM.bip44coin.val(5);
18822 },
18823 },
18824 {
18825 name: "Namecoin",
18826 onSelect: function() {
18827 network = bitcoin.networks.namecoin;
18828 DOM.bip44coin.val(7);
18829 },
18830 },
18831 {
18832 name: "Peercoin",
18833 onSelect: function() {
18834 network = bitcoin.networks.peercoin;
18835 DOM.bip44coin.val(6);
18836 },
18837 },
18838 ]
18839
18840 init();
18841
18842 })();
18843 </script>
18844 </body>
18845 </html>