4 <meta charset=
"utf-8" />
5 <title>BIP39 - Mnemonic Code
</title>
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" />
20 .form-control[readonly] {
33 background-color: orange;
37 border:
2px solid #
555;
39 border-bottom-left-radius:
20px
20px;
40 border-bottom-right-radius:
20px
20px;
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);
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
61 <div class=
"container">
63 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
66 <div class=
"col-md-12">
68 <form class=
"form-horizontal" role=
"form">
69 <div class=
"col-sm-2"></div>
70 <div class=
"col-sm-10">
71 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)
</p>
72 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
74 <div class=
"form-group">
75 <label class=
"col-sm-2 control-label"></label>
76 <div class=
"col-sm-10">
77 <div class=
"form-inline">
78 <div class=
"input-group-inline">
79 <button class=
"btn generate">Generate
</button>
81 <select id=
"strength" class=
"strength form-control">
82 <option value=
"3">3</option>
83 <option value=
"6">6</option>
84 <option value=
"9">9</option>
85 <option value=
"12">12</option>
86 <option value=
"15" selected
>15</option>
87 <option value=
"18">18</option>
88 <option value=
"21">21</option>
89 <option value=
"24">24</option>
91 word mnemonic, or enter your own below.
96 <div class=
"form-group">
97 <label class=
"col-sm-2 control-label"></label>
98 <div class=
"col-sm-10 languages">
99 <a href=
"#english">English
</a>
100 <a href=
"#japanese" title=
"Japanese">日本語
</a>
101 <a href=
"#spanish" title=
"Spanish">Español
</a>
102 <a href=
"#chinese_simplified" title=
"Chinese (Simplified)">中文(简体)
</a>
103 <a href=
"#chinese_traditional" title=
"Chinese (Traditional)">中文(繁體)
</a>
104 <a href=
"#french" title=
"French">Français
</a>
105 <a href=
"#italian" title=
"Italian">Italiano
</a>
108 <div class=
"form-group">
109 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
110 <div class=
"col-sm-10">
111 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
114 <div class=
"form-group">
115 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
116 <div class=
"col-sm-10">
117 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
120 <div class=
"form-group">
121 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
122 <div class=
"col-sm-10">
123 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
126 <div class=
"form-group">
127 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
128 <div class=
"col-sm-10">
129 <select id=
"network-phrase" class=
"network form-control">
130 <!-- populated by javascript -->
134 <div class=
"form-group">
135 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
136 <div class=
"col-sm-10">
137 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
147 <div class=
"col-md-12">
148 <h2>Derivation Path
</h2>
149 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
150 <li id=
"bip44-tab" class=
"active">
151 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
154 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
157 <div class=
"derivation-type tab-content">
158 <div id=
"bip44" class=
"tab-pane active">
159 <form class=
"form-horizontal" role=
"form">
161 <div class=
"col-sm-2"></div>
162 <div class=
"col-sm-10">
163 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
165 <div class=
"form-group">
166 <label for=
"purpose" class=
"col-sm-2 control-label">
167 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
169 <div class=
"col-sm-10">
170 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
173 <div class=
"form-group">
174 <label for=
"coin" class=
"col-sm-2 control-label">
175 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
177 <div class=
"col-sm-10">
178 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
181 <div class=
"form-group">
182 <label for=
"account" class=
"col-sm-2 control-label">
183 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
185 <div class=
"col-sm-10">
186 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
189 <div class=
"form-group">
190 <label for=
"change" class=
"col-sm-2 control-label">
191 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
193 <div class=
"col-sm-10">
194 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
197 <div class=
"form-group">
198 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
199 <div class=
"col-sm-10">
200 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
205 <div id=
"bip32" class=
"tab-pane">
206 <form class=
"form-horizontal" role=
"form">
208 <div class=
"col-sm-2"></div>
209 <div class=
"col-sm-10">
210 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
212 <div class=
"form-group">
213 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
214 <div class=
"col-sm-10">
215 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
218 <div class=
"form-group">
219 <div class=
"col-sm-2"></div>
220 <label class=
"col-sm-10">
221 <input class=
"hardened-addresses" type=
"checkbox">
222 Use hardened addresses
225 <div class=
"form-group">
226 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
227 <div class=
"col-sm-10">
228 <p class=
"form-control no-border">
229 Use path
<code>m/
0'/
0</code>.
230 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
234 <div class=
"form-group">
235 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
236 <div class=
"col-sm-10">
237 <p class=
"form-control no-border">
238 Use path
<code>m/
44'/
0'/
0'/
0</code>.
239 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
243 <div class=
"form-group">
244 <label for=
"core-path" class=
"col-sm-2 control-label">Bitcoin Core
</label>
245 <div class=
"col-sm-10">
246 <p class=
"form-control no-border">
247 Use path
<code>m/
0'/
0'
</code> with hardened addresses.
248 For more info see the
<a href=
"https://github.com/bitcoin/bitcoin/pull/8035" target=
"_blank">Bitcoin Core BIP32 implementation
</a>
252 <div class=
"form-group">
253 <label class=
"col-sm-2 control-label">Block Explorers
</label>
254 <div class=
"col-sm-10">
255 <p class=
"form-control no-border">
256 Use path
<code>m/
44'/
0'/
0'
</code>.
257 Only enter the
<code>xpub
</code> extended key into block explorer search fields, never the
<code>xpriv
</code> key.
264 <form class=
"form-horizontal" role=
"form">
265 <div class=
"form-group">
266 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
267 <div class=
"col-sm-10">
268 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
271 <div class=
"form-group">
272 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
273 <div class=
"col-sm-10">
274 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
284 <div class=
"col-md-12">
285 <h2>Derived Addresses
</h2>
286 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
287 <table class=
"table table-striped">
290 <div class=
"input-group">
292 <button class=
"index-toggle">Toggle
</button>
296 <div class=
"input-group">
298 <button class=
"address-toggle">Toggle
</button>
302 <div class=
"input-group">
303 Public Key
304 <button class=
"public-key-toggle">Toggle
</button>
308 <div class=
"input-group">
309 Private Key
310 <button class=
"private-key-toggle">Toggle
</button>
314 <tbody class=
"addresses">
315 <tr><td> </td><td> </td><td> </td></tr>
316 <tr><td> </td><td> </td><td> </td></tr>
317 <tr><td> </td><td> </td><td> </td></tr>
318 <tr><td> </td><td> </td><td> </td></tr>
319 <tr><td> </td><td> </td><td> </td></tr>
324 <span>Show next
</button>
325 <input type=
"number" class=
"rows-to-add" value=
"20">
326 <button class=
"more">Show
</button>
331 <div class=
"col-md-12">
333 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
336 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
338 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
341 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
343 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
345 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
348 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
350 <h3>Private Keys
</h3>
353 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
354 but be careful - it can be easy to make mistakes if you
355 don't know what you're doing
363 <div class=
"col-md-12">
365 <h2>Offline Usage
</h2>
368 You can use this tool without having to be online.
371 In your browser, select file save-as, and save this page
375 Double-click that file to open it in a browser
376 on any offline computer.
379 Alternatively, download it from
380 <a href=
"https://github.com/iancoleman/bip39">
381 https://github.com/iancoleman/bip39
390 <div class=
"col-md-12">
392 <h2>This project is
100% open-source code
</h2>
395 <span>Get the source code at -
</span>
396 <a href=
"https://github.com/iancoleman/bip39" target=
"_blank">
397 https://github.com/iancoleman/bip39
404 <span>BitcoinJS -
</span>
405 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
406 https://github.com/bitcoinjs/bitcoinjs-lib
411 <span>jsBIP39 -
</span>
412 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
413 https://github.com/iancoleman/jsbip39
419 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
420 https://github.com/bitwiseshiftleft/sjcl
425 <span>jQuery -
</span>
426 <a href=
"https://jquery.com/" target=
"_blank">
432 <span>Twitter Bootstrap -
</span>
433 <a href=
"http://getbootstrap.com/" target=
"_blank">
434 http://getbootstrap.com/
443 <div class=
"feedback-container">
444 <div class=
"feedback">Loading...
</div>
447 <script type=
"text/template" id=
"address-row-template">
449 <td class=
"index"><span></span></td>
450 <td class=
"address"><span></span></td>
451 <td class=
"pubkey"><span></span></td>
452 <td class=
"privkey"><span></span></td>
455 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
456 !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)
457 },_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))
458 },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});
461 * Bootstrap v3.2.0 (http://getbootstrap.com)
462 * Copyright 2011-2014 Twitter, Inc.
463 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
465 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>
466 <script>(function() {
470 * Extend an Object with another Object's properties.
472 * The source objects are specified as additional arguments.
474 * @param dst Object the object to extend.
476 * @return Object the final object.
478 var _extend = function(dst) {
479 var sources = Array.prototype.slice.call(arguments,
1);
480 for (var i=
0; i
<sources.length; ++i) {
481 var src = sources[i];
483 if (src.hasOwnProperty(p)) dst[p] = src[p];
491 * Defer execution of given function.
492 * @param {Function} func
494 var _defer = function(func) {
495 if (typeof setImmediate === 'function') {
496 return setImmediate(func);
498 return setTimeout(func,
0);
503 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
507 * Calculate levenshtein distance of the two strings.
509 * @param str1 String the first string.
510 * @param str2 String the second string.
511 * @return Integer the levenshtein distance (
0 and above).
513 get: function(str1, str2) {
515 if (str1 === str2) return
0;
516 if (str1.length ===
0) return str2.length;
517 if (str2.length ===
0) return str1.length;
520 var prevRow = new Array(str2.length +
1),
521 curCol, nextCol, i, j, tmp;
523 // initialise previous row
524 for (i=
0; i
<prevRow.length; ++i) {
528 // calculate current row distance from previous row
529 for (i=
0; i
<str1.length; ++i) {
532 for (j=
0; j
<str2.length; ++j) {
536 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
543 tmp = prevRow[j +
1] +
1;
548 // copy current col value into previous (in preparation for next iteration)
552 // copy last col value into previous (in preparation for next iteration)
553 prevRow[j] = nextCol;
560 * Asynchronously calculate levenshtein distance of the two strings.
562 * @param str1 String the first string.
563 * @param str2 String the second string.
564 * @param cb Function callback function with signature: function(Error err, int distance)
565 * @param [options] Object additional options.
566 * @param [options.progress] Function progress callback with signature: function(percentComplete)
568 getAsync: function(str1, str2, cb, options) {
569 options = _extend({}, {
574 if (str1 === str2) return cb(null,
0);
575 if (str1.length ===
0) return cb(null, str2.length);
576 if (str2.length ===
0) return cb(null, str1.length);
579 var prevRow = new Array(str2.length +
1),
582 startTime, currentTime;
584 // initialise previous row
585 for (i=
0; i
<prevRow.length; ++i) {
593 var __calculate = function() {
595 startTime = new Date().valueOf();
596 currentTime = startTime;
598 // keep going until one second has elapsed
599 while (currentTime - startTime <
1000) {
600 // reached end of current row?
601 if (str2.length <= (++j)) {
602 // copy current into previous (in preparation for next iteration)
603 prevRow[j] = nextCol;
605 // if already done all chars
606 if (str1.length <= (++i)) {
607 return cb(null, nextCol);
609 // else if we have more left to do
620 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
627 tmp = prevRow[j +
1] +
1;
632 // copy current into previous (in preparation for next iteration)
636 currentTime = new Date().valueOf();
639 // send a progress update?
640 if (null !== options.progress) {
642 options.progress.call(null, (i *
100.0/ str1.length));
644 return cb('Progress callback: ' + err.toString());
658 if (typeof define !== "undefined" && define !== null && define.amd) {
664 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
665 module.exports = Levenshtein;
668 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
669 self.Levenshtein = Levenshtein;
671 // browser main thread
672 else if (typeof window !== "undefined" && window !== null) {
673 window.Levenshtein = Levenshtein;
678 <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){
679 // (public) Constructor
680 function BigInteger(a, b, c) {
681 if (!(this instanceof BigInteger))
682 return new BigInteger(a, b, c)
685 if (
"number" == typeof a) this.fromNumber(a, b, c)
686 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
687 else this.fromString(a, b)
691 var proto = BigInteger.prototype
693 // duck-typed isBigInteger
694 proto.__bigi = require('../package.json').version
695 BigInteger.isBigInteger = function (obj, check_ver) {
696 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
702 // am: Compute w_j += (x*this_i), propagate carries,
703 // c is initial carry, returns final carry.
704 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
705 // We need to select the fastest one that works in this environment.
707 // am1: use a single mult and divide to get the high bits,
708 // max digit bits should be
26 because
709 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
710 function am1(i, x, w, j, c, n) {
712 var v = x * this[i++] + w[j] + c
713 c = Math.floor(v /
0x4000000)
714 w[j++] = v &
0x3ffffff
718 // am2 avoids a big mult-and-extract completely.
719 // Max digit bits should be <=
30 because we do bitwise ops
720 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
721 function am2(i, x, w, j, c, n) {
725 var l = this[i] &
0x7fff
726 var h = this[i++]
>> 15
727 var m = xh * l + h * xl
728 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
729 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
730 w[j++] = l &
0x3fffffff
734 // Alternately, set max digit bits to
28 since some
735 // browsers slow down when dealing with
32-bit numbers.
736 function am3(i, x, w, j, c, n) {
740 var l = this[i] &
0x3fff
741 var h = this[i++]
>> 14
742 var m = xh * l + h * xl
743 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
744 c = (l
>> 28) + (m
>> 14) + xh * h
745 w[j++] = l &
0xfffffff
751 BigInteger.prototype.am = am1
754 BigInteger.prototype.DB = dbits
755 BigInteger.prototype.DM = ((
1 << dbits) -
1)
756 var DV = BigInteger.prototype.DV = (
1 << dbits)
759 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
760 BigInteger.prototype.F1 = BI_FP - dbits
761 BigInteger.prototype.F2 =
2 * dbits - BI_FP
764 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
765 var BI_RC = new Array()
767 rr =
"0".charCodeAt(
0)
768 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
769 rr =
"a".charCodeAt(
0)
770 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
771 rr =
"A".charCodeAt(
0)
772 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
774 function int2char(n) {
775 return BI_RM.charAt(n)
778 function intAt(s, i) {
779 var c = BI_RC[s.charCodeAt(i)]
780 return (c == null) ? -
1 : c
783 // (protected) copy this to r
784 function bnpCopyTo(r) {
785 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
790 // (protected) set from integer value x, -DV <= x < DV
791 function bnpFromInt(x) {
793 this.s = (x <
0) ? -
1 :
0
794 if (x
> 0) this[
0] = x
795 else if (x < -
1) this[
0] = x + DV
799 // return bigint initialized to value
801 var r = new BigInteger()
806 // (protected) set from string and radix
807 function bnpFromString(s, b) {
812 else if (b ==
8) k =
3
813 else if (b ==
256) k =
8; // byte array
814 else if (b ==
2) k =
1
815 else if (b ==
32) k =
5
816 else if (b ==
4) k =
2
827 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
829 if (s.charAt(i) == "-") mi = true
835 else if (sh + k
> self.DB) {
836 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
837 self[self.t++] = (x
>> (self.DB - sh))
839 self[self.t -
1] |= x << sh
841 if (sh
>= self.DB) sh -= self.DB
843 if (k ==
8 && (s[
0] &
0x80) !=
0) {
845 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
848 if (mi) BigInteger.ZERO.subTo(self, self)
851 // (protected) clamp off excess high words
852 function bnpClamp() {
853 var c = this.s & this.DM
854 while (this.t
> 0 && this[this.t -
1] == c)--this.t
857 // (public) return string representation in given radix
858 function bnToString(b) {
860 if (self.s <
0) return
"-" + self.negate()
864 else if (b ==
8) k =
3
865 else if (b ==
2) k =
1
866 else if (b ==
32) k =
5
867 else if (b ==
4) k =
2
868 else return self.toRadix(b)
869 var km = (
1 << k) -
1,
873 var p = self.DB - (i * self.DB) % k
875 if (p < self.DB && (d = self[i]
>> p)
> 0) {
881 d = (self[i] & ((
1 << p) -
1)) << (k - p)
882 d |= self[--i]
>> (p += self.DB - k)
884 d = (self[i]
>> (p -= k)) & km
891 if (m) r += int2char(d)
898 function bnNegate() {
899 var r = new BigInteger()
900 BigInteger.ZERO.subTo(this, r)
906 return (this.s <
0) ? this.negate() : this
909 // (public) return + if this
> a, - if this < a,
0 if equal
910 function bnCompareTo(a) {
915 if (r !=
0) return (this.s <
0) ? -r : r
917 if ((r = this[i] - a[i]) !=
0) return r
921 // returns bit length of the integer x
925 if ((t = x
>>> 16) !=
0) {
929 if ((t = x
>> 8) !=
0) {
933 if ((t = x
>> 4) !=
0) {
937 if ((t = x
>> 2) !=
0) {
941 if ((t = x
>> 1) !=
0) {
948 // (public) return the number of bits in
"this"
949 function bnBitLength() {
950 if (this.t <=
0) return
0
951 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
954 // (public) return the number of bytes in
"this"
955 function bnByteLength() {
956 return this.bitLength()
>> 3
959 // (protected) r = this << n*DB
960 function bnpDLShiftTo(n, r) {
962 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
963 for (i = n -
1; i
>=
0; --i) r[i] =
0
968 // (protected) r = this
>> n*DB
969 function bnpDRShiftTo(n, r) {
970 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
971 r.t = Math.max(this.t - n,
0)
975 // (protected) r = this << n
976 function bnpLShiftTo(n, r) {
979 var cbs = self.DB - bs
980 var bm = (
1 << cbs) -
1
981 var ds = Math.floor(n / self.DB),
982 c = (self.s << bs) & self.DM,
984 for (i = self.t -
1; i
>=
0; --i) {
985 r[i + ds +
1] = (self[i]
>> cbs) | c
986 c = (self[i] & bm) << bs
988 for (i = ds -
1; i
>=
0; --i) r[i] =
0
990 r.t = self.t + ds +
1
995 // (protected) r = this
>> n
996 function bnpRShiftTo(n, r) {
999 var ds = Math.floor(n / self.DB)
1004 var bs = n % self.DB
1005 var cbs = self.DB - bs
1006 var bm = (
1 << bs) -
1
1007 r[
0] = self[ds]
>> bs
1008 for (var i = ds +
1; i < self.t; ++i) {
1009 r[i - ds -
1] |= (self[i] & bm) << cbs
1010 r[i - ds] = self[i]
>> bs
1012 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
1017 // (protected) r = this - a
1018 function bnpSubTo(a, r) {
1022 m = Math.min(a.t, self.t)
1025 r[i++] = c & self.DM
1030 while (i < self.t) {
1032 r[i++] = c & self.DM
1040 r[i++] = c & self.DM
1045 r.s = (c <
0) ? -
1 :
0
1046 if (c < -
1) r[i++] = self.DV + c
1047 else if (c
> 0) r[i++] = c
1052 // (protected) r = this * a, r != this,a (HAC
14.12)
1053 //
"this" should be the larger one if appropriate.
1054 function bnpMultiplyTo(a, r) {
1059 while (--i
>=
0) r[i] =
0
1060 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1063 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1066 // (protected) r = this^
2, r != this (HAC
14.16)
1067 function bnpSquareTo(r) {
1069 var i = r.t =
2 * x.t
1070 while (--i
>=
0) r[i] =
0
1071 for (i =
0; i < x.t -
1; ++i) {
1072 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1073 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1078 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1083 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1084 // r != q, this != m. q or r may be null.
1085 function bnpDivRemTo(m, q, r) {
1088 if (pm.t <=
0) return
1091 if (q != null) q.fromInt(
0)
1092 if (r != null) self.copyTo(r)
1095 if (r == null) r = new BigInteger()
1096 var y = new BigInteger(),
1099 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1110 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1111 var d1 = self.FV / yt,
1112 d2 = (
1 << self.F1) / yt,
1116 t = (q == null) ? new BigInteger() : q
1118 if (r.compareTo(t)
>=
0) {
1122 BigInteger.ONE.dlShiftTo(ys, t)
1123 t.subTo(y, y); // "negative" y so we can replace sub with am later
1124 while (y.t < ys) y[y.t++] =
0
1126 // Estimate quotient digit
1127 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1128 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1131 while (r[i] < --qd) r.subTo(t, r)
1136 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1140 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1141 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1144 // (public) this mod a
1146 var r = new BigInteger()
1148 .divRemTo(a, null, r)
1149 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1153 // Modular reduction using
"classic" algorithm
1154 function Classic(m) {
1158 function cConvert(x) {
1159 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1163 function cRevert(x) {
1167 function cReduce(x) {
1168 x.divRemTo(this.m, null, x)
1171 function cMulTo(x, y, r) {
1176 function cSqrTo(x, r) {
1181 Classic.prototype.convert = cConvert
1182 Classic.prototype.revert = cRevert
1183 Classic.prototype.reduce = cReduce
1184 Classic.prototype.mulTo = cMulTo
1185 Classic.prototype.sqrTo = cSqrTo
1187 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1191 // xy(
2-xy) = (
1+km)(
1-km)
1192 // x[y(
2-xy)] =
1-k^
2m^
2
1193 // x[y(
2-xy)] ==
1 (mod m^
2)
1194 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1195 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1196 // JS multiply "overflows" differently from C/C++, so care is needed here.
1197 function bnpInvDigit() {
1198 if (this.t <
1) return
0
1200 if ((x &
1) ==
0) return
0
1201 var y = x &
3; // y ==
1/x mod
2^
2
1202 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1203 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1204 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1205 // last step - calculate inverse mod DV directly
1206 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1207 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1208 // we really want the negative inverse, and -DV < y < DV
1209 return (y
> 0) ? this.DV - y : -y
1212 // Montgomery reduction
1213 function Montgomery(m) {
1215 this.mp = m.invDigit()
1216 this.mpl = this.mp &
0x7fff
1217 this.mph = this.mp
>> 15
1218 this.um = (
1 << (m.DB -
15)) -
1
1223 function montConvert(x) {
1224 var r = new BigInteger()
1226 .dlShiftTo(this.m.t, r)
1227 r.divRemTo(this.m, null, r)
1228 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1233 function montRevert(x) {
1234 var r = new BigInteger()
1240 // x = x/R mod m (HAC
14.32)
1241 function montReduce(x) {
1242 while (x.t <= this.mt2) // pad x so am has enough room later
1244 for (var i =
0; i < this.m.t; ++i) {
1245 // faster way of calculating u0 = x[i]*mp mod DV
1246 var j = x[i] &
0x7fff
1247 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1248 // use am to combine the multiply-shift-add into one call
1250 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1252 while (x[j]
>= x.DV) {
1258 x.drShiftTo(this.m.t, x)
1259 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1262 // r = "x^
2/R mod m"; x != r
1263 function montSqrTo(x, r) {
1268 // r = "xy/R mod m"; x,y != r
1269 function montMulTo(x, y, r) {
1274 Montgomery.prototype.convert = montConvert
1275 Montgomery.prototype.revert = montRevert
1276 Montgomery.prototype.reduce = montReduce
1277 Montgomery.prototype.mulTo = montMulTo
1278 Montgomery.prototype.sqrTo = montSqrTo
1280 // (protected) true iff this is even
1281 function bnpIsEven() {
1282 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1285 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1286 function bnpExp(e, z) {
1287 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1288 var r = new BigInteger(),
1289 r2 = new BigInteger(),
1290 g = z.convert(this),
1295 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1305 // (public) this^e % m,
0 <= e <
2^
32
1306 function bnModPowInt(e, m) {
1308 if (e <
256 || m.isEven()) z = new Classic(m)
1309 else z = new Montgomery(m)
1310 return this.exp(e, z)
1314 proto.copyTo = bnpCopyTo
1315 proto.fromInt = bnpFromInt
1316 proto.fromString = bnpFromString
1317 proto.clamp = bnpClamp
1318 proto.dlShiftTo = bnpDLShiftTo
1319 proto.drShiftTo = bnpDRShiftTo
1320 proto.lShiftTo = bnpLShiftTo
1321 proto.rShiftTo = bnpRShiftTo
1322 proto.subTo = bnpSubTo
1323 proto.multiplyTo = bnpMultiplyTo
1324 proto.squareTo = bnpSquareTo
1325 proto.divRemTo = bnpDivRemTo
1326 proto.invDigit = bnpInvDigit
1327 proto.isEven = bnpIsEven
1331 proto.toString = bnToString
1332 proto.negate = bnNegate
1334 proto.compareTo = bnCompareTo
1335 proto.bitLength = bnBitLength
1336 proto.byteLength = bnByteLength
1338 proto.modPowInt = bnModPowInt
1341 function bnClone() {
1342 var r = new BigInteger()
1347 // (public) return value as integer
1348 function bnIntValue() {
1350 if (this.t ==
1) return this[
0] - this.DV
1351 else if (this.t ==
0) return -
1
1352 } else if (this.t ==
1) return this[
0]
1353 else if (this.t ==
0) return
0
1354 // assumes
16 < DB <
32
1355 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1358 // (public) return value as byte
1359 function bnByteValue() {
1360 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1363 // (public) return value as short (assumes DB
>=
16)
1364 function bnShortValue() {
1365 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1368 // (protected) return x s.t. r^x < DV
1369 function bnpChunkSize(r) {
1370 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1373 // (public)
0 if this ==
0,
1 if this
> 0
1374 function bnSigNum() {
1375 if (this.s <
0) return -
1
1376 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1380 // (protected) convert to radix string
1381 function bnpToRadix(b) {
1382 if (b == null) b =
10
1383 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1384 var cs = this.chunkSize(b)
1385 var a = Math.pow(b, cs)
1387 y = new BigInteger(),
1388 z = new BigInteger(),
1390 this.divRemTo(d, y, z)
1391 while (y.signum()
> 0) {
1392 r = (a + z.intValue())
1401 // (protected) convert from radix string
1402 function bnpFromRadix(s, b) {
1405 if (b == null) b =
10
1406 var cs = self.chunkSize(b)
1407 var d = Math.pow(b, cs),
1411 for (var i =
0; i < s.length; ++i) {
1414 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1420 self.dAddOffset(w,
0)
1426 self.dMultiply(Math.pow(b, j))
1427 self.dAddOffset(w,
0)
1429 if (mi) BigInteger.ZERO.subTo(self, self)
1432 // (protected) alternate constructor
1433 function bnpFromNumber(a, b, c) {
1435 if (
"number" == typeof b) {
1436 // new BigInteger(int,int,RNG)
1437 if (a <
2) self.fromInt(
1)
1439 self.fromNumber(a, c)
1440 if (!self.testBit(a -
1)) // force MSB set
1441 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1442 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1443 while (!self.isProbablePrime(b)) {
1444 self.dAddOffset(
2,
0)
1445 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1449 // new BigInteger(int,RNG)
1450 var x = new Array(),
1452 x.length = (a
>> 3) +
1
1454 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1456 self.fromString(x,
256)
1460 // (public) convert to bigendian byte array
1461 function bnToByteArray() {
1466 var p = self.DB - (i * self.DB) %
8,
1469 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1470 r[k++] = d | (self.s << (self.DB - p))
1473 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1474 d |= self[--i]
>> (p += self.DB -
8)
1476 d = (self[i]
>> (p -=
8)) &
0xff
1482 if ((d &
0x80) !=
0) d |= -
256
1483 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1484 if (k
> 0 || d != self.s) r[k++] = d
1490 function bnEquals(a) {
1491 return (this.compareTo(a) ==
0)
1495 return (this.compareTo(a) <
0) ? this : a
1499 return (this.compareTo(a)
> 0) ? this : a
1502 // (protected) r = this op a (bitwise)
1503 function bnpBitwiseTo(a, op, r) {
1505 var i, f, m = Math.min(a.t, self.t)
1506 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1509 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1512 f = self.s & self.DM
1513 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1516 r.s = op(self.s, a.s)
1520 // (public) this & a
1521 function op_and(x, y) {
1526 var r = new BigInteger()
1527 this.bitwiseTo(a, op_and, r)
1531 // (public) this | a
1532 function op_or(x, y) {
1537 var r = new BigInteger()
1538 this.bitwiseTo(a, op_or, r)
1542 // (public) this ^ a
1543 function op_xor(x, y) {
1548 var r = new BigInteger()
1549 this.bitwiseTo(a, op_xor, r)
1553 // (public) this & ~a
1554 function op_andnot(x, y) {
1558 function bnAndNot(a) {
1559 var r = new BigInteger()
1560 this.bitwiseTo(a, op_andnot, r)
1566 var r = new BigInteger()
1567 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1573 // (public) this << n
1574 function bnShiftLeft(n) {
1575 var r = new BigInteger()
1576 if (n <
0) this.rShiftTo(-n, r)
1577 else this.lShiftTo(n, r)
1581 // (public) this
>> n
1582 function bnShiftRight(n) {
1583 var r = new BigInteger()
1584 if (n <
0) this.lShiftTo(-n, r)
1585 else this.rShiftTo(n, r)
1589 // return index of lowest
1-bit in x, x <
2^
31
1591 if (x ==
0) return -
1
1593 if ((x &
0xffff) ==
0) {
1597 if ((x &
0xff) ==
0) {
1601 if ((x &
0xf) ==
0) {
1609 if ((x &
1) ==
0)++r
1613 // (public) returns index of lowest
1-bit (or -
1 if none)
1614 function bnGetLowestSetBit() {
1615 for (var i =
0; i < this.t; ++i)
1616 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1617 if (this.s <
0) return this.t * this.DB
1621 // return number of
1 bits in x
1631 // (public) return number of set bits
1632 function bnBitCount() {
1634 x = this.s & this.DM
1635 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1639 // (public) true iff nth bit is set
1640 function bnTestBit(n) {
1641 var j = Math.floor(n / this.DB)
1642 if (j
>= this.t) return (this.s !=
0)
1643 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1646 // (protected) this op (
1<
<n)
1647 function bnpChangeBit(n, op) {
1648 var r = BigInteger.ONE.shiftLeft(n)
1649 this.bitwiseTo(r, op, r)
1653 // (public) this | (
1<
<n)
1654 function bnSetBit(n) {
1655 return this.changeBit(n, op_or)
1658 // (public) this & ~(
1<
<n)
1659 function bnClearBit(n) {
1660 return this.changeBit(n, op_andnot)
1663 // (public) this ^ (
1<
<n)
1664 function bnFlipBit(n) {
1665 return this.changeBit(n, op_xor)
1668 // (protected) r = this + a
1669 function bnpAddTo(a, r) {
1674 m = Math.min(a.t, self.t)
1677 r[i++] = c & self.DM
1682 while (i < self.t) {
1684 r[i++] = c & self.DM
1692 r[i++] = c & self.DM
1697 r.s = (c <
0) ? -
1 :
0
1698 if (c
> 0) r[i++] = c
1699 else if (c < -
1) r[i++] = self.DV + c
1704 // (public) this + a
1706 var r = new BigInteger()
1711 // (public) this - a
1712 function bnSubtract(a) {
1713 var r = new BigInteger()
1718 // (public) this * a
1719 function bnMultiply(a) {
1720 var r = new BigInteger()
1721 this.multiplyTo(a, r)
1726 function bnSquare() {
1727 var r = new BigInteger()
1732 // (public) this / a
1733 function bnDivide(a) {
1734 var r = new BigInteger()
1735 this.divRemTo(a, r, null)
1739 // (public) this % a
1740 function bnRemainder(a) {
1741 var r = new BigInteger()
1742 this.divRemTo(a, null, r)
1746 // (public) [this/a,this%a]
1747 function bnDivideAndRemainder(a) {
1748 var q = new BigInteger(),
1749 r = new BigInteger()
1750 this.divRemTo(a, q, r)
1751 return new Array(q, r)
1754 // (protected) this *= n, this
>=
0,
1 < n < DV
1755 function bnpDMultiply(n) {
1756 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1761 // (protected) this += n << w words, this
>=
0
1762 function bnpDAddOffset(n, w) {
1764 while (this.t <= w) this[this.t++] =
0
1766 while (this[w]
>= this.DV) {
1768 if (++w
>= this.t) this[this.t++] =
0
1774 function NullExp() {}
1780 function nMulTo(x, y, r) {
1784 function nSqrTo(x, r) {
1788 NullExp.prototype.convert = nNop
1789 NullExp.prototype.revert = nNop
1790 NullExp.prototype.mulTo = nMulTo
1791 NullExp.prototype.sqrTo = nSqrTo
1795 return this.exp(e, new NullExp())
1798 // (protected) r = lower n words of "this * a", a.t <= n
1799 // "this" should be the larger one if appropriate.
1800 function bnpMultiplyLowerTo(a, n, r) {
1801 var i = Math.min(this.t + a.t, n)
1802 r.s =
0; // assumes a,this
>=
0
1804 while (i
> 0) r[--i] =
0
1806 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1807 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1811 // (protected) r =
"this * a" without lower n words, n
> 0
1812 //
"this" should be the larger one if appropriate.
1813 function bnpMultiplyUpperTo(a, n, r) {
1815 var i = r.t = this.t + a.t - n
1816 r.s =
0; // assumes a,this
>=
0
1817 while (--i
>=
0) r[i] =
0
1818 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1819 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1824 // Barrett modular reduction
1825 function Barrett(m) {
1827 this.r2 = new BigInteger()
1828 this.q3 = new BigInteger()
1829 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1830 this.mu = this.r2.divide(m)
1834 function barrettConvert(x) {
1835 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1836 else if (x.compareTo(this.m) <
0) return x
1838 var r = new BigInteger()
1845 function barrettRevert(x) {
1849 // x = x mod m (HAC
14.42)
1850 function barrettReduce(x) {
1852 x.drShiftTo(self.m.t -
1, self.r2)
1853 if (x.t
> self.m.t +
1) {
1857 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1858 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1859 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1861 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1864 // r = x^
2 mod m; x != r
1865 function barrettSqrTo(x, r) {
1870 // r = x*y mod m; x,y != r
1871 function barrettMulTo(x, y, r) {
1876 Barrett.prototype.convert = barrettConvert
1877 Barrett.prototype.revert = barrettRevert
1878 Barrett.prototype.reduce = barrettReduce
1879 Barrett.prototype.mulTo = barrettMulTo
1880 Barrett.prototype.sqrTo = barrettSqrTo
1882 // (public) this^e % m (HAC
14.85)
1883 function bnModPow(e, m) {
1884 var i = e.bitLength(),
1887 if (i <=
0) return r
1888 else if (i <
18) k =
1
1889 else if (i <
48) k =
3
1890 else if (i <
144) k =
4
1891 else if (i <
768) k =
5
1895 else if (m.isEven())
1898 z = new Montgomery(m)
1901 var g = new Array(),
1905 g[
1] = z.convert(this)
1907 var g2 = new BigInteger()
1910 g[n] = new BigInteger()
1911 z.mulTo(g2, g[n -
2], g[n])
1918 r2 = new BigInteger(),
1922 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1924 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1925 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1929 while ((w &
1) ==
0) {
1937 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1946 if (n
> 0) z.sqrTo(r, r2)
1952 z.mulTo(r2, g[w], r)
1955 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1969 // (public) gcd(this,a) (HAC
14.54)
1971 var x = (this.s <
0) ? this.negate() : this.clone()
1972 var y = (a.s <
0) ? a.negate() : a.clone()
1973 if (x.compareTo(y) <
0) {
1978 var i = x.getLowestSetBit(),
1979 g = y.getLowestSetBit()
1986 while (x.signum()
> 0) {
1987 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1988 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1989 if (x.compareTo(y)
>=
0) {
1997 if (g
> 0) y.lShiftTo(g, y)
2001 // (protected) this % n, n <
2^
26
2002 function bnpModInt(n) {
2003 if (n <=
0) return
0
2004 var d = this.DV % n,
2005 r = (this.s <
0) ? n -
1 :
0
2007 if (d ==
0) r = this[
0] % n
2009 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
2013 // (public)
1/this % m (HAC
14.61)
2014 function bnModInverse(m) {
2016 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
2023 while (u.signum() !=
0) {
2024 while (u.isEven()) {
2027 if (!a.isEven() || !b.isEven()) {
2032 } else if (!b.isEven()) b.subTo(m, b)
2035 while (v.isEven()) {
2038 if (!c.isEven() || !d.isEven()) {
2043 } else if (!d.isEven()) d.subTo(m, d)
2046 if (u.compareTo(v)
>=
0) {
2048 if (ac) a.subTo(c, a)
2052 if (ac) c.subTo(a, c)
2056 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2057 if (d.compareTo(m)
>=
0) return d.subtract(m)
2058 if (d.signum() <
0) d.addTo(m, d)
2060 if (d.signum() <
0) return d.add(m)
2065 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2066 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2067 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2068 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2069 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2070 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2071 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2072 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2073 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2074 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2075 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2078 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2080 // (public) test primality with certainty
>=
1-
.5^t
2081 function bnIsProbablePrime(t) {
2082 var i, x = this.abs()
2083 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2084 for (i =
0; i < lowprimes.length; ++i)
2085 if (x[
0] == lowprimes[i]) return true
2088 if (x.isEven()) return false
2090 while (i < lowprimes.length) {
2091 var m = lowprimes[i],
2093 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2095 while (i < j) if (m % lowprimes[i++] ==
0) return false
2097 return x.millerRabin(t)
2100 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2101 function bnpMillerRabin(t) {
2102 var n1 = this.subtract(BigInteger.ONE)
2103 var k = n1.getLowestSetBit()
2104 if (k <=
0) return false
2105 var r = n1.shiftRight(k)
2107 if (t
> lowprimes.length) t = lowprimes.length
2108 var a = new BigInteger(null)
2110 for (var i =
0; i < t; ++i) {
2112 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2113 if (bases.indexOf(j) == -
1) break
2117 var y = a.modPow(r, this)
2118 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2120 while (j++ < k && y.compareTo(n1) !=
0) {
2121 y = y.modPowInt(
2, this)
2122 if (y.compareTo(BigInteger.ONE) ==
0) return false
2124 if (y.compareTo(n1) !=
0) return false
2131 proto.chunkSize = bnpChunkSize
2132 proto.toRadix = bnpToRadix
2133 proto.fromRadix = bnpFromRadix
2134 proto.fromNumber = bnpFromNumber
2135 proto.bitwiseTo = bnpBitwiseTo
2136 proto.changeBit = bnpChangeBit
2137 proto.addTo = bnpAddTo
2138 proto.dMultiply = bnpDMultiply
2139 proto.dAddOffset = bnpDAddOffset
2140 proto.multiplyLowerTo = bnpMultiplyLowerTo
2141 proto.multiplyUpperTo = bnpMultiplyUpperTo
2142 proto.modInt = bnpModInt
2143 proto.millerRabin = bnpMillerRabin
2146 proto.clone = bnClone
2147 proto.intValue = bnIntValue
2148 proto.byteValue = bnByteValue
2149 proto.shortValue = bnShortValue
2150 proto.signum = bnSigNum
2151 proto.toByteArray = bnToByteArray
2152 proto.equals = bnEquals
2158 proto.andNot = bnAndNot
2160 proto.shiftLeft = bnShiftLeft
2161 proto.shiftRight = bnShiftRight
2162 proto.getLowestSetBit = bnGetLowestSetBit
2163 proto.bitCount = bnBitCount
2164 proto.testBit = bnTestBit
2165 proto.setBit = bnSetBit
2166 proto.clearBit = bnClearBit
2167 proto.flipBit = bnFlipBit
2169 proto.subtract = bnSubtract
2170 proto.multiply = bnMultiply
2171 proto.divide = bnDivide
2172 proto.remainder = bnRemainder
2173 proto.divideAndRemainder = bnDivideAndRemainder
2174 proto.modPow = bnModPow
2175 proto.modInverse = bnModInverse
2178 proto.isProbablePrime = bnIsProbablePrime
2180 // JSBN-specific extension
2181 proto.square = bnSquare
2184 BigInteger.ZERO = nbv(
0)
2185 BigInteger.ONE = nbv(
1)
2186 BigInteger.valueOf = nbv
2188 module.exports = BigInteger
2190 },{"../package.json":
4}],
2:[function(require,module,exports){
2192 // FIXME: Kind of a weird way to throw exceptions, consider removing
2193 var assert = require('assert')
2194 var BigInteger = require('./bigi')
2197 * Turns a byte array into a big integer.
2199 * This function will interpret a byte array as a big integer in big
2202 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2203 // BigInteger expects a DER integer conformant byte array
2204 if (byteArray[
0] &
0x80) {
2205 return new BigInteger([
0].concat(byteArray))
2208 return new BigInteger(byteArray)
2212 * Returns a byte array representation of the big integer.
2214 * This returns the absolute of the contained value in big endian
2215 * form. A value of zero results in an empty array.
2217 BigInteger.prototype.toByteArrayUnsigned = function() {
2218 var byteArray = this.toByteArray()
2219 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2222 BigInteger.fromDERInteger = function(byteArray) {
2223 return new BigInteger(byteArray)
2227 * Converts BigInteger to a DER integer representation.
2229 * The format for this value uses the most significant bit as a sign
2230 * bit. If the most significant bit is already set and the integer is
2231 * positive, a
0x00 is prepended.
2247 * -
62300 =
> 0xff0ca4
2249 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2251 BigInteger.fromBuffer = function(buffer) {
2252 // BigInteger expects a DER integer conformant byte array
2253 if (buffer[
0] &
0x80) {
2254 var byteArray = Array.prototype.slice.call(buffer)
2256 return new BigInteger([
0].concat(byteArray))
2259 return new BigInteger(buffer)
2262 BigInteger.fromHex = function(hex) {
2263 if (hex === '') return BigInteger.ZERO
2265 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2266 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2267 return new BigInteger(hex,
16)
2270 BigInteger.prototype.toBuffer = function(size) {
2271 var byteArray = this.toByteArrayUnsigned()
2274 var padding = size - byteArray.length
2275 while (zeros.length < padding) zeros.push(
0)
2277 return new Buffer(zeros.concat(byteArray))
2280 BigInteger.prototype.toHex = function(size) {
2281 return this.toBuffer(size).toString('hex')
2284 }).call(this,require(
"buffer").Buffer)
2285 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2286 var BigInteger = require('./bigi')
2289 require('./convert')
2291 module.exports = BigInteger
2292 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2296 "description":
"Big integers.",
2314 "devDependencies": {
2317 "coveralls":
"^2.10.0",
2318 "istanbul":
"^0.2.11"
2321 "url":
"https://github.com/cryptocoinjs/bigi",
2324 "main":
"./lib/index.js",
2326 "test":
"_mocha -- test/*.js",
2327 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2329 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2330 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2334 "files":
"test/*.js",
2340 "safari/6.0..latest",
2341 "iphone/6.0..latest",
2342 "android-browser/4.2..latest"
2346 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2348 "homepage":
"https://github.com/cryptocoinjs/bigi",
2349 "_id":
"bigi@1.4.0",
2351 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2352 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2354 "_from":
"bigi@^1.4.0",
2355 "_npmVersion":
"1.4.3",
2358 "email":
"jprichardson@gmail.com"
2363 "email":
"jprichardson@gmail.com"
2366 "name":
"midnightlightning",
2367 "email":
"boydb@midnightdesign.ws"
2370 "name":
"sidazhang",
2371 "email":
"sidazhang89@gmail.com"
2375 "email":
"npm@shesek.info"
2379 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2380 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2383 },{}],
5:[function(require,module,exports){
2384 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2386 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2388 // Originally from narwhal.js (http://narwhaljs.org)
2389 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2391 // Permission is hereby granted, free of charge, to any person obtaining a copy
2392 // of this software and associated documentation files (the 'Software'), to
2393 // deal in the Software without restriction, including without limitation the
2394 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2395 // sell copies of the Software, and to permit persons to whom the Software is
2396 // furnished to do so, subject to the following conditions:
2398 // The above copyright notice and this permission notice shall be included in
2399 // all copies or substantial portions of the Software.
2401 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2402 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2403 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2404 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2405 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2406 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2408 // when used in node, this will actually load the util module we depend on
2409 // versus loading the builtin util module as happens otherwise
2410 // this is a bug in node module loading as far as I am concerned
2411 var util = require('util/');
2413 var pSlice = Array.prototype.slice;
2414 var hasOwn = Object.prototype.hasOwnProperty;
2416 //
1. The assert module provides functions that throw
2417 // AssertionError's when particular conditions are not met. The
2418 // assert module must conform to the following interface.
2420 var assert = module.exports = ok;
2422 //
2. The AssertionError is defined in assert.
2423 // new assert.AssertionError({ message: message,
2425 // expected: expected })
2427 assert.AssertionError = function AssertionError(options) {
2428 this.name = 'AssertionError';
2429 this.actual = options.actual;
2430 this.expected = options.expected;
2431 this.operator = options.operator;
2432 if (options.message) {
2433 this.message = options.message;
2434 this.generatedMessage = false;
2436 this.message = getMessage(this);
2437 this.generatedMessage = true;
2439 var stackStartFunction = options.stackStartFunction || fail;
2441 if (Error.captureStackTrace) {
2442 Error.captureStackTrace(this, stackStartFunction);
2445 // non v8 browsers so we can have a stacktrace
2446 var err = new Error();
2448 var out = err.stack;
2450 // try to strip useless frames
2451 var fn_name = stackStartFunction.name;
2452 var idx = out.indexOf('\n' + fn_name);
2454 // once we have located the function frame
2455 // we need to strip out everything before it (and its line)
2456 var next_line = out.indexOf('\n', idx +
1);
2457 out = out.substring(next_line +
1);
2465 // assert.AssertionError instanceof Error
2466 util.inherits(assert.AssertionError, Error);
2468 function replacer(key, value) {
2469 if (util.isUndefined(value)) {
2472 if (util.isNumber(value) && !isFinite(value)) {
2473 return value.toString();
2475 if (util.isFunction(value) || util.isRegExp(value)) {
2476 return value.toString();
2481 function truncate(s, n) {
2482 if (util.isString(s)) {
2483 return s.length < n ? s : s.slice(
0, n);
2489 function getMessage(self) {
2490 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2491 self.operator + ' ' +
2492 truncate(JSON.stringify(self.expected, replacer),
128);
2495 // At present only the three keys mentioned above are used and
2496 // understood by the spec. Implementations or sub modules can pass
2497 // other keys to the AssertionError's constructor - they will be
2500 //
3. All of the following functions must throw an AssertionError
2501 // when a corresponding condition is not met, with a message that
2502 // may be undefined if not provided. All assertion methods provide
2503 // both the actual and expected values to the assertion error for
2504 // display purposes.
2506 function fail(actual, expected, message, operator, stackStartFunction) {
2507 throw new assert.AssertionError({
2512 stackStartFunction: stackStartFunction
2516 // EXTENSION! allows for well behaved errors defined elsewhere.
2519 //
4. Pure assertion tests whether a value is truthy, as determined
2521 // assert.ok(guard, message_opt);
2522 // This statement is equivalent to assert.equal(true, !!guard,
2523 // message_opt);. To test strictly for the value true, use
2524 // assert.strictEqual(true, guard, message_opt);.
2526 function ok(value, message) {
2527 if (!value) fail(value, true, message, '==', assert.ok);
2531 //
5. The equality assertion tests shallow, coercive equality with
2533 // assert.equal(actual, expected, message_opt);
2535 assert.equal = function equal(actual, expected, message) {
2536 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2539 //
6. The non-equality assertion tests for whether two objects are not equal
2540 // with != assert.notEqual(actual, expected, message_opt);
2542 assert.notEqual = function notEqual(actual, expected, message) {
2543 if (actual == expected) {
2544 fail(actual, expected, message, '!=', assert.notEqual);
2548 //
7. The equivalence assertion tests a deep equality relation.
2549 // assert.deepEqual(actual, expected, message_opt);
2551 assert.deepEqual = function deepEqual(actual, expected, message) {
2552 if (!_deepEqual(actual, expected)) {
2553 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2557 function _deepEqual(actual, expected) {
2558 //
7.1. All identical values are equivalent, as determined by ===.
2559 if (actual === expected) {
2562 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2563 if (actual.length != expected.length) return false;
2565 for (var i =
0; i < actual.length; i++) {
2566 if (actual[i] !== expected[i]) return false;
2571 //
7.2. If the expected value is a Date object, the actual value is
2572 // equivalent if it is also a Date object that refers to the same time.
2573 } else if (util.isDate(actual) && util.isDate(expected)) {
2574 return actual.getTime() === expected.getTime();
2576 //
7.3 If the expected value is a RegExp object, the actual value is
2577 // equivalent if it is also a RegExp object with the same source and
2578 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2579 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2580 return actual.source === expected.source &&
2581 actual.global === expected.global &&
2582 actual.multiline === expected.multiline &&
2583 actual.lastIndex === expected.lastIndex &&
2584 actual.ignoreCase === expected.ignoreCase;
2586 //
7.4. Other pairs that do not both pass typeof value == 'object',
2587 // equivalence is determined by ==.
2588 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2589 return actual == expected;
2591 //
7.5 For all other Object pairs, including Array objects, equivalence is
2592 // determined by having the same number of owned properties (as verified
2593 // with Object.prototype.hasOwnProperty.call), the same set of keys
2594 // (although not necessarily the same order), equivalent values for every
2595 // corresponding key, and an identical 'prototype' property. Note: this
2596 // accounts for both named and indexed properties on Arrays.
2598 return objEquiv(actual, expected);
2602 function isArguments(object) {
2603 return Object.prototype.toString.call(object) == '[object Arguments]';
2606 function objEquiv(a, b) {
2607 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2609 // an identical 'prototype' property.
2610 if (a.prototype !== b.prototype) return false;
2611 // if one is a primitive, the other must be same
2612 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2615 var aIsArgs = isArguments(a),
2616 bIsArgs = isArguments(b);
2617 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2622 return _deepEqual(a, b);
2624 var ka = objectKeys(a),
2627 // having the same number of owned properties (keys incorporates
2629 if (ka.length != kb.length)
2631 //the same set of keys (although not necessarily the same order),
2635 for (i = ka.length -
1; i
>=
0; i--) {
2639 //equivalent values for every corresponding key, and
2640 //~~~possibly expensive deep test
2641 for (i = ka.length -
1; i
>=
0; i--) {
2643 if (!_deepEqual(a[key], b[key])) return false;
2648 //
8. The non-equivalence assertion tests for any deep inequality.
2649 // assert.notDeepEqual(actual, expected, message_opt);
2651 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2652 if (_deepEqual(actual, expected)) {
2653 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2657 //
9. The strict equality assertion tests strict equality, as determined by ===.
2658 // assert.strictEqual(actual, expected, message_opt);
2660 assert.strictEqual = function strictEqual(actual, expected, message) {
2661 if (actual !== expected) {
2662 fail(actual, expected, message, '===', assert.strictEqual);
2666 //
10. The strict non-equality assertion tests for strict inequality, as
2667 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2669 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2670 if (actual === expected) {
2671 fail(actual, expected, message, '!==', assert.notStrictEqual);
2675 function expectedException(actual, expected) {
2676 if (!actual || !expected) {
2680 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2681 return expected.test(actual);
2682 } else if (actual instanceof expected) {
2684 } else if (expected.call({}, actual) === true) {
2691 function _throws(shouldThrow, block, expected, message) {
2694 if (util.isString(expected)) {
2705 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2706 (message ? ' ' + message : '.');
2708 if (shouldThrow && !actual) {
2709 fail(actual, expected, 'Missing expected exception' + message);
2712 if (!shouldThrow && expectedException(actual, expected)) {
2713 fail(actual, expected, 'Got unwanted exception' + message);
2716 if ((shouldThrow && actual && expected &&
2717 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2722 //
11. Expected to throw an error:
2723 // assert.throws(block, Error_opt, message_opt);
2725 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2726 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2729 // EXTENSION! This is annoying to write outside this module.
2730 assert.doesNotThrow = function(block, /*optional*/message) {
2731 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2734 assert.ifError = function(err) { if (err) {throw err;}};
2736 var objectKeys = Object.keys || function (obj) {
2738 for (var key in obj) {
2739 if (hasOwn.call(obj, key)) keys.push(key);
2744 },{"util/":
29}],
6:[function(require,module,exports){
2746 },{}],
7:[function(require,module,exports){
2748 * The buffer module from node.js, for the browser.
2750 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2754 var base64 = require('base64-js')
2755 var ieee754 = require('ieee754')
2756 var isArray = require('is-array')
2758 exports.Buffer = Buffer
2759 exports.SlowBuffer = SlowBuffer
2760 exports.INSPECT_MAX_BYTES =
50
2761 Buffer.poolSize =
8192 // not used by this implementation
2766 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2767 * === true Use Uint8Array implementation (fastest)
2768 * === false Use Object implementation (most compatible, even IE6)
2770 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2771 * Opera
11.6+, iOS
4.2+.
2773 * Due to various browser bugs, sometimes the Object implementation will be used even
2774 * when the browser supports typed arrays.
2778 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2779 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2781 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2784 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2786 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2787 * incorrect length in some situations.
2789 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2790 * get the Object implementation, which is slower but behaves correctly.
2792 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2795 var arr = new Uint8Array(
1)
2796 arr.foo = function () { return
42 }
2797 arr.constructor = Bar
2798 return arr.foo() ===
42 && // typed array instances can be augmented
2799 arr.constructor === Bar && // constructor can be set
2800 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2801 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2807 function kMaxLength () {
2808 return Buffer.TYPED_ARRAY_SUPPORT
2817 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2818 * with function properties for all the node `Buffer` API functions. We use
2819 * `Uint8Array` so that square bracket notation works as expected -- it returns
2822 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2825 function Buffer (arg) {
2826 if (!(this instanceof Buffer)) {
2827 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2828 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2829 return new Buffer(arg)
2833 this.parent = undefined
2836 if (typeof arg === 'number') {
2837 return fromNumber(this, arg)
2840 // Slightly less common case.
2841 if (typeof arg === 'string') {
2842 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2846 return fromObject(this, arg)
2849 function fromNumber (that, length) {
2850 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2851 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2852 for (var i =
0; i < length; i++) {
2859 function fromString (that, string, encoding) {
2860 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2862 // Assumption: byteLength() return value is always < kMaxLength.
2863 var length = byteLength(string, encoding) |
0
2864 that = allocate(that, length)
2866 that.write(string, encoding)
2870 function fromObject (that, object) {
2871 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2873 if (isArray(object)) return fromArray(that, object)
2875 if (object == null) {
2876 throw new TypeError('must start with number, buffer, array or string')
2879 if (typeof ArrayBuffer !== 'undefined') {
2880 if (object.buffer instanceof ArrayBuffer) {
2881 return fromTypedArray(that, object)
2883 if (object instanceof ArrayBuffer) {
2884 return fromArrayBuffer(that, object)
2888 if (object.length) return fromArrayLike(that, object)
2890 return fromJsonObject(that, object)
2893 function fromBuffer (that, buffer) {
2894 var length = checked(buffer.length) |
0
2895 that = allocate(that, length)
2896 buffer.copy(that,
0,
0, length)
2900 function fromArray (that, array) {
2901 var length = checked(array.length) |
0
2902 that = allocate(that, length)
2903 for (var i =
0; i < length; i +=
1) {
2904 that[i] = array[i] &
255
2909 // Duplicate of fromArray() to keep fromArray() monomorphic.
2910 function fromTypedArray (that, array) {
2911 var length = checked(array.length) |
0
2912 that = allocate(that, length)
2913 // Truncating the elements is probably not what people expect from typed
2914 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2915 // of the old Buffer constructor.
2916 for (var i =
0; i < length; i +=
1) {
2917 that[i] = array[i] &
255
2922 function fromArrayBuffer (that, array) {
2923 if (Buffer.TYPED_ARRAY_SUPPORT) {
2924 // Return an augmented `Uint8Array` instance, for best performance
2926 that = Buffer._augment(new Uint8Array(array))
2928 // Fallback: Return an object instance of the Buffer class
2929 that = fromTypedArray(that, new Uint8Array(array))
2934 function fromArrayLike (that, array) {
2935 var length = checked(array.length) |
0
2936 that = allocate(that, length)
2937 for (var i =
0; i < length; i +=
1) {
2938 that[i] = array[i] &
255
2943 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2944 // Returns a zero-length buffer for inputs that don't conform to the spec.
2945 function fromJsonObject (that, object) {
2949 if (object.type === 'Buffer' && isArray(object.data)) {
2951 length = checked(array.length) |
0
2953 that = allocate(that, length)
2955 for (var i =
0; i < length; i +=
1) {
2956 that[i] = array[i] &
255
2961 function allocate (that, length) {
2962 if (Buffer.TYPED_ARRAY_SUPPORT) {
2963 // Return an augmented `Uint8Array` instance, for best performance
2964 that = Buffer._augment(new Uint8Array(length))
2966 // Fallback: Return an object instance of the Buffer class
2967 that.length = length
2968 that._isBuffer = true
2971 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2972 if (fromPool) that.parent = rootParent
2977 function checked (length) {
2978 // Note: cannot use `length < kMaxLength` here because that fails when
2979 // length is NaN (which is otherwise coerced to zero.)
2980 if (length
>= kMaxLength()) {
2981 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2982 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2987 function SlowBuffer (subject, encoding) {
2988 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2990 var buf = new Buffer(subject, encoding)
2995 Buffer.isBuffer = function isBuffer (b) {
2996 return !!(b != null && b._isBuffer)
2999 Buffer.compare = function compare (a, b) {
3000 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
3001 throw new TypeError('Arguments must be Buffers')
3004 if (a === b) return
0
3010 var len = Math.min(x, y)
3012 if (a[i] !== b[i]) break
3022 if (x < y) return -
1
3027 Buffer.isEncoding = function isEncoding (encoding) {
3028 switch (String(encoding).toLowerCase()) {
3046 Buffer.concat = function concat (list, length) {
3047 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3049 if (list.length ===
0) {
3050 return new Buffer(
0)
3054 if (length === undefined) {
3056 for (i =
0; i < list.length; i++) {
3057 length += list[i].length
3061 var buf = new Buffer(length)
3063 for (i =
0; i < list.length; i++) {
3071 function byteLength (string, encoding) {
3072 if (typeof string !== 'string') string = '' + string
3074 var len = string.length
3075 if (len ===
0) return
0
3077 // Use a for loop to avoid recursion
3078 var loweredCase = false
3089 return utf8ToBytes(string).length
3098 return base64ToBytes(string).length
3100 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3101 encoding = ('' + encoding).toLowerCase()
3106 Buffer.byteLength = byteLength
3108 // pre-set for values that may exist in the future
3109 Buffer.prototype.length = undefined
3110 Buffer.prototype.parent = undefined
3112 function slowToString (encoding, start, end) {
3113 var loweredCase = false
3116 end = end === undefined || end === Infinity ? this.length : end |
0
3118 if (!encoding) encoding = 'utf8'
3119 if (start <
0) start =
0
3120 if (end
> this.length) end = this.length
3121 if (end <= start) return ''
3126 return hexSlice(this, start, end)
3130 return utf8Slice(this, start, end)
3133 return asciiSlice(this, start, end)
3136 return binarySlice(this, start, end)
3139 return base64Slice(this, start, end)
3145 return utf16leSlice(this, start, end)
3148 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3149 encoding = (encoding + '').toLowerCase()
3155 Buffer.prototype.toString = function toString () {
3156 var length = this.length |
0
3157 if (length ===
0) return ''
3158 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3159 return slowToString.apply(this, arguments)
3162 Buffer.prototype.equals = function equals (b) {
3163 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3164 if (this === b) return true
3165 return Buffer.compare(this, b) ===
0
3168 Buffer.prototype.inspect = function inspect () {
3170 var max = exports.INSPECT_MAX_BYTES
3171 if (this.length
> 0) {
3172 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3173 if (this.length
> max) str += ' ... '
3175 return '
<Buffer ' + str + '
>'
3178 Buffer.prototype.compare = function compare (b) {
3179 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3180 if (this === b) return
0
3181 return Buffer.compare(this, b)
3184 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3185 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3186 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3189 if (this.length ===
0) return -
1
3190 if (byteOffset
>= this.length) return -
1
3192 // Negative offsets start from the end of the buffer
3193 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3195 if (typeof val === 'string') {
3196 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3197 return String.prototype.indexOf.call(this, val, byteOffset)
3199 if (Buffer.isBuffer(val)) {
3200 return arrayIndexOf(this, val, byteOffset)
3202 if (typeof val === 'number') {
3203 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3204 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3206 return arrayIndexOf(this, [ val ], byteOffset)
3209 function arrayIndexOf (arr, val, byteOffset) {
3211 for (var i =
0; byteOffset + i < arr.length; i++) {
3212 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3213 if (foundIndex === -
1) foundIndex = i
3214 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3222 throw new TypeError('val must be string, number or Buffer')
3225 // `get` is deprecated
3226 Buffer.prototype.get = function get (offset) {
3227 console.log('.get() is deprecated. Access using array indexes instead.')
3228 return this.readUInt8(offset)
3231 // `set` is deprecated
3232 Buffer.prototype.set = function set (v, offset) {
3233 console.log('.set() is deprecated. Access using array indexes instead.')
3234 return this.writeUInt8(v, offset)
3237 function hexWrite (buf, string, offset, length) {
3238 offset = Number(offset) ||
0
3239 var remaining = buf.length - offset
3243 length = Number(length)
3244 if (length
> remaining) {
3249 // must be an even number of digits
3250 var strLen = string.length
3251 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3253 if (length
> strLen /
2) {
3256 for (var i =
0; i < length; i++) {
3257 var parsed = parseInt(string.substr(i *
2,
2),
16)
3258 if (isNaN(parsed)) throw new Error('Invalid hex string')
3259 buf[offset + i] = parsed
3264 function utf8Write (buf, string, offset, length) {
3265 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3268 function asciiWrite (buf, string, offset, length) {
3269 return blitBuffer(asciiToBytes(string), buf, offset, length)
3272 function binaryWrite (buf, string, offset, length) {
3273 return asciiWrite(buf, string, offset, length)
3276 function base64Write (buf, string, offset, length) {
3277 return blitBuffer(base64ToBytes(string), buf, offset, length)
3280 function ucs2Write (buf, string, offset, length) {
3281 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3284 Buffer.prototype.write = function write (string, offset, length, encoding) {
3285 // Buffer#write(string)
3286 if (offset === undefined) {
3288 length = this.length
3290 // Buffer#write(string, encoding)
3291 } else if (length === undefined && typeof offset === 'string') {
3293 length = this.length
3295 // Buffer#write(string, offset[, length][, encoding])
3296 } else if (isFinite(offset)) {
3298 if (isFinite(length)) {
3300 if (encoding === undefined) encoding = 'utf8'
3305 // legacy write(string, encoding, offset, length) - remove in v0.13
3313 var remaining = this.length - offset
3314 if (length === undefined || length
> remaining) length = remaining
3316 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3317 throw new RangeError('attempt to write outside buffer bounds')
3320 if (!encoding) encoding = 'utf8'
3322 var loweredCase = false
3326 return hexWrite(this, string, offset, length)
3330 return utf8Write(this, string, offset, length)
3333 return asciiWrite(this, string, offset, length)
3336 return binaryWrite(this, string, offset, length)
3339 // Warning: maxLength not taken into account in base64Write
3340 return base64Write(this, string, offset, length)
3346 return ucs2Write(this, string, offset, length)
3349 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3350 encoding = ('' + encoding).toLowerCase()
3356 Buffer.prototype.toJSON = function toJSON () {
3359 data: Array.prototype.slice.call(this._arr || this,
0)
3363 function base64Slice (buf, start, end) {
3364 if (start ===
0 && end === buf.length) {
3365 return base64.fromByteArray(buf)
3367 return base64.fromByteArray(buf.slice(start, end))
3371 function utf8Slice (buf, start, end) {
3372 end = Math.min(buf.length, end)
3377 var bytesPerSequence
3383 for (; i < end; i += bytesPerSequence) {
3387 if (firstByte
> 0xEF) {
3388 bytesPerSequence =
4
3389 } else if (firstByte
> 0xDF) {
3390 bytesPerSequence =
3
3391 } else if (firstByte
> 0xBF) {
3392 bytesPerSequence =
2
3394 bytesPerSequence =
1
3397 if (i + bytesPerSequence <= end) {
3398 switch (bytesPerSequence) {
3400 if (firstByte <
0x80) {
3401 codePoint = firstByte
3405 secondByte = buf[i +
1]
3406 if ((secondByte &
0xC0) ===
0x80) {
3407 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3408 if (tempCodePoint
> 0x7F) {
3409 codePoint = tempCodePoint
3414 secondByte = buf[i +
1]
3415 thirdByte = buf[i +
2]
3416 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3417 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3418 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3419 codePoint = tempCodePoint
3424 secondByte = buf[i +
1]
3425 thirdByte = buf[i +
2]
3426 fourthByte = buf[i +
3]
3427 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3428 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3429 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3430 codePoint = tempCodePoint
3436 if (codePoint ===
0xFFFD) {
3437 // we generated an invalid codePoint so make sure to only advance by
1 byte
3438 bytesPerSequence =
1
3439 } else if (codePoint
> 0xFFFF) {
3440 // encode to utf16 (surrogate pair dance)
3441 codePoint -=
0x10000
3442 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3443 codePoint =
0xDC00 | codePoint &
0x3FF
3449 return String.fromCharCode.apply(String, res)
3452 function asciiSlice (buf, start, end) {
3454 end = Math.min(buf.length, end)
3456 for (var i = start; i < end; i++) {
3457 ret += String.fromCharCode(buf[i] &
0x7F)
3462 function binarySlice (buf, start, end) {
3464 end = Math.min(buf.length, end)
3466 for (var i = start; i < end; i++) {
3467 ret += String.fromCharCode(buf[i])
3472 function hexSlice (buf, start, end) {
3473 var len = buf.length
3475 if (!start || start <
0) start =
0
3476 if (!end || end <
0 || end
> len) end = len
3479 for (var i = start; i < end; i++) {
3480 out += toHex(buf[i])
3485 function utf16leSlice (buf, start, end) {
3486 var bytes = buf.slice(start, end)
3488 for (var i =
0; i < bytes.length; i +=
2) {
3489 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3494 Buffer.prototype.slice = function slice (start, end) {
3495 var len = this.length
3497 end = end === undefined ? len : ~~end
3501 if (start <
0) start =
0
3502 } else if (start
> len) {
3508 if (end <
0) end =
0
3509 } else if (end
> len) {
3513 if (end < start) end = start
3516 if (Buffer.TYPED_ARRAY_SUPPORT) {
3517 newBuf = Buffer._augment(this.subarray(start, end))
3519 var sliceLen = end - start
3520 newBuf = new Buffer(sliceLen, undefined)
3521 for (var i =
0; i < sliceLen; i++) {
3522 newBuf[i] = this[i + start]
3526 if (newBuf.length) newBuf.parent = this.parent || this
3532 * Need to make sure that buffer isn't trying to write out of bounds.
3534 function checkOffset (offset, ext, length) {
3535 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3536 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3539 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3541 byteLength = byteLength |
0
3542 if (!noAssert) checkOffset(offset, byteLength, this.length)
3544 var val = this[offset]
3547 while (++i < byteLength && (mul *=
0x100)) {
3548 val += this[offset + i] * mul
3554 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3556 byteLength = byteLength |
0
3558 checkOffset(offset, byteLength, this.length)
3561 var val = this[offset + --byteLength]
3563 while (byteLength
> 0 && (mul *=
0x100)) {
3564 val += this[offset + --byteLength] * mul
3570 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3571 if (!noAssert) checkOffset(offset,
1, this.length)
3575 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3576 if (!noAssert) checkOffset(offset,
2, this.length)
3577 return this[offset] | (this[offset +
1] <<
8)
3580 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3581 if (!noAssert) checkOffset(offset,
2, this.length)
3582 return (this[offset] <<
8) | this[offset +
1]
3585 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3586 if (!noAssert) checkOffset(offset,
4, this.length)
3588 return ((this[offset]) |
3589 (this[offset +
1] <<
8) |
3590 (this[offset +
2] <<
16)) +
3591 (this[offset +
3] *
0x1000000)
3594 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3595 if (!noAssert) checkOffset(offset,
4, this.length)
3597 return (this[offset] *
0x1000000) +
3598 ((this[offset +
1] <<
16) |
3599 (this[offset +
2] <<
8) |
3603 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3605 byteLength = byteLength |
0
3606 if (!noAssert) checkOffset(offset, byteLength, this.length)
3608 var val = this[offset]
3611 while (++i < byteLength && (mul *=
0x100)) {
3612 val += this[offset + i] * mul
3616 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3621 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3623 byteLength = byteLength |
0
3624 if (!noAssert) checkOffset(offset, byteLength, this.length)
3628 var val = this[offset + --i]
3629 while (i
> 0 && (mul *=
0x100)) {
3630 val += this[offset + --i] * mul
3634 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3639 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset,
1, this.length)
3641 if (!(this[offset] &
0x80)) return (this[offset])
3642 return ((
0xff - this[offset] +
1) * -
1)
3645 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3646 if (!noAssert) checkOffset(offset,
2, this.length)
3647 var val = this[offset] | (this[offset +
1] <<
8)
3648 return (val &
0x8000) ? val |
0xFFFF0000 : val
3651 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3652 if (!noAssert) checkOffset(offset,
2, this.length)
3653 var val = this[offset +
1] | (this[offset] <<
8)
3654 return (val &
0x8000) ? val |
0xFFFF0000 : val
3657 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3658 if (!noAssert) checkOffset(offset,
4, this.length)
3660 return (this[offset]) |
3661 (this[offset +
1] <<
8) |
3662 (this[offset +
2] <<
16) |
3663 (this[offset +
3] <<
24)
3666 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3667 if (!noAssert) checkOffset(offset,
4, this.length)
3669 return (this[offset] <<
24) |
3670 (this[offset +
1] <<
16) |
3671 (this[offset +
2] <<
8) |
3675 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3676 if (!noAssert) checkOffset(offset,
4, this.length)
3677 return ieee754.read(this, offset, true,
23,
4)
3680 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3681 if (!noAssert) checkOffset(offset,
4, this.length)
3682 return ieee754.read(this, offset, false,
23,
4)
3685 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3686 if (!noAssert) checkOffset(offset,
8, this.length)
3687 return ieee754.read(this, offset, true,
52,
8)
3690 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3691 if (!noAssert) checkOffset(offset,
8, this.length)
3692 return ieee754.read(this, offset, false,
52,
8)
3695 function checkInt (buf, value, offset, ext, max, min) {
3696 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3697 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3698 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3701 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3704 byteLength = byteLength |
0
3705 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3709 this[offset] = value &
0xFF
3710 while (++i < byteLength && (mul *=
0x100)) {
3711 this[offset + i] = (value / mul) &
0xFF
3714 return offset + byteLength
3717 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3720 byteLength = byteLength |
0
3721 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3723 var i = byteLength -
1
3725 this[offset + i] = value &
0xFF
3726 while (--i
>=
0 && (mul *=
0x100)) {
3727 this[offset + i] = (value / mul) &
0xFF
3730 return offset + byteLength
3733 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3736 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3737 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3738 this[offset] = value
3742 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3743 if (value <
0) value =
0xffff + value +
1
3744 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3745 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3746 (littleEndian ? i :
1 - i) *
8
3750 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3753 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3754 if (Buffer.TYPED_ARRAY_SUPPORT) {
3755 this[offset] = value
3756 this[offset +
1] = (value
>>> 8)
3758 objectWriteUInt16(this, value, offset, true)
3763 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3766 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3767 if (Buffer.TYPED_ARRAY_SUPPORT) {
3768 this[offset] = (value
>>> 8)
3769 this[offset +
1] = value
3771 objectWriteUInt16(this, value, offset, false)
3776 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3777 if (value <
0) value =
0xffffffff + value +
1
3778 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3779 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3783 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3786 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3787 if (Buffer.TYPED_ARRAY_SUPPORT) {
3788 this[offset +
3] = (value
>>> 24)
3789 this[offset +
2] = (value
>>> 16)
3790 this[offset +
1] = (value
>>> 8)
3791 this[offset] = value
3793 objectWriteUInt32(this, value, offset, true)
3798 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3801 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3802 if (Buffer.TYPED_ARRAY_SUPPORT) {
3803 this[offset] = (value
>>> 24)
3804 this[offset +
1] = (value
>>> 16)
3805 this[offset +
2] = (value
>>> 8)
3806 this[offset +
3] = value
3808 objectWriteUInt32(this, value, offset, false)
3813 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3817 var limit = Math.pow(
2,
8 * byteLength -
1)
3819 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3824 var sub = value <
0 ?
1 :
0
3825 this[offset] = value &
0xFF
3826 while (++i < byteLength && (mul *=
0x100)) {
3827 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3830 return offset + byteLength
3833 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3837 var limit = Math.pow(
2,
8 * byteLength -
1)
3839 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3842 var i = byteLength -
1
3844 var sub = value <
0 ?
1 :
0
3845 this[offset + i] = value &
0xFF
3846 while (--i
>=
0 && (mul *=
0x100)) {
3847 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3850 return offset + byteLength
3853 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3856 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3857 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3858 if (value <
0) value =
0xff + value +
1
3859 this[offset] = value
3863 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3866 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3867 if (Buffer.TYPED_ARRAY_SUPPORT) {
3868 this[offset] = value
3869 this[offset +
1] = (value
>>> 8)
3871 objectWriteUInt16(this, value, offset, true)
3876 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3879 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3880 if (Buffer.TYPED_ARRAY_SUPPORT) {
3881 this[offset] = (value
>>> 8)
3882 this[offset +
1] = value
3884 objectWriteUInt16(this, value, offset, false)
3889 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3892 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3893 if (Buffer.TYPED_ARRAY_SUPPORT) {
3894 this[offset] = value
3895 this[offset +
1] = (value
>>> 8)
3896 this[offset +
2] = (value
>>> 16)
3897 this[offset +
3] = (value
>>> 24)
3899 objectWriteUInt32(this, value, offset, true)
3904 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3907 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3908 if (value <
0) value =
0xffffffff + value +
1
3909 if (Buffer.TYPED_ARRAY_SUPPORT) {
3910 this[offset] = (value
>>> 24)
3911 this[offset +
1] = (value
>>> 16)
3912 this[offset +
2] = (value
>>> 8)
3913 this[offset +
3] = value
3915 objectWriteUInt32(this, value, offset, false)
3920 function checkIEEE754 (buf, value, offset, ext, max, min) {
3921 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3922 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3923 if (offset <
0) throw new RangeError('index out of range')
3926 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3928 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3930 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3934 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3935 return writeFloat(this, value, offset, true, noAssert)
3938 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3939 return writeFloat(this, value, offset, false, noAssert)
3942 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3944 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3946 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3950 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3951 return writeDouble(this, value, offset, true, noAssert)
3954 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3955 return writeDouble(this, value, offset, false, noAssert)
3958 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3959 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3960 if (!start) start =
0
3961 if (!end && end !==
0) end = this.length
3962 if (targetStart
>= target.length) targetStart = target.length
3963 if (!targetStart) targetStart =
0
3964 if (end
> 0 && end < start) end = start
3966 // Copy
0 bytes; we're done
3967 if (end === start) return
0
3968 if (target.length ===
0 || this.length ===
0) return
0
3970 // Fatal error conditions
3971 if (targetStart <
0) {
3972 throw new RangeError('targetStart out of bounds')
3974 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3975 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3978 if (end
> this.length) end = this.length
3979 if (target.length - targetStart < end - start) {
3980 end = target.length - targetStart + start
3983 var len = end - start
3986 if (this === target && start < targetStart && targetStart < end) {
3987 // descending copy from end
3988 for (i = len -
1; i
>=
0; i--) {
3989 target[i + targetStart] = this[i + start]
3991 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3992 // ascending copy from start
3993 for (i =
0; i < len; i++) {
3994 target[i + targetStart] = this[i + start]
3997 target._set(this.subarray(start, start + len), targetStart)
4003 // fill(value, start=
0, end=buffer.length)
4004 Buffer.prototype.fill = function fill (value, start, end) {
4005 if (!value) value =
0
4006 if (!start) start =
0
4007 if (!end) end = this.length
4009 if (end < start) throw new RangeError('end < start')
4011 // Fill
0 bytes; we're done
4012 if (end === start) return
4013 if (this.length ===
0) return
4015 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
4016 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
4019 if (typeof value === 'number') {
4020 for (i = start; i < end; i++) {
4024 var bytes = utf8ToBytes(value.toString())
4025 var len = bytes.length
4026 for (i = start; i < end; i++) {
4027 this[i] = bytes[i % len]
4035 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4036 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
4038 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4039 if (typeof Uint8Array !== 'undefined') {
4040 if (Buffer.TYPED_ARRAY_SUPPORT) {
4041 return (new Buffer(this)).buffer
4043 var buf = new Uint8Array(this.length)
4044 for (var i =
0, len = buf.length; i < len; i +=
1) {
4050 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4057 var BP = Buffer.prototype
4060 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4062 Buffer._augment = function _augment (arr) {
4063 arr.constructor = Buffer
4064 arr._isBuffer = true
4066 // save reference to original Uint8Array set method before overwriting
4073 arr.write = BP.write
4074 arr.toString = BP.toString
4075 arr.toLocaleString = BP.toString
4076 arr.toJSON = BP.toJSON
4077 arr.equals = BP.equals
4078 arr.compare = BP.compare
4079 arr.indexOf = BP.indexOf
4081 arr.slice = BP.slice
4082 arr.readUIntLE = BP.readUIntLE
4083 arr.readUIntBE = BP.readUIntBE
4084 arr.readUInt8 = BP.readUInt8
4085 arr.readUInt16LE = BP.readUInt16LE
4086 arr.readUInt16BE = BP.readUInt16BE
4087 arr.readUInt32LE = BP.readUInt32LE
4088 arr.readUInt32BE = BP.readUInt32BE
4089 arr.readIntLE = BP.readIntLE
4090 arr.readIntBE = BP.readIntBE
4091 arr.readInt8 = BP.readInt8
4092 arr.readInt16LE = BP.readInt16LE
4093 arr.readInt16BE = BP.readInt16BE
4094 arr.readInt32LE = BP.readInt32LE
4095 arr.readInt32BE = BP.readInt32BE
4096 arr.readFloatLE = BP.readFloatLE
4097 arr.readFloatBE = BP.readFloatBE
4098 arr.readDoubleLE = BP.readDoubleLE
4099 arr.readDoubleBE = BP.readDoubleBE
4100 arr.writeUInt8 = BP.writeUInt8
4101 arr.writeUIntLE = BP.writeUIntLE
4102 arr.writeUIntBE = BP.writeUIntBE
4103 arr.writeUInt16LE = BP.writeUInt16LE
4104 arr.writeUInt16BE = BP.writeUInt16BE
4105 arr.writeUInt32LE = BP.writeUInt32LE
4106 arr.writeUInt32BE = BP.writeUInt32BE
4107 arr.writeIntLE = BP.writeIntLE
4108 arr.writeIntBE = BP.writeIntBE
4109 arr.writeInt8 = BP.writeInt8
4110 arr.writeInt16LE = BP.writeInt16LE
4111 arr.writeInt16BE = BP.writeInt16BE
4112 arr.writeInt32LE = BP.writeInt32LE
4113 arr.writeInt32BE = BP.writeInt32BE
4114 arr.writeFloatLE = BP.writeFloatLE
4115 arr.writeFloatBE = BP.writeFloatBE
4116 arr.writeDoubleLE = BP.writeDoubleLE
4117 arr.writeDoubleBE = BP.writeDoubleBE
4119 arr.inspect = BP.inspect
4120 arr.toArrayBuffer = BP.toArrayBuffer
4125 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4127 function base64clean (str) {
4128 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4129 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4130 // Node converts strings with length <
2 to ''
4131 if (str.length <
2) return ''
4132 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4133 while (str.length %
4 !==
0) {
4139 function stringtrim (str) {
4140 if (str.trim) return str.trim()
4141 return str.replace(/^\s+|\s+$/g, '')
4144 function toHex (n) {
4145 if (n <
16) return '
0' + n.toString(
16)
4146 return n.toString(
16)
4149 function utf8ToBytes (string, units) {
4150 units = units || Infinity
4152 var length = string.length
4153 var leadSurrogate = null
4156 for (var i =
0; i < length; i++) {
4157 codePoint = string.charCodeAt(i)
4159 // is surrogate component
4160 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4161 // last char was a lead
4162 if (!leadSurrogate) {
4164 if (codePoint
> 0xDBFF) {
4166 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4169 } else if (i +
1 === length) {
4171 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4176 leadSurrogate = codePoint
4182 if (codePoint <
0xDC00) {
4183 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4184 leadSurrogate = codePoint
4188 // valid surrogate pair
4189 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4191 } else if (leadSurrogate) {
4192 // valid bmp char, but last char was a lead
4193 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4196 leadSurrogate = null
4199 if (codePoint <
0x80) {
4200 if ((units -=
1) <
0) break
4201 bytes.push(codePoint)
4202 } else if (codePoint <
0x800) {
4203 if ((units -=
2) <
0) break
4205 codePoint
>> 0x6 |
0xC0,
4206 codePoint &
0x3F |
0x80
4208 } else if (codePoint <
0x10000) {
4209 if ((units -=
3) <
0) break
4211 codePoint
>> 0xC |
0xE0,
4212 codePoint
>> 0x6 &
0x3F |
0x80,
4213 codePoint &
0x3F |
0x80
4215 } else if (codePoint <
0x110000) {
4216 if ((units -=
4) <
0) break
4218 codePoint
>> 0x12 |
0xF0,
4219 codePoint
>> 0xC &
0x3F |
0x80,
4220 codePoint
>> 0x6 &
0x3F |
0x80,
4221 codePoint &
0x3F |
0x80
4224 throw new Error('Invalid code point')
4231 function asciiToBytes (str) {
4233 for (var i =
0; i < str.length; i++) {
4234 // Node's code seems to be doing this and not &
0x7F..
4235 byteArray.push(str.charCodeAt(i) &
0xFF)
4240 function utf16leToBytes (str, units) {
4243 for (var i =
0; i < str.length; i++) {
4244 if ((units -=
2) <
0) break
4246 c = str.charCodeAt(i)
4256 function base64ToBytes (str) {
4257 return base64.toByteArray(base64clean(str))
4260 function blitBuffer (src, dst, offset, length) {
4261 for (var i =
0; i < length; i++) {
4262 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4263 dst[i + offset] = src[i]
4268 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4269 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4271 ;(function (exports) {
4274 var Arr = (typeof Uint8Array !== 'undefined')
4278 var PLUS = '+'.charCodeAt(
0)
4279 var SLASH = '/'.charCodeAt(
0)
4280 var NUMBER = '
0'.charCodeAt(
0)
4281 var LOWER = 'a'.charCodeAt(
0)
4282 var UPPER = 'A'.charCodeAt(
0)
4283 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4284 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4286 function decode (elt) {
4287 var code = elt.charCodeAt(
0)
4288 if (code === PLUS ||
4289 code === PLUS_URL_SAFE)
4291 if (code === SLASH ||
4292 code === SLASH_URL_SAFE)
4295 return -
1 //no match
4296 if (code < NUMBER +
10)
4297 return code - NUMBER +
26 +
26
4298 if (code < UPPER +
26)
4300 if (code < LOWER +
26)
4301 return code - LOWER +
26
4304 function b64ToByteArray (b64) {
4305 var i, j, l, tmp, placeHolders, arr
4307 if (b64.length %
4 > 0) {
4308 throw new Error('Invalid string. Length must be a multiple of
4')
4311 // the number of equal signs (place holders)
4312 // if there are two placeholders, than the two characters before it
4313 // represent one byte
4314 // if there is only one, then the three characters before it represent
2 bytes
4315 // this is just a cheap hack to not do indexOf twice
4316 var len = b64.length
4317 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4319 // base64 is
4/
3 + up to two characters of the original data
4320 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4322 // if there are placeholders, only get up to the last complete
4 chars
4323 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4331 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4332 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4333 push((tmp &
0xFF0000)
>> 16)
4334 push((tmp &
0xFF00)
>> 8)
4338 if (placeHolders ===
2) {
4339 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4341 } else if (placeHolders ===
1) {
4342 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4343 push((tmp
>> 8) &
0xFF)
4350 function uint8ToBase64 (uint8) {
4352 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4356 function encode (num) {
4357 return lookup.charAt(num)
4360 function tripletToBase64 (num) {
4361 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4364 // go through the array every three bytes, we'll deal with trailing stuff later
4365 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4366 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4367 output += tripletToBase64(temp)
4370 // pad the end with zeros, but make sure to not forget the extra bytes
4371 switch (extraBytes) {
4373 temp = uint8[uint8.length -
1]
4374 output += encode(temp
>> 2)
4375 output += encode((temp <<
4) &
0x3F)
4379 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4380 output += encode(temp
>> 10)
4381 output += encode((temp
>> 4) &
0x3F)
4382 output += encode((temp <<
2) &
0x3F)
4390 exports.toByteArray = b64ToByteArray
4391 exports.fromByteArray = uint8ToBase64
4392 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4394 },{}],
9:[function(require,module,exports){
4395 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4397 var eLen = nBytes *
8 - mLen -
1
4398 var eMax = (
1 << eLen) -
1
4399 var eBias = eMax
>> 1
4401 var i = isLE ? (nBytes -
1) :
0
4402 var d = isLE ? -
1 :
1
4403 var s = buffer[offset + i]
4407 e = s & ((
1 << (-nBits)) -
1)
4410 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4412 m = e & ((
1 << (-nBits)) -
1)
4415 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4419 } else if (e === eMax) {
4420 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4422 m = m + Math.pow(
2, mLen)
4425 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4428 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4430 var eLen = nBytes *
8 - mLen -
1
4431 var eMax = (
1 << eLen) -
1
4432 var eBias = eMax
>> 1
4433 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4434 var i = isLE ?
0 : (nBytes -
1)
4435 var d = isLE ?
1 : -
1
4436 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4438 value = Math.abs(value)
4440 if (isNaN(value) || value === Infinity) {
4441 m = isNaN(value) ?
1 :
0
4444 e = Math.floor(Math.log(value) / Math.LN2)
4445 if (value * (c = Math.pow(
2, -e)) <
1) {
4449 if (e + eBias
>=
1) {
4452 value += rt * Math.pow(
2,
1 - eBias)
4454 if (value * c
>=
2) {
4459 if (e + eBias
>= eMax) {
4462 } else if (e + eBias
>=
1) {
4463 m = (value * c -
1) * Math.pow(
2, mLen)
4466 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4471 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4475 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4477 buffer[offset + i - d] |= s *
128
4480 },{}],
10:[function(require,module,exports){
4486 var isArray = Array.isArray;
4492 var str = Object.prototype.toString;
4495 * Whether or not the given `val`
4502 * isArray(arguments);
4507 * @param {mixed} val
4511 module.exports = isArray || function (val) {
4512 return !! val && '[object Array]' == str.call(val);
4515 },{}],
11:[function(require,module,exports){
4516 // Copyright Joyent, Inc. and other Node contributors.
4518 // Permission is hereby granted, free of charge, to any person obtaining a
4519 // copy of this software and associated documentation files (the
4520 // "Software"), to deal in the Software without restriction, including
4521 // without limitation the rights to use, copy, modify, merge, publish,
4522 // distribute, sublicense, and/or sell copies of the Software, and to permit
4523 // persons to whom the Software is furnished to do so, subject to the
4524 // following conditions:
4526 // The above copyright notice and this permission notice shall be included
4527 // in all copies or substantial portions of the Software.
4529 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4530 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4531 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4532 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4533 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4534 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4535 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4537 function EventEmitter() {
4538 this._events = this._events || {};
4539 this._maxListeners = this._maxListeners || undefined;
4541 module.exports = EventEmitter;
4543 // Backwards-compat with node
0.10.x
4544 EventEmitter.EventEmitter = EventEmitter;
4546 EventEmitter.prototype._events = undefined;
4547 EventEmitter.prototype._maxListeners = undefined;
4549 // By default EventEmitters will print a warning if more than
10 listeners are
4550 // added to it. This is a useful default which helps finding memory leaks.
4551 EventEmitter.defaultMaxListeners =
10;
4553 // Obviously not all Emitters should be limited to
10. This function allows
4554 // that to be increased. Set to zero for unlimited.
4555 EventEmitter.prototype.setMaxListeners = function(n) {
4556 if (!isNumber(n) || n <
0 || isNaN(n))
4557 throw TypeError('n must be a positive number');
4558 this._maxListeners = n;
4562 EventEmitter.prototype.emit = function(type) {
4563 var er, handler, len, args, i, listeners;
4568 // If there is no 'error' event listener then throw.
4569 if (type === 'error') {
4570 if (!this._events.error ||
4571 (isObject(this._events.error) && !this._events.error.length)) {
4573 if (er instanceof Error) {
4574 throw er; // Unhandled 'error' event
4576 throw TypeError('Uncaught, unspecified "error" event.');
4580 handler = this._events[type];
4582 if (isUndefined(handler))
4585 if (isFunction(handler)) {
4586 switch (arguments.length) {
4592 handler.call(this, arguments[
1]);
4595 handler.call(this, arguments[
1], arguments[
2]);
4599 len = arguments.length;
4600 args = new Array(len -
1);
4601 for (i =
1; i < len; i++)
4602 args[i -
1] = arguments[i];
4603 handler.apply(this, args);
4605 } else if (isObject(handler)) {
4606 len = arguments.length;
4607 args = new Array(len -
1);
4608 for (i =
1; i < len; i++)
4609 args[i -
1] = arguments[i];
4611 listeners = handler.slice();
4612 len = listeners.length;
4613 for (i =
0; i < len; i++)
4614 listeners[i].apply(this, args);
4620 EventEmitter.prototype.addListener = function(type, listener) {
4623 if (!isFunction(listener))
4624 throw TypeError('listener must be a function');
4629 // To avoid recursion in the case that type === "newListener"! Before
4630 // adding it to the listeners, first emit "newListener".
4631 if (this._events.newListener)
4632 this.emit('newListener', type,
4633 isFunction(listener.listener) ?
4634 listener.listener : listener);
4636 if (!this._events[type])
4637 // Optimize the case of one listener. Don't need the extra array object.
4638 this._events[type] = listener;
4639 else if (isObject(this._events[type]))
4640 // If we've already got an array, just append.
4641 this._events[type].push(listener);
4643 // Adding the second element, need to change to array.
4644 this._events[type] = [this._events[type], listener];
4646 // Check for listener leak
4647 if (isObject(this._events[type]) && !this._events[type].warned) {
4649 if (!isUndefined(this._maxListeners)) {
4650 m = this._maxListeners;
4652 m = EventEmitter.defaultMaxListeners;
4655 if (m && m
> 0 && this._events[type].length
> m) {
4656 this._events[type].warned = true;
4657 console.error('(node) warning: possible EventEmitter memory ' +
4658 'leak detected. %d listeners added. ' +
4659 'Use emitter.setMaxListeners() to increase limit.',
4660 this._events[type].length);
4661 if (typeof console.trace === 'function') {
4662 // not supported in IE
10
4671 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4673 EventEmitter.prototype.once = function(type, listener) {
4674 if (!isFunction(listener))
4675 throw TypeError('listener must be a function');
4680 this.removeListener(type, g);
4684 listener.apply(this, arguments);
4688 g.listener = listener;
4694 // emits a 'removeListener' event iff the listener was removed
4695 EventEmitter.prototype.removeListener = function(type, listener) {
4696 var list, position, length, i;
4698 if (!isFunction(listener))
4699 throw TypeError('listener must be a function');
4701 if (!this._events || !this._events[type])
4704 list = this._events[type];
4705 length = list.length;
4708 if (list === listener ||
4709 (isFunction(list.listener) && list.listener === listener)) {
4710 delete this._events[type];
4711 if (this._events.removeListener)
4712 this.emit('removeListener', type, listener);
4714 } else if (isObject(list)) {
4715 for (i = length; i--
> 0;) {
4716 if (list[i] === listener ||
4717 (list[i].listener && list[i].listener === listener)) {
4726 if (list.length ===
1) {
4728 delete this._events[type];
4730 list.splice(position,
1);
4733 if (this._events.removeListener)
4734 this.emit('removeListener', type, listener);
4740 EventEmitter.prototype.removeAllListeners = function(type) {
4746 // not listening for removeListener, no need to emit
4747 if (!this._events.removeListener) {
4748 if (arguments.length ===
0)
4750 else if (this._events[type])
4751 delete this._events[type];
4755 // emit removeListener for all listeners on all events
4756 if (arguments.length ===
0) {
4757 for (key in this._events) {
4758 if (key === 'removeListener') continue;
4759 this.removeAllListeners(key);
4761 this.removeAllListeners('removeListener');
4766 listeners = this._events[type];
4768 if (isFunction(listeners)) {
4769 this.removeListener(type, listeners);
4772 while (listeners.length)
4773 this.removeListener(type, listeners[listeners.length -
1]);
4775 delete this._events[type];
4780 EventEmitter.prototype.listeners = function(type) {
4782 if (!this._events || !this._events[type])
4784 else if (isFunction(this._events[type]))
4785 ret = [this._events[type]];
4787 ret = this._events[type].slice();
4791 EventEmitter.listenerCount = function(emitter, type) {
4793 if (!emitter._events || !emitter._events[type])
4795 else if (isFunction(emitter._events[type]))
4798 ret = emitter._events[type].length;
4802 function isFunction(arg) {
4803 return typeof arg === 'function';
4806 function isNumber(arg) {
4807 return typeof arg === 'number';
4810 function isObject(arg) {
4811 return typeof arg === 'object' && arg !== null;
4814 function isUndefined(arg) {
4815 return arg === void
0;
4818 },{}],
12:[function(require,module,exports){
4819 if (typeof Object.create === 'function') {
4820 // implementation from standard node.js 'util' module
4821 module.exports = function inherits(ctor, superCtor) {
4822 ctor.super_ = superCtor
4823 ctor.prototype = Object.create(superCtor.prototype, {
4833 // old school shim for old browsers
4834 module.exports = function inherits(ctor, superCtor) {
4835 ctor.super_ = superCtor
4836 var TempCtor = function () {}
4837 TempCtor.prototype = superCtor.prototype
4838 ctor.prototype = new TempCtor()
4839 ctor.prototype.constructor = ctor
4843 },{}],
13:[function(require,module,exports){
4844 module.exports = Array.isArray || function (arr) {
4845 return Object.prototype.toString.call(arr) == '[object Array]';
4848 },{}],
14:[function(require,module,exports){
4849 // shim for using process in browser
4851 var process = module.exports = {};
4853 var draining = false;
4855 var queueIndex = -
1;
4857 function cleanUpNextTick() {
4859 if (currentQueue.length) {
4860 queue = currentQueue.concat(queue);
4869 function drainQueue() {
4873 var timeout = setTimeout(cleanUpNextTick);
4876 var len = queue.length;
4878 currentQueue = queue;
4880 while (++queueIndex < len) {
4881 currentQueue[queueIndex].run();
4886 currentQueue = null;
4888 clearTimeout(timeout);
4891 process.nextTick = function (fun) {
4892 var args = new Array(arguments.length -
1);
4893 if (arguments.length
> 1) {
4894 for (var i =
1; i < arguments.length; i++) {
4895 args[i -
1] = arguments[i];
4898 queue.push(new Item(fun, args));
4899 if (queue.length ===
1 && !draining) {
4900 setTimeout(drainQueue,
0);
4904 // v8 likes predictible objects
4905 function Item(fun, array) {
4909 Item.prototype.run = function () {
4910 this.fun.apply(null, this.array);
4912 process.title = 'browser';
4913 process.browser = true;
4916 process.version = ''; // empty string to avoid regexp issues
4917 process.versions = {};
4922 process.addListener = noop;
4923 process.once = noop;
4925 process.removeListener = noop;
4926 process.removeAllListeners = noop;
4927 process.emit = noop;
4929 process.binding = function (name) {
4930 throw new Error('process.binding is not supported');
4934 process.cwd = function () { return '/' };
4935 process.chdir = function (dir) {
4936 throw new Error('process.chdir is not supported');
4938 process.umask = function() { return
0; };
4940 },{}],
15:[function(require,module,exports){
4941 module.exports = require(
"./lib/_stream_duplex.js")
4943 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4944 (function (process){
4945 // Copyright Joyent, Inc. and other Node contributors.
4947 // Permission is hereby granted, free of charge, to any person obtaining a
4948 // copy of this software and associated documentation files (the
4949 //
"Software"), to deal in the Software without restriction, including
4950 // without limitation the rights to use, copy, modify, merge, publish,
4951 // distribute, sublicense, and/or sell copies of the Software, and to permit
4952 // persons to whom the Software is furnished to do so, subject to the
4953 // following conditions:
4955 // The above copyright notice and this permission notice shall be included
4956 // in all copies or substantial portions of the Software.
4958 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4959 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4960 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4961 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4962 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4963 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4964 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4966 // a duplex stream is just a stream that is both readable and writable.
4967 // Since JS doesn't have multiple prototypal inheritance, this class
4968 // prototypally inherits from Readable, and then parasitically from
4971 module.exports = Duplex;
4974 var objectKeys = Object.keys || function (obj) {
4976 for (var key in obj) keys.push(key);
4983 var util = require('core-util-is');
4984 util.inherits = require('inherits');
4987 var Readable = require('./_stream_readable');
4988 var Writable = require('./_stream_writable');
4990 util.inherits(Duplex, Readable);
4992 forEach(objectKeys(Writable.prototype), function(method) {
4993 if (!Duplex.prototype[method])
4994 Duplex.prototype[method] = Writable.prototype[method];
4997 function Duplex(options) {
4998 if (!(this instanceof Duplex))
4999 return new Duplex(options);
5001 Readable.call(this, options);
5002 Writable.call(this, options);
5004 if (options && options.readable === false)
5005 this.readable = false;
5007 if (options && options.writable === false)
5008 this.writable = false;
5010 this.allowHalfOpen = true;
5011 if (options && options.allowHalfOpen === false)
5012 this.allowHalfOpen = false;
5014 this.once('end', onend);
5017 // the no-half-open enforcer
5019 // if we allow half-open state, or if the writable side ended,
5021 if (this.allowHalfOpen || this._writableState.ended)
5024 // no more data can be written.
5025 // But allow more writes to happen in this tick.
5026 process.nextTick(this.end.bind(this));
5029 function forEach (xs, f) {
5030 for (var i =
0, l = xs.length; i < l; i++) {
5035 }).call(this,require('_process'))
5036 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
5037 // Copyright Joyent, Inc. and other Node contributors.
5039 // Permission is hereby granted, free of charge, to any person obtaining a
5040 // copy of this software and associated documentation files (the
5041 // "Software"), to deal in the Software without restriction, including
5042 // without limitation the rights to use, copy, modify, merge, publish,
5043 // distribute, sublicense, and/or sell copies of the Software, and to permit
5044 // persons to whom the Software is furnished to do so, subject to the
5045 // following conditions:
5047 // The above copyright notice and this permission notice shall be included
5048 // in all copies or substantial portions of the Software.
5050 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5051 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5052 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5053 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5054 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5055 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5056 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5058 // a passthrough stream.
5059 // basically just the most minimal sort of Transform stream.
5060 // Every written chunk gets output as-is.
5062 module.exports = PassThrough;
5064 var Transform = require('./_stream_transform');
5067 var util = require('core-util-is');
5068 util.inherits = require('inherits');
5071 util.inherits(PassThrough, Transform);
5073 function PassThrough(options) {
5074 if (!(this instanceof PassThrough))
5075 return new PassThrough(options);
5077 Transform.call(this, options);
5080 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5084 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5085 (function (process){
5086 // Copyright Joyent, Inc. and other Node contributors.
5088 // Permission is hereby granted, free of charge, to any person obtaining a
5089 // copy of this software and associated documentation files (the
5090 // "Software"), to deal in the Software without restriction, including
5091 // without limitation the rights to use, copy, modify, merge, publish,
5092 // distribute, sublicense, and/or sell copies of the Software, and to permit
5093 // persons to whom the Software is furnished to do so, subject to the
5094 // following conditions:
5096 // The above copyright notice and this permission notice shall be included
5097 // in all copies or substantial portions of the Software.
5099 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5100 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5101 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5102 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5103 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5104 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5105 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5107 module.exports = Readable;
5110 var isArray = require('isarray');
5115 var Buffer = require('buffer').Buffer;
5118 Readable.ReadableState = ReadableState;
5120 var EE = require('events').EventEmitter;
5123 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5124 return emitter.listeners(type).length;
5128 var Stream = require('stream');
5131 var util = require('core-util-is');
5132 util.inherits = require('inherits');
5139 var debug = require('util');
5140 if (debug && debug.debuglog) {
5141 debug = debug.debuglog('stream');
5143 debug = function () {};
5148 util.inherits(Readable, Stream);
5150 function ReadableState(options, stream) {
5151 var Duplex = require('./_stream_duplex');
5153 options = options || {};
5155 // the point at which it stops calling _read() to fill the buffer
5156 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5157 var hwm = options.highWaterMark;
5158 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5159 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5162 this.highWaterMark = ~~this.highWaterMark;
5167 this.pipesCount =
0;
5168 this.flowing = null;
5170 this.endEmitted = false;
5171 this.reading = false;
5173 // a flag to be able to tell if the onwrite cb is called immediately,
5174 // or on a later tick. We set this to true at first, because any
5175 // actions that shouldn't happen until "later" should generally also
5176 // not happen before the first write call.
5179 // whenever we return null, then we set a flag to say
5180 // that we're awaiting a 'readable' event emission.
5181 this.needReadable = false;
5182 this.emittedReadable = false;
5183 this.readableListening = false;
5186 // object stream flag. Used to make read(n) ignore n and to
5187 // make all the buffer merging and length checks go away
5188 this.objectMode = !!options.objectMode;
5190 if (stream instanceof Duplex)
5191 this.objectMode = this.objectMode || !!options.readableObjectMode;
5193 // Crypto is kind of old and crusty. Historically, its default string
5194 // encoding is 'binary' so we have to make this configurable.
5195 // Everything else in the universe uses 'utf8', though.
5196 this.defaultEncoding = options.defaultEncoding || 'utf8';
5198 // when piping, we only care about 'readable' events that happen
5199 // after read()ing all the bytes and not getting any pushback.
5200 this.ranOut = false;
5202 // the number of writers that are awaiting a drain event in .pipe()s
5203 this.awaitDrain =
0;
5205 // if true, a maybeReadMore has been scheduled
5206 this.readingMore = false;
5208 this.decoder = null;
5209 this.encoding = null;
5210 if (options.encoding) {
5212 StringDecoder = require('string_decoder/').StringDecoder;
5213 this.decoder = new StringDecoder(options.encoding);
5214 this.encoding = options.encoding;
5218 function Readable(options) {
5219 var Duplex = require('./_stream_duplex');
5221 if (!(this instanceof Readable))
5222 return new Readable(options);
5224 this._readableState = new ReadableState(options, this);
5227 this.readable = true;
5232 // Manually shove something into the read() buffer.
5233 // This returns true if the highWaterMark has not been hit yet,
5234 // similar to how Writable.write() returns true if you should
5235 // write() some more.
5236 Readable.prototype.push = function(chunk, encoding) {
5237 var state = this._readableState;
5239 if (util.isString(chunk) && !state.objectMode) {
5240 encoding = encoding || state.defaultEncoding;
5241 if (encoding !== state.encoding) {
5242 chunk = new Buffer(chunk, encoding);
5247 return readableAddChunk(this, state, chunk, encoding, false);
5250 // Unshift should *always* be something directly out of read()
5251 Readable.prototype.unshift = function(chunk) {
5252 var state = this._readableState;
5253 return readableAddChunk(this, state, chunk, '', true);
5256 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5257 var er = chunkInvalid(state, chunk);
5259 stream.emit('error', er);
5260 } else if (util.isNullOrUndefined(chunk)) {
5261 state.reading = false;
5263 onEofChunk(stream, state);
5264 } else if (state.objectMode || chunk && chunk.length
> 0) {
5265 if (state.ended && !addToFront) {
5266 var e = new Error('stream.push() after EOF');
5267 stream.emit('error', e);
5268 } else if (state.endEmitted && addToFront) {
5269 var e = new Error('stream.unshift() after end event');
5270 stream.emit('error', e);
5272 if (state.decoder && !addToFront && !encoding)
5273 chunk = state.decoder.write(chunk);
5276 state.reading = false;
5278 // if we want the data now, just emit it.
5279 if (state.flowing && state.length ===
0 && !state.sync) {
5280 stream.emit('data', chunk);
5283 // update the buffer info.
5284 state.length += state.objectMode ?
1 : chunk.length;
5286 state.buffer.unshift(chunk);
5288 state.buffer.push(chunk);
5290 if (state.needReadable)
5291 emitReadable(stream);
5294 maybeReadMore(stream, state);
5296 } else if (!addToFront) {
5297 state.reading = false;
5300 return needMoreData(state);
5305 // if it's past the high water mark, we can push in some more.
5306 // Also, if we have no data yet, we can stand some
5307 // more bytes. This is to work around cases where hwm=
0,
5308 // such as the repl. Also, if the push() triggered a
5309 // readable event, and the user called read(largeNumber) such that
5310 // needReadable was set, then we ought to push more, so that another
5311 // 'readable' event will be triggered.
5312 function needMoreData(state) {
5313 return !state.ended &&
5314 (state.needReadable ||
5315 state.length < state.highWaterMark ||
5316 state.length ===
0);
5319 // backwards compatibility.
5320 Readable.prototype.setEncoding = function(enc) {
5322 StringDecoder = require('string_decoder/').StringDecoder;
5323 this._readableState.decoder = new StringDecoder(enc);
5324 this._readableState.encoding = enc;
5328 // Don't raise the hwm
> 128MB
5329 var MAX_HWM =
0x800000;
5330 function roundUpToNextPowerOf2(n) {
5334 // Get the next highest power of
2
5336 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5342 function howMuchToRead(n, state) {
5343 if (state.length ===
0 && state.ended)
5346 if (state.objectMode)
5347 return n ===
0 ?
0 :
1;
5349 if (isNaN(n) || util.isNull(n)) {
5350 // only flow one buffer at a time
5351 if (state.flowing && state.buffer.length)
5352 return state.buffer[
0].length;
5354 return state.length;
5360 // If we're asking for more than the target buffer level,
5361 // then raise the water mark. Bump up to the next highest
5362 // power of
2, to prevent increasing it excessively in tiny
5364 if (n
> state.highWaterMark)
5365 state.highWaterMark = roundUpToNextPowerOf2(n);
5367 // don't have that much. return null, unless we've ended.
5368 if (n
> state.length) {
5370 state.needReadable = true;
5373 return state.length;
5379 // you can override either this method, or the async _read(n) below.
5380 Readable.prototype.read = function(n) {
5382 var state = this._readableState;
5385 if (!util.isNumber(n) || n
> 0)
5386 state.emittedReadable = false;
5388 // if we're doing read(
0) to trigger a readable event, but we
5389 // already have a bunch of data in the buffer, then just trigger
5390 // the 'readable' event and move on.
5392 state.needReadable &&
5393 (state.length
>= state.highWaterMark || state.ended)) {
5394 debug('read: emitReadable', state.length, state.ended);
5395 if (state.length ===
0 && state.ended)
5402 n = howMuchToRead(n, state);
5404 // if we've ended, and we're now clear, then finish it up.
5405 if (n ===
0 && state.ended) {
5406 if (state.length ===
0)
5411 // All the actual chunk generation logic needs to be
5412 // *below* the call to _read. The reason is that in certain
5413 // synthetic stream cases, such as passthrough streams, _read
5414 // may be a completely synchronous operation which may change
5415 // the state of the read buffer, providing enough data when
5416 // before there was *not* enough.
5418 // So, the steps are:
5419 //
1. Figure out what the state of things will be after we do
5420 // a read from the buffer.
5422 //
2. If that resulting state will trigger a _read, then call _read.
5423 // Note that this may be asynchronous, or synchronous. Yes, it is
5424 // deeply ugly to write APIs this way, but that still doesn't mean
5425 // that the Readable class should behave improperly, as streams are
5426 // designed to be sync/async agnostic.
5427 // Take note if the _read call is sync or async (ie, if the read call
5428 // has returned yet), so that we know whether or not it's safe to emit
5431 //
3. Actually pull the requested chunks out of the buffer and return.
5433 // if we need a readable event, then we need to do some reading.
5434 var doRead = state.needReadable;
5435 debug('need readable', doRead);
5437 // if we currently have less than the highWaterMark, then also read some
5438 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5440 debug('length less than watermark', doRead);
5443 // however, if we've ended, then there's no point, and if we're already
5444 // reading, then it's unnecessary.
5445 if (state.ended || state.reading) {
5447 debug('reading or ended', doRead);
5452 state.reading = true;
5454 // if the length is currently zero, then we *need* a readable event.
5455 if (state.length ===
0)
5456 state.needReadable = true;
5457 // call internal read method
5458 this._read(state.highWaterMark);
5462 // If _read pushed data synchronously, then `reading` will be false,
5463 // and we need to re-evaluate how much data we can return to the user.
5464 if (doRead && !state.reading)
5465 n = howMuchToRead(nOrig, state);
5469 ret = fromList(n, state);
5473 if (util.isNull(ret)) {
5474 state.needReadable = true;
5480 // If we have nothing in the buffer, then we want to know
5481 // as soon as we *do* get something into the buffer.
5482 if (state.length ===
0 && !state.ended)
5483 state.needReadable = true;
5485 // If we tried to read() past the EOF, then emit end on the next tick.
5486 if (nOrig !== n && state.ended && state.length ===
0)
5489 if (!util.isNull(ret))
5490 this.emit('data', ret);
5495 function chunkInvalid(state, chunk) {
5497 if (!util.isBuffer(chunk) &&
5498 !util.isString(chunk) &&
5499 !util.isNullOrUndefined(chunk) &&
5500 !state.objectMode) {
5501 er = new TypeError('Invalid non-string/buffer chunk');
5507 function onEofChunk(stream, state) {
5508 if (state.decoder && !state.ended) {
5509 var chunk = state.decoder.end();
5510 if (chunk && chunk.length) {
5511 state.buffer.push(chunk);
5512 state.length += state.objectMode ?
1 : chunk.length;
5517 // emit 'readable' now to make sure it gets picked up.
5518 emitReadable(stream);
5521 // Don't emit readable right away in sync mode, because this can trigger
5522 // another read() call =
> stack overflow. This way, it might trigger
5523 // a nextTick recursion warning, but that's not so bad.
5524 function emitReadable(stream) {
5525 var state = stream._readableState;
5526 state.needReadable = false;
5527 if (!state.emittedReadable) {
5528 debug('emitReadable', state.flowing);
5529 state.emittedReadable = true;
5531 process.nextTick(function() {
5532 emitReadable_(stream);
5535 emitReadable_(stream);
5539 function emitReadable_(stream) {
5540 debug('emit readable');
5541 stream.emit('readable');
5546 // at this point, the user has presumably seen the 'readable' event,
5547 // and called read() to consume some data. that may have triggered
5548 // in turn another _read(n) call, in which case reading = true if
5549 // it's in progress.
5550 // However, if we're not ended, or reading, and the length < hwm,
5551 // then go ahead and try to read some more preemptively.
5552 function maybeReadMore(stream, state) {
5553 if (!state.readingMore) {
5554 state.readingMore = true;
5555 process.nextTick(function() {
5556 maybeReadMore_(stream, state);
5561 function maybeReadMore_(stream, state) {
5562 var len = state.length;
5563 while (!state.reading && !state.flowing && !state.ended &&
5564 state.length < state.highWaterMark) {
5565 debug('maybeReadMore read
0');
5567 if (len === state.length)
5568 // didn't get any data, stop spinning.
5573 state.readingMore = false;
5576 // abstract method. to be overridden in specific implementation classes.
5577 // call cb(er, data) where data is <= n in length.
5578 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5579 // arbitrary, and perhaps not very meaningful.
5580 Readable.prototype._read = function(n) {
5581 this.emit('error', new Error('not implemented'));
5584 Readable.prototype.pipe = function(dest, pipeOpts) {
5586 var state = this._readableState;
5588 switch (state.pipesCount) {
5593 state.pipes = [state.pipes, dest];
5596 state.pipes.push(dest);
5599 state.pipesCount +=
1;
5600 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5602 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5603 dest !== process.stdout &&
5604 dest !== process.stderr;
5606 var endFn = doEnd ? onend : cleanup;
5607 if (state.endEmitted)
5608 process.nextTick(endFn);
5610 src.once('end', endFn);
5612 dest.on('unpipe', onunpipe);
5613 function onunpipe(readable) {
5615 if (readable === src) {
5625 // when the dest drains, it reduces the awaitDrain counter
5626 // on the source. This would be more elegant with a .once()
5627 // handler in flow(), but adding and removing repeatedly is
5629 var ondrain = pipeOnDrain(src);
5630 dest.on('drain', ondrain);
5632 function cleanup() {
5634 // cleanup event handlers once the pipe is broken
5635 dest.removeListener('close', onclose);
5636 dest.removeListener('finish', onfinish);
5637 dest.removeListener('drain', ondrain);
5638 dest.removeListener('error', onerror);
5639 dest.removeListener('unpipe', onunpipe);
5640 src.removeListener('end', onend);
5641 src.removeListener('end', cleanup);
5642 src.removeListener('data', ondata);
5644 // if the reader is waiting for a drain event from this
5645 // specific writer, then it would cause it to never start
5647 // So, if this is awaiting a drain, then we just call it now.
5648 // If we don't know, then assume that we are waiting for one.
5649 if (state.awaitDrain &&
5650 (!dest._writableState || dest._writableState.needDrain))
5654 src.on('data', ondata);
5655 function ondata(chunk) {
5657 var ret = dest.write(chunk);
5658 if (false === ret) {
5659 debug('false write response, pause',
5660 src._readableState.awaitDrain);
5661 src._readableState.awaitDrain++;
5666 // if the dest has an error, then stop piping into it.
5667 // however, don't suppress the throwing behavior for this.
5668 function onerror(er) {
5669 debug('onerror', er);
5671 dest.removeListener('error', onerror);
5672 if (EE.listenerCount(dest, 'error') ===
0)
5673 dest.emit('error', er);
5675 // This is a brutally ugly hack to make sure that our error handler
5676 // is attached before any userland ones. NEVER DO THIS.
5677 if (!dest._events || !dest._events.error)
5678 dest.on('error', onerror);
5679 else if (isArray(dest._events.error))
5680 dest._events.error.unshift(onerror);
5682 dest._events.error = [onerror, dest._events.error];
5686 // Both close and finish should trigger unpipe, but only once.
5687 function onclose() {
5688 dest.removeListener('finish', onfinish);
5691 dest.once('close', onclose);
5692 function onfinish() {
5694 dest.removeListener('close', onclose);
5697 dest.once('finish', onfinish);
5704 // tell the dest that it's being piped to
5705 dest.emit('pipe', src);
5707 // start the flow if it hasn't been started already.
5708 if (!state.flowing) {
5709 debug('pipe resume');
5716 function pipeOnDrain(src) {
5718 var state = src._readableState;
5719 debug('pipeOnDrain', state.awaitDrain);
5720 if (state.awaitDrain)
5722 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5723 state.flowing = true;
5730 Readable.prototype.unpipe = function(dest) {
5731 var state = this._readableState;
5733 // if we're not piping anywhere, then do nothing.
5734 if (state.pipesCount ===
0)
5737 // just one destination. most common case.
5738 if (state.pipesCount ===
1) {
5739 // passed in one, but it's not the right one.
5740 if (dest && dest !== state.pipes)
5748 state.pipesCount =
0;
5749 state.flowing = false;
5751 dest.emit('unpipe', this);
5755 // slow case. multiple pipe destinations.
5759 var dests = state.pipes;
5760 var len = state.pipesCount;
5762 state.pipesCount =
0;
5763 state.flowing = false;
5765 for (var i =
0; i < len; i++)
5766 dests[i].emit('unpipe', this);
5770 // try to find the right one.
5771 var i = indexOf(state.pipes, dest);
5775 state.pipes.splice(i,
1);
5776 state.pipesCount -=
1;
5777 if (state.pipesCount ===
1)
5778 state.pipes = state.pipes[
0];
5780 dest.emit('unpipe', this);
5785 // set up data events if they are asked for
5786 // Ensure readable listeners eventually get something
5787 Readable.prototype.on = function(ev, fn) {
5788 var res = Stream.prototype.on.call(this, ev, fn);
5790 // If listening to data, and it has not explicitly been paused,
5791 // then call resume to start the flow of data on the next tick.
5792 if (ev === 'data' && false !== this._readableState.flowing) {
5796 if (ev === 'readable' && this.readable) {
5797 var state = this._readableState;
5798 if (!state.readableListening) {
5799 state.readableListening = true;
5800 state.emittedReadable = false;
5801 state.needReadable = true;
5802 if (!state.reading) {
5804 process.nextTick(function() {
5805 debug('readable nexttick read
0');
5808 } else if (state.length) {
5809 emitReadable(this, state);
5816 Readable.prototype.addListener = Readable.prototype.on;
5818 // pause() and resume() are remnants of the legacy readable stream API
5819 // If the user uses them, then switch into old mode.
5820 Readable.prototype.resume = function() {
5821 var state = this._readableState;
5822 if (!state.flowing) {
5824 state.flowing = true;
5825 if (!state.reading) {
5826 debug('resume read
0');
5829 resume(this, state);
5834 function resume(stream, state) {
5835 if (!state.resumeScheduled) {
5836 state.resumeScheduled = true;
5837 process.nextTick(function() {
5838 resume_(stream, state);
5843 function resume_(stream, state) {
5844 state.resumeScheduled = false;
5845 stream.emit('resume');
5847 if (state.flowing && !state.reading)
5851 Readable.prototype.pause = function() {
5852 debug('call pause flowing=%j', this._readableState.flowing);
5853 if (false !== this._readableState.flowing) {
5855 this._readableState.flowing = false;
5861 function flow(stream) {
5862 var state = stream._readableState;
5863 debug('flow', state.flowing);
5864 if (state.flowing) {
5866 var chunk = stream.read();
5867 } while (null !== chunk && state.flowing);
5871 // wrap an old-style stream as the async data source.
5872 // This is *not* part of the readable stream interface.
5873 // It is an ugly unfortunate mess of history.
5874 Readable.prototype.wrap = function(stream) {
5875 var state = this._readableState;
5879 stream.on('end', function() {
5880 debug('wrapped end');
5881 if (state.decoder && !state.ended) {
5882 var chunk = state.decoder.end();
5883 if (chunk && chunk.length)
5890 stream.on('data', function(chunk) {
5891 debug('wrapped data');
5893 chunk = state.decoder.write(chunk);
5894 if (!chunk || !state.objectMode && !chunk.length)
5897 var ret = self.push(chunk);
5904 // proxy all the other methods.
5905 // important when wrapping filters and duplexes.
5906 for (var i in stream) {
5907 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5908 this[i] = function(method) { return function() {
5909 return stream[method].apply(stream, arguments);
5914 // proxy certain important events.
5915 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5916 forEach(events, function(ev) {
5917 stream.on(ev, self.emit.bind(self, ev));
5920 // when we try to consume some more bytes, simply unpause the
5921 // underlying stream.
5922 self._read = function(n) {
5923 debug('wrapped _read', n);
5935 // exposed for testing purposes only.
5936 Readable._fromList = fromList;
5938 // Pluck off n bytes from an array of buffers.
5939 // Length is the combined lengths of all the buffers in the list.
5940 function fromList(n, state) {
5941 var list = state.buffer;
5942 var length = state.length;
5943 var stringMode = !!state.decoder;
5944 var objectMode = !!state.objectMode;
5947 // nothing in the list, definitely empty.
5948 if (list.length ===
0)
5953 else if (objectMode)
5955 else if (!n || n
>= length) {
5956 // read it all, truncate the array.
5958 ret = list.join('');
5960 ret = Buffer.concat(list, length);
5963 // read just some of it.
5964 if (n < list[
0].length) {
5965 // just take a part of the first list item.
5966 // slice is the same for buffers and strings.
5968 ret = buf.slice(
0, n);
5969 list[
0] = buf.slice(n);
5970 } else if (n === list[
0].length) {
5971 // first list is a perfect match
5975 // we have enough to cover it, but it spans past the first buffer.
5979 ret = new Buffer(n);
5982 for (var i =
0, l = list.length; i < l && c < n; i++) {
5984 var cpy = Math.min(n - c, buf.length);
5987 ret += buf.slice(
0, cpy);
5989 buf.copy(ret, c,
0, cpy);
5991 if (cpy < buf.length)
5992 list[
0] = buf.slice(cpy);
6004 function endReadable(stream) {
6005 var state = stream._readableState;
6007 // If we get here before consuming all the bytes, then that is a
6008 // bug in node. Should never happen.
6009 if (state.length
> 0)
6010 throw new Error('endReadable called on non-empty stream');
6012 if (!state.endEmitted) {
6014 process.nextTick(function() {
6015 // Check that we didn't get one last unshift.
6016 if (!state.endEmitted && state.length ===
0) {
6017 state.endEmitted = true;
6018 stream.readable = false;
6025 function forEach (xs, f) {
6026 for (var i =
0, l = xs.length; i < l; i++) {
6031 function indexOf (xs, x) {
6032 for (var i =
0, l = xs.length; i < l; i++) {
6033 if (xs[i] === x) return i;
6038 }).call(this,require('_process'))
6039 },{
"./_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){
6040 // Copyright Joyent, Inc. and other Node contributors.
6042 // Permission is hereby granted, free of charge, to any person obtaining a
6043 // copy of this software and associated documentation files (the
6044 //
"Software"), to deal in the Software without restriction, including
6045 // without limitation the rights to use, copy, modify, merge, publish,
6046 // distribute, sublicense, and/or sell copies of the Software, and to permit
6047 // persons to whom the Software is furnished to do so, subject to the
6048 // following conditions:
6050 // The above copyright notice and this permission notice shall be included
6051 // in all copies or substantial portions of the Software.
6053 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6054 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6055 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6056 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6057 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6058 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6059 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6062 // a transform stream is a readable/writable stream where you do
6063 // something with the data. Sometimes it's called a
"filter",
6064 // but that's not a great name for it, since that implies a thing where
6065 // some bits pass through, and others are simply ignored. (That would
6066 // be a valid example of a transform, of course.)
6068 // While the output is causally related to the input, it's not a
6069 // necessarily symmetric or synchronous transformation. For example,
6070 // a zlib stream might take multiple plain-text writes(), and then
6071 // emit a single compressed chunk some time in the future.
6073 // Here's how this works:
6075 // The Transform stream has all the aspects of the readable and writable
6076 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6077 // internally, and returns false if there's a lot of pending writes
6078 // buffered up. When you call read(), that calls _read(n) until
6079 // there's enough pending readable data buffered up.
6081 // In a transform stream, the written data is placed in a buffer. When
6082 // _read(n) is called, it transforms the queued up data, calling the
6083 // buffered _write cb's as it consumes chunks. If consuming a single
6084 // written chunk would result in multiple output chunks, then the first
6085 // outputted bit calls the readcb, and subsequent chunks just go into
6086 // the read buffer, and will cause it to emit 'readable' if necessary.
6088 // This way, back-pressure is actually determined by the reading side,
6089 // since _read has to be called to start processing a new chunk. However,
6090 // a pathological inflate type of transform can cause excessive buffering
6091 // here. For example, imagine a stream where every byte of input is
6092 // interpreted as an integer from
0-
255, and then results in that many
6093 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6094 //
1kb of data being output. In this case, you could write a very small
6095 // amount of input, and end up with a very large amount of output. In
6096 // such a pathological inflating mechanism, there'd be no way to tell
6097 // the system to stop doing the transform. A single
4MB write could
6098 // cause the system to run out of memory.
6100 // However, even in such a pathological case, only a single written chunk
6101 // would be consumed, and then the rest would wait (un-transformed) until
6102 // the results of the previous transformed chunk were consumed.
6104 module.exports = Transform;
6106 var Duplex = require('./_stream_duplex');
6109 var util = require('core-util-is');
6110 util.inherits = require('inherits');
6113 util.inherits(Transform, Duplex);
6116 function TransformState(options, stream) {
6117 this.afterTransform = function(er, data) {
6118 return afterTransform(stream, er, data);
6121 this.needTransform = false;
6122 this.transforming = false;
6123 this.writecb = null;
6124 this.writechunk = null;
6127 function afterTransform(stream, er, data) {
6128 var ts = stream._transformState;
6129 ts.transforming = false;
6131 var cb = ts.writecb;
6134 return stream.emit('error', new Error('no writecb in Transform class'));
6136 ts.writechunk = null;
6139 if (!util.isNullOrUndefined(data))
6145 var rs = stream._readableState;
6147 if (rs.needReadable || rs.length < rs.highWaterMark) {
6148 stream._read(rs.highWaterMark);
6153 function Transform(options) {
6154 if (!(this instanceof Transform))
6155 return new Transform(options);
6157 Duplex.call(this, options);
6159 this._transformState = new TransformState(options, this);
6161 // when the writable side finishes, then flush out anything remaining.
6164 // start out asking for a readable event once data is transformed.
6165 this._readableState.needReadable = true;
6167 // we have implemented the _read method, and done the other things
6168 // that Readable wants before the first _read call, so unset the
6170 this._readableState.sync = false;
6172 this.once('prefinish', function() {
6173 if (util.isFunction(this._flush))
6174 this._flush(function(er) {
6182 Transform.prototype.push = function(chunk, encoding) {
6183 this._transformState.needTransform = false;
6184 return Duplex.prototype.push.call(this, chunk, encoding);
6187 // This is the part where you do stuff!
6188 // override this function in implementation classes.
6189 // 'chunk' is an input chunk.
6191 // Call `push(newChunk)` to pass along transformed output
6192 // to the readable side. You may call 'push' zero or more times.
6194 // Call `cb(err)` when you are done with this chunk. If you pass
6195 // an error, then that'll put the hurt on the whole operation. If you
6196 // never call cb(), then you'll never get another chunk.
6197 Transform.prototype._transform = function(chunk, encoding, cb) {
6198 throw new Error('not implemented');
6201 Transform.prototype._write = function(chunk, encoding, cb) {
6202 var ts = this._transformState;
6204 ts.writechunk = chunk;
6205 ts.writeencoding = encoding;
6206 if (!ts.transforming) {
6207 var rs = this._readableState;
6208 if (ts.needTransform ||
6210 rs.length < rs.highWaterMark)
6211 this._read(rs.highWaterMark);
6215 // Doesn't matter what the args are here.
6216 // _transform does all the work.
6217 // That we got here means that the readable side wants more data.
6218 Transform.prototype._read = function(n) {
6219 var ts = this._transformState;
6221 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6222 ts.transforming = true;
6223 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6225 // mark that we need a transform, so that any data that comes in
6226 // will get processed, now that we've asked for it.
6227 ts.needTransform = true;
6232 function done(stream, er) {
6234 return stream.emit('error', er);
6236 // if there's nothing in the write buffer, then that means
6237 // that nothing more will ever be provided
6238 var ws = stream._writableState;
6239 var ts = stream._transformState;
6242 throw new Error('calling transform done when ws.length !=
0');
6244 if (ts.transforming)
6245 throw new Error('calling transform done when still transforming');
6247 return stream.push(null);
6250 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6251 (function (process){
6252 // Copyright Joyent, Inc. and other Node contributors.
6254 // Permission is hereby granted, free of charge, to any person obtaining a
6255 // copy of this software and associated documentation files (the
6256 // "Software"), to deal in the Software without restriction, including
6257 // without limitation the rights to use, copy, modify, merge, publish,
6258 // distribute, sublicense, and/or sell copies of the Software, and to permit
6259 // persons to whom the Software is furnished to do so, subject to the
6260 // following conditions:
6262 // The above copyright notice and this permission notice shall be included
6263 // in all copies or substantial portions of the Software.
6265 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6266 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6267 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6268 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6269 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6270 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6271 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6273 // A bit simpler than readable streams.
6274 // Implement an async ._write(chunk, cb), and it'll handle all
6275 // the drain event emission and buffering.
6277 module.exports = Writable;
6280 var Buffer = require('buffer').Buffer;
6283 Writable.WritableState = WritableState;
6287 var util = require('core-util-is');
6288 util.inherits = require('inherits');
6291 var Stream = require('stream');
6293 util.inherits(Writable, Stream);
6295 function WriteReq(chunk, encoding, cb) {
6297 this.encoding = encoding;
6301 function WritableState(options, stream) {
6302 var Duplex = require('./_stream_duplex');
6304 options = options || {};
6306 // the point at which write() starts returning false
6307 // Note:
0 is a valid value, means that we always return false if
6308 // the entire buffer is not flushed immediately on write()
6309 var hwm = options.highWaterMark;
6310 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6311 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6313 // object stream flag to indicate whether or not this stream
6314 // contains buffers or objects.
6315 this.objectMode = !!options.objectMode;
6317 if (stream instanceof Duplex)
6318 this.objectMode = this.objectMode || !!options.writableObjectMode;
6321 this.highWaterMark = ~~this.highWaterMark;
6323 this.needDrain = false;
6324 // at the start of calling end()
6325 this.ending = false;
6326 // when end() has been called, and returned
6328 // when 'finish' is emitted
6329 this.finished = false;
6331 // should we decode strings into buffers before passing to _write?
6332 // this is here so that some node-core streams can optimize string
6333 // handling at a lower level.
6334 var noDecode = options.decodeStrings === false;
6335 this.decodeStrings = !noDecode;
6337 // Crypto is kind of old and crusty. Historically, its default string
6338 // encoding is 'binary' so we have to make this configurable.
6339 // Everything else in the universe uses 'utf8', though.
6340 this.defaultEncoding = options.defaultEncoding || 'utf8';
6342 // not an actual buffer we keep track of, but a measurement
6343 // of how much we're waiting to get pushed to some underlying
6347 // a flag to see when we're in the middle of a write.
6348 this.writing = false;
6350 // when true all writes will be buffered until .uncork() call
6353 // a flag to be able to tell if the onwrite cb is called immediately,
6354 // or on a later tick. We set this to true at first, because any
6355 // actions that shouldn't happen until "later" should generally also
6356 // not happen before the first write call.
6359 // a flag to know if we're processing previously buffered items, which
6360 // may call the _write() callback in the same tick, so that we don't
6361 // end up in an overlapped onwrite situation.
6362 this.bufferProcessing = false;
6364 // the callback that's passed to _write(chunk,cb)
6365 this.onwrite = function(er) {
6366 onwrite(stream, er);
6369 // the callback that the user supplies to write(chunk,encoding,cb)
6370 this.writecb = null;
6372 // the amount that is being written when _write is called.
6377 // number of pending user-supplied write callbacks
6378 // this must be
0 before 'finish' can be emitted
6381 // emit prefinish if the only thing we're waiting for is _write cbs
6382 // This is relevant for synchronous Transform streams
6383 this.prefinished = false;
6385 // True if the error was already emitted and should not be thrown again
6386 this.errorEmitted = false;
6389 function Writable(options) {
6390 var Duplex = require('./_stream_duplex');
6392 // Writable ctor is applied to Duplexes, though they're not
6393 // instanceof Writable, they're instanceof Readable.
6394 if (!(this instanceof Writable) && !(this instanceof Duplex))
6395 return new Writable(options);
6397 this._writableState = new WritableState(options, this);
6400 this.writable = true;
6405 // Otherwise people can pipe Writable streams, which is just wrong.
6406 Writable.prototype.pipe = function() {
6407 this.emit('error', new Error('Cannot pipe. Not readable.'));
6411 function writeAfterEnd(stream, state, cb) {
6412 var er = new Error('write after end');
6413 // TODO: defer error events consistently everywhere, not just the cb
6414 stream.emit('error', er);
6415 process.nextTick(function() {
6420 // If we get something that is not a buffer, string, null, or undefined,
6421 // and we're not in objectMode, then that's an error.
6422 // Otherwise stream chunks are all considered to be of length=
1, and the
6423 // watermarks determine how many objects to keep in the buffer, rather than
6424 // how many bytes or characters.
6425 function validChunk(stream, state, chunk, cb) {
6427 if (!util.isBuffer(chunk) &&
6428 !util.isString(chunk) &&
6429 !util.isNullOrUndefined(chunk) &&
6430 !state.objectMode) {
6431 var er = new TypeError('Invalid non-string/buffer chunk');
6432 stream.emit('error', er);
6433 process.nextTick(function() {
6441 Writable.prototype.write = function(chunk, encoding, cb) {
6442 var state = this._writableState;
6445 if (util.isFunction(encoding)) {
6450 if (util.isBuffer(chunk))
6451 encoding = 'buffer';
6453 encoding = state.defaultEncoding;
6455 if (!util.isFunction(cb))
6459 writeAfterEnd(this, state, cb);
6460 else if (validChunk(this, state, chunk, cb)) {
6462 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6468 Writable.prototype.cork = function() {
6469 var state = this._writableState;
6474 Writable.prototype.uncork = function() {
6475 var state = this._writableState;
6480 if (!state.writing &&
6483 !state.bufferProcessing &&
6484 state.buffer.length)
6485 clearBuffer(this, state);
6489 function decodeChunk(state, chunk, encoding) {
6490 if (!state.objectMode &&
6491 state.decodeStrings !== false &&
6492 util.isString(chunk)) {
6493 chunk = new Buffer(chunk, encoding);
6498 // if we're already writing something, then just put this
6499 // in the queue, and wait our turn. Otherwise, call _write
6500 // If we return false, then we need a drain event, so set that flag.
6501 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6502 chunk = decodeChunk(state, chunk, encoding);
6503 if (util.isBuffer(chunk))
6504 encoding = 'buffer';
6505 var len = state.objectMode ?
1 : chunk.length;
6507 state.length += len;
6509 var ret = state.length < state.highWaterMark;
6510 // we must ensure that previous needDrain will not be reset to false.
6512 state.needDrain = true;
6514 if (state.writing || state.corked)
6515 state.buffer.push(new WriteReq(chunk, encoding, cb));
6517 doWrite(stream, state, false, len, chunk, encoding, cb);
6522 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6523 state.writelen = len;
6525 state.writing = true;
6528 stream._writev(chunk, state.onwrite);
6530 stream._write(chunk, encoding, state.onwrite);
6534 function onwriteError(stream, state, sync, er, cb) {
6536 process.nextTick(function() {
6545 stream._writableState.errorEmitted = true;
6546 stream.emit('error', er);
6549 function onwriteStateUpdate(state) {
6550 state.writing = false;
6551 state.writecb = null;
6552 state.length -= state.writelen;
6556 function onwrite(stream, er) {
6557 var state = stream._writableState;
6558 var sync = state.sync;
6559 var cb = state.writecb;
6561 onwriteStateUpdate(state);
6564 onwriteError(stream, state, sync, er, cb);
6566 // Check if we're actually ready to finish, but don't emit yet
6567 var finished = needFinish(stream, state);
6571 !state.bufferProcessing &&
6572 state.buffer.length) {
6573 clearBuffer(stream, state);
6577 process.nextTick(function() {
6578 afterWrite(stream, state, finished, cb);
6581 afterWrite(stream, state, finished, cb);
6586 function afterWrite(stream, state, finished, cb) {
6588 onwriteDrain(stream, state);
6591 finishMaybe(stream, state);
6594 // Must force callback to be called on nextTick, so that we don't
6595 // emit 'drain' before the write() consumer gets the 'false' return
6596 // value, and has a chance to attach a 'drain' listener.
6597 function onwriteDrain(stream, state) {
6598 if (state.length ===
0 && state.needDrain) {
6599 state.needDrain = false;
6600 stream.emit('drain');
6605 // if there's something in the buffer waiting, then process it
6606 function clearBuffer(stream, state) {
6607 state.bufferProcessing = true;
6609 if (stream._writev && state.buffer.length
> 1) {
6610 // Fast case, write everything using _writev()
6612 for (var c =
0; c < state.buffer.length; c++)
6613 cbs.push(state.buffer[c].callback);
6615 // count the one we are adding, as well.
6616 // TODO(isaacs) clean this up
6618 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6619 for (var i =
0; i < cbs.length; i++) {
6628 // Slow case, write chunks one-by-one
6629 for (var c =
0; c < state.buffer.length; c++) {
6630 var entry = state.buffer[c];
6631 var chunk = entry.chunk;
6632 var encoding = entry.encoding;
6633 var cb = entry.callback;
6634 var len = state.objectMode ?
1 : chunk.length;
6636 doWrite(stream, state, false, len, chunk, encoding, cb);
6638 // if we didn't call the onwrite immediately, then
6639 // it means that we need to wait until it does.
6640 // also, that means that the chunk and cb are currently
6641 // being processed, so move the buffer counter past them.
6642 if (state.writing) {
6648 if (c < state.buffer.length)
6649 state.buffer = state.buffer.slice(c);
6651 state.buffer.length =
0;
6654 state.bufferProcessing = false;
6657 Writable.prototype._write = function(chunk, encoding, cb) {
6658 cb(new Error('not implemented'));
6662 Writable.prototype._writev = null;
6664 Writable.prototype.end = function(chunk, encoding, cb) {
6665 var state = this._writableState;
6667 if (util.isFunction(chunk)) {
6671 } else if (util.isFunction(encoding)) {
6676 if (!util.isNullOrUndefined(chunk))
6677 this.write(chunk, encoding);
6679 // .end() fully uncorks
6685 // ignore unnecessary end() calls.
6686 if (!state.ending && !state.finished)
6687 endWritable(this, state, cb);
6691 function needFinish(stream, state) {
6692 return (state.ending &&
6693 state.length ===
0 &&
6698 function prefinish(stream, state) {
6699 if (!state.prefinished) {
6700 state.prefinished = true;
6701 stream.emit('prefinish');
6705 function finishMaybe(stream, state) {
6706 var need = needFinish(stream, state);
6708 if (state.pendingcb ===
0) {
6709 prefinish(stream, state);
6710 state.finished = true;
6711 stream.emit('finish');
6713 prefinish(stream, state);
6718 function endWritable(stream, state, cb) {
6719 state.ending = true;
6720 finishMaybe(stream, state);
6723 process.nextTick(cb);
6725 stream.once('finish', cb);
6730 }).call(this,require('_process'))
6731 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6733 // Copyright Joyent, Inc. and other Node contributors.
6735 // Permission is hereby granted, free of charge, to any person obtaining a
6736 // copy of this software and associated documentation files (the
6737 //
"Software"), to deal in the Software without restriction, including
6738 // without limitation the rights to use, copy, modify, merge, publish,
6739 // distribute, sublicense, and/or sell copies of the Software, and to permit
6740 // persons to whom the Software is furnished to do so, subject to the
6741 // following conditions:
6743 // The above copyright notice and this permission notice shall be included
6744 // in all copies or substantial portions of the Software.
6746 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6747 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6748 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6749 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6750 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6751 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6752 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6754 // NOTE: These type checking functions intentionally don't use `instanceof`
6755 // because it is fragile and can be easily faked with `Object.create()`.
6756 function isArray(ar) {
6757 return Array.isArray(ar);
6759 exports.isArray = isArray;
6761 function isBoolean(arg) {
6762 return typeof arg === 'boolean';
6764 exports.isBoolean = isBoolean;
6766 function isNull(arg) {
6767 return arg === null;
6769 exports.isNull = isNull;
6771 function isNullOrUndefined(arg) {
6774 exports.isNullOrUndefined = isNullOrUndefined;
6776 function isNumber(arg) {
6777 return typeof arg === 'number';
6779 exports.isNumber = isNumber;
6781 function isString(arg) {
6782 return typeof arg === 'string';
6784 exports.isString = isString;
6786 function isSymbol(arg) {
6787 return typeof arg === 'symbol';
6789 exports.isSymbol = isSymbol;
6791 function isUndefined(arg) {
6792 return arg === void
0;
6794 exports.isUndefined = isUndefined;
6796 function isRegExp(re) {
6797 return isObject(re) && objectToString(re) === '[object RegExp]';
6799 exports.isRegExp = isRegExp;
6801 function isObject(arg) {
6802 return typeof arg === 'object' && arg !== null;
6804 exports.isObject = isObject;
6806 function isDate(d) {
6807 return isObject(d) && objectToString(d) === '[object Date]';
6809 exports.isDate = isDate;
6811 function isError(e) {
6812 return isObject(e) &&
6813 (objectToString(e) === '[object Error]' || e instanceof Error);
6815 exports.isError = isError;
6817 function isFunction(arg) {
6818 return typeof arg === 'function';
6820 exports.isFunction = isFunction;
6822 function isPrimitive(arg) {
6823 return arg === null ||
6824 typeof arg === 'boolean' ||
6825 typeof arg === 'number' ||
6826 typeof arg === 'string' ||
6827 typeof arg === 'symbol' || // ES6 symbol
6828 typeof arg === 'undefined';
6830 exports.isPrimitive = isPrimitive;
6832 function isBuffer(arg) {
6833 return Buffer.isBuffer(arg);
6835 exports.isBuffer = isBuffer;
6837 function objectToString(o) {
6838 return Object.prototype.toString.call(o);
6840 }).call(this,require(
"buffer").Buffer)
6841 },{
"buffer":
7}],
22:[function(require,module,exports){
6842 module.exports = require(
"./lib/_stream_passthrough.js")
6844 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6845 exports = module.exports = require('./lib/_stream_readable.js');
6846 exports.Stream = require('stream');
6847 exports.Readable = exports;
6848 exports.Writable = require('./lib/_stream_writable.js');
6849 exports.Duplex = require('./lib/_stream_duplex.js');
6850 exports.Transform = require('./lib/_stream_transform.js');
6851 exports.PassThrough = require('./lib/_stream_passthrough.js');
6853 },{
"./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){
6854 module.exports = require(
"./lib/_stream_transform.js")
6856 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6857 module.exports = require(
"./lib/_stream_writable.js")
6859 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6860 // Copyright Joyent, Inc. and other Node contributors.
6862 // Permission is hereby granted, free of charge, to any person obtaining a
6863 // copy of this software and associated documentation files (the
6864 //
"Software"), to deal in the Software without restriction, including
6865 // without limitation the rights to use, copy, modify, merge, publish,
6866 // distribute, sublicense, and/or sell copies of the Software, and to permit
6867 // persons to whom the Software is furnished to do so, subject to the
6868 // following conditions:
6870 // The above copyright notice and this permission notice shall be included
6871 // in all copies or substantial portions of the Software.
6873 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6874 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6875 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6876 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6877 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6878 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6879 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6881 module.exports = Stream;
6883 var EE = require('events').EventEmitter;
6884 var inherits = require('inherits');
6886 inherits(Stream, EE);
6887 Stream.Readable = require('readable-stream/readable.js');
6888 Stream.Writable = require('readable-stream/writable.js');
6889 Stream.Duplex = require('readable-stream/duplex.js');
6890 Stream.Transform = require('readable-stream/transform.js');
6891 Stream.PassThrough = require('readable-stream/passthrough.js');
6893 // Backwards-compat with node
0.4.x
6894 Stream.Stream = Stream;
6898 // old-style streams. Note that the pipe method (the only relevant
6899 // part of this class) is overridden in the Readable class.
6905 Stream.prototype.pipe = function(dest, options) {
6908 function ondata(chunk) {
6909 if (dest.writable) {
6910 if (false === dest.write(chunk) && source.pause) {
6916 source.on('data', ondata);
6918 function ondrain() {
6919 if (source.readable && source.resume) {
6924 dest.on('drain', ondrain);
6926 // If the 'end' option is not supplied, dest.end() will be called when
6927 // source gets the 'end' or 'close' events. Only dest.end() once.
6928 if (!dest._isStdio && (!options || options.end !== false)) {
6929 source.on('end', onend);
6930 source.on('close', onclose);
6933 var didOnEnd = false;
6935 if (didOnEnd) return;
6942 function onclose() {
6943 if (didOnEnd) return;
6946 if (typeof dest.destroy === 'function') dest.destroy();
6949 // don't leave dangling pipes when there are errors.
6950 function onerror(er) {
6952 if (EE.listenerCount(this, 'error') ===
0) {
6953 throw er; // Unhandled stream error in pipe.
6957 source.on('error', onerror);
6958 dest.on('error', onerror);
6960 // remove all the event listeners that were added.
6961 function cleanup() {
6962 source.removeListener('data', ondata);
6963 dest.removeListener('drain', ondrain);
6965 source.removeListener('end', onend);
6966 source.removeListener('close', onclose);
6968 source.removeListener('error', onerror);
6969 dest.removeListener('error', onerror);
6971 source.removeListener('end', cleanup);
6972 source.removeListener('close', cleanup);
6974 dest.removeListener('close', cleanup);
6977 source.on('end', cleanup);
6978 source.on('close', cleanup);
6980 dest.on('close', cleanup);
6982 dest.emit('pipe', source);
6984 // Allow for unix-like usage: A.pipe(B).pipe(C)
6988 },{
"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){
6989 // Copyright Joyent, Inc. and other Node contributors.
6991 // Permission is hereby granted, free of charge, to any person obtaining a
6992 // copy of this software and associated documentation files (the
6993 //
"Software"), to deal in the Software without restriction, including
6994 // without limitation the rights to use, copy, modify, merge, publish,
6995 // distribute, sublicense, and/or sell copies of the Software, and to permit
6996 // persons to whom the Software is furnished to do so, subject to the
6997 // following conditions:
6999 // The above copyright notice and this permission notice shall be included
7000 // in all copies or substantial portions of the Software.
7002 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7003 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7004 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7005 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7006 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7007 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7008 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7010 var Buffer = require('buffer').Buffer;
7012 var isBufferEncoding = Buffer.isEncoding
7013 || function(encoding) {
7014 switch (encoding && encoding.toLowerCase()) {
7015 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;
7016 default: return false;
7021 function assertEncoding(encoding) {
7022 if (encoding && !isBufferEncoding(encoding)) {
7023 throw new Error('Unknown encoding: ' + encoding);
7027 // StringDecoder provides an interface for efficiently splitting a series of
7028 // buffers into a series of JS strings without breaking apart multi-byte
7029 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
7031 // @TODO Handling all encodings inside a single object makes it very difficult
7032 // to reason about this code, so it should be split up in the future.
7033 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
7034 // points as used by CESU-
8.
7035 var StringDecoder = exports.StringDecoder = function(encoding) {
7036 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7037 assertEncoding(encoding);
7038 switch (this.encoding) {
7040 // CESU-
8 represents each of Surrogate Pair by
3-bytes
7041 this.surrogateSize =
3;
7045 // UTF-
16 represents each of Surrogate Pair by
2-bytes
7046 this.surrogateSize =
2;
7047 this.detectIncompleteChar = utf16DetectIncompleteChar;
7050 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
7051 this.surrogateSize =
3;
7052 this.detectIncompleteChar = base64DetectIncompleteChar;
7055 this.write = passThroughWrite;
7059 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7060 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7061 this.charBuffer = new Buffer(
6);
7062 // Number of bytes received for the current incomplete multi-byte character.
7063 this.charReceived =
0;
7064 // Number of bytes expected for the current incomplete multi-byte character.
7065 this.charLength =
0;
7069 // write decodes the given buffer and returns it as JS string that is
7070 // guaranteed to not contain any partial multi-byte characters. Any partial
7071 // character found at the end of the buffer is buffered up, and will be
7072 // returned when calling write again with the remaining bytes.
7074 // Note: Converting a Buffer containing an orphan surrogate to a String
7075 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7076 // Buffer#write) will replace incomplete surrogates with the unicode
7077 // replacement character. See https://codereview.chromium.org/
121173009/ .
7078 StringDecoder.prototype.write = function(buffer) {
7080 // if our last write ended with an incomplete multibyte character
7081 while (this.charLength) {
7082 // determine how many remaining bytes this buffer has to offer for this char
7083 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7084 this.charLength - this.charReceived :
7087 // add the new bytes to the char buffer
7088 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7089 this.charReceived += available;
7091 if (this.charReceived < this.charLength) {
7092 // still not enough chars in this buffer? wait for more ...
7096 // remove bytes belonging to the current character from the buffer
7097 buffer = buffer.slice(available, buffer.length);
7099 // get the character that was split
7100 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7102 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7103 var charCode = charStr.charCodeAt(charStr.length -
1);
7104 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7105 this.charLength += this.surrogateSize;
7109 this.charReceived = this.charLength =
0;
7111 // if there are no more bytes in this buffer, just emit our char
7112 if (buffer.length ===
0) {
7118 // determine and set charLength / charReceived
7119 this.detectIncompleteChar(buffer);
7121 var end = buffer.length;
7122 if (this.charLength) {
7123 // buffer the incomplete character bytes we got
7124 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7125 end -= this.charReceived;
7128 charStr += buffer.toString(this.encoding,
0, end);
7130 var end = charStr.length -
1;
7131 var charCode = charStr.charCodeAt(end);
7132 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7133 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7134 var size = this.surrogateSize;
7135 this.charLength += size;
7136 this.charReceived += size;
7137 this.charBuffer.copy(this.charBuffer, size,
0, size);
7138 buffer.copy(this.charBuffer,
0,
0, size);
7139 return charStr.substring(
0, end);
7142 // or just emit the charStr
7146 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7147 // the end of the given buffer. If so, it sets this.charLength to the byte
7148 // length that character, and sets this.charReceived to the number of bytes
7149 // that are available for this character.
7150 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7151 // determine how many bytes we have to check at the end of this buffer
7152 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7154 // Figure out if one of the last i bytes of our buffer announces an
7156 for (; i
> 0; i--) {
7157 var c = buffer[buffer.length - i];
7159 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7162 if (i ==
1 && c
>> 5 ==
0x06) {
7163 this.charLength =
2;
7168 if (i <=
2 && c
>> 4 ==
0x0E) {
7169 this.charLength =
3;
7174 if (i <=
3 && c
>> 3 ==
0x1E) {
7175 this.charLength =
4;
7179 this.charReceived = i;
7182 StringDecoder.prototype.end = function(buffer) {
7184 if (buffer && buffer.length)
7185 res = this.write(buffer);
7187 if (this.charReceived) {
7188 var cr = this.charReceived;
7189 var buf = this.charBuffer;
7190 var enc = this.encoding;
7191 res += buf.slice(
0, cr).toString(enc);
7197 function passThroughWrite(buffer) {
7198 return buffer.toString(this.encoding);
7201 function utf16DetectIncompleteChar(buffer) {
7202 this.charReceived = buffer.length %
2;
7203 this.charLength = this.charReceived ?
2 :
0;
7206 function base64DetectIncompleteChar(buffer) {
7207 this.charReceived = buffer.length %
3;
7208 this.charLength = this.charReceived ?
3 :
0;
7211 },{
"buffer":
7}],
28:[function(require,module,exports){
7212 module.exports = function isBuffer(arg) {
7213 return arg && typeof arg === 'object'
7214 && typeof arg.copy === 'function'
7215 && typeof arg.fill === 'function'
7216 && typeof arg.readUInt8 === 'function';
7218 },{}],
29:[function(require,module,exports){
7219 (function (process,global){
7220 // Copyright Joyent, Inc. and other Node contributors.
7222 // Permission is hereby granted, free of charge, to any person obtaining a
7223 // copy of this software and associated documentation files (the
7224 //
"Software"), to deal in the Software without restriction, including
7225 // without limitation the rights to use, copy, modify, merge, publish,
7226 // distribute, sublicense, and/or sell copies of the Software, and to permit
7227 // persons to whom the Software is furnished to do so, subject to the
7228 // following conditions:
7230 // The above copyright notice and this permission notice shall be included
7231 // in all copies or substantial portions of the Software.
7233 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7234 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7235 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7236 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7237 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7238 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7239 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7241 var formatRegExp = /%[sdj%]/g;
7242 exports.format = function(f) {
7245 for (var i =
0; i < arguments.length; i++) {
7246 objects.push(inspect(arguments[i]));
7248 return objects.join(' ');
7252 var args = arguments;
7253 var len = args.length;
7254 var str = String(f).replace(formatRegExp, function(x) {
7255 if (x === '%%') return '%';
7256 if (i
>= len) return x;
7258 case '%s': return String(args[i++]);
7259 case '%d': return Number(args[i++]);
7262 return JSON.stringify(args[i++]);
7264 return '[Circular]';
7270 for (var x = args[i]; i < len; x = args[++i]) {
7271 if (isNull(x) || !isObject(x)) {
7274 str += ' ' + inspect(x);
7281 // Mark that a method should not be used.
7282 // Returns a modified function which warns once by default.
7283 // If --no-deprecation is set, then it is a no-op.
7284 exports.deprecate = function(fn, msg) {
7285 // Allow for deprecating things in the process of starting up.
7286 if (isUndefined(global.process)) {
7288 return exports.deprecate(fn, msg).apply(this, arguments);
7292 if (process.noDeprecation === true) {
7297 function deprecated() {
7299 if (process.throwDeprecation) {
7300 throw new Error(msg);
7301 } else if (process.traceDeprecation) {
7308 return fn.apply(this, arguments);
7317 exports.debuglog = function(set) {
7318 if (isUndefined(debugEnviron))
7319 debugEnviron = process.env.NODE_DEBUG || '';
7320 set = set.toUpperCase();
7322 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7323 var pid = process.pid;
7324 debugs[set] = function() {
7325 var msg = exports.format.apply(exports, arguments);
7326 console.error('%s %d: %s', set, pid, msg);
7329 debugs[set] = function() {};
7337 * Echos the value of a value. Trys to print the value out
7338 * in the best way possible given the different types.
7340 * @param {Object} obj The object to print out.
7341 * @param {Object} opts Optional options object that alters the output.
7343 /* legacy: obj, showHidden, depth, colors*/
7344 function inspect(obj, opts) {
7348 stylize: stylizeNoColor
7351 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7352 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7353 if (isBoolean(opts)) {
7355 ctx.showHidden = opts;
7357 // got an "options" object
7358 exports._extend(ctx, opts);
7360 // set default options
7361 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7362 if (isUndefined(ctx.depth)) ctx.depth =
2;
7363 if (isUndefined(ctx.colors)) ctx.colors = false;
7364 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7365 if (ctx.colors) ctx.stylize = stylizeWithColor;
7366 return formatValue(ctx, obj, ctx.depth);
7368 exports.inspect = inspect;
7371 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7375 'underline' : [
4,
24],
7376 'inverse' : [
7,
27],
7383 'magenta' : [
35,
39],
7388 // Don't use 'blue' not visible on cmd.exe
7392 'boolean': 'yellow',
7393 'undefined': 'grey',
7397 // "name": intentionally not styling
7402 function stylizeWithColor(str, styleType) {
7403 var style = inspect.styles[styleType];
7406 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7407 '\u001b[' + inspect.colors[style][
1] + 'm';
7414 function stylizeNoColor(str, styleType) {
7419 function arrayToHash(array) {
7422 array.forEach(function(val, idx) {
7430 function formatValue(ctx, value, recurseTimes) {
7431 // Provide a hook for user-specified inspect functions.
7432 // Check that value is an object with an inspect function on it
7433 if (ctx.customInspect &&
7435 isFunction(value.inspect) &&
7436 // Filter out the util module, it's inspect function is special
7437 value.inspect !== exports.inspect &&
7438 // Also filter out any prototype objects using the circular check.
7439 !(value.constructor && value.constructor.prototype === value)) {
7440 var ret = value.inspect(recurseTimes, ctx);
7441 if (!isString(ret)) {
7442 ret = formatValue(ctx, ret, recurseTimes);
7447 // Primitive types cannot have properties
7448 var primitive = formatPrimitive(ctx, value);
7453 // Look up the keys of the object.
7454 var keys = Object.keys(value);
7455 var visibleKeys = arrayToHash(keys);
7457 if (ctx.showHidden) {
7458 keys = Object.getOwnPropertyNames(value);
7461 // IE doesn't make error fields non-enumerable
7462 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7464 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7465 return formatError(value);
7468 // Some type of object without properties can be shortcutted.
7469 if (keys.length ===
0) {
7470 if (isFunction(value)) {
7471 var name = value.name ? ': ' + value.name : '';
7472 return ctx.stylize('[Function' + name + ']', 'special');
7474 if (isRegExp(value)) {
7475 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7477 if (isDate(value)) {
7478 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7480 if (isError(value)) {
7481 return formatError(value);
7485 var base = '', array = false, braces = ['{', '}'];
7487 // Make Array say that they are Array
7488 if (isArray(value)) {
7490 braces = ['[', ']'];
7493 // Make functions say that they are functions
7494 if (isFunction(value)) {
7495 var n = value.name ? ': ' + value.name : '';
7496 base = ' [Function' + n + ']';
7499 // Make RegExps say that they are RegExps
7500 if (isRegExp(value)) {
7501 base = ' ' + RegExp.prototype.toString.call(value);
7504 // Make dates with properties first say the date
7505 if (isDate(value)) {
7506 base = ' ' + Date.prototype.toUTCString.call(value);
7509 // Make error with message first say the error
7510 if (isError(value)) {
7511 base = ' ' + formatError(value);
7514 if (keys.length ===
0 && (!array || value.length ==
0)) {
7515 return braces[
0] + base + braces[
1];
7518 if (recurseTimes <
0) {
7519 if (isRegExp(value)) {
7520 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7522 return ctx.stylize('[Object]', 'special');
7526 ctx.seen.push(value);
7530 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7532 output = keys.map(function(key) {
7533 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7539 return reduceToSingleString(output, base, braces);
7543 function formatPrimitive(ctx, value) {
7544 if (isUndefined(value))
7545 return ctx.stylize('undefined', 'undefined');
7546 if (isString(value)) {
7547 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7548 .replace(/'/g, "\\'")
7549 .replace(/\\"/g, '"') + '\'';
7550 return ctx.stylize(simple, 'string');
7552 if (isNumber(value))
7553 return ctx.stylize('' + value, 'number');
7554 if (isBoolean(value))
7555 return ctx.stylize('' + value, 'boolean');
7556 // For some reason typeof null is "object", so special case here.
7558 return ctx.stylize('null', 'null');
7562 function formatError(value) {
7563 return '[' + Error.prototype.toString.call(value) + ']';
7567 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7569 for (var i =
0, l = value.length; i < l; ++i) {
7570 if (hasOwnProperty(value, String(i))) {
7571 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7577 keys.forEach(function(key) {
7578 if (!key.match(/^\d+$/)) {
7579 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7587 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7588 var name, str, desc;
7589 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7592 str = ctx.stylize('[Getter/Setter]', 'special');
7594 str = ctx.stylize('[Getter]', 'special');
7598 str = ctx.stylize('[Setter]', 'special');
7601 if (!hasOwnProperty(visibleKeys, key)) {
7602 name = '[' + key + ']';
7605 if (ctx.seen.indexOf(desc.value) <
0) {
7606 if (isNull(recurseTimes)) {
7607 str = formatValue(ctx, desc.value, null);
7609 str = formatValue(ctx, desc.value, recurseTimes -
1);
7611 if (str.indexOf('\n')
> -
1) {
7613 str = str.split('\n').map(function(line) {
7615 }).join('\n').substr(
2);
7617 str = '\n' + str.split('\n').map(function(line) {
7623 str = ctx.stylize('[Circular]', 'special');
7626 if (isUndefined(name)) {
7627 if (array && key.match(/^\d+$/)) {
7630 name = JSON.stringify('' + key);
7631 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7632 name = name.substr(
1, name.length -
2);
7633 name = ctx.stylize(name, 'name');
7635 name = name.replace(/'/g, "\\'")
7636 .replace(/\\"/g, '"')
7637 .replace(/(^"|"$)/g, "'");
7638 name = ctx.stylize(name, 'string');
7642 return name + ': ' + str;
7646 function reduceToSingleString(output, base, braces) {
7647 var numLinesEst =
0;
7648 var length = output.reduce(function(prev, cur) {
7650 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7651 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7656 (base === '' ? '' : base + '\n ') +
7658 output.join(',\n ') +
7663 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7667 // NOTE: These type checking functions intentionally don't use `instanceof`
7668 // because it is fragile and can be easily faked with `Object.create()`.
7669 function isArray(ar) {
7670 return Array.isArray(ar);
7672 exports.isArray = isArray;
7674 function isBoolean(arg) {
7675 return typeof arg === 'boolean';
7677 exports.isBoolean = isBoolean;
7679 function isNull(arg) {
7680 return arg === null;
7682 exports.isNull = isNull;
7684 function isNullOrUndefined(arg) {
7687 exports.isNullOrUndefined = isNullOrUndefined;
7689 function isNumber(arg) {
7690 return typeof arg === 'number';
7692 exports.isNumber = isNumber;
7694 function isString(arg) {
7695 return typeof arg === 'string';
7697 exports.isString = isString;
7699 function isSymbol(arg) {
7700 return typeof arg === 'symbol';
7702 exports.isSymbol = isSymbol;
7704 function isUndefined(arg) {
7705 return arg === void
0;
7707 exports.isUndefined = isUndefined;
7709 function isRegExp(re) {
7710 return isObject(re) && objectToString(re) === '[object RegExp]';
7712 exports.isRegExp = isRegExp;
7714 function isObject(arg) {
7715 return typeof arg === 'object' && arg !== null;
7717 exports.isObject = isObject;
7719 function isDate(d) {
7720 return isObject(d) && objectToString(d) === '[object Date]';
7722 exports.isDate = isDate;
7724 function isError(e) {
7725 return isObject(e) &&
7726 (objectToString(e) === '[object Error]' || e instanceof Error);
7728 exports.isError = isError;
7730 function isFunction(arg) {
7731 return typeof arg === 'function';
7733 exports.isFunction = isFunction;
7735 function isPrimitive(arg) {
7736 return arg === null ||
7737 typeof arg === 'boolean' ||
7738 typeof arg === 'number' ||
7739 typeof arg === 'string' ||
7740 typeof arg === 'symbol' || // ES6 symbol
7741 typeof arg === 'undefined';
7743 exports.isPrimitive = isPrimitive;
7745 exports.isBuffer = require('./support/isBuffer');
7747 function objectToString(o) {
7748 return Object.prototype.toString.call(o);
7753 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7757 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7758 'Oct', 'Nov', 'Dec'];
7761 function timestamp() {
7763 var time = [pad(d.getHours()),
7764 pad(d.getMinutes()),
7765 pad(d.getSeconds())].join(':');
7766 return [d.getDate(), months[d.getMonth()], time].join(' ');
7770 // log is just a thin wrapper to console.log that prepends a timestamp
7771 exports.log = function() {
7772 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7777 * Inherit the prototype methods from one constructor into another.
7779 * The Function.prototype.inherits from lang.js rewritten as a standalone
7780 * function (not on Function.prototype). NOTE: If this file is to be loaded
7781 * during bootstrapping this function needs to be rewritten using some native
7782 * functions as prototype setup using normal JavaScript does not work as
7783 * expected during bootstrapping (see mirror.js in r114903).
7785 * @param {function} ctor Constructor function which needs to inherit the
7787 * @param {function} superCtor Constructor function to inherit prototype from.
7789 exports.inherits = require('inherits');
7791 exports._extend = function(origin, add) {
7792 // Don't do anything if add isn't an object
7793 if (!add || !isObject(add)) return origin;
7795 var keys = Object.keys(add);
7796 var i = keys.length;
7798 origin[keys[i]] = add[keys[i]];
7803 function hasOwnProperty(obj, prop) {
7804 return Object.prototype.hasOwnProperty.call(obj, prop);
7807 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7808 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7809 // Base58 encoding/decoding
7810 // Originally written by Mike Hearn for BitcoinJ
7811 // Copyright (c)
2011 Google Inc
7812 // Ported to JavaScript by Stefan Thomas
7813 // Merged Buffer refactorings from base58-native by Stephen Pair
7814 // Copyright (c)
2013 BitPay Inc
7816 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7817 var ALPHABET_MAP = {}
7818 for(var i =
0; i < ALPHABET.length; i++) {
7819 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7823 function encode(buffer) {
7824 if (buffer.length ===
0) return ''
7826 var i, j, digits = [
0]
7827 for (i =
0; i < buffer.length; i++) {
7828 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7830 digits[
0] += buffer[i]
7833 for (j =
0; j < digits.length; ++j) {
7836 carry = (digits[j] / BASE) |
0
7841 digits.push(carry % BASE)
7843 carry = (carry / BASE) |
0
7847 // deal with leading zeros
7848 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7850 // convert digits to a string
7851 var stringOutput =
""
7852 for (var i = digits.length -
1; i
>=
0; i--) {
7853 stringOutput = stringOutput + ALPHABET[digits[i]]
7858 function decode(string) {
7859 if (string.length ===
0) return []
7861 var i, j, bytes = [
0]
7862 for (i =
0; i < string.length; i++) {
7864 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7866 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7867 bytes[
0] += ALPHABET_MAP[c]
7870 for (j =
0; j < bytes.length; ++j) {
7873 carry = bytes[j]
>> 8
7878 bytes.push(carry &
0xff)
7884 // deal with leading zeros
7885 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7887 return bytes.reverse()
7895 },{}],
31:[function(require,module,exports){
7899 var base58 = require('bs58')
7900 var createHash = require('create-hash')
7902 // SHA256(SHA256(buffer))
7903 function sha256x2 (buffer) {
7904 buffer = createHash('sha256').update(buffer).digest()
7905 return createHash('sha256').update(buffer).digest()
7908 // Encode a buffer as a base58-check encoded string
7909 function encode (payload) {
7910 var checksum = sha256x2(payload).slice(
0,
4)
7912 return base58.encode(Buffer.concat([
7918 // Decode a base58-check encoded string to a buffer
7919 function decode (string) {
7920 var buffer = new Buffer(base58.decode(string))
7922 var payload = buffer.slice(
0, -
4)
7923 var checksum = buffer.slice(-
4)
7924 var newChecksum = sha256x2(payload).slice(
0,
4)
7926 for (var i =
0; i < newChecksum.length; ++i) {
7927 if (newChecksum[i] === checksum[i]) continue
7929 throw new Error('Invalid checksum')
7940 }).call(this,require("buffer").Buffer)
7941 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7944 var inherits = require('inherits')
7945 var md5 = require('./md5')
7946 var rmd160 = require('ripemd160')
7947 var sha = require('sha.js')
7949 var Transform = require('stream').Transform
7951 function HashNoConstructor(hash) {
7952 Transform.call(this)
7958 inherits(HashNoConstructor, Transform)
7960 HashNoConstructor.prototype._transform = function (data, _, next) {
7961 this.buffers.push(data)
7966 HashNoConstructor.prototype._flush = function (next) {
7967 this.push(this.digest())
7971 HashNoConstructor.prototype.update = function (data, enc) {
7972 if (typeof data === 'string') {
7973 data = new Buffer(data, enc)
7976 this.buffers.push(data)
7980 HashNoConstructor.prototype.digest = function (enc) {
7981 var buf = Buffer.concat(this.buffers)
7982 var r = this._hash(buf)
7985 return enc ? r.toString(enc) : r
7988 function Hash(hash) {
7989 Transform.call(this)
7994 inherits(Hash, Transform)
7996 Hash.prototype._transform = function (data, enc, next) {
7997 if (enc) data = new Buffer(data, enc)
7999 this._hash.update(data)
8004 Hash.prototype._flush = function (next) {
8005 this.push(this._hash.digest())
8011 Hash.prototype.update = function (data, enc) {
8012 if (typeof data === 'string') {
8013 data = new Buffer(data, enc)
8016 this._hash.update(data)
8020 Hash.prototype.digest = function (enc) {
8021 var outData = this._hash.digest()
8023 return enc ? outData.toString(enc) : outData
8026 module.exports = function createHash (alg) {
8027 if ('md5' === alg) return new HashNoConstructor(md5)
8028 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8030 return new Hash(sha(alg))
8033 }).call(this,require("buffer").Buffer)
8034 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
8038 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
8041 function toArray(buf, bigEndian) {
8042 if ((buf.length % intSize) !==
0) {
8043 var len = buf.length + (intSize - (buf.length % intSize));
8044 buf = Buffer.concat([buf, zeroBuffer], len);
8048 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8049 for (var i =
0; i < buf.length; i += intSize) {
8050 arr.push(fn.call(buf, i));
8055 function toBuffer(arr, size, bigEndian) {
8056 var buf = new Buffer(size);
8057 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8058 for (var i =
0; i < arr.length; i++) {
8059 fn.call(buf, arr[i], i *
4, true);
8064 function hash(buf, fn, hashSize, bigEndian) {
8065 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8066 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8067 return toBuffer(arr, hashSize, bigEndian);
8069 exports.hash = hash;
8070 }).call(this,require("buffer").Buffer)
8071 },{"buffer":
7}],
34:[function(require,module,exports){
8074 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8075 * Digest Algorithm, as defined in RFC
1321.
8076 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8077 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8078 * Distributed under the BSD License
8079 * See http://pajhome.org.uk/crypt/md5 for more info.
8082 var helpers = require('./helpers');
8085 * Calculate the MD5 of an array of little-endian words, and a bit length
8087 function core_md5(x, len)
8089 /* append padding */
8090 x[len
>> 5] |=
0x80 << ((len) %
32);
8091 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8095 var c = -
1732584194;
8098 for(var i =
0; i < x.length; i +=
16)
8105 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8106 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8107 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8108 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8109 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8110 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8111 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8112 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8113 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8114 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8115 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8116 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8117 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8118 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8119 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8120 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8122 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8123 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8124 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8125 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8126 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8127 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8128 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8129 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8130 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8131 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8132 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8133 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8134 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8135 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8136 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8137 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8139 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8140 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8141 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8142 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8143 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8144 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8145 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8146 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8147 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8148 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8149 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8150 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8151 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8152 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8153 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8154 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8156 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8157 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8158 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8159 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8160 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8161 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8162 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8163 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8164 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8165 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8166 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8167 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8168 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8169 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8170 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8171 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8173 a = safe_add(a, olda);
8174 b = safe_add(b, oldb);
8175 c = safe_add(c, oldc);
8176 d = safe_add(d, oldd);
8178 return Array(a, b, c, d);
8183 * These functions implement the four basic operations the algorithm uses.
8185 function md5_cmn(q, a, b, x, s, t)
8187 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8189 function md5_ff(a, b, c, d, x, s, t)
8191 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8193 function md5_gg(a, b, c, d, x, s, t)
8195 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8197 function md5_hh(a, b, c, d, x, s, t)
8199 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8201 function md5_ii(a, b, c, d, x, s, t)
8203 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8207 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8208 * to work around bugs in some JS interpreters.
8210 function safe_add(x, y)
8212 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8213 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8214 return (msw <<
16) | (lsw &
0xFFFF);
8218 * Bitwise rotate a
32-bit number to the left.
8220 function bit_rol(num, cnt)
8222 return (num << cnt) | (num
>>> (
32 - cnt));
8225 module.exports = function md5(buf) {
8226 return helpers.hash(buf, core_md5,
16);
8228 },{"./helpers":
33}],
35:[function(require,module,exports){
8229 arguments[
4][
12][
0].apply(exports,arguments)
8230 },{"dup":
12}],
36:[function(require,module,exports){
8234 code.google.com/p/crypto-js
8235 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8236 code.google.com/p/crypto-js/wiki/License
8239 (c)
2012 by Cédric Mesnil. All rights reserved.
8241 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8243 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8244 - 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.
8246 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.
8251 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8252 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8253 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8254 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8255 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8259 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8260 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8261 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8262 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8263 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8267 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8268 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8269 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8270 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8271 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8275 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8276 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8277 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8278 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8279 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8282 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8283 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8285 function bytesToWords (bytes) {
8287 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8288 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8293 function wordsToBytes (words) {
8295 for (var b =
0; b < words.length *
32; b +=
8) {
8296 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8301 function processBlock (H, M, offset) {
8303 for (var i =
0; i <
16; i++) {
8304 var offset_i = offset + i
8305 var M_offset_i = M[offset_i]
8309 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8310 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8314 // Working variables
8315 var al, bl, cl, dl, el
8316 var ar, br, cr, dr, er
8326 for (i =
0; i <
80; i +=
1) {
8327 t = (al + M[offset + zl[i]]) |
0
8329 t += f1(bl, cl, dl) + hl[
0]
8330 } else if (i <
32) {
8331 t += f2(bl, cl, dl) + hl[
1]
8332 } else if (i <
48) {
8333 t += f3(bl, cl, dl) + hl[
2]
8334 } else if (i <
64) {
8335 t += f4(bl, cl, dl) + hl[
3]
8336 } else {// if (i
<80) {
8337 t += f5(bl, cl, dl) + hl[
4]
8348 t = (ar + M[offset + zr[i]]) |
0
8350 t += f5(br, cr, dr) + hr[
0]
8351 } else if (i <
32) {
8352 t += f4(br, cr, dr) + hr[
1]
8353 } else if (i <
48) {
8354 t += f3(br, cr, dr) + hr[
2]
8355 } else if (i <
64) {
8356 t += f2(br, cr, dr) + hr[
3]
8357 } else {// if (i
<80) {
8358 t += f1(br, cr, dr) + hr[
4]
8371 // intermediate hash value
8372 t = (H[
1] + cl + dr) |
0
8373 H[
1] = (H[
2] + dl + er) |
0
8374 H[
2] = (H[
3] + el + ar) |
0
8375 H[
3] = (H[
4] + al + br) |
0
8376 H[
4] = (H[
0] + bl + cr) |
0
8380 function f1 (x, y, z) {
8381 return ((x) ^ (y) ^ (z))
8384 function f2 (x, y, z) {
8385 return (((x) & (y)) | ((~x) & (z)))
8388 function f3 (x, y, z) {
8389 return (((x) | (~(y))) ^ (z))
8392 function f4 (x, y, z) {
8393 return (((x) & (z)) | ((y) & (~(z))))
8396 function f5 (x, y, z) {
8397 return ((x) ^ ((y) | (~(z))))
8400 function rotl (x, n) {
8401 return (x << n) | (x
>>> (
32 - n))
8404 function ripemd160 (message) {
8405 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8407 if (typeof message === 'string') {
8408 message = new Buffer(message, 'utf8')
8411 var m = bytesToWords(message)
8413 var nBitsLeft = message.length *
8
8414 var nBitsTotal = message.length *
8
8417 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8418 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8419 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8420 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8423 for (var i =
0; i < m.length; i +=
16) {
8424 processBlock(H, m, i)
8428 for (i =
0; i <
5; i++) {
8433 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8434 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8437 var digestbytes = wordsToBytes(H)
8438 return new Buffer(digestbytes)
8441 module.exports = ripemd160
8443 }).call(this,require(
"buffer").Buffer)
8444 },{
"buffer":
7}],
37:[function(require,module,exports){
8446 // prototype class for hash functions
8447 function Hash (blockSize, finalSize) {
8448 this._block = new Buffer(blockSize)
8449 this._finalSize = finalSize
8450 this._blockSize = blockSize
8455 Hash.prototype.update = function (data, enc) {
8456 if (typeof data === 'string') {
8458 data = new Buffer(data, enc)
8461 var l = this._len += data.length
8462 var s = this._s ||
0
8464 var buffer = this._block
8467 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8470 for (var i =
0; i < ch; i++) {
8471 buffer[(s % this._blockSize) + i] = data[i + f]
8477 if ((s % this._blockSize) ===
0) {
8478 this._update(buffer)
8486 Hash.prototype.digest = function (enc) {
8487 // Suppose the length of the message M, in bits, is l
8488 var l = this._len *
8
8490 // Append the bit
1 to the end of the message
8491 this._block[this._len % this._blockSize] =
0x80
8493 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8494 this._block.fill(
0, this._len % this._blockSize +
1)
8496 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8497 this._update(this._block)
8501 // to this append the block which is equal to the number l written in binary
8502 // TODO: handle case where l is
> Math.pow(
2,
29)
8503 this._block.writeInt32BE(l, this._blockSize -
4)
8505 var hash = this._update(this._block) || this._hash()
8507 return enc ? hash.toString(enc) : hash
8510 Hash.prototype._update = function () {
8511 throw new Error('_update must be implemented by subclass')
8514 module.exports = Hash
8516 }).call(this,require("buffer").Buffer)
8517 },{"buffer":
7}],
38:[function(require,module,exports){
8518 var exports = module.exports = function SHA (algorithm) {
8519 algorithm = algorithm.toLowerCase()
8521 var Algorithm = exports[algorithm]
8522 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8524 return new Algorithm()
8527 exports.sha = require('./sha')
8528 exports.sha1 = require('./sha1')
8529 exports.sha224 = require('./sha224')
8530 exports.sha256 = require('./sha256')
8531 exports.sha384 = require('./sha384')
8532 exports.sha512 = require('./sha512')
8534 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8537 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8539 * This source code is derived from sha1.js of the same repository.
8540 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8541 * operation was added.
8544 var inherits = require('inherits')
8545 var Hash = require('./hash')
8547 var W = new Array(
80)
8553 Hash.call(this,
64,
56)
8558 Sha.prototype.init = function () {
8559 this._a =
0x67452301 |
0
8560 this._b =
0xefcdab89 |
0
8561 this._c =
0x98badcfe |
0
8562 this._d =
0x10325476 |
0
8563 this._e =
0xc3d2e1f0 |
0
8569 * Bitwise rotate a
32-bit number to the left.
8571 function rol (num, cnt) {
8572 return (num << cnt) | (num
>>> (
32 - cnt))
8575 Sha.prototype._update = function (M) {
8587 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8588 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8590 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8591 function loop (w, f) {
8594 var t = rol(a,
5) + f + e + w + k
8605 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8606 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8608 while (j <
40) loop(calcW(), b ^ c ^ d)
8610 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8612 while (j <
80) loop(calcW(), b ^ c ^ d)
8614 this._a = (a + this._a) |
0
8615 this._b = (b + this._b) |
0
8616 this._c = (c + this._c) |
0
8617 this._d = (d + this._d) |
0
8618 this._e = (e + this._e) |
0
8621 Sha.prototype._hash = function () {
8622 var H = new Buffer(
20)
8624 H.writeInt32BE(this._a |
0,
0)
8625 H.writeInt32BE(this._b |
0,
4)
8626 H.writeInt32BE(this._c |
0,
8)
8627 H.writeInt32BE(this._d |
0,
12)
8628 H.writeInt32BE(this._e |
0,
16)
8633 module.exports = Sha
8636 }).call(this,require("buffer").Buffer)
8637 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8640 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8642 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8643 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8644 * Distributed under the BSD License
8645 * See http://pajhome.org.uk/crypt/md5 for details.
8648 var inherits = require('inherits')
8649 var Hash = require('./hash')
8651 var W = new Array(
80)
8657 Hash.call(this,
64,
56)
8660 inherits(Sha1, Hash)
8662 Sha1.prototype.init = function () {
8663 this._a =
0x67452301 |
0
8664 this._b =
0xefcdab89 |
0
8665 this._c =
0x98badcfe |
0
8666 this._d =
0x10325476 |
0
8667 this._e =
0xc3d2e1f0 |
0
8673 * Bitwise rotate a
32-bit number to the left.
8675 function rol (num, cnt) {
8676 return (num << cnt) | (num
>>> (
32 - cnt))
8679 Sha1.prototype._update = function (M) {
8690 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8691 function loop (w, f) {
8694 var t = rol(a,
5) + f + e + w + k
8705 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8706 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8708 while (j <
40) loop(calcW(), b ^ c ^ d)
8710 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8712 while (j <
80) loop(calcW(), b ^ c ^ d)
8714 this._a = (a + this._a) |
0
8715 this._b = (b + this._b) |
0
8716 this._c = (c + this._c) |
0
8717 this._d = (d + this._d) |
0
8718 this._e = (e + this._e) |
0
8721 Sha1.prototype._hash = function () {
8722 var H = new Buffer(
20)
8724 H.writeInt32BE(this._a |
0,
0)
8725 H.writeInt32BE(this._b |
0,
4)
8726 H.writeInt32BE(this._c |
0,
8)
8727 H.writeInt32BE(this._d |
0,
12)
8728 H.writeInt32BE(this._e |
0,
16)
8733 module.exports = Sha1
8735 }).call(this,require("buffer").Buffer)
8736 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8739 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8741 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8742 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8746 var inherits = require('inherits')
8747 var Sha256 = require('./sha256')
8748 var Hash = require('./hash')
8750 var W = new Array(
64)
8752 function Sha224 () {
8755 this._w = W // new Array(
64)
8757 Hash.call(this,
64,
56)
8760 inherits(Sha224, Sha256)
8762 Sha224.prototype.init = function () {
8763 this._a =
0xc1059ed8 |
0
8764 this._b =
0x367cd507 |
0
8765 this._c =
0x3070dd17 |
0
8766 this._d =
0xf70e5939 |
0
8767 this._e =
0xffc00b31 |
0
8768 this._f =
0x68581511 |
0
8769 this._g =
0x64f98fa7 |
0
8770 this._h =
0xbefa4fa4 |
0
8775 Sha224.prototype._hash = function () {
8776 var H = new Buffer(
28)
8778 H.writeInt32BE(this._a,
0)
8779 H.writeInt32BE(this._b,
4)
8780 H.writeInt32BE(this._c,
8)
8781 H.writeInt32BE(this._d,
12)
8782 H.writeInt32BE(this._e,
16)
8783 H.writeInt32BE(this._f,
20)
8784 H.writeInt32BE(this._g,
24)
8789 module.exports = Sha224
8791 }).call(this,require("buffer").Buffer)
8792 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8795 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8797 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8798 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8802 var inherits = require('inherits')
8803 var Hash = require('./hash')
8806 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8807 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8808 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8809 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8810 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8811 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8812 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8813 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8814 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8815 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8816 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8817 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8818 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8819 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8820 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8821 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8824 var W = new Array(
64)
8826 function Sha256 () {
8829 this._w = W // new Array(
64)
8831 Hash.call(this,
64,
56)
8834 inherits(Sha256, Hash)
8836 Sha256.prototype.init = function () {
8837 this._a =
0x6a09e667 |
0
8838 this._b =
0xbb67ae85 |
0
8839 this._c =
0x3c6ef372 |
0
8840 this._d =
0xa54ff53a |
0
8841 this._e =
0x510e527f |
0
8842 this._f =
0x9b05688c |
0
8843 this._g =
0x1f83d9ab |
0
8844 this._h =
0x5be0cd19 |
0
8850 return (X
>>> n) | (X << (
32 - n))
8857 function Ch (x, y, z) {
8858 return ((x & y) ^ ((~x) & z))
8861 function Maj (x, y, z) {
8862 return ((x & y) ^ (x & z) ^ (y & z))
8865 function Sigma0256 (x) {
8866 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8869 function Sigma1256 (x) {
8870 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8873 function Gamma0256 (x) {
8874 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8877 function Gamma1256 (x) {
8878 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8881 Sha256.prototype._update = function (M) {
8895 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8899 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8900 var T2 = Sigma0256(a) + Maj(a, b, c)
8914 while (j <
16) loop(M.readInt32BE(j *
4))
8915 while (j <
64) loop(calcW())
8917 this._a = (a + this._a) |
0
8918 this._b = (b + this._b) |
0
8919 this._c = (c + this._c) |
0
8920 this._d = (d + this._d) |
0
8921 this._e = (e + this._e) |
0
8922 this._f = (f + this._f) |
0
8923 this._g = (g + this._g) |
0
8924 this._h = (h + this._h) |
0
8927 Sha256.prototype._hash = function () {
8928 var H = new Buffer(
32)
8930 H.writeInt32BE(this._a,
0)
8931 H.writeInt32BE(this._b,
4)
8932 H.writeInt32BE(this._c,
8)
8933 H.writeInt32BE(this._d,
12)
8934 H.writeInt32BE(this._e,
16)
8935 H.writeInt32BE(this._f,
20)
8936 H.writeInt32BE(this._g,
24)
8937 H.writeInt32BE(this._h,
28)
8942 module.exports = Sha256
8944 }).call(this,require("buffer").Buffer)
8945 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8947 var inherits = require('inherits')
8948 var SHA512 = require('./sha512')
8949 var Hash = require('./hash')
8951 var W = new Array(
160)
8953 function Sha384 () {
8957 Hash.call(this,
128,
112)
8960 inherits(Sha384, SHA512)
8962 Sha384.prototype.init = function () {
8963 this._a =
0xcbbb9d5d |
0
8964 this._b =
0x629a292a |
0
8965 this._c =
0x9159015a |
0
8966 this._d =
0x152fecd8 |
0
8967 this._e =
0x67332667 |
0
8968 this._f =
0x8eb44a87 |
0
8969 this._g =
0xdb0c2e0d |
0
8970 this._h =
0x47b5481d |
0
8972 this._al =
0xc1059ed8 |
0
8973 this._bl =
0x367cd507 |
0
8974 this._cl =
0x3070dd17 |
0
8975 this._dl =
0xf70e5939 |
0
8976 this._el =
0xffc00b31 |
0
8977 this._fl =
0x68581511 |
0
8978 this._gl =
0x64f98fa7 |
0
8979 this._hl =
0xbefa4fa4 |
0
8984 Sha384.prototype._hash = function () {
8985 var H = new Buffer(
48)
8987 function writeInt64BE (h, l, offset) {
8988 H.writeInt32BE(h, offset)
8989 H.writeInt32BE(l, offset +
4)
8992 writeInt64BE(this._a, this._al,
0)
8993 writeInt64BE(this._b, this._bl,
8)
8994 writeInt64BE(this._c, this._cl,
16)
8995 writeInt64BE(this._d, this._dl,
24)
8996 writeInt64BE(this._e, this._el,
32)
8997 writeInt64BE(this._f, this._fl,
40)
9002 module.exports = Sha384
9004 }).call(this,require("buffer").Buffer)
9005 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
9007 var inherits = require('inherits')
9008 var Hash = require('./hash')
9011 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
9012 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
9013 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
9014 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
9015 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
9016 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
9017 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
9018 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
9019 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
9020 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
9021 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
9022 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
9023 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
9024 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
9025 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
9026 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
9027 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
9028 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
9029 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
9030 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
9031 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
9032 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
9033 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
9034 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
9035 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
9036 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
9037 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
9038 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
9039 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
9040 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
9041 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
9042 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
9043 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
9044 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
9045 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
9046 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
9047 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
9048 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
9049 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
9050 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
9053 var W = new Array(
160)
9055 function Sha512 () {
9059 Hash.call(this,
128,
112)
9062 inherits(Sha512, Hash)
9064 Sha512.prototype.init = function () {
9065 this._a =
0x6a09e667 |
0
9066 this._b =
0xbb67ae85 |
0
9067 this._c =
0x3c6ef372 |
0
9068 this._d =
0xa54ff53a |
0
9069 this._e =
0x510e527f |
0
9070 this._f =
0x9b05688c |
0
9071 this._g =
0x1f83d9ab |
0
9072 this._h =
0x5be0cd19 |
0
9074 this._al =
0xf3bcc908 |
0
9075 this._bl =
0x84caa73b |
0
9076 this._cl =
0xfe94f82b |
0
9077 this._dl =
0x5f1d36f1 |
0
9078 this._el =
0xade682d1 |
0
9079 this._fl =
0x2b3e6c1f |
0
9080 this._gl =
0xfb41bd6b |
0
9081 this._hl =
0x137e2179 |
0
9086 function S (X, Xl, n) {
9087 return (X
>>> n) | (Xl << (
32 - n))
9090 function Ch (x, y, z) {
9091 return ((x & y) ^ ((~x) & z))
9094 function Maj (x, y, z) {
9095 return ((x & y) ^ (x & z) ^ (y & z))
9098 Sha512.prototype._update = function (M) {
9110 var al = this._al |
0
9111 var bl = this._bl |
0
9112 var cl = this._cl |
0
9113 var dl = this._dl |
0
9114 var el = this._el |
0
9115 var fl = this._fl |
0
9116 var gl = this._gl |
0
9117 var hl = this._hl |
0
9122 var x = W[j -
15 *
2]
9123 var xl = W[j -
15 *
2 +
1]
9124 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9125 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9128 xl = W[j -
2 *
2 +
1]
9129 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9130 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9132 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9133 var Wi7 = W[j -
7 *
2]
9134 var Wi7l = W[j -
7 *
2 +
1]
9136 var Wi16 = W[j -
16 *
2]
9137 var Wi16l = W[j -
16 *
2 +
1]
9139 Wil = gamma0l + Wi7l
9140 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9142 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9144 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9151 var maj = Maj(a, b, c)
9152 var majl = Maj(al, bl, cl)
9154 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9155 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9156 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9157 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9159 // t1 = h + sigma1 + ch + K[i] + W[i]
9163 var ch = Ch(e, f, g)
9164 var chl = Ch(el, fl, gl)
9166 var t1l = hl + sigma1l
9167 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9169 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9171 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9173 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9175 // t2 = sigma0 + maj
9176 var t2l = sigma0l + majl
9177 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9186 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9193 al = (t1l + t2l) |
0
9194 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9201 Wi = M.readInt32BE(j *
4)
9202 Wil = M.readInt32BE(j *
4 +
4)
9212 this._al = (this._al + al) |
0
9213 this._bl = (this._bl + bl) |
0
9214 this._cl = (this._cl + cl) |
0
9215 this._dl = (this._dl + dl) |
0
9216 this._el = (this._el + el) |
0
9217 this._fl = (this._fl + fl) |
0
9218 this._gl = (this._gl + gl) |
0
9219 this._hl = (this._hl + hl) |
0
9221 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9222 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9223 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9224 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9225 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9226 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9227 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9228 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9231 Sha512.prototype._hash = function () {
9232 var H = new Buffer(
64)
9234 function writeInt64BE (h, l, offset) {
9235 H.writeInt32BE(h, offset)
9236 H.writeInt32BE(l, offset +
4)
9239 writeInt64BE(this._a, this._al,
0)
9240 writeInt64BE(this._b, this._bl,
8)
9241 writeInt64BE(this._c, this._cl,
16)
9242 writeInt64BE(this._d, this._dl,
24)
9243 writeInt64BE(this._e, this._el,
32)
9244 writeInt64BE(this._f, this._fl,
40)
9245 writeInt64BE(this._g, this._gl,
48)
9246 writeInt64BE(this._h, this._hl,
56)
9251 module.exports = Sha512
9253 }).call(this,require(
"buffer").Buffer)
9254 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9257 var createHash = require('create-hash/browser');
9258 var inherits = require('inherits')
9260 var Transform = require('stream').Transform
9262 var ZEROS = new Buffer(
128)
9265 function Hmac(alg, key) {
9266 Transform.call(this)
9268 if (typeof key === 'string') {
9269 key = new Buffer(key)
9272 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9277 if (key.length
> blocksize) {
9278 key = createHash(alg).update(key).digest()
9280 } else if (key.length < blocksize) {
9281 key = Buffer.concat([key, ZEROS], blocksize)
9284 var ipad = this._ipad = new Buffer(blocksize)
9285 var opad = this._opad = new Buffer(blocksize)
9287 for (var i =
0; i < blocksize; i++) {
9288 ipad[i] = key[i] ^
0x36
9289 opad[i] = key[i] ^
0x5C
9292 this._hash = createHash(alg).update(ipad)
9295 inherits(Hmac, Transform)
9297 Hmac.prototype.update = function (data, enc) {
9298 this._hash.update(data, enc)
9303 Hmac.prototype._transform = function (data, _, next) {
9304 this._hash.update(data)
9309 Hmac.prototype._flush = function (next) {
9310 this.push(this.digest())
9315 Hmac.prototype.digest = function (enc) {
9316 var h = this._hash.digest()
9318 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9321 module.exports = function createHmac(alg, key) {
9322 return new Hmac(alg, key)
9325 }).call(this,require("buffer").Buffer)
9326 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9327 arguments[
4][
12][
0].apply(exports,arguments)
9328 },{"dup":
12}],
47:[function(require,module,exports){
9329 var assert = require('assert')
9330 var BigInteger = require('bigi')
9332 var Point = require('./point')
9334 function Curve(p, a, b, Gx, Gy, n, h) {
9338 this.G = Point.fromAffine(this, Gx, Gy)
9342 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9345 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9348 Curve.prototype.pointFromX = function(isOdd, x) {
9349 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9350 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9353 if (beta.isEven() ^ !isOdd) {
9354 y = this.p.subtract(y) // -y % p
9357 return Point.fromAffine(this, x, y)
9360 Curve.prototype.isInfinity = function(Q) {
9361 if (Q === this.infinity) return true
9363 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9366 Curve.prototype.isOnCurve = function(Q) {
9367 if (this.isInfinity(Q)) return true
9375 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9376 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9377 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9379 // and check that y^
2 = x^
3 + ax + b (mod p)
9380 var lhs = y.square().mod(p)
9381 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9382 return lhs.equals(rhs)
9386 * Validate an elliptic curve point.
9388 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9390 Curve.prototype.validate = function(Q) {
9392 assert(!this.isInfinity(Q), 'Point is at infinity')
9393 assert(this.isOnCurve(Q), 'Point is not on the curve')
9395 // Check nQ = O (where Q is a scalar multiple of G)
9396 var nQ = Q.multiply(this.n)
9397 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9402 module.exports = Curve
9404 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9407 "p": "fffffffdffffffffffffffffffffffff",
9408 "a": "fffffffdfffffffffffffffffffffffc",
9409 "b": "e87579c11079f43dd824993c2cee5ed3",
9410 "n": "fffffffe0000000075a30d1b9038a115",
9412 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9413 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9416 "p": "fffffffffffffffffffffffffffffffeffffac73",
9419 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9421 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9422 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9425 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9426 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9427 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9428 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9430 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9431 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9434 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9437 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9439 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9440 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9443 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9444 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9445 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9446 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9448 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9449 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9452 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9455 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9457 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9458 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9461 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9462 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9463 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9464 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9466 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9467 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9471 },{}],
49:[function(require,module,exports){
9472 var Point = require('./point')
9473 var Curve = require('./curve')
9475 var getCurveByName = require('./names')
9480 getCurveByName: getCurveByName
9483 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9484 var BigInteger = require('bigi')
9486 var curves = require('./curves')
9487 var Curve = require('./curve')
9489 function getCurveByName(name) {
9490 var curve = curves[name]
9491 if (!curve) return null
9493 var p = new BigInteger(curve.p,
16)
9494 var a = new BigInteger(curve.a,
16)
9495 var b = new BigInteger(curve.b,
16)
9496 var n = new BigInteger(curve.n,
16)
9497 var h = new BigInteger(curve.h,
16)
9498 var Gx = new BigInteger(curve.Gx,
16)
9499 var Gy = new BigInteger(curve.Gy,
16)
9501 return new Curve(p, a, b, Gx, Gy, n, h)
9504 module.exports = getCurveByName
9506 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9508 var assert = require('assert')
9509 var BigInteger = require('bigi')
9511 var THREE = BigInteger.valueOf(
3)
9513 function Point(curve, x, y, z) {
9514 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9522 this.compressed = true
9525 Object.defineProperty(Point.prototype, 'zInv', {
9527 if (this._zInv === null) {
9528 this._zInv = this.z.modInverse(this.curve.p)
9535 Object.defineProperty(Point.prototype, 'affineX', {
9537 return this.x.multiply(this.zInv).mod(this.curve.p)
9541 Object.defineProperty(Point.prototype, 'affineY', {
9543 return this.y.multiply(this.zInv).mod(this.curve.p)
9547 Point.fromAffine = function(curve, x, y) {
9548 return new Point(curve, x, y, BigInteger.ONE)
9551 Point.prototype.equals = function(other) {
9552 if (other === this) return true
9553 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9554 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9556 // u = Y2 * Z1 - Y1 * Z2
9557 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9559 if (u.signum() !==
0) return false
9561 // v = X2 * Z1 - X1 * Z2
9562 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9564 return v.signum() ===
0
9567 Point.prototype.negate = function() {
9568 var y = this.curve.p.subtract(this.y)
9570 return new Point(this.curve, this.x, y, this.z)
9573 Point.prototype.add = function(b) {
9574 if (this.curve.isInfinity(this)) return b
9575 if (this.curve.isInfinity(b)) return this
9582 // u = Y2 * Z1 - Y1 * Z2
9583 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9584 // v = X2 * Z1 - X1 * Z2
9585 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9587 if (v.signum() ===
0) {
9588 if (u.signum() ===
0) {
9589 return this.twice() // this == b, so double
9592 return this.curve.infinity // this = -b, so infinity
9596 var v3 = v2.multiply(v)
9597 var x1v2 = x1.multiply(v2)
9598 var zu2 = u.square().multiply(this.z)
9600 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9601 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9602 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9603 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)
9604 // z3 = v^
3 * z1 * z2
9605 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9607 return new Point(this.curve, x3, y3, z3)
9610 Point.prototype.twice = function() {
9611 if (this.curve.isInfinity(this)) return this
9612 if (this.y.signum() ===
0) return this.curve.infinity
9617 var y1z1 = y1.multiply(this.z)
9618 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9619 var a = this.curve.a
9621 // w =
3 * x1^
2 + a * z1^
2
9622 var w = x1.square().multiply(THREE)
9624 if (a.signum() !==
0) {
9625 w = w.add(this.z.square().multiply(a))
9628 w = w.mod(this.curve.p)
9629 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9630 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9631 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9632 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9633 // z3 =
8 * (y1 * z1)^
3
9634 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9636 return new Point(this.curve, x3, y3, z3)
9639 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9640 // TODO: modularize the multiplication algorithm
9641 Point.prototype.multiply = function(k) {
9642 if (this.curve.isInfinity(this)) return this
9643 if (k.signum() ===
0) return this.curve.infinity
9646 var h = e.multiply(THREE)
9648 var neg = this.negate()
9651 for (var i = h.bitLength() -
2; i
> 0; --i) {
9654 var hBit = h.testBit(i)
9655 var eBit = e.testBit(i)
9658 R = R.add(hBit ? this : neg)
9665 // Compute this*j + x*k (simultaneous multiplication)
9666 Point.prototype.multiplyTwo = function(j, x, k) {
9669 if (j.bitLength()
> k.bitLength())
9670 i = j.bitLength() -
1
9672 i = k.bitLength() -
1
9674 var R = this.curve.infinity
9675 var both = this.add(x)
9680 var jBit = j.testBit(i)
9681 var kBit = k.testBit(i)
9702 Point.prototype.getEncoded = function(compressed) {
9703 if (compressed == undefined) compressed = this.compressed
9704 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9706 var x = this.affineX
9707 var y = this.affineY
9711 // Determine size of q in bytes
9712 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9716 buffer = new Buffer(
1 + byteLength)
9717 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9721 buffer = new Buffer(
1 + byteLength + byteLength)
9722 buffer.writeUInt8(
0x04,
0)
9724 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9727 x.toBuffer(byteLength).copy(buffer,
1)
9732 Point.decodeFrom = function(curve, buffer) {
9733 var type = buffer.readUInt8(
0)
9734 var compressed = (type !==
4)
9736 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9737 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9741 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9742 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9744 var isOdd = (type ===
0x03)
9745 Q = curve.pointFromX(isOdd, x)
9748 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9750 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9751 Q = Point.fromAffine(curve, x, y)
9754 Q.compressed = compressed
9758 Point.prototype.toString = function () {
9759 if (this.curve.isInfinity(this)) return '(INFINITY)'
9761 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9764 module.exports = Point
9766 }).call(this,require("buffer").Buffer)
9767 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9768 (function (process,global,Buffer){
9771 var crypto = global.crypto || global.msCrypto
9772 if(crypto && crypto.getRandomValues) {
9773 module.exports = randomBytes;
9775 module.exports = oldBrowser;
9777 function randomBytes(size, cb) {
9778 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9779 /* This will not work in older browsers.
9780 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9783 crypto.getRandomValues(bytes);
9784 if (typeof cb === 'function') {
9785 return process.nextTick(function () {
9791 function oldBrowser() {
9793 'secure random number generation not supported by this browser\n'+
9794 'use chrome, FireFox or Internet Explorer
11'
9798 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9799 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9803 function getFunctionName(fn) {
9804 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9807 function getTypeTypeName(type) {
9808 if (nativeTypes.Function(type)) {
9809 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9811 if (nativeTypes.Object(type)) return JSON.stringify(type);
9816 function getValueTypeName(value) {
9817 if (nativeTypes.Null(value)) return '';
9819 return getFunctionName(value.constructor);
9822 function tfErrorString(type, value) {
9823 var typeTypeName = getTypeTypeName(type);
9824 var valueTypeName = getValueTypeName(value);
9826 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9829 function tfPropertyErrorString(type, name, value) {
9830 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9834 Array: (function (_Array) {
9835 function Array(_x) {
9836 return _Array.apply(this, arguments);
9839 Array.toString = function () {
9840 return _Array.toString();
9844 })(function (value) {
9845 return value !== null && value !== undefined && value.constructor === Array;
9847 Boolean: function Boolean(value) {
9848 return typeof value === 'boolean';
9850 Buffer: (function (_Buffer) {
9851 function Buffer(_x2) {
9852 return _Buffer.apply(this, arguments);
9855 Buffer.toString = function () {
9856 return _Buffer.toString();
9860 })(function (value) {
9861 return Buffer.isBuffer(value);
9863 Function: function Function(value) {
9864 return typeof value === 'function';
9866 Null: function Null(value) {
9867 return value === undefined || value === null;
9869 Number: function Number(value) {
9870 return typeof value === 'number';
9872 Object: function Object(value) {
9873 return typeof value === 'object';
9875 String: function String(value) {
9876 return typeof value === 'string';
9883 function tJSON(type) {
9884 return type && type.toJSON ? type.toJSON() : type;
9887 function sJSON(type) {
9888 var json = tJSON(type);
9889 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9893 arrayOf: function arrayOf(type) {
9894 function arrayOf(value, strict) {
9896 return nativeTypes.Array(value) && value.every(function (x) {
9897 return typeforce(type, x, strict);
9903 arrayOf.toJSON = function () {
9904 return [tJSON(type)];
9910 maybe: function maybe(type) {
9911 function maybe(value, strict) {
9912 return nativeTypes.Null(value) || typeforce(type, value, strict);
9914 maybe.toJSON = function () {
9915 return '?' + sJSON(type);
9921 object: function object(type) {
9922 function object(value, strict) {
9923 typeforce(nativeTypes.Object, value, strict);
9925 var propertyName, propertyType, propertyValue;
9928 for (propertyName in type) {
9929 propertyType = type[propertyName];
9930 propertyValue = value[propertyName];
9932 typeforce(propertyType, propertyValue, strict);
9935 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9939 for (propertyName in value) {
9940 if (type[propertyName]) continue;
9942 throw new TypeError('Unexpected property "' + propertyName + '"');
9948 object.toJSON = function () {
9955 oneOf: function oneOf() {
9956 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9957 types[_key] = arguments[_key];
9960 function oneOf(value, strict) {
9961 return types.some(function (type) {
9963 return typeforce(type, value, strict);
9969 oneOf.toJSON = function () {
9970 return types.map(sJSON).join('|');
9976 quacksLike: function quacksLike(type) {
9977 function quacksLike(value, strict) {
9978 return type === getValueTypeName(value);
9980 quacksLike.toJSON = function () {
9987 tuple: function tuple() {
9988 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9989 types[_key2] = arguments[_key2];
9992 function tuple(value, strict) {
9993 return types.every(function (type, i) {
9994 return typeforce(type, value[i], strict);
9997 tuple.toJSON = function () {
9998 return '(' + types.map(sJSON).join(', ') + ')';
10004 value: function value(expected) {
10005 function value(actual) {
10006 return actual === expected;
10008 value.toJSON = function () {
10016 function compile(type) {
10017 if (nativeTypes.String(type)) {
10018 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
10020 return nativeTypes[type] || otherTypes.quacksLike(type);
10021 } else if (type && nativeTypes.Object(type)) {
10022 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
10026 for (var propertyName in type) {
10027 compiled[propertyName] = compile(type[propertyName]);
10030 return otherTypes.object(compiled);
10031 } else if (nativeTypes.Function(type)) {
10035 return otherTypes.value(type);
10038 function typeforce(_x3, _x4, _x5) {
10041 _function: while (_again) {
10047 if (nativeTypes.Function(type)) {
10048 if (type(value, strict)) return true;
10050 throw new TypeError(tfErrorString(type, value));
10054 _x3 = compile(type);
10058 continue _function;
10062 // assign all types to typeforce function
10064 Object.keys(nativeTypes).forEach(function (typeName) {
10065 var nativeType = nativeTypes[typeName];
10066 nativeType.toJSON = function () {
10070 typeforce[typeName] = nativeType;
10073 for (typeName in otherTypes) {
10074 typeforce[typeName] = otherTypes[typeName];
10077 module.exports = typeforce;
10078 module.exports.compile = compile;
10079 }).call(this,require("buffer").Buffer)
10080 },{"buffer":
7}],
54:[function(require,module,exports){
10081 (function (Buffer){
10082 var assert = require('assert')
10083 var base58check = require('bs58check')
10084 var typeForce = require('typeforce')
10085 var networks = require('./networks')
10086 var scripts = require('./scripts')
10088 function findScriptTypeByVersion (version) {
10089 for (var networkName in networks) {
10090 var network = networks[networkName]
10092 if (version === network.pubKeyHash) return 'pubkeyhash'
10093 if (version === network.scriptHash) return 'scripthash'
10097 function Address (hash, version) {
10098 typeForce('Buffer', hash)
10100 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10101 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10104 this.version = version
10107 Address.fromBase58Check = function (string) {
10108 var payload = base58check.decode(string)
10109 var version = payload.readUInt8(
0)
10110 var hash = payload.slice(
1)
10112 return new Address(hash, version)
10115 Address.fromOutputScript = function (script, network) {
10116 network = network || networks.bitcoin
10118 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10119 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10121 assert(false, script.toASM() + ' has no matching Address')
10124 Address.prototype.toBase58Check = function () {
10125 var payload = new Buffer(
21)
10126 payload.writeUInt8(this.version,
0)
10127 this.hash.copy(payload,
1)
10129 return base58check.encode(payload)
10132 Address.prototype.toOutputScript = function () {
10133 var scriptType = findScriptTypeByVersion(this.version)
10135 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10136 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10138 assert(false, this.toString() + ' has no matching Script')
10141 Address.prototype.toString = Address.prototype.toBase58Check
10143 module.exports = Address
10145 }).call(this,require("buffer").Buffer)
10146 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10147 var bs58check = require('bs58check')
10149 function decode () {
10150 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10152 return bs58check.decode.apply(undefined, arguments)
10155 function encode () {
10156 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10158 return bs58check.encode.apply(undefined, arguments)
10166 },{"bs58check":
31}],
56:[function(require,module,exports){
10167 (function (Buffer){
10168 var assert = require('assert')
10169 var bufferutils = require('./bufferutils')
10170 var crypto = require('./crypto')
10172 var Transaction = require('./transaction')
10174 function Block () {
10176 this.prevHash = null
10177 this.merkleRoot = null
10183 Block.fromBuffer = function (buffer) {
10184 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10187 function readSlice (n) {
10189 return buffer.slice(offset - n, offset)
10192 function readUInt32 () {
10193 var i = buffer.readUInt32LE(offset)
10198 var block = new Block()
10199 block.version = readUInt32()
10200 block.prevHash = readSlice(
32)
10201 block.merkleRoot = readSlice(
32)
10202 block.timestamp = readUInt32()
10203 block.bits = readUInt32()
10204 block.nonce = readUInt32()
10206 if (buffer.length ===
80) return block
10208 function readVarInt () {
10209 var vi = bufferutils.readVarInt(buffer, offset)
10214 // FIXME: poor performance
10215 function readTransaction () {
10216 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10218 offset += tx.toBuffer().length
10222 var nTransactions = readVarInt()
10223 block.transactions = []
10225 for (var i =
0; i < nTransactions; ++i) {
10226 var tx = readTransaction()
10227 block.transactions.push(tx)
10233 Block.fromHex = function (hex) {
10234 return Block.fromBuffer(new Buffer(hex, 'hex'))
10237 Block.prototype.getHash = function () {
10238 return crypto.hash256(this.toBuffer(true))
10241 Block.prototype.getId = function () {
10242 return bufferutils.reverse(this.getHash()).toString('hex')
10245 Block.prototype.getUTCDate = function () {
10246 var date = new Date(
0) // epoch
10247 date.setUTCSeconds(this.timestamp)
10252 Block.prototype.toBuffer = function (headersOnly) {
10253 var buffer = new Buffer(
80)
10256 function writeSlice (slice) {
10257 slice.copy(buffer, offset)
10258 offset += slice.length
10261 function writeUInt32 (i) {
10262 buffer.writeUInt32LE(i, offset)
10266 writeUInt32(this.version)
10267 writeSlice(this.prevHash)
10268 writeSlice(this.merkleRoot)
10269 writeUInt32(this.timestamp)
10270 writeUInt32(this.bits)
10271 writeUInt32(this.nonce)
10273 if (headersOnly || !this.transactions) return buffer
10275 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10276 var txBuffers = this.transactions.map(function (tx) {
10277 return tx.toBuffer()
10280 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10283 Block.prototype.toHex = function (headersOnly) {
10284 return this.toBuffer(headersOnly).toString('hex')
10287 module.exports = Block
10289 }).call(this,require("buffer").Buffer)
10290 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10291 (function (Buffer){
10292 var assert = require('assert')
10293 var opcodes = require('./opcodes')
10295 // https://github.com/feross/buffer/blob/master/index.js#L1127
10296 function verifuint (value, max) {
10297 assert(typeof value === 'number', 'cannot write a non-number as a number')
10298 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10299 assert(value <= max, 'value is larger than maximum value for type')
10300 assert(Math.floor(value) === value, 'value has a fractional component')
10303 function pushDataSize (i) {
10304 return i < opcodes.OP_PUSHDATA1 ?
1
10310 function readPushDataInt (buffer, offset) {
10311 var opcode = buffer.readUInt8(offset)
10315 if (opcode < opcodes.OP_PUSHDATA1) {
10320 } else if (opcode === opcodes.OP_PUSHDATA1) {
10321 if (offset +
2 > buffer.length) return null
10322 number = buffer.readUInt8(offset +
1)
10326 } else if (opcode === opcodes.OP_PUSHDATA2) {
10327 if (offset +
3 > buffer.length) return null
10328 number = buffer.readUInt16LE(offset +
1)
10333 if (offset +
5 > buffer.length) return null
10334 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10336 number = buffer.readUInt32LE(offset +
1)
10347 function readUInt64LE (buffer, offset) {
10348 var a = buffer.readUInt32LE(offset)
10349 var b = buffer.readUInt32LE(offset +
4)
10352 verifuint(b + a,
0x001fffffffffffff)
10357 function readVarInt (buffer, offset) {
10358 var t = buffer.readUInt8(offset)
10367 } else if (t <
254) {
10368 number = buffer.readUInt16LE(offset +
1)
10372 } else if (t <
255) {
10373 number = buffer.readUInt32LE(offset +
1)
10378 number = readUInt64LE(buffer, offset +
1)
10388 function writePushDataInt (buffer, number, offset) {
10389 var size = pushDataSize(number)
10393 buffer.writeUInt8(number, offset)
10396 } else if (size ===
2) {
10397 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10398 buffer.writeUInt8(number, offset +
1)
10401 } else if (size ===
3) {
10402 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10403 buffer.writeUInt16LE(number, offset +
1)
10407 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10408 buffer.writeUInt32LE(number, offset +
1)
10414 function writeUInt64LE (buffer, value, offset) {
10415 verifuint(value,
0x001fffffffffffff)
10417 buffer.writeInt32LE(value & -
1, offset)
10418 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10421 function varIntSize (i) {
10424 : i <
0x100000000 ?
5
10428 function writeVarInt (buffer, number, offset) {
10429 var size = varIntSize(number)
10433 buffer.writeUInt8(number, offset)
10436 } else if (size ===
3) {
10437 buffer.writeUInt8(
253, offset)
10438 buffer.writeUInt16LE(number, offset +
1)
10441 } else if (size ===
5) {
10442 buffer.writeUInt8(
254, offset)
10443 buffer.writeUInt32LE(number, offset +
1)
10447 buffer.writeUInt8(
255, offset)
10448 writeUInt64LE(buffer, number, offset +
1)
10454 function varIntBuffer (i) {
10455 var size = varIntSize(i)
10456 var buffer = new Buffer(size)
10457 writeVarInt(buffer, i,
0)
10462 function reverse (buffer) {
10463 var buffer2 = new Buffer(buffer)
10464 Array.prototype.reverse.call(buffer2)
10469 pushDataSize: pushDataSize,
10470 readPushDataInt: readPushDataInt,
10471 readUInt64LE: readUInt64LE,
10472 readVarInt: readVarInt,
10474 varIntBuffer: varIntBuffer,
10475 varIntSize: varIntSize,
10476 writePushDataInt: writePushDataInt,
10477 writeUInt64LE: writeUInt64LE,
10478 writeVarInt: writeVarInt
10481 }).call(this,require("buffer").Buffer)
10482 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10483 var createHash = require('create-hash')
10485 function hash160 (buffer) {
10486 return ripemd160(sha256(buffer))
10489 function hash256 (buffer) {
10490 return sha256(sha256(buffer))
10493 function ripemd160 (buffer) {
10494 return createHash('rmd160').update(buffer).digest()
10497 function sha1 (buffer) {
10498 return createHash('sha1').update(buffer).digest()
10501 function sha256 (buffer) {
10502 return createHash('sha256').update(buffer).digest()
10505 // FIXME: Name not consistent with others
10506 var createHmac = require('create-hmac')
10508 function HmacSHA256 (buffer, secret) {
10509 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10510 return createHmac('sha256', secret).update(buffer).digest()
10513 function HmacSHA512 (buffer, secret) {
10514 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10515 return createHmac('sha512', secret).update(buffer).digest()
10519 ripemd160: ripemd160,
10524 HmacSHA256: HmacSHA256,
10525 HmacSHA512: HmacSHA512
10528 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10529 (function (Buffer){
10530 var assert = require('assert')
10531 var createHmac = require('create-hmac')
10532 var typeForce = require('typeforce')
10534 var BigInteger = require('bigi')
10535 var ECSignature = require('./ecsignature')
10537 var ZERO = new Buffer([
0])
10538 var ONE = new Buffer([
1])
10540 // https://tools.ietf.org/html/rfc6979#section-
3.2
10541 function deterministicGenerateK (curve, hash, d, checkSig) {
10542 typeForce('Buffer', hash)
10543 typeForce('BigInteger', d)
10545 // FIXME: remove/uncomment for
2.0.0
10546 // typeForce('Function', checkSig)
10548 if (typeof checkSig !== 'function') {
10549 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10551 checkSig = function (k) {
10554 var e = BigInteger.fromBuffer(hash)
10556 var Q = G.multiply(k)
10558 if (curve.isInfinity(Q))
10561 var r = Q.affineX.mod(n)
10562 if (r.signum() ===
0)
10565 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10566 if (s.signum() ===
0)
10574 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10576 var x = d.toBuffer(
32)
10577 var k = new Buffer(
32)
10578 var v = new Buffer(
32)
10580 // Step A, ignored as hash already provided
10588 k = createHmac('sha256', k)
10596 v = createHmac('sha256', k).update(v).digest()
10599 k = createHmac('sha256', k)
10607 v = createHmac('sha256', k).update(v).digest()
10609 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10611 v = createHmac('sha256', k).update(v).digest()
10613 var T = BigInteger.fromBuffer(v)
10615 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10616 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10617 k = createHmac('sha256', k)
10622 v = createHmac('sha256', k).update(v).digest()
10624 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10626 v = createHmac('sha256', k).update(v).digest()
10627 T = BigInteger.fromBuffer(v)
10633 function sign (curve, hash, d) {
10636 var e = BigInteger.fromBuffer(hash)
10640 deterministicGenerateK(curve, hash, d, function (k) {
10641 var Q = G.multiply(k)
10643 if (curve.isInfinity(Q))
10646 r = Q.affineX.mod(n)
10647 if (r.signum() ===
0)
10650 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10651 if (s.signum() ===
0)
10657 var N_OVER_TWO = n.shiftRight(
1)
10659 // enforce low S values, see bip62: 'low s values in signatures'
10660 if (s.compareTo(N_OVER_TWO)
> 0) {
10664 return new ECSignature(r, s)
10667 function verifyRaw (curve, e, signature, Q) {
10671 var r = signature.r
10672 var s = signature.s
10674 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10675 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10676 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10679 var c = s.modInverse(n)
10681 //
1.4.4 Compute u1 = es^−
1 mod n
10682 // u2 = rs^−
1 mod n
10683 var u1 = e.multiply(c).mod(n)
10684 var u2 = r.multiply(c).mod(n)
10686 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10687 var R = G.multiplyTwo(u1, Q, u2)
10688 var v = R.affineX.mod(n)
10690 //
1.4.5 (cont.) Enforce R is not at infinity
10691 if (curve.isInfinity(R)) return false
10693 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10697 function verify (curve, hash, signature, Q) {
10698 //
1.4.2 H = Hash(M), already done by the user
10700 var e = BigInteger.fromBuffer(hash)
10702 return verifyRaw(curve, e, signature, Q)
10706 * Recover a public key from a signature.
10708 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10709 * Key Recovery Operation".
10711 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10713 function recoverPubKey (curve, e, signature, i) {
10714 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10719 var r = signature.r
10720 var s = signature.s
10722 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10723 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10725 // A set LSB signifies that the y-coordinate is odd
10728 // The more significant bit specifies whether we should use the
10729 // first or second candidate key.
10730 var isSecondKey = i
>> 1
10732 //
1.1 Let x = r + jn
10733 var x = isSecondKey ? r.add(n) : r
10734 var R = curve.pointFromX(isYOdd, x)
10736 //
1.4 Check that nR is at infinity
10737 var nR = R.multiply(n)
10738 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10740 // Compute -e from e
10741 var eNeg = e.negate().mod(n)
10743 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10744 // Q = r^-
1 (sR + -eG)
10745 var rInv = r.modInverse(n)
10747 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10754 * Calculate pubkey extraction parameter.
10756 * When extracting a pubkey from a signature, we have to
10757 * distinguish four different cases. Rather than putting this
10758 * burden on the verifier, Bitcoin includes a
2-bit value with the
10761 * This function simply tries all four cases and returns the value
10762 * that resulted in a successful pubkey recovery.
10764 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10765 for (var i =
0; i <
4; i++) {
10766 var Qprime = recoverPubKey(curve, e, signature, i)
10769 if (Qprime.equals(Q)) {
10774 throw new Error('Unable to find valid recovery factor')
10778 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10779 deterministicGenerateK: deterministicGenerateK,
10780 recoverPubKey: recoverPubKey,
10783 verifyRaw: verifyRaw
10786 }).call(this,require(
"buffer").Buffer)
10787 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10788 (function (Buffer){
10789 var assert = require('assert')
10790 var base58check = require('bs58check')
10791 var ecdsa = require('./ecdsa')
10792 var networks = require('./networks')
10793 var randomBytes = require('randombytes')
10794 var typeForce = require('typeforce')
10796 var BigInteger = require('bigi')
10797 var ECPubKey = require('./ecpubkey')
10799 var ecurve = require('ecurve')
10800 var secp256k1 = ecurve.getCurveByName('secp256k1')
10802 function ECKey (d, compressed) {
10803 assert(d.signum()
> 0, 'Private key must be greater than
0')
10804 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10806 var Q = ECKey.curve.G.multiply(d)
10809 this.pub = new ECPubKey(Q, compressed)
10813 ECKey.curve = secp256k1
10815 // Static constructors
10816 ECKey.fromWIF = function (string) {
10817 var payload = base58check.decode(string)
10818 var compressed = false
10820 // Ignore the version byte
10821 payload = payload.slice(
1)
10823 if (payload.length ===
33) {
10824 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10826 // Truncate the compression flag
10827 payload = payload.slice(
0, -
1)
10831 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10833 var d = BigInteger.fromBuffer(payload)
10834 return new ECKey(d, compressed)
10837 ECKey.makeRandom = function (compressed, rng) {
10838 rng = rng || randomBytes
10840 var buffer = rng(
32)
10841 typeForce('Buffer', buffer)
10842 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10844 var d = BigInteger.fromBuffer(buffer)
10845 d = d.mod(ECKey.curve.n)
10847 return new ECKey(d, compressed)
10850 // Export functions
10851 ECKey.prototype.toWIF = function (network) {
10852 network = network || networks.bitcoin
10854 var bufferLen = this.pub.compressed ?
34 :
33
10855 var buffer = new Buffer(bufferLen)
10857 buffer.writeUInt8(network.wif,
0)
10858 this.d.toBuffer(
32).copy(buffer,
1)
10860 if (this.pub.compressed) {
10861 buffer.writeUInt8(
0x01,
33)
10864 return base58check.encode(buffer)
10868 ECKey.prototype.sign = function (hash) {
10869 return ecdsa.sign(ECKey.curve, hash, this.d)
10872 module.exports = ECKey
10874 }).call(this,require(
"buffer").Buffer)
10875 },{
"./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){
10876 (function (Buffer){
10877 var crypto = require('./crypto')
10878 var ecdsa = require('./ecdsa')
10879 var typeForce = require('typeforce')
10880 var networks = require('./networks')
10882 var Address = require('./address')
10884 var ecurve = require('ecurve')
10885 var secp256k1 = ecurve.getCurveByName('secp256k1')
10887 function ECPubKey (Q, compressed) {
10888 if (compressed === undefined) {
10892 typeForce('Point', Q)
10893 typeForce('Boolean', compressed)
10895 this.compressed = compressed
10900 ECPubKey.curve = secp256k1
10902 // Static constructors
10903 ECPubKey.fromBuffer = function (buffer) {
10904 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10905 return new ECPubKey(Q, Q.compressed)
10908 ECPubKey.fromHex = function (hex) {
10909 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10913 ECPubKey.prototype.getAddress = function (network) {
10914 network = network || networks.bitcoin
10916 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10919 ECPubKey.prototype.verify = function (hash, signature) {
10920 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10923 // Export functions
10924 ECPubKey.prototype.toBuffer = function () {
10925 return this.Q.getEncoded(this.compressed)
10928 ECPubKey.prototype.toHex = function () {
10929 return this.toBuffer().toString('hex')
10932 module.exports = ECPubKey
10934 }).call(this,require(
"buffer").Buffer)
10935 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10936 (function (Buffer){
10937 var assert = require('assert')
10938 var typeForce = require('typeforce')
10940 var BigInteger = require('bigi')
10942 function ECSignature (r, s) {
10943 typeForce('BigInteger', r)
10944 typeForce('BigInteger', s)
10950 ECSignature.parseCompact = function (buffer) {
10951 assert.equal(buffer.length,
65, 'Invalid signature length')
10952 var i = buffer.readUInt8(
0) -
27
10955 assert.equal(i, i &
7, 'Invalid signature parameter')
10956 var compressed = !!(i &
4)
10958 // Recovery param only
10961 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10962 var s = BigInteger.fromBuffer(buffer.slice(
33))
10965 compressed: compressed,
10967 signature: new ECSignature(r, s)
10971 ECSignature.fromDER = function (buffer) {
10972 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10973 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10974 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10976 var rLen = buffer.readUInt8(
3)
10977 assert(rLen
> 0, 'R length is zero')
10979 var offset =
4 + rLen
10980 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10982 var sLen = buffer.readUInt8(offset +
1)
10983 assert(sLen
> 0, 'S length is zero')
10985 var rB = buffer.slice(
4, offset)
10986 var sB = buffer.slice(offset +
2)
10989 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10990 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10993 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10994 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10997 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10998 var r = BigInteger.fromDERInteger(rB)
10999 var s = BigInteger.fromDERInteger(sB)
11001 assert(r.signum()
>=
0, 'R value is negative')
11002 assert(s.signum()
>=
0, 'S value is negative')
11004 return new ECSignature(r, s)
11007 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
11008 ECSignature.parseScriptSignature = function (buffer) {
11009 var hashType = buffer.readUInt8(buffer.length -
1)
11010 var hashTypeMod = hashType & ~
0x80
11012 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11015 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
11020 ECSignature.prototype.toCompact = function (i, compressed) {
11027 var buffer = new Buffer(
65)
11028 buffer.writeUInt8(i,
0)
11030 this.r.toBuffer(
32).copy(buffer,
1)
11031 this.s.toBuffer(
32).copy(buffer,
33)
11036 ECSignature.prototype.toDER = function () {
11037 var rBa = this.r.toDERInteger()
11038 var sBa = this.s.toDERInteger()
11043 sequence.push(
0x02, rBa.length)
11044 sequence = sequence.concat(rBa)
11047 sequence.push(
0x02, sBa.length)
11048 sequence = sequence.concat(sBa)
11051 sequence.unshift(
0x30, sequence.length)
11053 return new Buffer(sequence)
11056 ECSignature.prototype.toScriptSignature = function (hashType) {
11057 var hashTypeMod = hashType & ~
0x80
11058 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11060 var hashTypeBuffer = new Buffer(
1)
11061 hashTypeBuffer.writeUInt8(hashType,
0)
11063 return Buffer.concat([this.toDER(), hashTypeBuffer])
11066 module.exports = ECSignature
11068 }).call(this,require(
"buffer").Buffer)
11069 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11070 (function (Buffer){
11071 var assert = require('assert')
11072 var base58check = require('bs58check')
11073 var bcrypto = require('./crypto')
11074 var createHmac = require('create-hmac')
11075 var typeForce = require('typeforce')
11076 var networks = require('./networks')
11078 var BigInteger = require('bigi')
11079 var ECKey = require('./eckey')
11080 var ECPubKey = require('./ecpubkey')
11082 var ecurve = require('ecurve')
11083 var curve = ecurve.getCurveByName('secp256k1')
11085 function findBIP32NetworkByVersion (version) {
11086 for (var name in networks) {
11087 var network = networks[name]
11089 if (version === network.bip32.private || version === network.bip32.public) {
11094 assert(false, 'Could not find network for ' + version.toString(
16))
11097 function HDNode (K, chainCode, network) {
11098 network = network || networks.bitcoin
11100 typeForce('Buffer', chainCode)
11102 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11103 assert(network.bip32, 'Unknown BIP32 constants for network')
11105 this.chainCode = chainCode
11108 this.parentFingerprint =
0x00000000
11109 this.network = network
11111 if (K instanceof BigInteger) {
11112 this.privKey = new ECKey(K, true)
11113 this.pubKey = this.privKey.pub
11114 } else if (K instanceof ECKey) {
11115 assert(K.pub.compressed, 'ECKey must be compressed')
11117 this.pubKey = K.pub
11118 } else if (K instanceof ECPubKey) {
11119 assert(K.compressed, 'ECPubKey must be compressed')
11122 this.pubKey = new ECPubKey(K, true)
11126 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11127 HDNode.HIGHEST_BIT =
0x80000000
11130 HDNode.fromSeedBuffer = function (seed, network) {
11131 typeForce('Buffer', seed)
11133 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11134 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11136 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11137 var IL = I.slice(
0,
32)
11138 var IR = I.slice(
32)
11140 // In case IL is
0 or
>= n, the master key is invalid
11141 // This is handled by `new ECKey` in the HDNode constructor
11142 var pIL = BigInteger.fromBuffer(IL)
11144 return new HDNode(pIL, IR, network)
11147 HDNode.fromSeedHex = function (hex, network) {
11148 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11151 HDNode.fromBase58 = function (string, network) {
11152 return HDNode.fromBuffer(base58check.decode(string), network, true)
11155 // FIXME: remove in
2.x.y
11156 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11157 if (!__ignoreDeprecation) {
11158 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11161 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11163 //
4 byte: version bytes
11164 var version = buffer.readUInt32BE(
0)
11167 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11171 network = findBIP32NetworkByVersion(version)
11174 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11175 var depth = buffer.readUInt8(
4)
11177 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11178 var parentFingerprint = buffer.readUInt32BE(
5)
11180 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11183 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11184 // This is encoded in MSB order. (
0x00000000 if master key)
11185 var index = buffer.readUInt32BE(
9)
11186 assert(depth
> 0 || index ===
0, 'Invalid index')
11188 //
32 bytes: the chain code
11189 var chainCode = buffer.slice(
13,
45)
11192 //
33 bytes: private key data (
0x00 + k)
11193 if (version === network.bip32.private) {
11194 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11195 data = buffer.slice(
46,
78)
11196 var d = BigInteger.fromBuffer(data)
11197 hd = new HDNode(d, chainCode, network)
11199 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11201 data = buffer.slice(
45,
78)
11202 var Q = ecurve.Point.decodeFrom(curve, data)
11203 assert.equal(Q.compressed, true, 'Invalid public key')
11205 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11206 // If not, the extended public key is invalid.
11209 hd = new HDNode(Q, chainCode, network)
11214 hd.parentFingerprint = parentFingerprint
11219 // FIXME: remove in
2.x.y
11220 HDNode.fromHex = function (hex, network) {
11221 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11224 HDNode.prototype.getIdentifier = function () {
11225 return bcrypto.hash160(this.pubKey.toBuffer())
11228 HDNode.prototype.getFingerprint = function () {
11229 return this.getIdentifier().slice(
0,
4)
11232 HDNode.prototype.getAddress = function () {
11233 return this.pubKey.getAddress(this.network)
11236 HDNode.prototype.neutered = function () {
11237 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11238 neutered.depth = this.depth
11239 neutered.index = this.index
11240 neutered.parentFingerprint = this.parentFingerprint
11245 HDNode.prototype.toBase58 = function (isPrivate) {
11246 return base58check.encode(this.toBuffer(isPrivate, true))
11249 // FIXME: remove in
2.x.y
11250 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11251 if (isPrivate === undefined) {
11252 isPrivate = !!this.privKey
11254 // FIXME: remove in
2.x.y
11256 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11259 if (!__ignoreDeprecation) {
11260 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11264 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11265 var buffer = new Buffer(HDNode.LENGTH)
11267 //
4 bytes: version bytes
11268 buffer.writeUInt32BE(version,
0)
11271 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11272 buffer.writeUInt8(this.depth,
4)
11274 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11275 buffer.writeUInt32BE(this.parentFingerprint,
5)
11277 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11278 // This is encoded in Big endian. (
0x00000000 if master key)
11279 buffer.writeUInt32BE(this.index,
9)
11281 //
32 bytes: the chain code
11282 this.chainCode.copy(buffer,
13)
11284 //
33 bytes: the public key or private key data
11286 // FIXME: remove in
2.x.y
11287 assert(this.privKey, 'Missing private key')
11289 //
0x00 + k for private keys
11290 buffer.writeUInt8(
0,
45)
11291 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11293 // X9.62 encoding for public keys
11294 this.pubKey.toBuffer().copy(buffer,
45)
11300 // FIXME: remove in
2.x.y
11301 HDNode.prototype.toHex = function (isPrivate) {
11302 return this.toBuffer(isPrivate).toString('hex')
11305 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11306 HDNode.prototype.derive = function (index) {
11307 var isHardened = index
>= HDNode.HIGHEST_BIT
11308 var indexBuffer = new Buffer(
4)
11309 indexBuffer.writeUInt32BE(index,
0)
11315 assert(this.privKey, 'Could not derive hardened child key')
11317 // data =
0x00 || ser256(kpar) || ser32(index)
11318 data = Buffer.concat([
11319 this.privKey.d.toBuffer(
33),
11325 // data = serP(point(kpar)) || ser32(index)
11326 // = serP(Kpar) || ser32(index)
11327 data = Buffer.concat([
11328 this.pubKey.toBuffer(),
11333 var I = createHmac('sha512', this.chainCode).update(data).digest()
11334 var IL = I.slice(
0,
32)
11335 var IR = I.slice(
32)
11337 var pIL = BigInteger.fromBuffer(IL)
11339 // In case parse256(IL)
>= n, proceed with the next value for i
11340 if (pIL.compareTo(curve.n)
>=
0) {
11341 return this.derive(index +
1)
11344 // Private parent key -
> private child key
11346 if (this.privKey) {
11347 // ki = parse256(IL) + kpar (mod n)
11348 var ki = pIL.add(this.privKey.d).mod(curve.n)
11350 // In case ki ==
0, proceed with the next value for i
11351 if (ki.signum() ===
0) {
11352 return this.derive(index +
1)
11355 hd = new HDNode(ki, IR, this.network)
11357 // Public parent key -
> public child key
11359 // Ki = point(parse256(IL)) + Kpar
11361 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11363 // In case Ki is the point at infinity, proceed with the next value for i
11364 if (curve.isInfinity(Ki)) {
11365 return this.derive(index +
1)
11368 hd = new HDNode(Ki, IR, this.network)
11371 hd.depth = this.depth +
1
11373 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11378 HDNode.prototype.deriveHardened = function (index) {
11379 // Only derives hardened private keys by default
11380 return this.derive(index + HDNode.HIGHEST_BIT)
11383 HDNode.prototype.toString = HDNode.prototype.toBase58
11385 module.exports = HDNode
11387 }).call(this,require("buffer").Buffer)
11388 },{"./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){
11390 Address: require('./address'),
11391 base58check: require('./base58check'),
11392 Block: require('./block'),
11393 bufferutils: require('./bufferutils'),
11394 crypto: require('./crypto'),
11395 ecdsa: require('./ecdsa'),
11396 ECKey: require('./eckey'),
11397 ECPubKey: require('./ecpubkey'),
11398 ECSignature: require('./ecsignature'),
11399 Message: require('./message'),
11400 opcodes: require('./opcodes'),
11401 HDNode: require('./hdnode'),
11402 Script: require('./script'),
11403 scripts: require('./scripts'),
11404 Transaction: require('./transaction'),
11405 TransactionBuilder: require('./transaction_builder'),
11406 networks: require('./networks'),
11407 Wallet: require('./wallet')
11410 },{"./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){
11411 (function (Buffer){
11412 var bufferutils = require('./bufferutils')
11413 var crypto = require('./crypto')
11414 var ecdsa = require('./ecdsa')
11415 var networks = require('./networks')
11417 var BigInteger = require('bigi')
11418 var ECPubKey = require('./ecpubkey')
11419 var ECSignature = require('./ecsignature')
11421 var ecurve = require('ecurve')
11422 var ecparams = ecurve.getCurveByName('secp256k1')
11424 function magicHash (message, network) {
11425 var magicPrefix = new Buffer(network.magicPrefix)
11426 var messageBuffer = new Buffer(message)
11427 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11429 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11430 return crypto.hash256(buffer)
11433 function sign (privKey, message, network) {
11434 network = network || networks.bitcoin
11436 var hash = magicHash(message, network)
11437 var signature = privKey.sign(hash)
11438 var e = BigInteger.fromBuffer(hash)
11439 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11441 return signature.toCompact(i, privKey.pub.compressed)
11444 // TODO: network could be implied from address
11445 function verify (address, signature, message, network) {
11446 if (!Buffer.isBuffer(signature)) {
11447 signature = new Buffer(signature, 'base64')
11450 network = network || networks.bitcoin
11452 var hash = magicHash(message, network)
11453 var parsed = ECSignature.parseCompact(signature)
11454 var e = BigInteger.fromBuffer(hash)
11455 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11457 var pubKey = new ECPubKey(Q, parsed.compressed)
11458 return pubKey.getAddress(network).toString() === address.toString()
11462 magicHash: magicHash,
11467 }).call(this,require("buffer").Buffer)
11468 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11469 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11470 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11474 magicPrefix: '\x18Bitcoin Signed Message:\n',
11476 public:
0x0488b21e,
11477 private:
0x0488ade4
11482 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11483 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11484 estimateFee: estimateFee('bitcoin')
11487 magicPrefix: '\x18Bitcoin Signed Message:\n',
11489 public:
0x043587cf,
11490 private:
0x04358394
11495 dustThreshold:
546,
11497 estimateFee: estimateFee('testnet')
11500 magicPrefix: '\x19Litecoin Signed Message:\n',
11502 public:
0x019da462,
11503 private:
0x019d9cfe
11508 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11509 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11510 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11511 estimateFee: estimateFee('litecoin')
11514 magicPrefix: '\x19Dogecoin Signed Message:\n',
11516 public:
0x02facafd,
11517 private:
0x02fac398
11522 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11523 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11524 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11525 estimateFee: estimateFee('dogecoin')
11528 magicPrefix: '\x18Viacoin Signed Message:\n',
11530 public:
0x0488b21e,
11531 private:
0x0488ade4
11536 dustThreshold:
560,
11537 dustSoftThreshold:
100000,
11538 feePerKb:
100000, //
11539 estimateFee: estimateFee('viacoin')
11542 magicPrefix: '\x18Viacoin Signed Message:\n',
11544 public:
0x043587cf,
11545 private:
0x04358394
11550 dustThreshold:
560,
11551 dustSoftThreshold:
100000,
11553 estimateFee: estimateFee('viacointestnet')
11556 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11558 public:
0x019da462,
11559 private:
0x019d9cfe
11564 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11565 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11566 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11567 estimateFee: estimateFee('gamerscoin')
11570 magicPrefix: '\x19Jumbucks Signed Message:\n',
11572 public:
0x037a689a,
11573 private:
0x037a6460
11579 dustSoftThreshold:
10000,
11581 estimateFee: estimateFee('jumbucks')
11584 magicPrefix: '\x18Zetacoin Signed Message:\n',
11586 public:
0x0488b21e,
11587 private:
0x0488ade4
11592 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11593 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11594 estimateFee: estimateFee('zetacoin')
11598 function estimateFee (type) {
11599 return function (tx) {
11600 var network = networks[type]
11601 var baseFee = network.feePerKb
11602 var byteSize = tx.toBuffer().length
11604 var fee = baseFee * Math.ceil(byteSize /
1000)
11605 if (network.dustSoftThreshold === undefined) return fee
11607 tx.outs.forEach(function (e) {
11608 if (e.value < network.dustSoftThreshold) {
11617 module.exports = networks
11619 },{}],
67:[function(require,module,exports){
11660 OP_TOALTSTACK:
107,
11661 OP_FROMALTSTACK:
108,
11693 OP_EQUALVERIFY:
136,
11718 OP_NUMEQUALVERIFY:
157,
11719 OP_NUMNOTEQUAL:
158,
11721 OP_GREATERTHAN:
160,
11722 OP_LESSTHANOREQUAL:
161,
11723 OP_GREATERTHANOREQUAL:
162,
11735 OP_CODESEPARATOR:
171,
11737 OP_CHECKSIGVERIFY:
173,
11738 OP_CHECKMULTISIG:
174,
11739 OP_CHECKMULTISIGVERIFY:
175,
11753 // template matching params
11754 OP_PUBKEYHASH:
253,
11756 OP_INVALIDOPCODE:
255
11759 },{}],
68:[function(require,module,exports){
11760 (function (Buffer){
11761 var assert = require('assert')
11762 var bufferutils = require('./bufferutils')
11763 var crypto = require('./crypto')
11764 var typeForce = require('typeforce')
11765 var opcodes = require('./opcodes')
11767 function Script (buffer, chunks) {
11768 typeForce('Buffer', buffer)
11769 typeForce('Array', chunks)
11771 this.buffer = buffer
11772 this.chunks = chunks
11775 Script.fromASM = function (asm) {
11776 var strChunks = asm.split(' ')
11777 var chunks = strChunks.map(function (strChunk) {
11779 if (strChunk in opcodes) {
11780 return opcodes[strChunk]
11784 return new Buffer(strChunk, 'hex')
11788 return Script.fromChunks(chunks)
11791 Script.fromBuffer = function (buffer) {
11795 while (i < buffer.length) {
11796 var opcode = buffer.readUInt8(i)
11799 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11800 var d = bufferutils.readPushDataInt(buffer, i)
11802 // did reading a pushDataInt fail? return non-chunked script
11803 if (d === null) return new Script(buffer, [])
11806 // attempt to read too much data?
11807 if (i + d.number
> buffer.length) return new Script(buffer, [])
11809 var data = buffer.slice(i, i + d.number)
11816 chunks.push(opcode)
11822 return new Script(buffer, chunks)
11825 Script.fromChunks = function (chunks) {
11826 typeForce('Array', chunks)
11828 var bufferSize = chunks.reduce(function (accum, chunk) {
11830 if (Buffer.isBuffer(chunk)) {
11831 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11838 var buffer = new Buffer(bufferSize)
11841 chunks.forEach(function (chunk) {
11843 if (Buffer.isBuffer(chunk)) {
11844 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11846 chunk.copy(buffer, offset)
11847 offset += chunk.length
11851 buffer.writeUInt8(chunk, offset)
11856 assert.equal(offset, buffer.length, 'Could not decode chunks')
11857 return new Script(buffer, chunks)
11860 Script.fromHex = function (hex) {
11861 return Script.fromBuffer(new Buffer(hex, 'hex'))
11864 Script.EMPTY = Script.fromChunks([])
11866 Script.prototype.getHash = function () {
11867 return crypto.hash160(this.buffer)
11870 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11871 Script.prototype.without = function (needle) {
11872 return Script.fromChunks(this.chunks.filter(function (op) {
11873 return op !== needle
11877 var reverseOps = []
11878 for (var op in opcodes) {
11879 var code = opcodes[op]
11880 reverseOps[code] = op
11883 Script.prototype.toASM = function () {
11884 return this.chunks.map(function (chunk) {
11886 if (Buffer.isBuffer(chunk)) {
11887 return chunk.toString('hex')
11891 return reverseOps[chunk]
11896 Script.prototype.toBuffer = function () {
11900 Script.prototype.toHex = function () {
11901 return this.toBuffer().toString('hex')
11904 module.exports = Script
11906 }).call(this,require("buffer").Buffer)
11907 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11908 (function (Buffer){
11909 var assert = require('assert')
11910 var ops = require('./opcodes')
11911 var typeForce = require('typeforce')
11913 var ecurve = require('ecurve')
11914 var curve = ecurve.getCurveByName('secp256k1')
11916 var ECSignature = require('./ecsignature')
11917 var Script = require('./script')
11919 function isCanonicalPubKey (buffer) {
11920 if (!Buffer.isBuffer(buffer)) return false
11923 ecurve.Point.decodeFrom(curve, buffer)
11925 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11934 function isCanonicalSignature (buffer) {
11935 if (!Buffer.isBuffer(buffer)) return false
11938 ECSignature.parseScriptSignature(buffer)
11940 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/))) {
11950 function isPubKeyHashInput (script) {
11951 return script.chunks.length ===
2 &&
11952 isCanonicalSignature(script.chunks[
0]) &&
11953 isCanonicalPubKey(script.chunks[
1])
11956 function isPubKeyHashOutput (script) {
11957 return script.chunks.length ===
5 &&
11958 script.chunks[
0] === ops.OP_DUP &&
11959 script.chunks[
1] === ops.OP_HASH160 &&
11960 Buffer.isBuffer(script.chunks[
2]) &&
11961 script.chunks[
2].length ===
20 &&
11962 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11963 script.chunks[
4] === ops.OP_CHECKSIG
11966 function isPubKeyInput (script) {
11967 return script.chunks.length ===
1 &&
11968 isCanonicalSignature(script.chunks[
0])
11971 function isPubKeyOutput (script) {
11972 return script.chunks.length ===
2 &&
11973 isCanonicalPubKey(script.chunks[
0]) &&
11974 script.chunks[
1] === ops.OP_CHECKSIG
11977 function isScriptHashInput (script, allowIncomplete) {
11978 if (script.chunks.length <
2) return false
11980 var lastChunk = script.chunks[script.chunks.length -
1]
11981 if (!Buffer.isBuffer(lastChunk)) return false
11983 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11984 var redeemScript = Script.fromBuffer(lastChunk)
11986 // is redeemScript a valid script?
11987 if (redeemScript.chunks.length ===
0) return false
11989 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11992 function isScriptHashOutput (script) {
11993 return script.chunks.length ===
3 &&
11994 script.chunks[
0] === ops.OP_HASH160 &&
11995 Buffer.isBuffer(script.chunks[
1]) &&
11996 script.chunks[
1].length ===
20 &&
11997 script.chunks[
2] === ops.OP_EQUAL
12000 // allowIncomplete is to account for combining signatures
12001 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
12002 function isMultisigInput (script, allowIncomplete) {
12003 if (script.chunks.length <
2) return false
12004 if (script.chunks[
0] !== ops.OP_0) return false
12006 if (allowIncomplete) {
12007 return script.chunks.slice(
1).every(function (chunk) {
12008 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12012 return script.chunks.slice(
1).every(isCanonicalSignature)
12015 function isMultisigOutput (script) {
12016 if (script.chunks.length <
4) return false
12017 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
12019 var mOp = script.chunks[
0]
12020 if (mOp === ops.OP_0) return false
12021 if (mOp < ops.OP_1) return false
12022 if (mOp
> ops.OP_16) return false
12024 var nOp = script.chunks[script.chunks.length -
2]
12025 if (nOp === ops.OP_0) return false
12026 if (nOp < ops.OP_1) return false
12027 if (nOp
> ops.OP_16) return false
12029 var m = mOp - (ops.OP_1 -
1)
12030 var n = nOp - (ops.OP_1 -
1)
12031 if (n < m) return false
12033 var pubKeys = script.chunks.slice(
1, -
2)
12034 if (n < pubKeys.length) return false
12036 return pubKeys.every(isCanonicalPubKey)
12039 function isNullDataOutput (script) {
12040 return script.chunks[
0] === ops.OP_RETURN
12043 function classifyOutput (script) {
12044 typeForce('Script', script)
12046 if (isPubKeyHashOutput(script)) {
12047 return 'pubkeyhash'
12048 } else if (isScriptHashOutput(script)) {
12049 return 'scripthash'
12050 } else if (isMultisigOutput(script)) {
12052 } else if (isPubKeyOutput(script)) {
12054 } else if (isNullDataOutput(script)) {
12058 return 'nonstandard'
12061 function classifyInput (script, allowIncomplete) {
12062 typeForce('Script', script)
12064 if (isPubKeyHashInput(script)) {
12065 return 'pubkeyhash'
12066 } else if (isMultisigInput(script, allowIncomplete)) {
12068 } else if (isScriptHashInput(script, allowIncomplete)) {
12069 return 'scripthash'
12070 } else if (isPubKeyInput(script)) {
12074 return 'nonstandard'
12077 // Standard Script Templates
12078 // {pubKey} OP_CHECKSIG
12079 function pubKeyOutput (pubKey) {
12080 return Script.fromChunks([
12086 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12087 function pubKeyHashOutput (hash) {
12088 typeForce('Buffer', hash)
12090 return Script.fromChunks([
12094 ops.OP_EQUALVERIFY,
12099 // OP_HASH160 {scriptHash} OP_EQUAL
12100 function scriptHashOutput (hash) {
12101 typeForce('Buffer', hash)
12103 return Script.fromChunks([
12110 // m [pubKeys ...] n OP_CHECKMULTISIG
12111 function multisigOutput (m, pubKeys) {
12112 typeForce(['ECPubKey'], pubKeys)
12114 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12116 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12117 return pubKey.toBuffer()
12119 var n = pubKeys.length
12121 return Script.fromChunks([].concat(
12122 (ops.OP_1 -
1) + m,
12124 (ops.OP_1 -
1) + n,
12125 ops.OP_CHECKMULTISIG
12130 function pubKeyInput (signature) {
12131 typeForce('Buffer', signature)
12133 return Script.fromChunks([signature])
12136 // {signature} {pubKey}
12137 function pubKeyHashInput (signature, pubKey) {
12138 typeForce('Buffer', signature)
12140 return Script.fromChunks([signature, pubKey.toBuffer()])
12143 //
<scriptSig> {serialized scriptPubKey script}
12144 function scriptHashInput (scriptSig, scriptPubKey) {
12145 return Script.fromChunks([].concat(
12147 scriptPubKey.toBuffer()
12151 // OP_0 [signatures ...]
12152 function multisigInput (signatures, scriptPubKey) {
12153 if (scriptPubKey) {
12154 assert(isMultisigOutput(scriptPubKey))
12156 var mOp = scriptPubKey.chunks[
0]
12157 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12158 var m = mOp - (ops.OP_1 -
1)
12159 var n = nOp - (ops.OP_1 -
1)
12161 assert(signatures.length
>= m, 'Not enough signatures provided')
12162 assert(signatures.length <= n, 'Too many signatures provided')
12165 return Script.fromChunks([].concat(ops.OP_0, signatures))
12168 function nullDataOutput (data) {
12169 return Script.fromChunks([ops.OP_RETURN, data])
12173 isCanonicalPubKey: isCanonicalPubKey,
12174 isCanonicalSignature: isCanonicalSignature,
12175 isPubKeyHashInput: isPubKeyHashInput,
12176 isPubKeyHashOutput: isPubKeyHashOutput,
12177 isPubKeyInput: isPubKeyInput,
12178 isPubKeyOutput: isPubKeyOutput,
12179 isScriptHashInput: isScriptHashInput,
12180 isScriptHashOutput: isScriptHashOutput,
12181 isMultisigInput: isMultisigInput,
12182 isMultisigOutput: isMultisigOutput,
12183 isNullDataOutput: isNullDataOutput,
12184 classifyOutput: classifyOutput,
12185 classifyInput: classifyInput,
12186 pubKeyOutput: pubKeyOutput,
12187 pubKeyHashOutput: pubKeyHashOutput,
12188 scriptHashOutput: scriptHashOutput,
12189 multisigOutput: multisigOutput,
12190 pubKeyInput: pubKeyInput,
12191 pubKeyHashInput: pubKeyHashInput,
12192 scriptHashInput: scriptHashInput,
12193 multisigInput: multisigInput,
12194 dataOutput: function (data) {
12195 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12196 return nullDataOutput(data)
12198 nullDataOutput: nullDataOutput
12201 }).call(this,require("buffer").Buffer)
12202 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12203 (function (Buffer){
12204 var assert = require('assert')
12205 var bufferutils = require('./bufferutils')
12206 var crypto = require('./crypto')
12207 var typeForce = require('typeforce')
12208 var opcodes = require('./opcodes')
12209 var scripts = require('./scripts')
12211 var Address = require('./address')
12212 var ECSignature = require('./ecsignature')
12213 var Script = require('./script')
12215 function Transaction () {
12222 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12223 Transaction.SIGHASH_ALL =
0x01
12224 Transaction.SIGHASH_NONE =
0x02
12225 Transaction.SIGHASH_SINGLE =
0x03
12226 Transaction.SIGHASH_ANYONECANPAY =
0x80
12228 Transaction.fromBuffer = function (buffer, __disableAssert) {
12230 function readSlice (n) {
12232 return buffer.slice(offset - n, offset)
12235 function readUInt32 () {
12236 var i = buffer.readUInt32LE(offset)
12241 function readUInt64 () {
12242 var i = bufferutils.readUInt64LE(buffer, offset)
12247 function readVarInt () {
12248 var vi = bufferutils.readVarInt(buffer, offset)
12253 function readScript () {
12254 return Script.fromBuffer(readSlice(readVarInt()))
12257 function readGenerationScript () {
12258 return new Script(readSlice(readVarInt()), [])
12261 var tx = new Transaction()
12262 tx.version = readUInt32()
12264 var vinLen = readVarInt()
12265 for (var i =
0; i < vinLen; ++i) {
12266 var hash = readSlice(
32)
12268 if (Transaction.isCoinbaseHash(hash)) {
12271 index: readUInt32(),
12272 script: readGenerationScript(),
12273 sequence: readUInt32()
12278 index: readUInt32(),
12279 script: readScript(),
12280 sequence: readUInt32()
12285 var voutLen = readVarInt()
12286 for (i =
0; i < voutLen; ++i) {
12288 value: readUInt64(),
12289 script: readScript()
12293 tx.locktime = readUInt32()
12295 if (!__disableAssert) {
12296 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12302 Transaction.fromHex = function (hex) {
12303 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12306 Transaction.isCoinbaseHash = function (buffer) {
12307 return Array.prototype.every.call(buffer, function (x) {
12313 * Create a new txIn.
12315 * Can be called with any of:
12317 * - A transaction and an index
12318 * - A transaction hash and an index
12320 * Note that this method does not sign the created input.
12322 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12323 if (sequence === undefined || sequence === null) {
12324 sequence = Transaction.DEFAULT_SEQUENCE
12327 script = script || Script.EMPTY
12329 if (typeof hash === 'string') {
12330 // TxId hex is big-endian, we need little-endian
12331 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12332 } else if (hash instanceof Transaction) {
12333 hash = hash.getHash()
12336 typeForce('Buffer', hash)
12337 typeForce('Number', index)
12338 typeForce('Number', sequence)
12339 typeForce('Script', script)
12341 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12343 // Add the input and return the input's index
12344 return (this.ins.push({
12353 * Create a new txOut.
12355 * Can be called with:
12357 * - A base58 address string and a value
12358 * - An Address object and a value
12359 * - A scriptPubKey Script and a value
12361 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12362 // Attempt to get a valid address if it's a base58 address string
12363 if (typeof scriptPubKey === 'string') {
12364 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12367 // Attempt to get a valid script if it's an Address object
12368 if (scriptPubKey instanceof Address) {
12369 scriptPubKey = scriptPubKey.toOutputScript()
12372 typeForce('Script', scriptPubKey)
12373 typeForce('Number', value)
12375 // Add the output and return the output's index
12376 return (this.outs.push({
12377 script: scriptPubKey,
12382 Transaction.prototype.clone = function () {
12383 var newTx = new Transaction()
12384 newTx.version = this.version
12385 newTx.locktime = this.locktime
12387 newTx.ins = this.ins.map(function (txIn) {
12391 script: txIn.script,
12392 sequence: txIn.sequence
12396 newTx.outs = this.outs.map(function (txOut) {
12398 script: txOut.script,
12407 * Hash transaction for signing a specific input.
12409 * Bitcoin uses a different hash for each signed transaction input. This
12410 * method copies the transaction, makes the necessary changes based on the
12411 * hashType, serializes and finally hashes the result. This hash can then be
12412 * used to sign the transaction input in question.
12414 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12415 // FIXME: remove in
2.x.y
12416 if (arguments[
0] instanceof Script) {
12417 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12419 // swap the arguments (must be stored in tmp, arguments is special)
12420 var tmp = arguments[
0]
12421 inIndex = arguments[
1]
12422 prevOutScript = tmp
12425 typeForce('Number', inIndex)
12426 typeForce('Script', prevOutScript)
12427 typeForce('Number', hashType)
12429 assert(inIndex
>=
0, 'Invalid vin index')
12430 assert(inIndex < this.ins.length, 'Invalid vin index')
12432 var txTmp = this.clone()
12433 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12435 // Blank out other inputs' signatures
12436 txTmp.ins.forEach(function (txIn) {
12437 txIn.script = Script.EMPTY
12439 txTmp.ins[inIndex].script = hashScript
12441 var hashTypeModifier = hashType &
0x1f
12443 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12444 assert(false, 'SIGHASH_NONE not yet supported')
12445 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12446 assert(false, 'SIGHASH_SINGLE not yet supported')
12449 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12450 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12453 var hashTypeBuffer = new Buffer(
4)
12454 hashTypeBuffer.writeInt32LE(hashType,
0)
12456 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12457 return crypto.hash256(buffer)
12460 Transaction.prototype.getHash = function () {
12461 return crypto.hash256(this.toBuffer())
12464 Transaction.prototype.getId = function () {
12465 // TxHash is little-endian, we need big-endian
12466 return bufferutils.reverse(this.getHash()).toString('hex')
12469 Transaction.prototype.toBuffer = function () {
12470 function scriptSize (script) {
12471 var length = script.buffer.length
12473 return bufferutils.varIntSize(length) + length
12476 var buffer = new Buffer(
12478 bufferutils.varIntSize(this.ins.length) +
12479 bufferutils.varIntSize(this.outs.length) +
12480 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12481 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12485 function writeSlice (slice) {
12486 slice.copy(buffer, offset)
12487 offset += slice.length
12490 function writeUInt32 (i) {
12491 buffer.writeUInt32LE(i, offset)
12495 function writeUInt64 (i) {
12496 bufferutils.writeUInt64LE(buffer, i, offset)
12500 function writeVarInt (i) {
12501 var n = bufferutils.writeVarInt(buffer, i, offset)
12505 writeUInt32(this.version)
12506 writeVarInt(this.ins.length)
12508 this.ins.forEach(function (txIn) {
12509 writeSlice(txIn.hash)
12510 writeUInt32(txIn.index)
12511 writeVarInt(txIn.script.buffer.length)
12512 writeSlice(txIn.script.buffer)
12513 writeUInt32(txIn.sequence)
12516 writeVarInt(this.outs.length)
12517 this.outs.forEach(function (txOut) {
12518 writeUInt64(txOut.value)
12519 writeVarInt(txOut.script.buffer.length)
12520 writeSlice(txOut.script.buffer)
12523 writeUInt32(this.locktime)
12528 Transaction.prototype.toHex = function () {
12529 return this.toBuffer().toString('hex')
12532 Transaction.prototype.setInputScript = function (index, script) {
12533 typeForce('Number', index)
12534 typeForce('Script', script)
12536 this.ins[index].script = script
12539 // FIXME: remove in
2.x.y
12540 Transaction.prototype.sign = function (index, privKey, hashType) {
12541 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12543 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12544 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12546 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12547 this.setInputScript(index, scriptSig)
12550 // FIXME: remove in
2.x.y
12551 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12552 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12554 hashType = hashType || Transaction.SIGHASH_ALL
12556 var hash = this.hashForSignature(index, prevOutScript, hashType)
12557 var signature = privKey.sign(hash)
12559 return signature.toScriptSignature(hashType)
12562 // FIXME: remove in
2.x.y
12563 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12564 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12566 var parsed = ECSignature.parseScriptSignature(buffer)
12567 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12569 return pubKey.verify(hash, parsed.signature)
12572 module.exports = Transaction
12574 }).call(this,require("buffer").Buffer)
12575 },{"./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){
12576 (function (Buffer){
12577 var assert = require('assert')
12578 var ops = require('./opcodes')
12579 var scripts = require('./scripts')
12581 var ECPubKey = require('./ecpubkey')
12582 var ECSignature = require('./ecsignature')
12583 var Script = require('./script')
12584 var Transaction = require('./transaction')
12586 function extractInput (txIn) {
12588 var scriptSig = txIn.script
12590 var prevOutType = scripts.classifyInput(scriptSig, true)
12593 // Re-classify if scriptHash
12594 if (prevOutType === 'scripthash') {
12595 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12596 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12598 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12599 scriptType = scripts.classifyInput(scriptSig, true)
12601 scriptType = prevOutType
12604 // Extract hashType, pubKeys and signatures
12605 var hashType, parsed, pubKeys, signatures
12607 switch (scriptType) {
12608 case 'pubkeyhash': {
12609 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12610 hashType = parsed.hashType
12611 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12612 signatures = [parsed.signature]
12613 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12619 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12620 hashType = parsed.hashType
12621 signatures = [parsed.signature]
12623 if (redeemScript) {
12624 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12631 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12632 if (chunk === ops.OP_0) return chunk
12634 var parsed = ECSignature.parseScriptSignature(chunk)
12635 hashType = parsed.hashType
12637 return parsed.signature
12640 if (redeemScript) {
12641 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12649 hashType: hashType,
12650 prevOutScript: prevOutScript,
12651 prevOutType: prevOutType,
12653 redeemScript: redeemScript,
12654 scriptType: scriptType,
12655 signatures: signatures
12659 function TransactionBuilder () {
12660 this.prevTxMap = {}
12661 this.prevOutScripts = {}
12662 this.prevOutTypes = {}
12665 this.tx = new Transaction()
12668 TransactionBuilder.fromTransaction = function (transaction) {
12669 var txb = new TransactionBuilder()
12671 // Copy other transaction fields
12672 txb.tx.version = transaction.version
12673 txb.tx.locktime = transaction.locktime
12675 // Extract/add inputs
12676 transaction.ins.forEach(function (txIn) {
12677 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12680 // Extract/add outputs
12681 transaction.outs.forEach(function (txOut) {
12682 txb.addOutput(txOut.script, txOut.value)
12685 // Extract/add signatures
12686 txb.inputs = transaction.ins.map(function (txIn) {
12687 // TODO: remove me after testcase added
12688 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12690 // Ignore empty scripts
12691 if (txIn.script.buffer.length ===
0) return {}
12693 return extractInput(txIn)
12699 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12703 if (typeof prevTx === 'string') {
12704 prevOutHash = new Buffer(prevTx, 'hex')
12706 // TxId hex is big-endian, we want little-endian hash
12707 Array.prototype.reverse.call(prevOutHash)
12710 } else if (prevTx instanceof Transaction) {
12711 prevOutHash = prevTx.getHash()
12712 prevOutScript = prevTx.outs[index].script
12716 prevOutHash = prevTx
12720 if (prevOutScript) {
12721 var prevOutType = scripts.classifyOutput(prevOutScript)
12723 // if we can, extract pubKey information
12724 switch (prevOutType) {
12726 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12731 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12736 if (prevOutType !== 'scripthash') {
12737 input.scriptType = prevOutType
12740 input.prevOutScript = prevOutScript
12741 input.prevOutType = prevOutType
12744 assert(this.inputs.every(function (input2) {
12745 if (input2.hashType === undefined) return true
12747 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12748 }), 'No, this would invalidate signatures')
12750 var prevOut = prevOutHash.toString('hex') + ':' + index
12751 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12753 var vin = this.tx.addInput(prevOutHash, index, sequence)
12754 this.inputs[vin] = input
12755 this.prevTxMap[prevOut] = vin
12760 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12761 assert(this.inputs.every(function (input) {
12762 if (input.hashType === undefined) return true
12764 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12765 }), 'No, this would invalidate signatures')
12767 return this.tx.addOutput(scriptPubKey, value)
12770 TransactionBuilder.prototype.build = function () {
12771 return this.__build(false)
12773 TransactionBuilder.prototype.buildIncomplete = function () {
12774 return this.__build(true)
12777 var canSignTypes = {
12778 'pubkeyhash': true,
12783 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12784 if (!allowIncomplete) {
12785 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12786 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12789 var tx = this.tx.clone()
12791 // Create script signatures from signature meta-data
12792 this.inputs.forEach(function (input, index) {
12793 var scriptType = input.scriptType
12796 if (!allowIncomplete) {
12797 assert(!!scriptType, 'Transaction is not complete')
12798 assert(scriptType in canSignTypes, scriptType + ' not supported')
12799 assert(input.signatures, 'Transaction is missing signatures')
12802 if (input.signatures) {
12803 switch (scriptType) {
12804 case 'pubkeyhash': {
12805 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12806 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12811 // Array.prototype.map is sparse-compatible
12812 var msSignatures = input.signatures.map(function (signature) {
12813 return signature && signature.toScriptSignature(input.hashType)
12816 // fill in blanks with OP_0
12817 if (allowIncomplete) {
12818 for (var i =
0; i < msSignatures.length; ++i) {
12819 if (msSignatures[i]) continue
12821 msSignatures[i] = ops.OP_0
12824 // Array.prototype.filter returns non-sparse array
12825 msSignatures = msSignatures.filter(function (x) { return x })
12828 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12829 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12834 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12835 scriptSig = scripts.pubKeyInput(pkSignature)
12841 // did we build a scriptSig?
12843 // wrap as scriptHash if necessary
12844 if (input.prevOutType === 'scripthash') {
12845 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12848 tx.setInputScript(index, scriptSig)
12855 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12856 assert(index in this.inputs, 'No input at index: ' + index)
12857 hashType = hashType || Transaction.SIGHASH_ALL
12859 var input = this.inputs[index]
12860 var canSign = input.hashType &&
12861 input.prevOutScript &&
12862 input.prevOutType &&
12864 input.scriptType &&
12867 // are we almost ready to sign?
12869 // if redeemScript was provided, enforce consistency
12870 if (redeemScript) {
12871 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12874 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12878 // must be pay-to-scriptHash?
12879 if (redeemScript) {
12880 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12881 if (input.prevOutScript) {
12882 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12884 var scriptHash = input.prevOutScript.chunks[
1]
12885 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12888 var scriptType = scripts.classifyOutput(redeemScript)
12889 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12892 switch (scriptType) {
12894 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12898 case 'pubkeyhash': {
12899 var pkh1 = redeemScript.chunks[
2]
12900 var pkh2 = privKey.pub.getAddress().hash
12902 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12903 pubKeys = [privKey.pub]
12908 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12913 if (!input.prevOutScript) {
12914 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12915 input.prevOutType = 'scripthash'
12918 input.pubKeys = pubKeys
12919 input.redeemScript = redeemScript
12920 input.scriptType = scriptType
12922 // cannot be pay-to-scriptHash
12924 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12926 // can we otherwise sign this?
12927 if (input.scriptType) {
12928 assert(input.pubKeys, input.scriptType + ' not supported')
12930 // we know nothin' Jon Snow, assume pubKeyHash
12932 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12933 input.prevOutType = 'pubkeyhash'
12934 input.pubKeys = [privKey.pub]
12935 input.scriptType = input.prevOutType
12939 input.hashType = hashType
12940 input.signatures = input.signatures || []
12943 var signatureScript = input.redeemScript || input.prevOutScript
12944 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12946 // enforce signature order matches public keys
12947 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12948 // maintain a local copy of unmatched signatures
12949 var unmatched = input.signatures.slice()
12951 input.signatures = input.pubKeys.map(function (pubKey) {
12954 // check for any matching signatures
12955 unmatched.some(function (signature, i) {
12956 if (!pubKey.verify(signatureHash, signature)) return false
12959 // remove matched signature from unmatched
12960 unmatched.splice(i,
1)
12965 return match || undefined
12969 // enforce in order signing of public keys
12970 assert(input.pubKeys.some(function (pubKey, i) {
12971 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12973 assert(!input.signatures[i], 'Signature already exists')
12974 var signature = privKey.sign(signatureHash)
12975 input.signatures[i] = signature
12978 }, this), 'privateKey cannot sign for this input')
12981 module.exports = TransactionBuilder
12983 }).call(this,require(
"buffer").Buffer)
12984 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12985 (function (Buffer){
12986 var assert = require('assert')
12987 var bufferutils = require('./bufferutils')
12988 var typeForce = require('typeforce')
12989 var networks = require('./networks')
12990 var randomBytes = require('randombytes')
12992 var Address = require('./address')
12993 var HDNode = require('./hdnode')
12994 var TransactionBuilder = require('./transaction_builder')
12995 var Script = require('./script')
12997 function Wallet (seed, network) {
12998 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
13000 seed = seed || randomBytes(
32)
13001 network = network || networks.bitcoin
13003 // Stored in a closure to make accidental serialization less likely
13004 var masterKey = HDNode.fromSeedBuffer(seed, network)
13006 // HD first-level child derivation method should be hardened
13007 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
13008 var accountZero = masterKey.deriveHardened(
0)
13009 var externalAccount = accountZero.derive(
0)
13010 var internalAccount = accountZero.derive(
1)
13012 this.addresses = []
13013 this.changeAddresses = []
13014 this.network = network
13017 // FIXME: remove in
2.0.0
13018 this.unspentMap = {}
13020 // FIXME: remove in
2.0.0
13022 this.newMasterKey = function (seed) {
13023 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13025 seed = seed || randomBytes(
32)
13026 masterKey = HDNode.fromSeedBuffer(seed, network)
13028 accountZero = masterKey.deriveHardened(
0)
13029 externalAccount = accountZero.derive(
0)
13030 internalAccount = accountZero.derive(
1)
13033 me.changeAddresses = []
13039 this.getMasterKey = function () {
13042 this.getAccountZero = function () {
13045 this.getExternalAccount = function () {
13046 return externalAccount
13048 this.getInternalAccount = function () {
13049 return internalAccount
13053 Wallet.prototype.createTransaction = function (to, value, options) {
13054 // FIXME: remove in
2.0.0
13055 if (typeof options !== 'object') {
13056 if (options !== undefined) {
13057 console.warn('Non options object parameters are deprecated, use options object instead')
13060 fixedFee: arguments[
2],
13061 changeAddress: arguments[
3]
13066 options = options || {}
13068 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13070 var changeAddress = options.changeAddress
13071 var fixedFee = options.fixedFee
13072 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13074 // filter by minConf, then pending and sort by descending value
13075 var unspents = this.unspents.filter(function (unspent) {
13076 return unspent.confirmations
>= minConf
13077 }).filter(function (unspent) {
13078 return !unspent.pending
13079 }).sort(function (o1, o2) {
13080 return o2.value - o1.value
13085 var subTotal = value
13087 var txb = new TransactionBuilder()
13088 txb.addOutput(to, value)
13090 for (var i =
0; i < unspents.length; ++i) {
13091 var unspent = unspents[i]
13092 addresses.push(unspent.address)
13094 txb.addInput(unspent.txHash, unspent.index)
13096 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13098 accum += unspent.value
13099 subTotal = value + fee
13101 if (accum
>= subTotal) {
13102 var change = accum - subTotal
13104 if (change
> this.network.dustThreshold) {
13105 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13112 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13114 return this.signWith(txb, addresses).build()
13117 // FIXME: remove in
2.0.0
13118 Wallet.prototype.processPendingTx = function (tx) {
13119 this.__processTx(tx, true)
13122 // FIXME: remove in
2.0.0
13123 Wallet.prototype.processConfirmedTx = function (tx) {
13124 this.__processTx(tx, false)
13127 // FIXME: remove in
2.0.0
13128 Wallet.prototype.__processTx = function (tx, isPending) {
13129 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13131 var txId = tx.getId()
13132 var txHash = tx.getHash()
13134 tx.outs.forEach(function (txOut, i) {
13138 address = Address.fromOutputScript(txOut.script, this.network).toString()
13140 if (!(e.message.match(/has no matching Address/)))
13144 var myAddresses = this.addresses.concat(this.changeAddresses)
13145 if (myAddresses.indexOf(address)
> -
1) {
13146 var lookup = txId + ':' + i
13147 if (lookup in this.unspentMap) return
13149 // its unique, add it
13152 confirmations:
0, // no way to determine this without more information
13156 value: txOut.value,
13160 this.unspentMap[lookup] = unspent
13161 this.unspents.push(unspent)
13165 tx.ins.forEach(function (txIn) {
13166 // copy and convert to big-endian hex
13167 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13169 var lookup = txInId + ':' + txIn.index
13170 if (!(lookup in this.unspentMap)) return
13172 var unspent = this.unspentMap[lookup]
13175 unspent.pending = true
13176 unspent.spent = true
13178 delete this.unspentMap[lookup]
13180 this.unspents = this.unspents.filter(function (unspent2) {
13181 return unspent !== unspent2
13187 Wallet.prototype.generateAddress = function () {
13188 var k = this.addresses.length
13189 var address = this.getExternalAccount().derive(k).getAddress()
13191 this.addresses.push(address.toString())
13193 return this.getReceiveAddress()
13196 Wallet.prototype.generateChangeAddress = function () {
13197 var k = this.changeAddresses.length
13198 var address = this.getInternalAccount().derive(k).getAddress()
13200 this.changeAddresses.push(address.toString())
13202 return this.getChangeAddress()
13205 Wallet.prototype.getAddress = function () {
13206 if (this.addresses.length ===
0) {
13207 this.generateAddress()
13210 return this.addresses[this.addresses.length -
1]
13213 Wallet.prototype.getBalance = function (minConf) {
13214 minConf = minConf ||
0
13216 return this.unspents.filter(function (unspent) {
13217 return unspent.confirmations
>= minConf
13219 // FIXME: remove spent filter in
2.0.0
13220 }).filter(function (unspent) {
13221 return !unspent.spent
13222 }).reduce(function (accum, unspent) {
13223 return accum + unspent.value
13227 Wallet.prototype.getChangeAddress = function () {
13228 if (this.changeAddresses.length ===
0) {
13229 this.generateChangeAddress()
13232 return this.changeAddresses[this.changeAddresses.length -
1]
13235 Wallet.prototype.getInternalPrivateKey = function (index) {
13236 return this.getInternalAccount().derive(index).privKey
13239 Wallet.prototype.getPrivateKey = function (index) {
13240 return this.getExternalAccount().derive(index).privKey
13243 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13246 if ((index = this.addresses.indexOf(address))
> -
1) {
13247 return this.getPrivateKey(index)
13250 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13251 return this.getInternalPrivateKey(index)
13254 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13257 Wallet.prototype.getUnspentOutputs = function (minConf) {
13258 minConf = minConf ||
0
13260 return this.unspents.filter(function (unspent) {
13261 return unspent.confirmations
>= minConf
13263 // FIXME: remove spent filter in
2.0.0
13264 }).filter(function (unspent) {
13265 return !unspent.spent
13266 }).map(function (unspent) {
13268 address: unspent.address,
13269 confirmations: unspent.confirmations,
13270 index: unspent.index,
13271 txId: unspent.txId,
13272 value: unspent.value,
13274 // FIXME: remove in
2.0.0
13275 hash: unspent.txId,
13276 pending: unspent.pending
13281 Wallet.prototype.setUnspentOutputs = function (unspents) {
13282 this.unspentMap = {}
13283 this.unspents = unspents.map(function (unspent) {
13284 // FIXME: remove unspent.hash in
2.0.0
13285 var txId = unspent.txId || unspent.hash
13286 var index = unspent.index
13288 // FIXME: remove in
2.0.0
13289 if (unspent.hash !== undefined) {
13290 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13293 // FIXME: remove in
2.0.0
13294 if (index === undefined) {
13295 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13296 index = unspent.outputIndex
13299 typeForce('String', txId)
13300 typeForce('Number', index)
13301 typeForce('Number', unspent.value)
13303 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13304 assert.doesNotThrow(function () {
13305 Address.fromBase58Check(unspent.address)
13306 }, 'Expected Base58 Address, got ' + unspent.address)
13307 assert(isFinite(index), 'Expected finite index, got ' + index)
13309 // FIXME: remove branch in
2.0.0
13310 if (unspent.confirmations !== undefined) {
13311 typeForce('Number', unspent.confirmations)
13314 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13317 address: unspent.address,
13318 confirmations: unspent.confirmations ||
0,
13322 value: unspent.value,
13324 // FIXME: remove in
2.0.0
13325 pending: unspent.pending || false
13328 // FIXME: remove in
2.0.0
13329 this.unspentMap[txId + ':' + index] = unspent
13335 Wallet.prototype.signWith = function (tx, addresses) {
13336 addresses.forEach(function (address, i) {
13337 var privKey = this.getPrivateKeyForAddress(address)
13339 tx.sign(i, privKey)
13345 function estimatePaddedFee (tx, network) {
13346 var tmpTx = tx.clone()
13347 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13349 return network.estimateFee(tmpTx)
13352 // FIXME:
1.0.0 shims, remove in
2.0.0
13353 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13354 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13356 module.exports = Wallet
13358 }).call(this,require("buffer").Buffer)
13359 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13361 <script>bitcoin.networks.shadow = {
13362 magicPrefix: '\x19ShadowCash Signed Message:\n',
13364 public:
0xEE80286A,
13365 private:
0xEE8031E8
13372 estimateFee: function() { return "unused in this app" },
13375 bitcoin.networks.shadowtn = {
13376 magicPrefix: '\x19ShadowCash Signed Message:\n',
13378 public:
0x76C0FDFB,
13379 private:
0x76C1077A
13386 estimateFee: function() { return "unused in this app" },
13389 bitcoin.networks.clam = {
13391 public:
0xa8c26d64,
13392 private:
0xa8c17826
13398 bitcoin.networks.dash = {
13400 public:
0x0488b21e,
13401 private:
0x0488ade4
13408 bitcoin.networks.namecoin = {
13410 public:
0x0488b21e,
13411 private:
0x0488ade4
13414 //scriptHash:
0x10,
13418 bitcoin.networks.peercoin = {
13420 public:
0x0488b21e,
13421 private:
0x0488ade4
13424 //scriptHash:
0x10,
13429 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13433 /** @fileOverview Javascript cryptography implementation.
13435 * Crush to remove comments, shorten variable names and
13436 * generally reduce transmission size.
13438 * @author Emily Stark
13439 * @author Mike Hamburg
13440 * @author Dan Boneh
13444 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13445 /*global document, window, escape, unescape, module, require, Uint32Array */
13447 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13449 /** @namespace Symmetric ciphers. */
13452 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13455 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13458 /** @namespace Block cipher modes of operation. */
13461 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13465 * @namespace Bit array encoders and decoders.
13468 * The members of this namespace are functions which translate between
13469 * SJCL's bitArrays and other objects (usually strings). Because it
13470 * isn't always clear which direction is encoding and which is decoding,
13471 * the method names are "fromBits" and "toBits".
13475 /** @namespace Exceptions. */
13477 /** @constructor Ciphertext is corrupt. */
13478 corrupt: function(message) {
13479 this.toString = function() { return "CORRUPT: "+this.message; };
13480 this.message = message;
13483 /** @constructor Invalid parameter. */
13484 invalid: function(message) {
13485 this.toString = function() { return "INVALID: "+this.message; };
13486 this.message = message;
13489 /** @constructor Bug or missing feature in SJCL. @constructor */
13490 bug: function(message) {
13491 this.toString = function() { return "BUG: "+this.message; };
13492 this.message = message;
13495 /** @constructor Something isn't ready. */
13496 notReady: function(message) {
13497 this.toString = function() { return "NOT READY: "+this.message; };
13498 this.message = message;
13503 if(typeof module !== 'undefined' && module.exports){
13504 module.exports = sjcl;
13506 if (typeof define === "function") {
13507 define([], function () {
13515 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13517 * @author Emily Stark
13518 * @author Mike Hamburg
13519 * @author Dan Boneh
13522 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13526 * These objects are the currency accepted by SJCL's crypto functions.
13530 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13531 * but many of them can take arguments that are not a multiple of
4 bytes.
13532 * This library encodes arrays of bits (whose size need not be a multiple of
8
13533 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13534 * array of words,
32 bits at a time. Since the words are double-precision
13535 * floating point numbers, they fit some extra data. We use this (in a private,
13536 * possibly-changing manner) to encode the number of bits actually present
13537 * in the last word of the array.
13541 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13542 * to ciphers like AES which want arrays of words.
13547 * Array slices in units of bits.
13548 * @param {bitArray} a The array to slice.
13549 * @param {Number} bstart The offset to the start of the slice, in bits.
13550 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13551 * slice until the end of the array.
13552 * @return {bitArray} The requested slice.
13554 bitSlice: function (a, bstart, bend) {
13555 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13556 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13560 * Extract a number packed into a bit array.
13561 * @param {bitArray} a The array to slice.
13562 * @param {Number} bstart The offset to the start of the slice, in bits.
13563 * @param {Number} length The length of the number to extract.
13564 * @return {Number} The requested slice.
13566 extract: function(a, bstart, blength) {
13567 // FIXME: this Math.floor is not necessary at all, but for some reason
13568 // seems to suppress a bug in the Chromium JIT.
13569 var x, sh = Math.floor((-bstart-blength) &
31);
13570 if ((bstart + blength -
1 ^ bstart) & -
32) {
13571 // it crosses a boundary
13572 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13574 // within a single word
13575 x = a[bstart/
32|
0]
>>> sh;
13577 return x & ((
1<
<blength) -
1);
13581 * Concatenate two bit arrays.
13582 * @param {bitArray} a1 The first array.
13583 * @param {bitArray} a2 The second array.
13584 * @return {bitArray} The concatenation of a1 and a2.
13586 concat: function (a1, a2) {
13587 if (a1.length ===
0 || a2.length ===
0) {
13588 return a1.concat(a2);
13591 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13592 if (shift ===
32) {
13593 return a1.concat(a2);
13595 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13600 * Find the length of an array of bits.
13601 * @param {bitArray} a The array.
13602 * @return {Number} The length of a, in bits.
13604 bitLength: function (a) {
13605 var l = a.length, x;
13606 if (l ===
0) { return
0; }
13608 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13612 * Truncate an array.
13613 * @param {bitArray} a The array.
13614 * @param {Number} len The length to truncate to, in bits.
13615 * @return {bitArray} A new array, truncated to len bits.
13617 clamp: function (a, len) {
13618 if (a.length *
32 < len) { return a; }
13619 a = a.slice(
0, Math.ceil(len /
32));
13622 if (l
> 0 && len) {
13623 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13629 * Make a partial word for a bit array.
13630 * @param {Number} len The number of bits in the word.
13631 * @param {Number} x The bits.
13632 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13633 * @return {Number} The partial word.
13635 partial: function (len, x, _end) {
13636 if (len ===
32) { return x; }
13637 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13641 * Get the number of bits used by a partial word.
13642 * @param {Number} x The partial word.
13643 * @return {Number} The number of bits used by the partial word.
13645 getPartial: function (x) {
13646 return Math.round(x/
0x10000000000) ||
32;
13650 * Compare two arrays for equality in a predictable amount of time.
13651 * @param {bitArray} a The first array.
13652 * @param {bitArray} b The second array.
13653 * @return {boolean} true if a == b; false otherwise.
13655 equal: function (a, b) {
13656 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13660 for (i=
0; i
<a.length; i++) {
13666 /** Shift an array right.
13667 * @param {bitArray} a The array to shift.
13668 * @param {Number} shift The number of bits to shift.
13669 * @param {Number} [carry=
0] A byte to carry in
13670 * @param {bitArray} [out=[]] An array to prepend to the output.
13673 _shiftRight: function (a, shift, carry, out) {
13674 var i, last2=
0, shift2;
13675 if (out === undefined) { out = []; }
13677 for (; shift
>=
32; shift -=
32) {
13682 return out.concat(a);
13685 for (i=
0; i
<a.length; i++) {
13686 out.push(carry | a[i]
>>>shift);
13687 carry = a[i] << (
32-shift);
13689 last2 = a.length ? a[a.length-
1] :
0;
13690 shift2 = sjcl.bitArray.getPartial(last2);
13691 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13695 /** xor a block of
4 words together.
13698 _xor4: function(x,y) {
13699 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13702 /** byteswap a word array inplace.
13703 * (does not handle partial words)
13704 * @param {sjcl.bitArray} a word array
13705 * @return {sjcl.bitArray} byteswapped array
13707 byteswapM: function(a) {
13708 var i, v, m =
0xff00;
13709 for (i =
0; i < a.length; ++i) {
13711 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13718 //// codecString.js
13720 /** @fileOverview Bit array codec implementations.
13722 * @author Emily Stark
13723 * @author Mike Hamburg
13724 * @author Dan Boneh
13727 /** @namespace UTF-
8 strings */
13728 sjcl.codec.utf8String = {
13729 /** Convert from a bitArray to a UTF-
8 string. */
13730 fromBits: function (arr) {
13731 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13732 for (i=
0; i
<bl/
8; i++) {
13736 out += String.fromCharCode(tmp
>>> 24);
13739 return decodeURIComponent(escape(out));
13742 /** Convert from a UTF-
8 string to a bitArray. */
13743 toBits: function (str) {
13744 str = unescape(encodeURIComponent(str));
13745 var out = [], i, tmp=
0;
13746 for (i=
0; i
<str.length; i++) {
13747 tmp = tmp <<
8 | str.charCodeAt(i);
13754 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13763 /** @fileOverview Bit array codec implementations.
13765 * @author Emily Stark
13766 * @author Mike Hamburg
13767 * @author Dan Boneh
13770 /** @namespace Hexadecimal */
13772 /** Convert from a bitArray to a hex string. */
13773 fromBits: function (arr) {
13775 for (i=
0; i
<arr.length; i++) {
13776 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13778 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13780 /** Convert from a hex string to a bitArray. */
13781 toBits: function (str) {
13782 var i, out=[], len;
13783 str = str.replace(/\s|
0x/g,
"");
13785 str = str +
"00000000";
13786 for (i=
0; i
<str.length; i+=
8) {
13787 out.push(parseInt(str.substr(i,
8),
16)^
0);
13789 return sjcl.bitArray.clamp(out, len*
4);
13796 /** @fileOverview Javascript SHA-
512 implementation.
13798 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13799 * SJCL by Stefan Thomas.
13801 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13802 * Released with New BSD License
13804 * @author Emily Stark
13805 * @author Mike Hamburg
13806 * @author Dan Boneh
13807 * @author Jeff Mott
13808 * @author Stefan Thomas
13812 * Context for a SHA-
512 operation in progress.
13814 * @class Secure Hash Algorithm,
512 bits.
13816 sjcl.hash.sha512 = function (hash) {
13817 if (!this._key[
0]) { this._precompute(); }
13819 this._h = hash._h.slice(
0);
13820 this._buffer = hash._buffer.slice(
0);
13821 this._length = hash._length;
13828 * Hash a string or an array of words.
13830 * @param {bitArray|String} data the data to hash.
13831 * @return {bitArray} The hash value, an array of
16 big-endian words.
13833 sjcl.hash.sha512.hash = function (data) {
13834 return (new sjcl.hash.sha512()).update(data).finalize();
13837 sjcl.hash.sha512.prototype = {
13839 * The hash's block size, in bits.
13845 * Reset the hash state.
13848 reset:function () {
13849 this._h = this._init.slice(
0);
13856 * Input several words to the hash.
13857 * @param {bitArray|String} data the data to hash.
13860 update: function (data) {
13861 if (typeof data ===
"string") {
13862 data = sjcl.codec.utf8String.toBits(data);
13864 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13866 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13867 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13868 this._block(b.splice(
0,
32));
13874 * Complete hashing and output the hash value.
13875 * @return {bitArray} The hash value, an array of
16 big-endian words.
13877 finalize:function () {
13878 var i, b = this._buffer, h = this._h;
13880 // Round out and push the buffer
13881 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13883 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13884 for (i = b.length +
4; i &
31; i++) {
13888 // append the length
13891 b.push(Math.floor(this._length /
0x100000000));
13892 b.push(this._length |
0);
13895 this._block(b.splice(
0,
32));
13903 * The SHA-
512 initialization vector, to be precomputed.
13909 * Least significant
24 bits of SHA512 initialization values.
13911 * Javascript only has
53 bits of precision, so we compute the
40 most
13912 * significant bits and add the remaining
24 bits as constants.
13916 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13920 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13921 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13925 * The SHA-
512 hash key, to be precomputed.
13931 * Least significant
24 bits of SHA512 key values.
13935 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13936 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13937 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13938 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13939 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13940 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13941 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13942 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13943 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13944 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13948 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13949 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13950 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13951 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13952 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13953 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13954 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13955 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13956 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13957 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13958 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13959 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13960 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13961 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13962 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13963 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13964 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13965 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13966 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13967 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13971 * Function to precompute _init and _key.
13974 _precompute: function () {
13975 // XXX: This code is for precomputing the SHA256 constants, change for
13976 // SHA512 and re-enable.
13977 var i =
0, prime =
2, factor;
13979 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13980 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13982 outer: for (; i
<80; prime++) {
13983 for (factor=
2; factor*factor <= prime; factor++) {
13984 if (prime % factor ===
0) {
13991 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13992 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13994 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13995 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
14001 * Perform one cycle of SHA-
512.
14002 * @param {bitArray} words one block of words.
14005 _block:function (words) {
14007 w = words.slice(
0),
14010 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
14011 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
14012 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
14013 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
14015 // Working variables
14016 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14017 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14018 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14019 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14021 for (i=
0; i
<80; i++) {
14022 // load up the input word for this round
14025 wrl = w[i *
2 +
1];
14028 var gamma0xh = w[(i-
15) *
2];
14029 var gamma0xl = w[(i-
15) *
2 +
1];
14031 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
14032 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
14035 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
14036 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
14037 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
14040 var gamma1xh = w[(i-
2) *
2];
14041 var gamma1xl = w[(i-
2) *
2 +
1];
14043 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
14044 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
14047 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
14048 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
14049 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
14052 var wr7h = w[(i-
7) *
2];
14053 var wr7l = w[(i-
7) *
2 +
1];
14055 var wr16h = w[(i-
16) *
2];
14056 var wr16l = w[(i-
16) *
2 +
1];
14058 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
14059 wrl = gamma0l + wr7l;
14060 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
14062 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
14064 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
14068 w[i*
2 +
1] = wrl |=
0;
14071 var chh = (eh & fh) ^ (~eh & gh);
14072 var chl = (el & fl) ^ (~el & gl);
14075 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14076 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14079 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
14080 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
14083 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
14084 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14088 var krl = k[i*
2+
1];
14090 // t1 = h + sigma1 + ch + K(round) + W(round)
14091 var t1l = hl + sigma1l;
14092 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14094 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14096 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14097 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14098 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14100 // t2 = sigma0 + maj
14101 var t2l = sigma0l + majl;
14102 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14104 // Update working variables
14111 el = (dl + t1l) |
0;
14112 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14119 al = (t1l + t2l) |
0;
14120 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14123 // Intermediate hash
14124 h0l = h[
1] = (h0l + al) |
0;
14125 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14126 h1l = h[
3] = (h1l + bl) |
0;
14127 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14128 h2l = h[
5] = (h2l + cl) |
0;
14129 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14130 h3l = h[
7] = (h3l + dl) |
0;
14131 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14132 h4l = h[
9] = (h4l + el) |
0;
14133 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14134 h5l = h[
11] = (h5l + fl) |
0;
14135 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14136 h6l = h[
13] = (h6l + gl) |
0;
14137 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14138 h7l = h[
15] = (h7l + hl) |
0;
14139 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14146 /** @fileOverview HMAC implementation.
14148 * @author Emily Stark
14149 * @author Mike Hamburg
14150 * @author Dan Boneh
14153 /** HMAC with the specified hash function.
14155 * @param {bitArray} key the key for HMAC.
14156 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14158 sjcl.misc.hmac = function (key, Hash) {
14159 this._hash = Hash = Hash || sjcl.hash.sha256;
14160 var exKey = [[],[]], i,
14161 bs = Hash.prototype.blockSize /
32;
14162 this._baseHash = [new Hash(), new Hash()];
14164 if (key.length
> bs) {
14165 key = Hash.hash(key);
14168 for (i=
0; i
<bs; i++) {
14169 exKey[
0][i] = key[i]^
0x36363636;
14170 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14173 this._baseHash[
0].update(exKey[
0]);
14174 this._baseHash[
1].update(exKey[
1]);
14175 this._resultHash = new Hash(this._baseHash[
0]);
14178 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14179 * @param {bitArray|String} data The data to mac.
14181 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14182 if (!this._updated) {
14184 return this.digest(data);
14186 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14190 sjcl.misc.hmac.prototype.reset = function () {
14191 this._resultHash = new this._hash(this._baseHash[
0]);
14192 this._updated = false;
14195 sjcl.misc.hmac.prototype.update = function (data) {
14196 this._updated = true;
14197 this._resultHash.update(data);
14200 sjcl.misc.hmac.prototype.digest = function () {
14201 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14212 /** @fileOverview Password-based key-derivation function, version
2.0.
14214 * @author Emily Stark
14215 * @author Mike Hamburg
14216 * @author Dan Boneh
14219 /** Password-Based Key-Derivation Function, version
2.0.
14221 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14223 * This is the method specified by RSA's PKCS #
5 standard.
14225 * @param {bitArray|String} password The password.
14226 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14227 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14228 * @param {Number} [length] The length of the derived key. Defaults to the
14229 output size of the hash function.
14230 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14231 * @return {bitArray} the derived key.
14233 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14234 count = count ||
1000;
14236 if (length <
0 || count <
0) {
14237 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14240 if (typeof password ===
"string") {
14241 password = sjcl.codec.utf8String.toBits(password);
14244 if (typeof salt ===
"string") {
14245 salt = sjcl.codec.utf8String.toBits(salt);
14248 Prff = Prff || sjcl.misc.hmac;
14250 var prf = new Prff(password),
14251 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14253 for (k =
1;
32 * out.length < (length ||
1); k++) {
14254 u = ui = prf.encrypt(b.concat(salt,[k]));
14256 for (i=
1; i
<count; i++) {
14257 ui = prf.encrypt(ui);
14258 for (j=
0; j
<ui.length; j++) {
14263 out = out.concat(u);
14266 if (length) { out = b.clamp(out, length); }
14274 /** @fileOverview Javascript SHA-
256 implementation.
14276 * An older version of this implementation is available in the public
14277 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14278 * Stanford University
2008-
2010 and BSD-licensed for liability
14281 * Special thanks to Aldo Cortesi for pointing out several bugs in
14284 * @author Emily Stark
14285 * @author Mike Hamburg
14286 * @author Dan Boneh
14290 * Context for a SHA-
256 operation in progress.
14292 * @class Secure Hash Algorithm,
256 bits.
14294 sjcl.hash.sha256 = function (hash) {
14295 if (!this._key[
0]) { this._precompute(); }
14297 this._h = hash._h.slice(
0);
14298 this._buffer = hash._buffer.slice(
0);
14299 this._length = hash._length;
14306 * Hash a string or an array of words.
14308 * @param {bitArray|String} data the data to hash.
14309 * @return {bitArray} The hash value, an array of
16 big-endian words.
14311 sjcl.hash.sha256.hash = function (data) {
14312 return (new sjcl.hash.sha256()).update(data).finalize();
14315 sjcl.hash.sha256.prototype = {
14317 * The hash's block size, in bits.
14323 * Reset the hash state.
14326 reset:function () {
14327 this._h = this._init.slice(
0);
14334 * Input several words to the hash.
14335 * @param {bitArray|String} data the data to hash.
14338 update: function (data) {
14339 if (typeof data ===
"string") {
14340 data = sjcl.codec.utf8String.toBits(data);
14342 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14344 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14345 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14346 this._block(b.splice(
0,
16));
14352 * Complete hashing and output the hash value.
14353 * @return {bitArray} The hash value, an array of
8 big-endian words.
14355 finalize:function () {
14356 var i, b = this._buffer, h = this._h;
14358 // Round out and push the buffer
14359 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14361 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14362 for (i = b.length +
2; i &
15; i++) {
14366 // append the length
14367 b.push(Math.floor(this._length /
0x100000000));
14368 b.push(this._length |
0);
14371 this._block(b.splice(
0,
16));
14379 * The SHA-
256 initialization vector, to be precomputed.
14384 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14388 * The SHA-
256 hash key, to be precomputed.
14394 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14395 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14396 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14397 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14398 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14399 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14400 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14401 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14406 * Function to precompute _init and _key.
14409 _precompute: function () {
14410 var i =
0, prime =
2, factor;
14412 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14414 outer: for (; i
<64; prime++) {
14415 for (factor=
2; factor*factor <= prime; factor++) {
14416 if (prime % factor ===
0) {
14423 this._init[i] = frac(Math.pow(prime,
1/
2));
14425 this._key[i] = frac(Math.pow(prime,
1/
3));
14431 * Perform one cycle of SHA-
256.
14432 * @param {bitArray} words one block of words.
14435 _block:function (words) {
14437 w = words.slice(
0),
14440 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14441 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14443 /* Rationale for placement of |
0 :
14444 * If a value can overflow is original
32 bits by a factor of more than a few
14445 * million (
2^
23 ish), there is a possibility that it might overflow the
14446 *
53-bit mantissa and lose precision.
14448 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14449 * propagates around the loop, and on the hash state h[]. I don't believe
14450 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14451 * (for h4 anyway), and better safe than sorry.
14453 * The clamps on h[] are necessary for the output to be correct even in the
14454 * common case and for short inputs.
14456 for (i=
0; i
<64; i++) {
14457 // load up the input word for this round
14461 a = w[(i+
1 ) &
15];
14462 b = w[(i+
14) &
15];
14463 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14464 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14465 w[i&
15] + w[(i+
9) &
15]) |
0;
14468 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14471 h7 = h6; h6 = h5; h5 = h4;
14473 h3 = h2; h2 = h1; h1 = h0;
14475 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14478 h[
0] = h[
0]+h0 |
0;
14479 h[
1] = h[
1]+h1 |
0;
14480 h[
2] = h[
2]+h2 |
0;
14481 h[
3] = h[
3]+h3 |
0;
14482 h[
4] = h[
4]+h4 |
0;
14483 h[
5] = h[
5]+h5 |
0;
14484 h[
6] = h[
6]+h6 |
0;
14485 h[
7] = h[
7]+h7 |
0;
14489 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14490 WORDLISTS["english"] = [
14491 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14492 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14493 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14494 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14495 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14496 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14497 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14498 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14499 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14500 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14501 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14502 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14503 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14504 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14505 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14506 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14507 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14508 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14509 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14510 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14511 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14512 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14513 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14514 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14515 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14516 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14517 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14518 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14519 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14520 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14521 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14522 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14523 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14524 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14525 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14526 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14527 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14528 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14529 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14530 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14531 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14532 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14533 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14534 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14535 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14536 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14537 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14538 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14539 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14540 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14541 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14542 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14543 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14544 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14545 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14546 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14547 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14548 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14549 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14550 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14551 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14552 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14553 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14554 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14555 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14556 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14557 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14558 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14559 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14560 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14561 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14562 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14563 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14564 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14565 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14566 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14567 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14568 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14569 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14570 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14571 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14572 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14573 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14574 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14575 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14576 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14577 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14578 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14579 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14580 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14581 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14582 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14583 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14584 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14585 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14586 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14587 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14588 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14589 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14590 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14591 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14592 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14593 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14594 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14595 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14596 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14597 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14598 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14599 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14600 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14601 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14602 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14603 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14604 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14605 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14606 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14607 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14608 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14609 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14610 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14611 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14612 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14613 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14614 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14615 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14616 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14617 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14618 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14619 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14620 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14621 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14622 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14623 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14624 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14625 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14626 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14627 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14628 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14629 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14630 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14631 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14632 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14633 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14634 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14635 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14636 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14637 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14638 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14639 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14640 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14641 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14642 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14643 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14644 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14645 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14646 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14647 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14648 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14649 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14650 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14651 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14652 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14653 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14654 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14655 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14656 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14657 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14658 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14659 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14660 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14661 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14662 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14663 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14664 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14665 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14666 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14667 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14668 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14669 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14670 "thank","that","theme","then","theory","there","they","thing","this","thought",
14671 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14672 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14673 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14674 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14675 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14676 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14677 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14678 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14679 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14680 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14681 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14682 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14683 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14684 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14685 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14686 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14687 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14688 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14689 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14690 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14691 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14692 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14693 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14694 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14695 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14697 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14698 WORDLISTS["japanese"] = [
14699 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14700 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14701 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14702 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14703 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14704 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14705 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14706 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14707 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14708 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14709 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14710 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14711 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14712 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14713 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14714 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14715 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14716 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14717 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14718 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14719 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14720 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14721 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14722 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14723 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14724 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14725 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14726 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14727 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14728 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14729 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14730 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14731 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14732 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14733 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14734 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14735 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14736 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14737 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14738 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14739 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14740 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14741 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14742 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14743 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14744 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14745 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14746 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14747 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14748 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14749 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14750 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14751 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14752 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14753 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14754 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14755 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14756 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14757 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14758 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14759 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14760 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14761 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14762 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14763 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14764 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14765 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14766 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14767 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14768 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14769 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14770 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14771 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14772 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14773 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14774 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14775 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14776 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14777 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14778 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14779 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14780 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14781 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14782 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14783 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14784 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14785 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14786 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14787 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14788 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14789 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14790 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14791 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14792 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14793 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14794 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14795 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14796 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14797 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14798 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14799 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14800 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14801 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14802 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14803 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14804 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14805 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14806 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14807 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14808 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14809 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14810 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14811 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14812 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14813 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14814 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14815 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14816 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14817 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14818 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14819 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14820 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14821 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14822 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14823 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14824 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14825 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14826 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14827 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14828 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14829 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14830 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14831 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14832 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14833 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14834 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14835 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14836 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14837 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14838 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14839 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14840 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14841 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14842 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14843 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14844 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14845 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14846 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14847 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14848 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14849 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14850 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14851 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14852 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14853 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14854 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14855 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14856 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14857 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14858 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14859 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14860 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14861 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14862 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14863 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14864 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14865 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14866 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14867 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14868 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14869 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14870 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14871 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14872 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14873 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14874 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14875 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14876 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14877 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14878 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14879 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14880 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14881 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14882 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14883 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14884 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14885 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14886 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14887 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14888 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14889 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14890 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14891 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14892 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14893 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14894 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14895 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14896 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14897 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14898 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14899 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14900 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14901 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14902 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14903 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14905 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14906 WORDLISTS["spanish"] = [
14907 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14908 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14909 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14910 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14911 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14912 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14913 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14914 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14915 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14916 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14917 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14918 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14919 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14920 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14921 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14922 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14923 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14924 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14925 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14926 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14927 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14928 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14929 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14930 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14931 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14932 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14933 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14934 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14935 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14936 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14937 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14938 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14939 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14940 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14941 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14942 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14943 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14944 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14945 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14946 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14947 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14948 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14949 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14950 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14951 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14952 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14953 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14954 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14955 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14956 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14957 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14958 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14959 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14960 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14961 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14962 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14963 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14964 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14965 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14966 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14967 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14968 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14969 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14970 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14971 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14972 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14973 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14974 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14975 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14976 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14977 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14978 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14979 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14980 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14981 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14982 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14983 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14984 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14985 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14986 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14987 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14988 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14989 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14990 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14991 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14992 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14993 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14994 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14995 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14996 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14997 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14998 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14999 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
15000 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
15001 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
15002 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
15003 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
15004 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
15005 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15006 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15007 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15008 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15009 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15010 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15011 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15012 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15013 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15014 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15015 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15016 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15017 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15018 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15019 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15020 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15021 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15022 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15023 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15024 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15025 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15026 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15027 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15028 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15029 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15030 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15031 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15032 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15033 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15034 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15035 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15036 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15037 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15038 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15039 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15040 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15041 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15042 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15043 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15044 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15045 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15046 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15047 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15048 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15049 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15050 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15051 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15052 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15053 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15054 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15055 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15056 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15057 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15058 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15059 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15060 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15061 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15062 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15063 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15064 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15065 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15066 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15067 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15068 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15069 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15070 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15071 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15072 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15073 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15074 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15075 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15076 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15077 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15078 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15079 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15080 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15081 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15082 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15083 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15084 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15085 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15086 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15087 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15088 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15089 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15090 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15091 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15092 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15093 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15094 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15095 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15096 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15097 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15098 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15099 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15100 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15101 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15102 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15103 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15104 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15105 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15106 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15107 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15108 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15109 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15110 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15111 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15113 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15114 WORDLISTS["chinese_simplified"] = [
15115 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15116 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15117 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15118 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15119 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15120 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15121 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15122 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15123 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15124 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15125 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15126 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15127 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15128 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15129 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15130 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15131 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15132 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15133 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15134 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15135 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15136 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15137 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15138 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15139 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15140 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15141 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15142 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15143 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15144 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15145 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15146 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15147 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15148 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15149 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15150 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15151 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15152 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15153 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15154 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15155 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15156 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15157 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15158 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15159 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15160 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15161 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15162 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15163 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15164 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15165 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15166 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15167 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15168 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15169 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15170 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15171 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15172 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15173 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15174 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15175 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15176 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15177 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15178 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15179 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15180 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15181 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15182 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15183 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15184 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15185 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15186 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15187 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15188 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15189 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15190 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15191 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15192 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15193 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15194 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15195 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15196 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15197 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15198 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15199 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15200 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15201 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15202 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15203 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15204 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15205 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15206 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15207 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15208 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15209 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15210 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15211 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15212 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15213 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15214 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15215 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15216 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15217 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15218 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15219 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15220 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15221 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15222 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15223 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15224 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15225 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15226 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15227 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15228 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15229 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15230 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15231 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15232 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15233 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15234 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15235 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15236 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15237 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15238 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15239 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15240 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15241 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15242 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15243 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15244 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15245 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15246 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15247 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15248 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15249 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15250 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15251 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15252 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15253 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15254 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15255 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15256 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15257 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15258 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15259 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15260 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15261 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15262 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15263 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15264 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15265 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15266 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15267 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15268 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15269 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15270 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15271 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15272 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15273 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15274 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15275 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15276 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15277 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15278 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15279 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15280 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15281 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15282 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15283 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15284 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15285 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15286 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15287 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15288 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15289 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15290 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15291 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15292 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15293 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15294 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15295 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15296 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15297 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15298 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15299 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15300 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15301 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15302 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15303 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15304 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15305 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15306 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15307 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15308 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15309 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15310 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15311 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15312 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15313 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15314 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15315 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15316 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15317 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15318 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15319 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15321 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15322 WORDLISTS["chinese_traditional"] = [
15323 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15324 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15325 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15326 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15327 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15328 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15329 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15330 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15331 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15332 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15333 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15334 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15335 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15336 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15337 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15338 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15339 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15340 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15341 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15342 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15343 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15344 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15345 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15346 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15347 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15348 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15349 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15350 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15351 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15352 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15353 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15354 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15355 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15356 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15357 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15358 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15359 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15360 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15361 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15362 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15363 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15364 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15365 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15366 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15367 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15368 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15369 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15370 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15371 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15372 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15373 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15374 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15375 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15376 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15377 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15378 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15379 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15380 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15381 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15382 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15383 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15384 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15385 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15386 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15387 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15388 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15389 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15390 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15391 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15392 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15393 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15394 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15395 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15396 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15397 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15398 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15399 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15400 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15401 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15402 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15403 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15404 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15405 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15406 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15407 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15408 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15409 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15410 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15411 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15412 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15413 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15414 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15415 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15416 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15417 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15418 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15419 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15420 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15421 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15422 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15423 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15424 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15425 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15426 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15427 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15428 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15429 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15430 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15431 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15432 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15433 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15434 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15435 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15436 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15437 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15438 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15439 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15440 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15441 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15442 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15443 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15444 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15445 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15446 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15447 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15448 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15449 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15450 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15451 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15452 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15453 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15454 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15455 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15456 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15457 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15458 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15459 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15460 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15461 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15462 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15463 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15464 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15465 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15466 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15467 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15468 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15469 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15470 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15471 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15472 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15473 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15474 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15475 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15476 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15477 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15478 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15479 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15480 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15481 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15482 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15483 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15484 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15485 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15486 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15487 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15488 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15489 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15490 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15491 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15492 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15493 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15494 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15495 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15496 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15497 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15498 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15499 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15500 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15501 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15502 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15503 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15504 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15505 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15506 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15507 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15508 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15509 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15510 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15511 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15512 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15513 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15514 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15515 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15516 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15517 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15518 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15519 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15520 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15521 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15522 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15523 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15524 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15525 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15526 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15527 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15529 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15530 WORDLISTS["french"] = [
15531 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15532 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15533 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15534 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15535 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15536 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15537 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15538 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15539 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15540 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15541 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15542 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15543 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15544 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15545 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15546 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15547 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15548 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15549 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15550 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15551 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15552 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15553 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15554 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15555 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15556 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15557 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15558 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15559 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15560 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15561 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15562 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15563 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15564 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15565 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15566 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15567 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15568 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15569 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15570 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15571 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15572 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15573 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15574 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15575 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15576 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15577 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15578 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15579 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15580 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15581 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15582 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15583 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15584 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15585 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15586 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15587 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15588 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15589 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15590 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15591 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15592 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15593 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15594 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15595 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15596 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15597 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15598 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15599 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15600 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15601 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15602 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15603 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15604 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15605 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15606 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15607 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15608 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15609 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15610 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15611 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15612 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15613 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15614 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15615 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15616 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15617 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15618 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15619 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15620 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15621 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15622 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15623 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15624 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15625 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15626 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15627 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15628 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15629 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15630 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15631 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15632 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15633 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15634 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15635 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15636 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15637 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15638 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15639 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15640 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15641 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15642 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15643 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15644 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15645 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15646 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15647 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15648 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15649 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15650 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15651 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15652 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15653 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15654 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15655 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15656 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15657 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15658 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15659 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15660 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15661 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15662 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15663 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15664 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15665 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15666 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15667 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15668 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15669 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15670 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15671 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15672 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15673 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15674 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15675 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15676 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15677 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15678 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15679 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15680 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15681 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15682 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15683 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15684 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15685 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15686 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15687 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15688 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15689 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15690 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15691 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15692 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15693 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15694 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15695 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15696 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15697 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15698 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15699 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15700 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15701 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15702 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15703 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15704 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15705 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15706 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15707 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15708 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15709 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15710 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15711 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15712 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15713 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15714 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15715 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15716 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15717 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15718 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15719 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15720 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15721 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15722 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15723 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15724 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15725 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15726 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15727 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15728 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15729 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15730 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15731 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15732 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15733 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15734 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15735 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15737 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15738 WORDLISTS["italian"] = [
15739 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15740 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15741 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15742 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15743 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15744 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15745 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15746 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15747 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15748 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15749 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15750 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15751 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15752 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15753 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15754 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15755 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15756 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15757 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15758 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15759 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15760 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15761 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15762 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15763 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15764 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15765 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15766 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15767 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15768 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15769 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15770 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15771 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15772 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15773 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15774 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15775 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15776 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15777 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15778 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15779 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15780 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15781 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15782 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15783 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15784 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15785 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15786 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15787 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15788 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15789 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15790 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15791 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15792 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15793 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15794 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15795 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15796 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15797 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15798 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15799 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15800 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15801 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15802 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15803 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15804 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15805 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15806 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15807 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15808 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15809 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15810 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15811 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15812 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15813 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15814 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15815 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15816 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15817 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15818 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15819 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15820 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15821 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15822 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15823 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15824 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15825 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15826 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15827 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15828 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15829 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15830 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15831 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15832 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15833 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15834 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15835 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15836 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15837 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15838 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15839 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15840 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15841 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15842 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15843 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15844 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15845 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15846 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15847 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15848 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15849 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15850 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15851 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15852 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15853 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15854 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15855 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15856 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15857 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15858 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15859 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15860 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15861 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15862 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15863 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15864 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15865 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15866 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15867 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15868 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15869 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15870 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15871 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15872 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15873 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15874 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15875 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15876 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15877 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15878 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15879 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15880 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15881 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15882 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15883 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15884 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15885 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15886 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15887 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15888 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15889 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15890 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15891 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15892 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15893 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15894 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15895 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15896 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15897 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15898 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15899 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15900 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15901 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15902 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15903 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15904 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15905 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15906 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15907 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15908 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15909 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15910 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15911 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15912 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15913 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15914 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15915 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15916 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15917 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15918 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15919 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15920 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15921 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15922 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15923 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15924 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15925 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15926 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15927 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15928 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15929 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15930 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15931 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15932 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15933 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15934 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15935 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15936 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15937 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15938 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15939 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15940 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15941 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15942 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15943 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15946 * Copyright (c)
2013 Pavol Rusnak
15948 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15949 * this software and associated documentation files (the "Software"), to deal in
15950 * the Software without restriction, including without limitation the rights to
15951 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15952 * of the Software, and to permit persons to whom the Software is furnished to do
15953 * so, subject to the following conditions:
15955 * The above copyright notice and this permission notice shall be included in all
15956 * copies or substantial portions of the Software.
15958 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15959 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15960 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15961 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15962 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15963 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15967 * Javascript port from python by Ian Coleman
15969 * Requires code from sjcl
15970 * https://github.com/bitwiseshiftleft/sjcl
15973 var Mnemonic = function(language) {
15975 var PBKDF2_ROUNDS =
2048;
15981 var hmacSHA512 = function(key) {
15982 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15983 this.encrypt = function() {
15984 return hasher.encrypt.apply(hasher, arguments);
15989 wordlist = WORDLISTS[language];
15990 if (wordlist.length != RADIX) {
15991 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15996 self.generate = function(strength) {
15997 strength = strength ||
128;
15998 var r = strength %
32;
16000 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
16002 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
16003 if (!hasStrongCrypto) {
16004 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
16006 var buffer = new Uint8Array(strength /
8);
16007 var data = crypto.getRandomValues(buffer);
16008 return self.toMnemonic(data);
16011 self.toMnemonic = function(byteArray) {
16012 if (byteArray.length %
4 > 0) {
16013 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
16016 //h = hashlib.sha256(data).hexdigest()
16017 var data = byteArrayToWordArray(byteArray);
16018 var hash = sjcl.hash.sha256.hash(data);
16019 var h = sjcl.codec.hex.fromBits(hash);
16021 // b is a binary string, eg '
00111010101100...'
16022 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
16023 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
16025 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
16026 // c = bin(int(h,
16))[
2:].zfill(
256)
16027 // d = c[:len(data) *
8 /
32]
16028 var a = byteArrayToBinaryString(byteArray);
16029 var c = zfill(hexStringToBinaryString(h),
256);
16030 var d = c.substring(
0, byteArray.length *
8 /
32);
16031 // b = line1 + line2
16035 var blen = b.length /
11;
16036 for (var i=
0; i
<blen; i++) {
16037 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
16038 result.push(wordlist[idx]);
16040 return self.joinWords(result);
16043 self.check = function(mnemonic) {
16044 var mnemonic = self.splitWords(mnemonic);
16045 if (mnemonic.length %
3 > 0) {
16048 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
16050 for (var i=
0; i
<mnemonic.length; i++) {
16051 var word = mnemonic[i];
16052 var wordIndex = wordlist.indexOf(word);
16053 if (wordIndex == -
1) {
16056 var binaryIndex = zfill(wordIndex.toString(
2),
11);
16057 idx.push(binaryIndex);
16059 var b = idx.join('');
16061 //d = b[:l /
33 *
32]
16063 var d = b.substring(
0, l /
33 *
32);
16064 var h = b.substring(l - l /
33, l);
16065 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
16066 var nd = binaryStringToWordArray(d);
16067 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
16068 var ndHash = sjcl.hash.sha256.hash(nd);
16069 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16070 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
16071 var nh = ndBstr.substring(
0,l/
33);
16075 self.toSeed = function(mnemonic, passphrase) {
16076 passphrase = passphrase || '';
16077 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16078 passphrase = self.normalizeString(passphrase)
16079 passphrase =
"mnemonic" + passphrase;
16080 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16081 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16082 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
16083 var hashHex = sjcl.codec.hex.fromBits(result);
16087 self.splitWords = function(mnemonic) {
16088 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16091 self.joinWords = function(words) {
16092 // Set space correctly depending on the language
16093 // see https://github.com/bitcoin/bips/blob/master/bip-
0039/bip-
0039-wordlists.md#japanese
16095 if (language ==
"japanese") {
16096 space =
"\u3000"; // ideographic space
16098 return words.join(space);
16101 self.normalizeString = function(str) {
16102 if (typeof str.normalize ==
"function") {
16103 return str.normalize(
"NFKD");
16106 // TODO decide how to handle this in the future.
16107 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16112 function byteArrayToWordArray(data) {
16114 for (var i=
0; i
<data.length/
4; i++) {
16116 v += data[i*
4 +
0] <<
8 *
3;
16117 v += data[i*
4 +
1] <<
8 *
2;
16118 v += data[i*
4 +
2] <<
8 *
1;
16119 v += data[i*
4 +
3] <<
8 *
0;
16125 function byteArrayToBinaryString(data) {
16127 for (var i=
0; i
<data.length; i++) {
16128 bin += zfill(data[i].toString(
2),
8);
16133 function hexStringToBinaryString(hexString) {
16135 for (var i=
0; i
<hexString.length; i++) {
16136 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
16138 return binaryString;
16141 function binaryStringToWordArray(binary) {
16142 var aLen = binary.length /
32;
16144 for (var i=
0; i
<aLen; i++) {
16145 var valueStr = binary.substring(
0,
32);
16146 var value = parseInt(valueStr,
2);
16148 binary = binary.slice(
32);
16153 // Pad a numeric string on the left with zero digits until the given width
16155 // Note this differs to the python implementation because it does not
16156 // handle numbers starting with a sign.
16157 function zfill(source, length) {
16158 source = source.toString();
16159 while (source.length < length) {
16160 source = '
0' + source;
16169 <script>(function() {
16171 // mnemonics is populated as required by getLanguage
16172 var mnemonics = { "english": new Mnemonic("english") };
16173 var mnemonic = mnemonics["english"];
16175 var bip32RootKey = null;
16176 var bip32ExtendedKey = null;
16177 var network = bitcoin.networks.bitcoin;
16178 var addressRowTemplate = $("#address-row-template");
16180 var showIndex = true;
16181 var showAddress = true;
16182 var showPubKey = true;
16183 var showPrivKey = true;
16185 var phraseChangeTimeoutEvent = null;
16186 var rootKeyChangedTimeoutEvent = null;
16189 DOM.network = $(".network");
16190 DOM.phraseNetwork = $("#network-phrase");
16191 DOM.phrase = $(".phrase");
16192 DOM.passphrase = $(".passphrase");
16193 DOM.generate = $(".generate");
16194 DOM.seed = $(".seed");
16195 DOM.rootKey = $(".root-key");
16196 DOM.extendedPrivKey = $(".extended-priv-key");
16197 DOM.extendedPubKey = $(".extended-pub-key");
16198 DOM.bip32tab = $("#bip32-tab");
16199 DOM.bip44tab = $("#bip44-tab");
16200 DOM.bip32panel = $("#bip32");
16201 DOM.bip44panel = $("#bip44");
16202 DOM.bip32path = $("#bip32-path");
16203 DOM.bip44path = $("#bip44-path");
16204 DOM.bip44purpose = $("#bip44 .purpose");
16205 DOM.bip44coin = $("#bip44 .coin");
16206 DOM.bip44account = $("#bip44 .account");
16207 DOM.bip44change = $("#bip44 .change");
16208 DOM.strength = $(".strength");
16209 DOM.hardenedAddresses = $(".hardened-addresses");
16210 DOM.addresses = $(".addresses");
16211 DOM.rowsToAdd = $(".rows-to-add");
16212 DOM.more = $(".more");
16213 DOM.feedback = $(".feedback");
16214 DOM.tab = $(".derivation-type a");
16215 DOM.indexToggle = $(".index-toggle");
16216 DOM.addressToggle = $(".address-toggle");
16217 DOM.publicKeyToggle = $(".public-key-toggle");
16218 DOM.privateKeyToggle = $(".private-key-toggle");
16219 DOM.languages = $(".languages a");
16223 DOM.network.on("change", networkChanged);
16224 DOM.phrase.on("input", delayedPhraseChanged);
16225 DOM.passphrase.on("input", delayedPhraseChanged);
16226 DOM.generate.on("click", generateClicked);
16227 DOM.more.on("click", showMore);
16228 DOM.rootKey.on("input", delayedRootKeyChanged);
16229 DOM.bip32path.on("input", calcForDerivationPath);
16230 DOM.bip44purpose.on("input", calcForDerivationPath);
16231 DOM.bip44coin.on("input", calcForDerivationPath);
16232 DOM.bip44account.on("input", calcForDerivationPath);
16233 DOM.bip44change.on("input", calcForDerivationPath);
16234 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
16235 DOM.hardenedAddresses.on("change", calcForDerivationPath);
16236 DOM.indexToggle.on("click", toggleIndexes);
16237 DOM.addressToggle.on("click", toggleAddresses);
16238 DOM.publicKeyToggle.on("click", togglePublicKeys);
16239 DOM.privateKeyToggle.on("click", togglePrivateKeys);
16240 DOM.languages.on("click", languageChanged);
16243 hideValidationError();
16244 populateNetworkSelect();
16249 function networkChanged(e) {
16250 var networkIndex = e.target.value;
16251 networks[networkIndex].onSelect();
16252 if (seed != null) {
16260 function delayedPhraseChanged() {
16261 hideValidationError();
16263 if (phraseChangeTimeoutEvent != null) {
16264 clearTimeout(phraseChangeTimeoutEvent);
16266 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
16269 function phraseChanged() {
16271 hideValidationError();
16272 setMnemonicLanguage();
16273 // Get the mnemonic phrase
16274 var phrase = DOM.phrase.val();
16275 var errorText = findPhraseErrors(phrase);
16277 showValidationError(errorText);
16280 // Calculate and display
16281 var passphrase = DOM.passphrase.val();
16282 calcBip32RootKeyFromSeed(phrase, passphrase);
16283 calcForDerivationPath();
16287 function delayedRootKeyChanged() {
16288 // Warn if there is an existing mnemonic or passphrase.
16289 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
16290 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
16291 DOM.rootKey.val(bip32RootKey);
16295 hideValidationError();
16297 // Clear existing mnemonic and passphrase
16298 DOM.phrase.val(
"");
16299 DOM.passphrase.val(
"");
16301 if (rootKeyChangedTimeoutEvent != null) {
16302 clearTimeout(rootKeyChangedTimeoutEvent);
16304 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
16307 function rootKeyChanged() {
16309 hideValidationError();
16310 // Validate the root key TODO
16311 var rootKeyBase58 = DOM.rootKey.val();
16312 var errorText = validateRootKey(rootKeyBase58);
16314 showValidationError(errorText);
16317 // Calculate and display
16318 calcBip32RootKeyFromBase58(rootKeyBase58);
16319 calcForDerivationPath();
16323 function calcForDerivationPath() {
16325 hideValidationError();
16326 // Get the derivation path
16327 var derivationPath = getDerivationPath();
16328 var errorText = findDerivationPathErrors(derivationPath);
16330 showValidationError(errorText);
16333 calcBip32ExtendedKey(derivationPath);
16334 displayBip32Info();
16338 function generateClicked() {
16341 setTimeout(function() {
16342 setMnemonicLanguage();
16343 var phrase = generateRandomPhrase();
16351 function languageChanged() {
16352 setTimeout(function() {
16353 setMnemonicLanguage();
16354 if (DOM.phrase.val().length
> 0) {
16355 var newPhrase = convertPhraseToNewLanguage();
16356 DOM.phrase.val(newPhrase);
16360 DOM.generate.trigger(
"click");
16365 function toggleIndexes() {
16366 showIndex = !showIndex;
16367 $(
"td.index span").toggleClass(
"invisible");
16370 function toggleAddresses() {
16371 showAddress = !showAddress;
16372 $(
"td.address span").toggleClass(
"invisible");
16375 function togglePublicKeys() {
16376 showPubKey = !showPubKey;
16377 $(
"td.pubkey span").toggleClass(
"invisible");
16380 function togglePrivateKeys() {
16381 showPrivKey = !showPrivKey;
16382 $(
"td.privkey span").toggleClass(
"invisible");
16387 function generateRandomPhrase() {
16388 if (!hasStrongRandom()) {
16389 var errorText =
"This browser does not support strong randomness";
16390 showValidationError(errorText);
16393 var numWords = parseInt(DOM.strength.val());
16394 var strength = numWords /
3 *
32;
16395 var words = mnemonic.generate(strength);
16396 DOM.phrase.val(words);
16400 function calcBip32RootKeyFromSeed(phrase, passphrase) {
16401 seed = mnemonic.toSeed(phrase, passphrase);
16402 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
16405 function calcBip32RootKeyFromBase58(rootKeyBase58) {
16406 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
16409 function calcBip32ExtendedKey(path) {
16410 bip32ExtendedKey = bip32RootKey;
16411 // Derive the key from the path
16412 var pathBits = path.split(
"/");
16413 for (var i=
0; i
<pathBits.length; i++) {
16414 var bit = pathBits[i];
16415 var index = parseInt(bit);
16416 if (isNaN(index)) {
16419 var hardened = bit[bit.length-
1] ==
"'";
16421 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16424 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16429 function showValidationError(errorText) {
16435 function hideValidationError() {
16441 function findPhraseErrors(phrase) {
16442 // TODO make this right
16443 // Preprocess the words
16444 phrase = mnemonic.normalizeString(phrase);
16445 var words = phraseToWordArray(phrase);
16447 for (var i=
0; i
<words.length; i++) {
16448 var word = words[i];
16449 var language = getLanguage();
16450 if (WORDLISTS[language].indexOf(word) == -
1) {
16451 console.log(
"Finding closest match to " + word);
16452 var nearestWord = findNearestWord(word);
16453 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
16456 // Check the words are valid
16457 var properPhrase = wordArrayToPhrase(words);
16458 var isValid = mnemonic.check(properPhrase);
16460 return
"Invalid mnemonic";
16465 function validateRootKey(rootKeyBase58) {
16467 bitcoin.HDNode.fromBase58(rootKeyBase58);
16470 return
"Invalid root key";
16475 function getDerivationPath() {
16476 if (DOM.bip44tab.hasClass(
"active")) {
16477 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
16478 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
16479 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
16480 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
16482 path += purpose +
"'/";
16483 path += coin +
"'/";
16484 path += account +
"'/";
16486 DOM.bip44path.val(path);
16487 var derivationPath = DOM.bip44path.val();
16488 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
16489 return derivationPath;
16491 else if (DOM.bip32tab.hasClass(
"active")) {
16492 var derivationPath = DOM.bip32path.val();
16493 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
16494 return derivationPath;
16497 console.log(
"Unknown derivation path");
16501 function findDerivationPathErrors(path) {
16502 // TODO is not perfect but is better than nothing
16504 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
16506 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
16507 var maxDepth =
255; // TODO verify this!!
16508 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
16509 if (path[
0] !=
"m") {
16510 return
"First character must be 'm'";
16512 if (path.length
> 1) {
16513 if (path[
1] !=
"/") {
16514 return
"Separator must be '/'";
16516 var indexes = path.split(
"/");
16517 if (indexes.length
> maxDepth) {
16518 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16520 for (var depth =
1; depth
<indexes.length; depth++) {
16521 var index = indexes[depth];
16522 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
16523 if (invalidChars.length
> 0) {
16524 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
16526 var indexValue = parseInt(index.replace(
"'",
""));
16527 if (isNaN(depth)) {
16528 return
"Invalid number at depth " + depth;
16530 if (indexValue
> maxIndexValue) {
16531 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16538 function displayBip32Info() {
16540 DOM.seed.val(seed);
16541 var rootKey = bip32RootKey.toBase58();
16542 DOM.rootKey.val(rootKey);
16543 var extendedPrivKey = bip32ExtendedKey.toBase58();
16544 DOM.extendedPrivKey.val(extendedPrivKey);
16545 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16546 DOM.extendedPubKey.val(extendedPubKey);
16547 // Display the addresses and privkeys
16548 clearAddressesList();
16549 displayAddresses(
0,
20);
16552 function displayAddresses(start, total) {
16553 for (var i=
0; i
<total; i++) {
16554 var index = i + start;
16555 new TableRow(index);
16559 function TableRow(index) {
16561 var useHardenedAddresses = DOM.hardenedAddresses.prop(
"checked");
16567 function calculateValues() {
16568 setTimeout(function() {
16570 if (useHardenedAddresses) {
16571 key = bip32ExtendedKey.deriveHardened(index);
16574 key = bip32ExtendedKey.derive(index);
16576 var address = key.getAddress().toString();
16577 var privkey = key.privKey.toWIF(network);
16578 var pubkey = key.pubKey.toHex();
16579 var indexText = getDerivationPath() +
"/" + index;
16580 if (useHardenedAddresses) {
16581 indexText = indexText +
"'";
16583 addAddressToList(indexText, address, pubkey, privkey);
16591 function showMore() {
16592 var start = DOM.addresses.children().length;
16593 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16594 if (isNaN(rowsToAdd)) {
16596 DOM.rowsToAdd.val(
"20");
16598 if (rowsToAdd
> 200) {
16599 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
16600 msg +=
"Do you want to continue?";
16601 if (!confirm(msg)) {
16605 displayAddresses(start, rowsToAdd);
16608 function clearDisplay() {
16609 clearAddressesList();
16611 hideValidationError();
16614 function clearAddressesList() {
16615 DOM.addresses.empty();
16618 function clearKey() {
16619 DOM.rootKey.val(
"");
16620 DOM.extendedPrivKey.val(
"");
16621 DOM.extendedPubKey.val(
"");
16624 function addAddressToList(indexText, address, pubkey, privkey) {
16625 var row = $(addressRowTemplate.html());
16627 var indexCell = row.find(
".index span");
16628 var addressCell = row.find(
".address span");
16629 var pubkeyCell = row.find(
".pubkey span");
16630 var privkeyCell = row.find(
".privkey span");
16632 indexCell.text(indexText);
16633 addressCell.text(address);
16634 pubkeyCell.text(pubkey);
16635 privkeyCell.text(privkey);
16638 indexCell.addClass(
"invisible");
16640 if (!showAddress) {
16641 addressCell.addClass(
"invisible");
16644 pubkeyCell.addClass(
"invisible");
16646 if (!showPrivKey) {
16647 privkeyCell.addClass(
"invisible");
16649 DOM.addresses.append(row);
16652 function hasStrongRandom() {
16653 return 'crypto' in window && window['crypto'] !== null;
16656 function disableForms() {
16657 $(
"form").on(
"submit", function(e) {
16658 e.preventDefault();
16662 function parseIntNoNaN(val, defaultVal) {
16663 var v = parseInt(val);
16670 function showPending() {
16672 .text(
"Calculating...")
16676 function findNearestWord(word) {
16677 var language = getLanguage();
16678 var words = WORDLISTS[language];
16679 var minDistance =
99;
16680 var closestWord = words[
0];
16681 for (var i=
0; i
<words.length; i++) {
16682 var comparedTo = words[i];
16683 var distance = Levenshtein.get(word, comparedTo);
16684 if (distance < minDistance) {
16685 closestWord = comparedTo;
16686 minDistance = distance;
16689 return closestWord;
16692 function hidePending() {
16698 function populateNetworkSelect() {
16699 for (var i=
0; i
<networks.length; i++) {
16700 var network = networks[i];
16701 var option = $(
"<option>");
16702 option.attr(
"value", i);
16703 option.text(network.name);
16704 DOM.phraseNetwork.append(option);
16708 function getLanguage() {
16709 var defaultLanguage =
"english";
16710 // Try to get from existing phrase
16711 var language = getLanguageFromPhrase();
16712 // Try to get from url if not from phrase
16713 if (language.length ==
0) {
16714 language = getLanguageFromUrl();
16716 // Default to English if no other option
16717 if (language.length ==
0) {
16718 language = defaultLanguage;
16723 function getLanguageFromPhrase(phrase) {
16724 // Check if how many words from existing phrase match a language.
16727 phrase = DOM.phrase.val();
16729 if (phrase.length
> 0) {
16730 var words = phraseToWordArray(phrase);
16731 var languageMatches = {};
16732 for (l in WORDLISTS) {
16733 // Track how many words match in this language
16734 languageMatches[l] =
0;
16735 for (var i=
0; i
<words.length; i++) {
16736 var wordInLanguage = WORDLISTS[l].indexOf(words[i])
> -
1;
16737 if (wordInLanguage) {
16738 languageMatches[l]++;
16741 // Find languages with most word matches.
16742 // This is made difficult due to commonalities between Chinese
16743 // simplified vs traditional.
16744 var mostMatches =
0;
16745 var mostMatchedLanguages = [];
16746 for (var l in languageMatches) {
16747 var numMatches = languageMatches[l];
16748 if (numMatches
> mostMatches) {
16749 mostMatches = numMatches;
16750 mostMatchedLanguages = [l];
16752 else if (numMatches == mostMatches) {
16753 mostMatchedLanguages.push(l);
16757 if (mostMatchedLanguages.length
> 0) {
16758 // Use first language and warn if multiple detected
16759 language = mostMatchedLanguages[
0];
16760 if (mostMatchedLanguages.length
> 1) {
16761 console.warn(
"Multiple possible languages");
16762 console.warn(mostMatchedLanguages);
16769 function getLanguageFromUrl() {
16770 return window.location.hash.substring(
1);
16773 function setMnemonicLanguage() {
16774 var language = getLanguage();
16775 // Load the bip39 mnemonic generator for this language if required
16776 if (!(language in mnemonics)) {
16777 mnemonics[language] = new Mnemonic(language);
16779 mnemonic = mnemonics[language];
16782 function convertPhraseToNewLanguage() {
16783 var oldLanguage = getLanguageFromPhrase();
16784 var newLanguage = getLanguageFromUrl();
16785 var oldPhrase = DOM.phrase.val();
16786 var oldWords = phraseToWordArray(oldPhrase);
16788 for (var i=
0; i
<oldWords.length; i++) {
16789 var oldWord = oldWords[i];
16790 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16791 var newWord = WORDLISTS[newLanguage][index];
16792 newWords.push(newWord);
16794 newPhrase = wordArrayToPhrase(newWords);
16798 // TODO look at jsbip39 - mnemonic.splitWords
16799 function phraseToWordArray(phrase) {
16800 var words = phrase.split(/\s/g);
16802 for (var i=
0; i
<words.length; i++) {
16803 var word = words[i];
16804 if (word.length
> 0) {
16805 noBlanks.push(word);
16811 // TODO look at jsbip39 - mnemonic.joinWords
16812 function wordArrayToPhrase(words) {
16813 var phrase = words.join(
" ");
16814 var language = getLanguageFromPhrase(phrase);
16815 if (language ==
"japanese") {
16816 phrase = words.join(
"\u3000");
16824 onSelect: function() {
16825 network = bitcoin.networks.bitcoin;
16826 DOM.bip44coin.val(
0);
16830 name:
"Bitcoin Testnet",
16831 onSelect: function() {
16832 network = bitcoin.networks.testnet;
16833 DOM.bip44coin.val(
1);
16838 onSelect: function() {
16839 network = bitcoin.networks.litecoin;
16840 DOM.bip44coin.val(
2);
16845 onSelect: function() {
16846 network = bitcoin.networks.dogecoin;
16847 DOM.bip44coin.val(
3);
16851 name:
"ShadowCash",
16852 onSelect: function() {
16853 network = bitcoin.networks.shadow;
16854 DOM.bip44coin.val(
35);
16858 name:
"ShadowCash Testnet",
16859 onSelect: function() {
16860 network = bitcoin.networks.shadowtn;
16861 DOM.bip44coin.val(
1);
16866 onSelect: function() {
16867 network = bitcoin.networks.viacoin;
16868 DOM.bip44coin.val(
14);
16872 name:
"Viacoin Testnet",
16873 onSelect: function() {
16874 network = bitcoin.networks.viacointestnet;
16875 DOM.bip44coin.val(
1);
16880 onSelect: function() {
16881 network = bitcoin.networks.jumbucks;
16882 DOM.bip44coin.val(
26);
16887 onSelect: function() {
16888 network = bitcoin.networks.clam;
16889 DOM.bip44coin.val(
23);
16894 onSelect: function() {
16895 network = bitcoin.networks.dash;
16896 DOM.bip44coin.val(
5);
16901 onSelect: function() {
16902 network = bitcoin.networks.namecoin;
16903 DOM.bip44coin.val(
7);
16908 onSelect: function() {
16909 network = bitcoin.networks.peercoin;
16910 DOM.bip44coin.val(
6);