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 <span title=
"Pending availability of BIP39 unit tests">Experimental:
</span>
102 <a href=
"#spanish" title=
"Spanish">Español
</a>
103 <a href=
"#chinese_simplified" title=
"Chinese (Simplified)">中文(简体)
</a>
104 <a href=
"#chinese_traditional" title=
"Chinese (Traditional)">中文(繁體)
</a>
105 <a href=
"#french" title=
"French">Français
</a>
106 <a href=
"#italian" title=
"Italian">Italiano
</a>
109 <div class=
"form-group">
110 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
111 <div class=
"col-sm-10">
112 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
115 <div class=
"form-group">
116 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
117 <div class=
"col-sm-10">
118 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
121 <div class=
"form-group">
122 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
123 <div class=
"col-sm-10">
124 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
127 <div class=
"form-group">
128 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
129 <div class=
"col-sm-10">
130 <select id=
"network-phrase" class=
"network form-control">
131 <!-- populated by javascript -->
135 <div class=
"form-group">
136 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
137 <div class=
"col-sm-10">
138 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
148 <div class=
"col-md-12">
149 <h2>Derivation Path
</h2>
150 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
151 <li id=
"bip44-tab" class=
"active">
152 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
155 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
158 <div class=
"derivation-type tab-content">
159 <div id=
"bip44" class=
"tab-pane active">
160 <form class=
"form-horizontal" role=
"form">
162 <div class=
"col-sm-2"></div>
163 <div class=
"col-sm-10">
164 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
166 <div class=
"form-group">
167 <label for=
"purpose" class=
"col-sm-2 control-label">
168 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
170 <div class=
"col-sm-10">
171 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
174 <div class=
"form-group">
175 <label for=
"coin" class=
"col-sm-2 control-label">
176 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
178 <div class=
"col-sm-10">
179 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
182 <div class=
"form-group">
183 <label for=
"account" class=
"col-sm-2 control-label">
184 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
186 <div class=
"col-sm-10">
187 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
190 <div class=
"form-group">
191 <label for=
"change" class=
"col-sm-2 control-label">
192 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
194 <div class=
"col-sm-10">
195 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
198 <div class=
"form-group">
199 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
200 <div class=
"col-sm-10">
201 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
206 <div id=
"bip32" class=
"tab-pane">
207 <form class=
"form-horizontal" role=
"form">
209 <div class=
"col-sm-2"></div>
210 <div class=
"col-sm-10">
211 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
213 <div class=
"form-group">
214 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
215 <div class=
"col-sm-10">
216 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
219 <div class=
"form-group">
220 <div class=
"col-sm-2"></div>
221 <label class=
"col-sm-10">
222 <input class=
"hardened-addresses" type=
"checkbox">
223 Use hardened addresses
226 <div class=
"form-group">
227 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
228 <div class=
"col-sm-10">
229 <p class=
"form-control no-border">
230 Use path
<code>m/
0'/
0</code>.
231 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
235 <div class=
"form-group">
236 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
237 <div class=
"col-sm-10">
238 <p class=
"form-control no-border">
239 Use path
<code>m/
44'/
0'/
0'/
0</code>.
240 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
244 <div class=
"form-group">
245 <label for=
"core-path" class=
"col-sm-2 control-label">Bitcoin Core
</label>
246 <div class=
"col-sm-10">
247 <p class=
"form-control no-border">
248 Use path
<code>m/
0'/
0'
</code> with hardened addresses.
249 For more info see the
<a href=
"https://github.com/bitcoin/bitcoin/pull/8035" target=
"_blank">Bitcoin Core BIP32 implementation
</a>
253 <div class=
"form-group">
254 <label class=
"col-sm-2 control-label">Block Explorers
</label>
255 <div class=
"col-sm-10">
256 <p class=
"form-control no-border">
257 Use path
<code>m/
44'/
0'/
0'
</code>.
258 Only enter the
<code>xpub
</code> extended key into block explorer search fields, never the
<code>xpriv
</code> key.
265 <form class=
"form-horizontal" role=
"form">
266 <div class=
"form-group">
267 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
268 <div class=
"col-sm-10">
269 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
272 <div class=
"form-group">
273 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
274 <div class=
"col-sm-10">
275 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
285 <div class=
"col-md-12">
286 <h2>Derived Addresses
</h2>
287 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
288 <table class=
"table table-striped">
291 <div class=
"input-group">
293 <button class=
"index-toggle">Toggle
</button>
297 <div class=
"input-group">
299 <button class=
"address-toggle">Toggle
</button>
303 <div class=
"input-group">
304 Private Key
305 <button class=
"private-key-toggle">Toggle
</button>
309 <tbody class=
"addresses">
310 <tr><td> </td><td> </td><td> </td></tr>
311 <tr><td> </td><td> </td><td> </td></tr>
312 <tr><td> </td><td> </td><td> </td></tr>
313 <tr><td> </td><td> </td><td> </td></tr>
314 <tr><td> </td><td> </td><td> </td></tr>
319 <span>Show next
</button>
320 <input type=
"number" class=
"rows-to-add" value=
"20">
321 <button class=
"more">Show
</button>
326 <div class=
"col-md-12">
328 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
331 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
333 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
336 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
338 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
340 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
343 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
345 <h3>Private Keys
</h3>
348 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
349 but be careful - it can be easy to make mistakes if you
350 don't know what you're doing
358 <div class=
"col-md-12">
360 <h2>Offline Usage
</h2>
363 You can use this tool without having to be online.
366 In your browser, select file save-as, and save this page
370 Double-click that file to open it in a browser
371 on any offline computer.
374 Alternatively, download it from
375 <a href=
"https://github.com/iancoleman/bip39">
376 https://github.com/iancoleman/bip39
385 <div class=
"col-md-12">
387 <h2>This project is
100% open-source code
</h2>
390 <span>Get the source code at -
</span>
391 <a href=
"https://github.com/iancoleman/bip39" target=
"_blank">
392 https://github.com/iancoleman/bip39
399 <span>BitcoinJS -
</span>
400 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
401 https://github.com/bitcoinjs/bitcoinjs-lib
406 <span>jsBIP39 -
</span>
407 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
408 https://github.com/iancoleman/jsbip39
414 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
415 https://github.com/bitwiseshiftleft/sjcl
420 <span>jQuery -
</span>
421 <a href=
"https://jquery.com/" target=
"_blank">
427 <span>Twitter Bootstrap -
</span>
428 <a href=
"http://getbootstrap.com/" target=
"_blank">
429 http://getbootstrap.com/
438 <div class=
"feedback-container">
439 <div class=
"feedback">Loading...
</div>
442 <script type=
"text/template" id=
"address-row-template">
444 <td class=
"index"><span></span></td>
445 <td class=
"address"><span></span></td>
446 <td class=
"privkey"><span></span></td>
449 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
450 !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)
451 },_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))
452 },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});
455 * Bootstrap v3.2.0 (http://getbootstrap.com)
456 * Copyright 2011-2014 Twitter, Inc.
457 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
459 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>
460 <script>(function() {
464 * Extend an Object with another Object's properties.
466 * The source objects are specified as additional arguments.
468 * @param dst Object the object to extend.
470 * @return Object the final object.
472 var _extend = function(dst) {
473 var sources = Array.prototype.slice.call(arguments,
1);
474 for (var i=
0; i
<sources.length; ++i) {
475 var src = sources[i];
477 if (src.hasOwnProperty(p)) dst[p] = src[p];
485 * Defer execution of given function.
486 * @param {Function} func
488 var _defer = function(func) {
489 if (typeof setImmediate === 'function') {
490 return setImmediate(func);
492 return setTimeout(func,
0);
497 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
501 * Calculate levenshtein distance of the two strings.
503 * @param str1 String the first string.
504 * @param str2 String the second string.
505 * @return Integer the levenshtein distance (
0 and above).
507 get: function(str1, str2) {
509 if (str1 === str2) return
0;
510 if (str1.length ===
0) return str2.length;
511 if (str2.length ===
0) return str1.length;
514 var prevRow = new Array(str2.length +
1),
515 curCol, nextCol, i, j, tmp;
517 // initialise previous row
518 for (i=
0; i
<prevRow.length; ++i) {
522 // calculate current row distance from previous row
523 for (i=
0; i
<str1.length; ++i) {
526 for (j=
0; j
<str2.length; ++j) {
530 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
537 tmp = prevRow[j +
1] +
1;
542 // copy current col value into previous (in preparation for next iteration)
546 // copy last col value into previous (in preparation for next iteration)
547 prevRow[j] = nextCol;
554 * Asynchronously calculate levenshtein distance of the two strings.
556 * @param str1 String the first string.
557 * @param str2 String the second string.
558 * @param cb Function callback function with signature: function(Error err, int distance)
559 * @param [options] Object additional options.
560 * @param [options.progress] Function progress callback with signature: function(percentComplete)
562 getAsync: function(str1, str2, cb, options) {
563 options = _extend({}, {
568 if (str1 === str2) return cb(null,
0);
569 if (str1.length ===
0) return cb(null, str2.length);
570 if (str2.length ===
0) return cb(null, str1.length);
573 var prevRow = new Array(str2.length +
1),
576 startTime, currentTime;
578 // initialise previous row
579 for (i=
0; i
<prevRow.length; ++i) {
587 var __calculate = function() {
589 startTime = new Date().valueOf();
590 currentTime = startTime;
592 // keep going until one second has elapsed
593 while (currentTime - startTime <
1000) {
594 // reached end of current row?
595 if (str2.length <= (++j)) {
596 // copy current into previous (in preparation for next iteration)
597 prevRow[j] = nextCol;
599 // if already done all chars
600 if (str1.length <= (++i)) {
601 return cb(null, nextCol);
603 // else if we have more left to do
614 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
621 tmp = prevRow[j +
1] +
1;
626 // copy current into previous (in preparation for next iteration)
630 currentTime = new Date().valueOf();
633 // send a progress update?
634 if (null !== options.progress) {
636 options.progress.call(null, (i *
100.0/ str1.length));
638 return cb('Progress callback: ' + err.toString());
652 if (typeof define !== "undefined" && define !== null && define.amd) {
658 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
659 module.exports = Levenshtein;
662 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
663 self.Levenshtein = Levenshtein;
665 // browser main thread
666 else if (typeof window !== "undefined" && window !== null) {
667 window.Levenshtein = Levenshtein;
672 <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){
673 // (public) Constructor
674 function BigInteger(a, b, c) {
675 if (!(this instanceof BigInteger))
676 return new BigInteger(a, b, c)
679 if (
"number" == typeof a) this.fromNumber(a, b, c)
680 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
681 else this.fromString(a, b)
685 var proto = BigInteger.prototype
687 // duck-typed isBigInteger
688 proto.__bigi = require('../package.json').version
689 BigInteger.isBigInteger = function (obj, check_ver) {
690 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
696 // am: Compute w_j += (x*this_i), propagate carries,
697 // c is initial carry, returns final carry.
698 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
699 // We need to select the fastest one that works in this environment.
701 // am1: use a single mult and divide to get the high bits,
702 // max digit bits should be
26 because
703 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
704 function am1(i, x, w, j, c, n) {
706 var v = x * this[i++] + w[j] + c
707 c = Math.floor(v /
0x4000000)
708 w[j++] = v &
0x3ffffff
712 // am2 avoids a big mult-and-extract completely.
713 // Max digit bits should be <=
30 because we do bitwise ops
714 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
715 function am2(i, x, w, j, c, n) {
719 var l = this[i] &
0x7fff
720 var h = this[i++]
>> 15
721 var m = xh * l + h * xl
722 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
723 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
724 w[j++] = l &
0x3fffffff
728 // Alternately, set max digit bits to
28 since some
729 // browsers slow down when dealing with
32-bit numbers.
730 function am3(i, x, w, j, c, n) {
734 var l = this[i] &
0x3fff
735 var h = this[i++]
>> 14
736 var m = xh * l + h * xl
737 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
738 c = (l
>> 28) + (m
>> 14) + xh * h
739 w[j++] = l &
0xfffffff
745 BigInteger.prototype.am = am1
748 BigInteger.prototype.DB = dbits
749 BigInteger.prototype.DM = ((
1 << dbits) -
1)
750 var DV = BigInteger.prototype.DV = (
1 << dbits)
753 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
754 BigInteger.prototype.F1 = BI_FP - dbits
755 BigInteger.prototype.F2 =
2 * dbits - BI_FP
758 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
759 var BI_RC = new Array()
761 rr =
"0".charCodeAt(
0)
762 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
763 rr =
"a".charCodeAt(
0)
764 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
765 rr =
"A".charCodeAt(
0)
766 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
768 function int2char(n) {
769 return BI_RM.charAt(n)
772 function intAt(s, i) {
773 var c = BI_RC[s.charCodeAt(i)]
774 return (c == null) ? -
1 : c
777 // (protected) copy this to r
778 function bnpCopyTo(r) {
779 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
784 // (protected) set from integer value x, -DV <= x < DV
785 function bnpFromInt(x) {
787 this.s = (x <
0) ? -
1 :
0
788 if (x
> 0) this[
0] = x
789 else if (x < -
1) this[
0] = x + DV
793 // return bigint initialized to value
795 var r = new BigInteger()
800 // (protected) set from string and radix
801 function bnpFromString(s, b) {
806 else if (b ==
8) k =
3
807 else if (b ==
256) k =
8; // byte array
808 else if (b ==
2) k =
1
809 else if (b ==
32) k =
5
810 else if (b ==
4) k =
2
821 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
823 if (s.charAt(i) == "-") mi = true
829 else if (sh + k
> self.DB) {
830 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
831 self[self.t++] = (x
>> (self.DB - sh))
833 self[self.t -
1] |= x << sh
835 if (sh
>= self.DB) sh -= self.DB
837 if (k ==
8 && (s[
0] &
0x80) !=
0) {
839 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
842 if (mi) BigInteger.ZERO.subTo(self, self)
845 // (protected) clamp off excess high words
846 function bnpClamp() {
847 var c = this.s & this.DM
848 while (this.t
> 0 && this[this.t -
1] == c)--this.t
851 // (public) return string representation in given radix
852 function bnToString(b) {
854 if (self.s <
0) return
"-" + self.negate()
858 else if (b ==
8) k =
3
859 else if (b ==
2) k =
1
860 else if (b ==
32) k =
5
861 else if (b ==
4) k =
2
862 else return self.toRadix(b)
863 var km = (
1 << k) -
1,
867 var p = self.DB - (i * self.DB) % k
869 if (p < self.DB && (d = self[i]
>> p)
> 0) {
875 d = (self[i] & ((
1 << p) -
1)) << (k - p)
876 d |= self[--i]
>> (p += self.DB - k)
878 d = (self[i]
>> (p -= k)) & km
885 if (m) r += int2char(d)
892 function bnNegate() {
893 var r = new BigInteger()
894 BigInteger.ZERO.subTo(this, r)
900 return (this.s <
0) ? this.negate() : this
903 // (public) return + if this
> a, - if this < a,
0 if equal
904 function bnCompareTo(a) {
909 if (r !=
0) return (this.s <
0) ? -r : r
911 if ((r = this[i] - a[i]) !=
0) return r
915 // returns bit length of the integer x
919 if ((t = x
>>> 16) !=
0) {
923 if ((t = x
>> 8) !=
0) {
927 if ((t = x
>> 4) !=
0) {
931 if ((t = x
>> 2) !=
0) {
935 if ((t = x
>> 1) !=
0) {
942 // (public) return the number of bits in
"this"
943 function bnBitLength() {
944 if (this.t <=
0) return
0
945 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
948 // (public) return the number of bytes in
"this"
949 function bnByteLength() {
950 return this.bitLength()
>> 3
953 // (protected) r = this << n*DB
954 function bnpDLShiftTo(n, r) {
956 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
957 for (i = n -
1; i
>=
0; --i) r[i] =
0
962 // (protected) r = this
>> n*DB
963 function bnpDRShiftTo(n, r) {
964 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
965 r.t = Math.max(this.t - n,
0)
969 // (protected) r = this << n
970 function bnpLShiftTo(n, r) {
973 var cbs = self.DB - bs
974 var bm = (
1 << cbs) -
1
975 var ds = Math.floor(n / self.DB),
976 c = (self.s << bs) & self.DM,
978 for (i = self.t -
1; i
>=
0; --i) {
979 r[i + ds +
1] = (self[i]
>> cbs) | c
980 c = (self[i] & bm) << bs
982 for (i = ds -
1; i
>=
0; --i) r[i] =
0
984 r.t = self.t + ds +
1
989 // (protected) r = this
>> n
990 function bnpRShiftTo(n, r) {
993 var ds = Math.floor(n / self.DB)
999 var cbs = self.DB - bs
1000 var bm = (
1 << bs) -
1
1001 r[
0] = self[ds]
>> bs
1002 for (var i = ds +
1; i < self.t; ++i) {
1003 r[i - ds -
1] |= (self[i] & bm) << cbs
1004 r[i - ds] = self[i]
>> bs
1006 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
1011 // (protected) r = this - a
1012 function bnpSubTo(a, r) {
1016 m = Math.min(a.t, self.t)
1019 r[i++] = c & self.DM
1024 while (i < self.t) {
1026 r[i++] = c & self.DM
1034 r[i++] = c & self.DM
1039 r.s = (c <
0) ? -
1 :
0
1040 if (c < -
1) r[i++] = self.DV + c
1041 else if (c
> 0) r[i++] = c
1046 // (protected) r = this * a, r != this,a (HAC
14.12)
1047 //
"this" should be the larger one if appropriate.
1048 function bnpMultiplyTo(a, r) {
1053 while (--i
>=
0) r[i] =
0
1054 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1057 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1060 // (protected) r = this^
2, r != this (HAC
14.16)
1061 function bnpSquareTo(r) {
1063 var i = r.t =
2 * x.t
1064 while (--i
>=
0) r[i] =
0
1065 for (i =
0; i < x.t -
1; ++i) {
1066 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1067 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1072 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1077 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1078 // r != q, this != m. q or r may be null.
1079 function bnpDivRemTo(m, q, r) {
1082 if (pm.t <=
0) return
1085 if (q != null) q.fromInt(
0)
1086 if (r != null) self.copyTo(r)
1089 if (r == null) r = new BigInteger()
1090 var y = new BigInteger(),
1093 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1104 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1105 var d1 = self.FV / yt,
1106 d2 = (
1 << self.F1) / yt,
1110 t = (q == null) ? new BigInteger() : q
1112 if (r.compareTo(t)
>=
0) {
1116 BigInteger.ONE.dlShiftTo(ys, t)
1117 t.subTo(y, y); // "negative" y so we can replace sub with am later
1118 while (y.t < ys) y[y.t++] =
0
1120 // Estimate quotient digit
1121 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1122 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1125 while (r[i] < --qd) r.subTo(t, r)
1130 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1134 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1135 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1138 // (public) this mod a
1140 var r = new BigInteger()
1142 .divRemTo(a, null, r)
1143 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1147 // Modular reduction using
"classic" algorithm
1148 function Classic(m) {
1152 function cConvert(x) {
1153 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1157 function cRevert(x) {
1161 function cReduce(x) {
1162 x.divRemTo(this.m, null, x)
1165 function cMulTo(x, y, r) {
1170 function cSqrTo(x, r) {
1175 Classic.prototype.convert = cConvert
1176 Classic.prototype.revert = cRevert
1177 Classic.prototype.reduce = cReduce
1178 Classic.prototype.mulTo = cMulTo
1179 Classic.prototype.sqrTo = cSqrTo
1181 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1185 // xy(
2-xy) = (
1+km)(
1-km)
1186 // x[y(
2-xy)] =
1-k^
2m^
2
1187 // x[y(
2-xy)] ==
1 (mod m^
2)
1188 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1189 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1190 // JS multiply "overflows" differently from C/C++, so care is needed here.
1191 function bnpInvDigit() {
1192 if (this.t <
1) return
0
1194 if ((x &
1) ==
0) return
0
1195 var y = x &
3; // y ==
1/x mod
2^
2
1196 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1197 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1198 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1199 // last step - calculate inverse mod DV directly
1200 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1201 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1202 // we really want the negative inverse, and -DV < y < DV
1203 return (y
> 0) ? this.DV - y : -y
1206 // Montgomery reduction
1207 function Montgomery(m) {
1209 this.mp = m.invDigit()
1210 this.mpl = this.mp &
0x7fff
1211 this.mph = this.mp
>> 15
1212 this.um = (
1 << (m.DB -
15)) -
1
1217 function montConvert(x) {
1218 var r = new BigInteger()
1220 .dlShiftTo(this.m.t, r)
1221 r.divRemTo(this.m, null, r)
1222 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1227 function montRevert(x) {
1228 var r = new BigInteger()
1234 // x = x/R mod m (HAC
14.32)
1235 function montReduce(x) {
1236 while (x.t <= this.mt2) // pad x so am has enough room later
1238 for (var i =
0; i < this.m.t; ++i) {
1239 // faster way of calculating u0 = x[i]*mp mod DV
1240 var j = x[i] &
0x7fff
1241 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1242 // use am to combine the multiply-shift-add into one call
1244 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1246 while (x[j]
>= x.DV) {
1252 x.drShiftTo(this.m.t, x)
1253 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1256 // r = "x^
2/R mod m"; x != r
1257 function montSqrTo(x, r) {
1262 // r = "xy/R mod m"; x,y != r
1263 function montMulTo(x, y, r) {
1268 Montgomery.prototype.convert = montConvert
1269 Montgomery.prototype.revert = montRevert
1270 Montgomery.prototype.reduce = montReduce
1271 Montgomery.prototype.mulTo = montMulTo
1272 Montgomery.prototype.sqrTo = montSqrTo
1274 // (protected) true iff this is even
1275 function bnpIsEven() {
1276 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1279 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1280 function bnpExp(e, z) {
1281 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1282 var r = new BigInteger(),
1283 r2 = new BigInteger(),
1284 g = z.convert(this),
1289 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1299 // (public) this^e % m,
0 <= e <
2^
32
1300 function bnModPowInt(e, m) {
1302 if (e <
256 || m.isEven()) z = new Classic(m)
1303 else z = new Montgomery(m)
1304 return this.exp(e, z)
1308 proto.copyTo = bnpCopyTo
1309 proto.fromInt = bnpFromInt
1310 proto.fromString = bnpFromString
1311 proto.clamp = bnpClamp
1312 proto.dlShiftTo = bnpDLShiftTo
1313 proto.drShiftTo = bnpDRShiftTo
1314 proto.lShiftTo = bnpLShiftTo
1315 proto.rShiftTo = bnpRShiftTo
1316 proto.subTo = bnpSubTo
1317 proto.multiplyTo = bnpMultiplyTo
1318 proto.squareTo = bnpSquareTo
1319 proto.divRemTo = bnpDivRemTo
1320 proto.invDigit = bnpInvDigit
1321 proto.isEven = bnpIsEven
1325 proto.toString = bnToString
1326 proto.negate = bnNegate
1328 proto.compareTo = bnCompareTo
1329 proto.bitLength = bnBitLength
1330 proto.byteLength = bnByteLength
1332 proto.modPowInt = bnModPowInt
1335 function bnClone() {
1336 var r = new BigInteger()
1341 // (public) return value as integer
1342 function bnIntValue() {
1344 if (this.t ==
1) return this[
0] - this.DV
1345 else if (this.t ==
0) return -
1
1346 } else if (this.t ==
1) return this[
0]
1347 else if (this.t ==
0) return
0
1348 // assumes
16 < DB <
32
1349 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1352 // (public) return value as byte
1353 function bnByteValue() {
1354 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1357 // (public) return value as short (assumes DB
>=
16)
1358 function bnShortValue() {
1359 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1362 // (protected) return x s.t. r^x < DV
1363 function bnpChunkSize(r) {
1364 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1367 // (public)
0 if this ==
0,
1 if this
> 0
1368 function bnSigNum() {
1369 if (this.s <
0) return -
1
1370 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1374 // (protected) convert to radix string
1375 function bnpToRadix(b) {
1376 if (b == null) b =
10
1377 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1378 var cs = this.chunkSize(b)
1379 var a = Math.pow(b, cs)
1381 y = new BigInteger(),
1382 z = new BigInteger(),
1384 this.divRemTo(d, y, z)
1385 while (y.signum()
> 0) {
1386 r = (a + z.intValue())
1395 // (protected) convert from radix string
1396 function bnpFromRadix(s, b) {
1399 if (b == null) b =
10
1400 var cs = self.chunkSize(b)
1401 var d = Math.pow(b, cs),
1405 for (var i =
0; i < s.length; ++i) {
1408 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1414 self.dAddOffset(w,
0)
1420 self.dMultiply(Math.pow(b, j))
1421 self.dAddOffset(w,
0)
1423 if (mi) BigInteger.ZERO.subTo(self, self)
1426 // (protected) alternate constructor
1427 function bnpFromNumber(a, b, c) {
1429 if (
"number" == typeof b) {
1430 // new BigInteger(int,int,RNG)
1431 if (a <
2) self.fromInt(
1)
1433 self.fromNumber(a, c)
1434 if (!self.testBit(a -
1)) // force MSB set
1435 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1436 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1437 while (!self.isProbablePrime(b)) {
1438 self.dAddOffset(
2,
0)
1439 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1443 // new BigInteger(int,RNG)
1444 var x = new Array(),
1446 x.length = (a
>> 3) +
1
1448 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1450 self.fromString(x,
256)
1454 // (public) convert to bigendian byte array
1455 function bnToByteArray() {
1460 var p = self.DB - (i * self.DB) %
8,
1463 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1464 r[k++] = d | (self.s << (self.DB - p))
1467 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1468 d |= self[--i]
>> (p += self.DB -
8)
1470 d = (self[i]
>> (p -=
8)) &
0xff
1476 if ((d &
0x80) !=
0) d |= -
256
1477 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1478 if (k
> 0 || d != self.s) r[k++] = d
1484 function bnEquals(a) {
1485 return (this.compareTo(a) ==
0)
1489 return (this.compareTo(a) <
0) ? this : a
1493 return (this.compareTo(a)
> 0) ? this : a
1496 // (protected) r = this op a (bitwise)
1497 function bnpBitwiseTo(a, op, r) {
1499 var i, f, m = Math.min(a.t, self.t)
1500 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1503 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1506 f = self.s & self.DM
1507 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1510 r.s = op(self.s, a.s)
1514 // (public) this & a
1515 function op_and(x, y) {
1520 var r = new BigInteger()
1521 this.bitwiseTo(a, op_and, r)
1525 // (public) this | a
1526 function op_or(x, y) {
1531 var r = new BigInteger()
1532 this.bitwiseTo(a, op_or, r)
1536 // (public) this ^ a
1537 function op_xor(x, y) {
1542 var r = new BigInteger()
1543 this.bitwiseTo(a, op_xor, r)
1547 // (public) this & ~a
1548 function op_andnot(x, y) {
1552 function bnAndNot(a) {
1553 var r = new BigInteger()
1554 this.bitwiseTo(a, op_andnot, r)
1560 var r = new BigInteger()
1561 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1567 // (public) this << n
1568 function bnShiftLeft(n) {
1569 var r = new BigInteger()
1570 if (n <
0) this.rShiftTo(-n, r)
1571 else this.lShiftTo(n, r)
1575 // (public) this
>> n
1576 function bnShiftRight(n) {
1577 var r = new BigInteger()
1578 if (n <
0) this.lShiftTo(-n, r)
1579 else this.rShiftTo(n, r)
1583 // return index of lowest
1-bit in x, x <
2^
31
1585 if (x ==
0) return -
1
1587 if ((x &
0xffff) ==
0) {
1591 if ((x &
0xff) ==
0) {
1595 if ((x &
0xf) ==
0) {
1603 if ((x &
1) ==
0)++r
1607 // (public) returns index of lowest
1-bit (or -
1 if none)
1608 function bnGetLowestSetBit() {
1609 for (var i =
0; i < this.t; ++i)
1610 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1611 if (this.s <
0) return this.t * this.DB
1615 // return number of
1 bits in x
1625 // (public) return number of set bits
1626 function bnBitCount() {
1628 x = this.s & this.DM
1629 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1633 // (public) true iff nth bit is set
1634 function bnTestBit(n) {
1635 var j = Math.floor(n / this.DB)
1636 if (j
>= this.t) return (this.s !=
0)
1637 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1640 // (protected) this op (
1<
<n)
1641 function bnpChangeBit(n, op) {
1642 var r = BigInteger.ONE.shiftLeft(n)
1643 this.bitwiseTo(r, op, r)
1647 // (public) this | (
1<
<n)
1648 function bnSetBit(n) {
1649 return this.changeBit(n, op_or)
1652 // (public) this & ~(
1<
<n)
1653 function bnClearBit(n) {
1654 return this.changeBit(n, op_andnot)
1657 // (public) this ^ (
1<
<n)
1658 function bnFlipBit(n) {
1659 return this.changeBit(n, op_xor)
1662 // (protected) r = this + a
1663 function bnpAddTo(a, r) {
1668 m = Math.min(a.t, self.t)
1671 r[i++] = c & self.DM
1676 while (i < self.t) {
1678 r[i++] = c & self.DM
1686 r[i++] = c & self.DM
1691 r.s = (c <
0) ? -
1 :
0
1692 if (c
> 0) r[i++] = c
1693 else if (c < -
1) r[i++] = self.DV + c
1698 // (public) this + a
1700 var r = new BigInteger()
1705 // (public) this - a
1706 function bnSubtract(a) {
1707 var r = new BigInteger()
1712 // (public) this * a
1713 function bnMultiply(a) {
1714 var r = new BigInteger()
1715 this.multiplyTo(a, r)
1720 function bnSquare() {
1721 var r = new BigInteger()
1726 // (public) this / a
1727 function bnDivide(a) {
1728 var r = new BigInteger()
1729 this.divRemTo(a, r, null)
1733 // (public) this % a
1734 function bnRemainder(a) {
1735 var r = new BigInteger()
1736 this.divRemTo(a, null, r)
1740 // (public) [this/a,this%a]
1741 function bnDivideAndRemainder(a) {
1742 var q = new BigInteger(),
1743 r = new BigInteger()
1744 this.divRemTo(a, q, r)
1745 return new Array(q, r)
1748 // (protected) this *= n, this
>=
0,
1 < n < DV
1749 function bnpDMultiply(n) {
1750 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1755 // (protected) this += n << w words, this
>=
0
1756 function bnpDAddOffset(n, w) {
1758 while (this.t <= w) this[this.t++] =
0
1760 while (this[w]
>= this.DV) {
1762 if (++w
>= this.t) this[this.t++] =
0
1768 function NullExp() {}
1774 function nMulTo(x, y, r) {
1778 function nSqrTo(x, r) {
1782 NullExp.prototype.convert = nNop
1783 NullExp.prototype.revert = nNop
1784 NullExp.prototype.mulTo = nMulTo
1785 NullExp.prototype.sqrTo = nSqrTo
1789 return this.exp(e, new NullExp())
1792 // (protected) r = lower n words of "this * a", a.t <= n
1793 // "this" should be the larger one if appropriate.
1794 function bnpMultiplyLowerTo(a, n, r) {
1795 var i = Math.min(this.t + a.t, n)
1796 r.s =
0; // assumes a,this
>=
0
1798 while (i
> 0) r[--i] =
0
1800 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1801 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1805 // (protected) r =
"this * a" without lower n words, n
> 0
1806 //
"this" should be the larger one if appropriate.
1807 function bnpMultiplyUpperTo(a, n, r) {
1809 var i = r.t = this.t + a.t - n
1810 r.s =
0; // assumes a,this
>=
0
1811 while (--i
>=
0) r[i] =
0
1812 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1813 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1818 // Barrett modular reduction
1819 function Barrett(m) {
1821 this.r2 = new BigInteger()
1822 this.q3 = new BigInteger()
1823 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1824 this.mu = this.r2.divide(m)
1828 function barrettConvert(x) {
1829 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1830 else if (x.compareTo(this.m) <
0) return x
1832 var r = new BigInteger()
1839 function barrettRevert(x) {
1843 // x = x mod m (HAC
14.42)
1844 function barrettReduce(x) {
1846 x.drShiftTo(self.m.t -
1, self.r2)
1847 if (x.t
> self.m.t +
1) {
1851 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1852 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1853 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1855 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1858 // r = x^
2 mod m; x != r
1859 function barrettSqrTo(x, r) {
1864 // r = x*y mod m; x,y != r
1865 function barrettMulTo(x, y, r) {
1870 Barrett.prototype.convert = barrettConvert
1871 Barrett.prototype.revert = barrettRevert
1872 Barrett.prototype.reduce = barrettReduce
1873 Barrett.prototype.mulTo = barrettMulTo
1874 Barrett.prototype.sqrTo = barrettSqrTo
1876 // (public) this^e % m (HAC
14.85)
1877 function bnModPow(e, m) {
1878 var i = e.bitLength(),
1881 if (i <=
0) return r
1882 else if (i <
18) k =
1
1883 else if (i <
48) k =
3
1884 else if (i <
144) k =
4
1885 else if (i <
768) k =
5
1889 else if (m.isEven())
1892 z = new Montgomery(m)
1895 var g = new Array(),
1899 g[
1] = z.convert(this)
1901 var g2 = new BigInteger()
1904 g[n] = new BigInteger()
1905 z.mulTo(g2, g[n -
2], g[n])
1912 r2 = new BigInteger(),
1916 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1918 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1919 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1923 while ((w &
1) ==
0) {
1931 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1940 if (n
> 0) z.sqrTo(r, r2)
1946 z.mulTo(r2, g[w], r)
1949 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1963 // (public) gcd(this,a) (HAC
14.54)
1965 var x = (this.s <
0) ? this.negate() : this.clone()
1966 var y = (a.s <
0) ? a.negate() : a.clone()
1967 if (x.compareTo(y) <
0) {
1972 var i = x.getLowestSetBit(),
1973 g = y.getLowestSetBit()
1980 while (x.signum()
> 0) {
1981 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1982 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1983 if (x.compareTo(y)
>=
0) {
1991 if (g
> 0) y.lShiftTo(g, y)
1995 // (protected) this % n, n <
2^
26
1996 function bnpModInt(n) {
1997 if (n <=
0) return
0
1998 var d = this.DV % n,
1999 r = (this.s <
0) ? n -
1 :
0
2001 if (d ==
0) r = this[
0] % n
2003 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
2007 // (public)
1/this % m (HAC
14.61)
2008 function bnModInverse(m) {
2010 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
2017 while (u.signum() !=
0) {
2018 while (u.isEven()) {
2021 if (!a.isEven() || !b.isEven()) {
2026 } else if (!b.isEven()) b.subTo(m, b)
2029 while (v.isEven()) {
2032 if (!c.isEven() || !d.isEven()) {
2037 } else if (!d.isEven()) d.subTo(m, d)
2040 if (u.compareTo(v)
>=
0) {
2042 if (ac) a.subTo(c, a)
2046 if (ac) c.subTo(a, c)
2050 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2051 if (d.compareTo(m)
>=
0) return d.subtract(m)
2052 if (d.signum() <
0) d.addTo(m, d)
2054 if (d.signum() <
0) return d.add(m)
2059 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2060 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2061 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2062 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2063 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2064 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2065 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2066 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2067 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2068 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2069 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2072 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2074 // (public) test primality with certainty
>=
1-
.5^t
2075 function bnIsProbablePrime(t) {
2076 var i, x = this.abs()
2077 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2078 for (i =
0; i < lowprimes.length; ++i)
2079 if (x[
0] == lowprimes[i]) return true
2082 if (x.isEven()) return false
2084 while (i < lowprimes.length) {
2085 var m = lowprimes[i],
2087 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2089 while (i < j) if (m % lowprimes[i++] ==
0) return false
2091 return x.millerRabin(t)
2094 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2095 function bnpMillerRabin(t) {
2096 var n1 = this.subtract(BigInteger.ONE)
2097 var k = n1.getLowestSetBit()
2098 if (k <=
0) return false
2099 var r = n1.shiftRight(k)
2101 if (t
> lowprimes.length) t = lowprimes.length
2102 var a = new BigInteger(null)
2104 for (var i =
0; i < t; ++i) {
2106 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2107 if (bases.indexOf(j) == -
1) break
2111 var y = a.modPow(r, this)
2112 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2114 while (j++ < k && y.compareTo(n1) !=
0) {
2115 y = y.modPowInt(
2, this)
2116 if (y.compareTo(BigInteger.ONE) ==
0) return false
2118 if (y.compareTo(n1) !=
0) return false
2125 proto.chunkSize = bnpChunkSize
2126 proto.toRadix = bnpToRadix
2127 proto.fromRadix = bnpFromRadix
2128 proto.fromNumber = bnpFromNumber
2129 proto.bitwiseTo = bnpBitwiseTo
2130 proto.changeBit = bnpChangeBit
2131 proto.addTo = bnpAddTo
2132 proto.dMultiply = bnpDMultiply
2133 proto.dAddOffset = bnpDAddOffset
2134 proto.multiplyLowerTo = bnpMultiplyLowerTo
2135 proto.multiplyUpperTo = bnpMultiplyUpperTo
2136 proto.modInt = bnpModInt
2137 proto.millerRabin = bnpMillerRabin
2140 proto.clone = bnClone
2141 proto.intValue = bnIntValue
2142 proto.byteValue = bnByteValue
2143 proto.shortValue = bnShortValue
2144 proto.signum = bnSigNum
2145 proto.toByteArray = bnToByteArray
2146 proto.equals = bnEquals
2152 proto.andNot = bnAndNot
2154 proto.shiftLeft = bnShiftLeft
2155 proto.shiftRight = bnShiftRight
2156 proto.getLowestSetBit = bnGetLowestSetBit
2157 proto.bitCount = bnBitCount
2158 proto.testBit = bnTestBit
2159 proto.setBit = bnSetBit
2160 proto.clearBit = bnClearBit
2161 proto.flipBit = bnFlipBit
2163 proto.subtract = bnSubtract
2164 proto.multiply = bnMultiply
2165 proto.divide = bnDivide
2166 proto.remainder = bnRemainder
2167 proto.divideAndRemainder = bnDivideAndRemainder
2168 proto.modPow = bnModPow
2169 proto.modInverse = bnModInverse
2172 proto.isProbablePrime = bnIsProbablePrime
2174 // JSBN-specific extension
2175 proto.square = bnSquare
2178 BigInteger.ZERO = nbv(
0)
2179 BigInteger.ONE = nbv(
1)
2180 BigInteger.valueOf = nbv
2182 module.exports = BigInteger
2184 },{"../package.json":
4}],
2:[function(require,module,exports){
2186 // FIXME: Kind of a weird way to throw exceptions, consider removing
2187 var assert = require('assert')
2188 var BigInteger = require('./bigi')
2191 * Turns a byte array into a big integer.
2193 * This function will interpret a byte array as a big integer in big
2196 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2197 // BigInteger expects a DER integer conformant byte array
2198 if (byteArray[
0] &
0x80) {
2199 return new BigInteger([
0].concat(byteArray))
2202 return new BigInteger(byteArray)
2206 * Returns a byte array representation of the big integer.
2208 * This returns the absolute of the contained value in big endian
2209 * form. A value of zero results in an empty array.
2211 BigInteger.prototype.toByteArrayUnsigned = function() {
2212 var byteArray = this.toByteArray()
2213 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2216 BigInteger.fromDERInteger = function(byteArray) {
2217 return new BigInteger(byteArray)
2221 * Converts BigInteger to a DER integer representation.
2223 * The format for this value uses the most significant bit as a sign
2224 * bit. If the most significant bit is already set and the integer is
2225 * positive, a
0x00 is prepended.
2241 * -
62300 =
> 0xff0ca4
2243 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2245 BigInteger.fromBuffer = function(buffer) {
2246 // BigInteger expects a DER integer conformant byte array
2247 if (buffer[
0] &
0x80) {
2248 var byteArray = Array.prototype.slice.call(buffer)
2250 return new BigInteger([
0].concat(byteArray))
2253 return new BigInteger(buffer)
2256 BigInteger.fromHex = function(hex) {
2257 if (hex === '') return BigInteger.ZERO
2259 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2260 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2261 return new BigInteger(hex,
16)
2264 BigInteger.prototype.toBuffer = function(size) {
2265 var byteArray = this.toByteArrayUnsigned()
2268 var padding = size - byteArray.length
2269 while (zeros.length < padding) zeros.push(
0)
2271 return new Buffer(zeros.concat(byteArray))
2274 BigInteger.prototype.toHex = function(size) {
2275 return this.toBuffer(size).toString('hex')
2278 }).call(this,require(
"buffer").Buffer)
2279 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2280 var BigInteger = require('./bigi')
2283 require('./convert')
2285 module.exports = BigInteger
2286 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2290 "description":
"Big integers.",
2308 "devDependencies": {
2311 "coveralls":
"^2.10.0",
2312 "istanbul":
"^0.2.11"
2315 "url":
"https://github.com/cryptocoinjs/bigi",
2318 "main":
"./lib/index.js",
2320 "test":
"_mocha -- test/*.js",
2321 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2323 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2324 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2328 "files":
"test/*.js",
2334 "safari/6.0..latest",
2335 "iphone/6.0..latest",
2336 "android-browser/4.2..latest"
2340 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2342 "homepage":
"https://github.com/cryptocoinjs/bigi",
2343 "_id":
"bigi@1.4.0",
2345 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2346 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2348 "_from":
"bigi@^1.4.0",
2349 "_npmVersion":
"1.4.3",
2352 "email":
"jprichardson@gmail.com"
2357 "email":
"jprichardson@gmail.com"
2360 "name":
"midnightlightning",
2361 "email":
"boydb@midnightdesign.ws"
2364 "name":
"sidazhang",
2365 "email":
"sidazhang89@gmail.com"
2369 "email":
"npm@shesek.info"
2373 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2374 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2377 },{}],
5:[function(require,module,exports){
2378 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2380 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2382 // Originally from narwhal.js (http://narwhaljs.org)
2383 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2385 // Permission is hereby granted, free of charge, to any person obtaining a copy
2386 // of this software and associated documentation files (the 'Software'), to
2387 // deal in the Software without restriction, including without limitation the
2388 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2389 // sell copies of the Software, and to permit persons to whom the Software is
2390 // furnished to do so, subject to the following conditions:
2392 // The above copyright notice and this permission notice shall be included in
2393 // all copies or substantial portions of the Software.
2395 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2396 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2397 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2398 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2399 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2400 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2402 // when used in node, this will actually load the util module we depend on
2403 // versus loading the builtin util module as happens otherwise
2404 // this is a bug in node module loading as far as I am concerned
2405 var util = require('util/');
2407 var pSlice = Array.prototype.slice;
2408 var hasOwn = Object.prototype.hasOwnProperty;
2410 //
1. The assert module provides functions that throw
2411 // AssertionError's when particular conditions are not met. The
2412 // assert module must conform to the following interface.
2414 var assert = module.exports = ok;
2416 //
2. The AssertionError is defined in assert.
2417 // new assert.AssertionError({ message: message,
2419 // expected: expected })
2421 assert.AssertionError = function AssertionError(options) {
2422 this.name = 'AssertionError';
2423 this.actual = options.actual;
2424 this.expected = options.expected;
2425 this.operator = options.operator;
2426 if (options.message) {
2427 this.message = options.message;
2428 this.generatedMessage = false;
2430 this.message = getMessage(this);
2431 this.generatedMessage = true;
2433 var stackStartFunction = options.stackStartFunction || fail;
2435 if (Error.captureStackTrace) {
2436 Error.captureStackTrace(this, stackStartFunction);
2439 // non v8 browsers so we can have a stacktrace
2440 var err = new Error();
2442 var out = err.stack;
2444 // try to strip useless frames
2445 var fn_name = stackStartFunction.name;
2446 var idx = out.indexOf('\n' + fn_name);
2448 // once we have located the function frame
2449 // we need to strip out everything before it (and its line)
2450 var next_line = out.indexOf('\n', idx +
1);
2451 out = out.substring(next_line +
1);
2459 // assert.AssertionError instanceof Error
2460 util.inherits(assert.AssertionError, Error);
2462 function replacer(key, value) {
2463 if (util.isUndefined(value)) {
2466 if (util.isNumber(value) && !isFinite(value)) {
2467 return value.toString();
2469 if (util.isFunction(value) || util.isRegExp(value)) {
2470 return value.toString();
2475 function truncate(s, n) {
2476 if (util.isString(s)) {
2477 return s.length < n ? s : s.slice(
0, n);
2483 function getMessage(self) {
2484 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2485 self.operator + ' ' +
2486 truncate(JSON.stringify(self.expected, replacer),
128);
2489 // At present only the three keys mentioned above are used and
2490 // understood by the spec. Implementations or sub modules can pass
2491 // other keys to the AssertionError's constructor - they will be
2494 //
3. All of the following functions must throw an AssertionError
2495 // when a corresponding condition is not met, with a message that
2496 // may be undefined if not provided. All assertion methods provide
2497 // both the actual and expected values to the assertion error for
2498 // display purposes.
2500 function fail(actual, expected, message, operator, stackStartFunction) {
2501 throw new assert.AssertionError({
2506 stackStartFunction: stackStartFunction
2510 // EXTENSION! allows for well behaved errors defined elsewhere.
2513 //
4. Pure assertion tests whether a value is truthy, as determined
2515 // assert.ok(guard, message_opt);
2516 // This statement is equivalent to assert.equal(true, !!guard,
2517 // message_opt);. To test strictly for the value true, use
2518 // assert.strictEqual(true, guard, message_opt);.
2520 function ok(value, message) {
2521 if (!value) fail(value, true, message, '==', assert.ok);
2525 //
5. The equality assertion tests shallow, coercive equality with
2527 // assert.equal(actual, expected, message_opt);
2529 assert.equal = function equal(actual, expected, message) {
2530 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2533 //
6. The non-equality assertion tests for whether two objects are not equal
2534 // with != assert.notEqual(actual, expected, message_opt);
2536 assert.notEqual = function notEqual(actual, expected, message) {
2537 if (actual == expected) {
2538 fail(actual, expected, message, '!=', assert.notEqual);
2542 //
7. The equivalence assertion tests a deep equality relation.
2543 // assert.deepEqual(actual, expected, message_opt);
2545 assert.deepEqual = function deepEqual(actual, expected, message) {
2546 if (!_deepEqual(actual, expected)) {
2547 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2551 function _deepEqual(actual, expected) {
2552 //
7.1. All identical values are equivalent, as determined by ===.
2553 if (actual === expected) {
2556 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2557 if (actual.length != expected.length) return false;
2559 for (var i =
0; i < actual.length; i++) {
2560 if (actual[i] !== expected[i]) return false;
2565 //
7.2. If the expected value is a Date object, the actual value is
2566 // equivalent if it is also a Date object that refers to the same time.
2567 } else if (util.isDate(actual) && util.isDate(expected)) {
2568 return actual.getTime() === expected.getTime();
2570 //
7.3 If the expected value is a RegExp object, the actual value is
2571 // equivalent if it is also a RegExp object with the same source and
2572 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2573 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2574 return actual.source === expected.source &&
2575 actual.global === expected.global &&
2576 actual.multiline === expected.multiline &&
2577 actual.lastIndex === expected.lastIndex &&
2578 actual.ignoreCase === expected.ignoreCase;
2580 //
7.4. Other pairs that do not both pass typeof value == 'object',
2581 // equivalence is determined by ==.
2582 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2583 return actual == expected;
2585 //
7.5 For all other Object pairs, including Array objects, equivalence is
2586 // determined by having the same number of owned properties (as verified
2587 // with Object.prototype.hasOwnProperty.call), the same set of keys
2588 // (although not necessarily the same order), equivalent values for every
2589 // corresponding key, and an identical 'prototype' property. Note: this
2590 // accounts for both named and indexed properties on Arrays.
2592 return objEquiv(actual, expected);
2596 function isArguments(object) {
2597 return Object.prototype.toString.call(object) == '[object Arguments]';
2600 function objEquiv(a, b) {
2601 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2603 // an identical 'prototype' property.
2604 if (a.prototype !== b.prototype) return false;
2605 // if one is a primitive, the other must be same
2606 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2609 var aIsArgs = isArguments(a),
2610 bIsArgs = isArguments(b);
2611 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2616 return _deepEqual(a, b);
2618 var ka = objectKeys(a),
2621 // having the same number of owned properties (keys incorporates
2623 if (ka.length != kb.length)
2625 //the same set of keys (although not necessarily the same order),
2629 for (i = ka.length -
1; i
>=
0; i--) {
2633 //equivalent values for every corresponding key, and
2634 //~~~possibly expensive deep test
2635 for (i = ka.length -
1; i
>=
0; i--) {
2637 if (!_deepEqual(a[key], b[key])) return false;
2642 //
8. The non-equivalence assertion tests for any deep inequality.
2643 // assert.notDeepEqual(actual, expected, message_opt);
2645 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2646 if (_deepEqual(actual, expected)) {
2647 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2651 //
9. The strict equality assertion tests strict equality, as determined by ===.
2652 // assert.strictEqual(actual, expected, message_opt);
2654 assert.strictEqual = function strictEqual(actual, expected, message) {
2655 if (actual !== expected) {
2656 fail(actual, expected, message, '===', assert.strictEqual);
2660 //
10. The strict non-equality assertion tests for strict inequality, as
2661 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2663 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2664 if (actual === expected) {
2665 fail(actual, expected, message, '!==', assert.notStrictEqual);
2669 function expectedException(actual, expected) {
2670 if (!actual || !expected) {
2674 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2675 return expected.test(actual);
2676 } else if (actual instanceof expected) {
2678 } else if (expected.call({}, actual) === true) {
2685 function _throws(shouldThrow, block, expected, message) {
2688 if (util.isString(expected)) {
2699 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2700 (message ? ' ' + message : '.');
2702 if (shouldThrow && !actual) {
2703 fail(actual, expected, 'Missing expected exception' + message);
2706 if (!shouldThrow && expectedException(actual, expected)) {
2707 fail(actual, expected, 'Got unwanted exception' + message);
2710 if ((shouldThrow && actual && expected &&
2711 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2716 //
11. Expected to throw an error:
2717 // assert.throws(block, Error_opt, message_opt);
2719 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2720 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2723 // EXTENSION! This is annoying to write outside this module.
2724 assert.doesNotThrow = function(block, /*optional*/message) {
2725 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2728 assert.ifError = function(err) { if (err) {throw err;}};
2730 var objectKeys = Object.keys || function (obj) {
2732 for (var key in obj) {
2733 if (hasOwn.call(obj, key)) keys.push(key);
2738 },{"util/":
29}],
6:[function(require,module,exports){
2740 },{}],
7:[function(require,module,exports){
2742 * The buffer module from node.js, for the browser.
2744 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2748 var base64 = require('base64-js')
2749 var ieee754 = require('ieee754')
2750 var isArray = require('is-array')
2752 exports.Buffer = Buffer
2753 exports.SlowBuffer = SlowBuffer
2754 exports.INSPECT_MAX_BYTES =
50
2755 Buffer.poolSize =
8192 // not used by this implementation
2760 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2761 * === true Use Uint8Array implementation (fastest)
2762 * === false Use Object implementation (most compatible, even IE6)
2764 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2765 * Opera
11.6+, iOS
4.2+.
2767 * Due to various browser bugs, sometimes the Object implementation will be used even
2768 * when the browser supports typed arrays.
2772 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2773 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2775 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2778 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2780 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2781 * incorrect length in some situations.
2783 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2784 * get the Object implementation, which is slower but behaves correctly.
2786 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2789 var arr = new Uint8Array(
1)
2790 arr.foo = function () { return
42 }
2791 arr.constructor = Bar
2792 return arr.foo() ===
42 && // typed array instances can be augmented
2793 arr.constructor === Bar && // constructor can be set
2794 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2795 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2801 function kMaxLength () {
2802 return Buffer.TYPED_ARRAY_SUPPORT
2811 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2812 * with function properties for all the node `Buffer` API functions. We use
2813 * `Uint8Array` so that square bracket notation works as expected -- it returns
2816 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2819 function Buffer (arg) {
2820 if (!(this instanceof Buffer)) {
2821 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2822 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2823 return new Buffer(arg)
2827 this.parent = undefined
2830 if (typeof arg === 'number') {
2831 return fromNumber(this, arg)
2834 // Slightly less common case.
2835 if (typeof arg === 'string') {
2836 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2840 return fromObject(this, arg)
2843 function fromNumber (that, length) {
2844 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2845 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2846 for (var i =
0; i < length; i++) {
2853 function fromString (that, string, encoding) {
2854 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2856 // Assumption: byteLength() return value is always < kMaxLength.
2857 var length = byteLength(string, encoding) |
0
2858 that = allocate(that, length)
2860 that.write(string, encoding)
2864 function fromObject (that, object) {
2865 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2867 if (isArray(object)) return fromArray(that, object)
2869 if (object == null) {
2870 throw new TypeError('must start with number, buffer, array or string')
2873 if (typeof ArrayBuffer !== 'undefined') {
2874 if (object.buffer instanceof ArrayBuffer) {
2875 return fromTypedArray(that, object)
2877 if (object instanceof ArrayBuffer) {
2878 return fromArrayBuffer(that, object)
2882 if (object.length) return fromArrayLike(that, object)
2884 return fromJsonObject(that, object)
2887 function fromBuffer (that, buffer) {
2888 var length = checked(buffer.length) |
0
2889 that = allocate(that, length)
2890 buffer.copy(that,
0,
0, length)
2894 function fromArray (that, array) {
2895 var length = checked(array.length) |
0
2896 that = allocate(that, length)
2897 for (var i =
0; i < length; i +=
1) {
2898 that[i] = array[i] &
255
2903 // Duplicate of fromArray() to keep fromArray() monomorphic.
2904 function fromTypedArray (that, array) {
2905 var length = checked(array.length) |
0
2906 that = allocate(that, length)
2907 // Truncating the elements is probably not what people expect from typed
2908 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2909 // of the old Buffer constructor.
2910 for (var i =
0; i < length; i +=
1) {
2911 that[i] = array[i] &
255
2916 function fromArrayBuffer (that, array) {
2917 if (Buffer.TYPED_ARRAY_SUPPORT) {
2918 // Return an augmented `Uint8Array` instance, for best performance
2920 that = Buffer._augment(new Uint8Array(array))
2922 // Fallback: Return an object instance of the Buffer class
2923 that = fromTypedArray(that, new Uint8Array(array))
2928 function fromArrayLike (that, array) {
2929 var length = checked(array.length) |
0
2930 that = allocate(that, length)
2931 for (var i =
0; i < length; i +=
1) {
2932 that[i] = array[i] &
255
2937 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2938 // Returns a zero-length buffer for inputs that don't conform to the spec.
2939 function fromJsonObject (that, object) {
2943 if (object.type === 'Buffer' && isArray(object.data)) {
2945 length = checked(array.length) |
0
2947 that = allocate(that, length)
2949 for (var i =
0; i < length; i +=
1) {
2950 that[i] = array[i] &
255
2955 function allocate (that, length) {
2956 if (Buffer.TYPED_ARRAY_SUPPORT) {
2957 // Return an augmented `Uint8Array` instance, for best performance
2958 that = Buffer._augment(new Uint8Array(length))
2960 // Fallback: Return an object instance of the Buffer class
2961 that.length = length
2962 that._isBuffer = true
2965 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2966 if (fromPool) that.parent = rootParent
2971 function checked (length) {
2972 // Note: cannot use `length < kMaxLength` here because that fails when
2973 // length is NaN (which is otherwise coerced to zero.)
2974 if (length
>= kMaxLength()) {
2975 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2976 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2981 function SlowBuffer (subject, encoding) {
2982 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2984 var buf = new Buffer(subject, encoding)
2989 Buffer.isBuffer = function isBuffer (b) {
2990 return !!(b != null && b._isBuffer)
2993 Buffer.compare = function compare (a, b) {
2994 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2995 throw new TypeError('Arguments must be Buffers')
2998 if (a === b) return
0
3004 var len = Math.min(x, y)
3006 if (a[i] !== b[i]) break
3016 if (x < y) return -
1
3021 Buffer.isEncoding = function isEncoding (encoding) {
3022 switch (String(encoding).toLowerCase()) {
3040 Buffer.concat = function concat (list, length) {
3041 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3043 if (list.length ===
0) {
3044 return new Buffer(
0)
3048 if (length === undefined) {
3050 for (i =
0; i < list.length; i++) {
3051 length += list[i].length
3055 var buf = new Buffer(length)
3057 for (i =
0; i < list.length; i++) {
3065 function byteLength (string, encoding) {
3066 if (typeof string !== 'string') string = '' + string
3068 var len = string.length
3069 if (len ===
0) return
0
3071 // Use a for loop to avoid recursion
3072 var loweredCase = false
3083 return utf8ToBytes(string).length
3092 return base64ToBytes(string).length
3094 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3095 encoding = ('' + encoding).toLowerCase()
3100 Buffer.byteLength = byteLength
3102 // pre-set for values that may exist in the future
3103 Buffer.prototype.length = undefined
3104 Buffer.prototype.parent = undefined
3106 function slowToString (encoding, start, end) {
3107 var loweredCase = false
3110 end = end === undefined || end === Infinity ? this.length : end |
0
3112 if (!encoding) encoding = 'utf8'
3113 if (start <
0) start =
0
3114 if (end
> this.length) end = this.length
3115 if (end <= start) return ''
3120 return hexSlice(this, start, end)
3124 return utf8Slice(this, start, end)
3127 return asciiSlice(this, start, end)
3130 return binarySlice(this, start, end)
3133 return base64Slice(this, start, end)
3139 return utf16leSlice(this, start, end)
3142 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3143 encoding = (encoding + '').toLowerCase()
3149 Buffer.prototype.toString = function toString () {
3150 var length = this.length |
0
3151 if (length ===
0) return ''
3152 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3153 return slowToString.apply(this, arguments)
3156 Buffer.prototype.equals = function equals (b) {
3157 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3158 if (this === b) return true
3159 return Buffer.compare(this, b) ===
0
3162 Buffer.prototype.inspect = function inspect () {
3164 var max = exports.INSPECT_MAX_BYTES
3165 if (this.length
> 0) {
3166 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3167 if (this.length
> max) str += ' ... '
3169 return '
<Buffer ' + str + '
>'
3172 Buffer.prototype.compare = function compare (b) {
3173 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3174 if (this === b) return
0
3175 return Buffer.compare(this, b)
3178 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3179 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3180 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3183 if (this.length ===
0) return -
1
3184 if (byteOffset
>= this.length) return -
1
3186 // Negative offsets start from the end of the buffer
3187 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3189 if (typeof val === 'string') {
3190 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3191 return String.prototype.indexOf.call(this, val, byteOffset)
3193 if (Buffer.isBuffer(val)) {
3194 return arrayIndexOf(this, val, byteOffset)
3196 if (typeof val === 'number') {
3197 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3198 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3200 return arrayIndexOf(this, [ val ], byteOffset)
3203 function arrayIndexOf (arr, val, byteOffset) {
3205 for (var i =
0; byteOffset + i < arr.length; i++) {
3206 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3207 if (foundIndex === -
1) foundIndex = i
3208 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3216 throw new TypeError('val must be string, number or Buffer')
3219 // `get` is deprecated
3220 Buffer.prototype.get = function get (offset) {
3221 console.log('.get() is deprecated. Access using array indexes instead.')
3222 return this.readUInt8(offset)
3225 // `set` is deprecated
3226 Buffer.prototype.set = function set (v, offset) {
3227 console.log('.set() is deprecated. Access using array indexes instead.')
3228 return this.writeUInt8(v, offset)
3231 function hexWrite (buf, string, offset, length) {
3232 offset = Number(offset) ||
0
3233 var remaining = buf.length - offset
3237 length = Number(length)
3238 if (length
> remaining) {
3243 // must be an even number of digits
3244 var strLen = string.length
3245 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3247 if (length
> strLen /
2) {
3250 for (var i =
0; i < length; i++) {
3251 var parsed = parseInt(string.substr(i *
2,
2),
16)
3252 if (isNaN(parsed)) throw new Error('Invalid hex string')
3253 buf[offset + i] = parsed
3258 function utf8Write (buf, string, offset, length) {
3259 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3262 function asciiWrite (buf, string, offset, length) {
3263 return blitBuffer(asciiToBytes(string), buf, offset, length)
3266 function binaryWrite (buf, string, offset, length) {
3267 return asciiWrite(buf, string, offset, length)
3270 function base64Write (buf, string, offset, length) {
3271 return blitBuffer(base64ToBytes(string), buf, offset, length)
3274 function ucs2Write (buf, string, offset, length) {
3275 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3278 Buffer.prototype.write = function write (string, offset, length, encoding) {
3279 // Buffer#write(string)
3280 if (offset === undefined) {
3282 length = this.length
3284 // Buffer#write(string, encoding)
3285 } else if (length === undefined && typeof offset === 'string') {
3287 length = this.length
3289 // Buffer#write(string, offset[, length][, encoding])
3290 } else if (isFinite(offset)) {
3292 if (isFinite(length)) {
3294 if (encoding === undefined) encoding = 'utf8'
3299 // legacy write(string, encoding, offset, length) - remove in v0.13
3307 var remaining = this.length - offset
3308 if (length === undefined || length
> remaining) length = remaining
3310 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3311 throw new RangeError('attempt to write outside buffer bounds')
3314 if (!encoding) encoding = 'utf8'
3316 var loweredCase = false
3320 return hexWrite(this, string, offset, length)
3324 return utf8Write(this, string, offset, length)
3327 return asciiWrite(this, string, offset, length)
3330 return binaryWrite(this, string, offset, length)
3333 // Warning: maxLength not taken into account in base64Write
3334 return base64Write(this, string, offset, length)
3340 return ucs2Write(this, string, offset, length)
3343 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3344 encoding = ('' + encoding).toLowerCase()
3350 Buffer.prototype.toJSON = function toJSON () {
3353 data: Array.prototype.slice.call(this._arr || this,
0)
3357 function base64Slice (buf, start, end) {
3358 if (start ===
0 && end === buf.length) {
3359 return base64.fromByteArray(buf)
3361 return base64.fromByteArray(buf.slice(start, end))
3365 function utf8Slice (buf, start, end) {
3366 end = Math.min(buf.length, end)
3371 var bytesPerSequence
3377 for (; i < end; i += bytesPerSequence) {
3381 if (firstByte
> 0xEF) {
3382 bytesPerSequence =
4
3383 } else if (firstByte
> 0xDF) {
3384 bytesPerSequence =
3
3385 } else if (firstByte
> 0xBF) {
3386 bytesPerSequence =
2
3388 bytesPerSequence =
1
3391 if (i + bytesPerSequence <= end) {
3392 switch (bytesPerSequence) {
3394 if (firstByte <
0x80) {
3395 codePoint = firstByte
3399 secondByte = buf[i +
1]
3400 if ((secondByte &
0xC0) ===
0x80) {
3401 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3402 if (tempCodePoint
> 0x7F) {
3403 codePoint = tempCodePoint
3408 secondByte = buf[i +
1]
3409 thirdByte = buf[i +
2]
3410 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3411 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3412 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3413 codePoint = tempCodePoint
3418 secondByte = buf[i +
1]
3419 thirdByte = buf[i +
2]
3420 fourthByte = buf[i +
3]
3421 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3422 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3423 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3424 codePoint = tempCodePoint
3430 if (codePoint ===
0xFFFD) {
3431 // we generated an invalid codePoint so make sure to only advance by
1 byte
3432 bytesPerSequence =
1
3433 } else if (codePoint
> 0xFFFF) {
3434 // encode to utf16 (surrogate pair dance)
3435 codePoint -=
0x10000
3436 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3437 codePoint =
0xDC00 | codePoint &
0x3FF
3443 return String.fromCharCode.apply(String, res)
3446 function asciiSlice (buf, start, end) {
3448 end = Math.min(buf.length, end)
3450 for (var i = start; i < end; i++) {
3451 ret += String.fromCharCode(buf[i] &
0x7F)
3456 function binarySlice (buf, start, end) {
3458 end = Math.min(buf.length, end)
3460 for (var i = start; i < end; i++) {
3461 ret += String.fromCharCode(buf[i])
3466 function hexSlice (buf, start, end) {
3467 var len = buf.length
3469 if (!start || start <
0) start =
0
3470 if (!end || end <
0 || end
> len) end = len
3473 for (var i = start; i < end; i++) {
3474 out += toHex(buf[i])
3479 function utf16leSlice (buf, start, end) {
3480 var bytes = buf.slice(start, end)
3482 for (var i =
0; i < bytes.length; i +=
2) {
3483 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3488 Buffer.prototype.slice = function slice (start, end) {
3489 var len = this.length
3491 end = end === undefined ? len : ~~end
3495 if (start <
0) start =
0
3496 } else if (start
> len) {
3502 if (end <
0) end =
0
3503 } else if (end
> len) {
3507 if (end < start) end = start
3510 if (Buffer.TYPED_ARRAY_SUPPORT) {
3511 newBuf = Buffer._augment(this.subarray(start, end))
3513 var sliceLen = end - start
3514 newBuf = new Buffer(sliceLen, undefined)
3515 for (var i =
0; i < sliceLen; i++) {
3516 newBuf[i] = this[i + start]
3520 if (newBuf.length) newBuf.parent = this.parent || this
3526 * Need to make sure that buffer isn't trying to write out of bounds.
3528 function checkOffset (offset, ext, length) {
3529 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3530 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3533 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3535 byteLength = byteLength |
0
3536 if (!noAssert) checkOffset(offset, byteLength, this.length)
3538 var val = this[offset]
3541 while (++i < byteLength && (mul *=
0x100)) {
3542 val += this[offset + i] * mul
3548 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3550 byteLength = byteLength |
0
3552 checkOffset(offset, byteLength, this.length)
3555 var val = this[offset + --byteLength]
3557 while (byteLength
> 0 && (mul *=
0x100)) {
3558 val += this[offset + --byteLength] * mul
3564 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3565 if (!noAssert) checkOffset(offset,
1, this.length)
3569 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3570 if (!noAssert) checkOffset(offset,
2, this.length)
3571 return this[offset] | (this[offset +
1] <<
8)
3574 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3575 if (!noAssert) checkOffset(offset,
2, this.length)
3576 return (this[offset] <<
8) | this[offset +
1]
3579 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3580 if (!noAssert) checkOffset(offset,
4, this.length)
3582 return ((this[offset]) |
3583 (this[offset +
1] <<
8) |
3584 (this[offset +
2] <<
16)) +
3585 (this[offset +
3] *
0x1000000)
3588 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3589 if (!noAssert) checkOffset(offset,
4, this.length)
3591 return (this[offset] *
0x1000000) +
3592 ((this[offset +
1] <<
16) |
3593 (this[offset +
2] <<
8) |
3597 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3599 byteLength = byteLength |
0
3600 if (!noAssert) checkOffset(offset, byteLength, this.length)
3602 var val = this[offset]
3605 while (++i < byteLength && (mul *=
0x100)) {
3606 val += this[offset + i] * mul
3610 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3615 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3617 byteLength = byteLength |
0
3618 if (!noAssert) checkOffset(offset, byteLength, this.length)
3622 var val = this[offset + --i]
3623 while (i
> 0 && (mul *=
0x100)) {
3624 val += this[offset + --i] * mul
3628 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3633 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3634 if (!noAssert) checkOffset(offset,
1, this.length)
3635 if (!(this[offset] &
0x80)) return (this[offset])
3636 return ((
0xff - this[offset] +
1) * -
1)
3639 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset,
2, this.length)
3641 var val = this[offset] | (this[offset +
1] <<
8)
3642 return (val &
0x8000) ? val |
0xFFFF0000 : val
3645 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3646 if (!noAssert) checkOffset(offset,
2, this.length)
3647 var val = this[offset +
1] | (this[offset] <<
8)
3648 return (val &
0x8000) ? val |
0xFFFF0000 : val
3651 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3652 if (!noAssert) checkOffset(offset,
4, this.length)
3654 return (this[offset]) |
3655 (this[offset +
1] <<
8) |
3656 (this[offset +
2] <<
16) |
3657 (this[offset +
3] <<
24)
3660 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3661 if (!noAssert) checkOffset(offset,
4, this.length)
3663 return (this[offset] <<
24) |
3664 (this[offset +
1] <<
16) |
3665 (this[offset +
2] <<
8) |
3669 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3670 if (!noAssert) checkOffset(offset,
4, this.length)
3671 return ieee754.read(this, offset, true,
23,
4)
3674 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3675 if (!noAssert) checkOffset(offset,
4, this.length)
3676 return ieee754.read(this, offset, false,
23,
4)
3679 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3680 if (!noAssert) checkOffset(offset,
8, this.length)
3681 return ieee754.read(this, offset, true,
52,
8)
3684 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3685 if (!noAssert) checkOffset(offset,
8, this.length)
3686 return ieee754.read(this, offset, false,
52,
8)
3689 function checkInt (buf, value, offset, ext, max, min) {
3690 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3691 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3692 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3695 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3698 byteLength = byteLength |
0
3699 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3703 this[offset] = value &
0xFF
3704 while (++i < byteLength && (mul *=
0x100)) {
3705 this[offset + i] = (value / mul) &
0xFF
3708 return offset + byteLength
3711 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3714 byteLength = byteLength |
0
3715 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3717 var i = byteLength -
1
3719 this[offset + i] = value &
0xFF
3720 while (--i
>=
0 && (mul *=
0x100)) {
3721 this[offset + i] = (value / mul) &
0xFF
3724 return offset + byteLength
3727 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3730 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3731 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3732 this[offset] = value
3736 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3737 if (value <
0) value =
0xffff + value +
1
3738 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3739 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3740 (littleEndian ? i :
1 - i) *
8
3744 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3747 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3748 if (Buffer.TYPED_ARRAY_SUPPORT) {
3749 this[offset] = value
3750 this[offset +
1] = (value
>>> 8)
3752 objectWriteUInt16(this, value, offset, true)
3757 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3760 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3761 if (Buffer.TYPED_ARRAY_SUPPORT) {
3762 this[offset] = (value
>>> 8)
3763 this[offset +
1] = value
3765 objectWriteUInt16(this, value, offset, false)
3770 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3771 if (value <
0) value =
0xffffffff + value +
1
3772 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3773 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3777 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3780 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3781 if (Buffer.TYPED_ARRAY_SUPPORT) {
3782 this[offset +
3] = (value
>>> 24)
3783 this[offset +
2] = (value
>>> 16)
3784 this[offset +
1] = (value
>>> 8)
3785 this[offset] = value
3787 objectWriteUInt32(this, value, offset, true)
3792 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3795 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3796 if (Buffer.TYPED_ARRAY_SUPPORT) {
3797 this[offset] = (value
>>> 24)
3798 this[offset +
1] = (value
>>> 16)
3799 this[offset +
2] = (value
>>> 8)
3800 this[offset +
3] = value
3802 objectWriteUInt32(this, value, offset, false)
3807 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3811 var limit = Math.pow(
2,
8 * byteLength -
1)
3813 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3818 var sub = value <
0 ?
1 :
0
3819 this[offset] = value &
0xFF
3820 while (++i < byteLength && (mul *=
0x100)) {
3821 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3824 return offset + byteLength
3827 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3831 var limit = Math.pow(
2,
8 * byteLength -
1)
3833 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3836 var i = byteLength -
1
3838 var sub = value <
0 ?
1 :
0
3839 this[offset + i] = value &
0xFF
3840 while (--i
>=
0 && (mul *=
0x100)) {
3841 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3844 return offset + byteLength
3847 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3850 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3851 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3852 if (value <
0) value =
0xff + value +
1
3853 this[offset] = value
3857 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3860 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3861 if (Buffer.TYPED_ARRAY_SUPPORT) {
3862 this[offset] = value
3863 this[offset +
1] = (value
>>> 8)
3865 objectWriteUInt16(this, value, offset, true)
3870 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3873 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3874 if (Buffer.TYPED_ARRAY_SUPPORT) {
3875 this[offset] = (value
>>> 8)
3876 this[offset +
1] = value
3878 objectWriteUInt16(this, value, offset, false)
3883 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3886 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3887 if (Buffer.TYPED_ARRAY_SUPPORT) {
3888 this[offset] = value
3889 this[offset +
1] = (value
>>> 8)
3890 this[offset +
2] = (value
>>> 16)
3891 this[offset +
3] = (value
>>> 24)
3893 objectWriteUInt32(this, value, offset, true)
3898 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3901 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3902 if (value <
0) value =
0xffffffff + value +
1
3903 if (Buffer.TYPED_ARRAY_SUPPORT) {
3904 this[offset] = (value
>>> 24)
3905 this[offset +
1] = (value
>>> 16)
3906 this[offset +
2] = (value
>>> 8)
3907 this[offset +
3] = value
3909 objectWriteUInt32(this, value, offset, false)
3914 function checkIEEE754 (buf, value, offset, ext, max, min) {
3915 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3916 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3917 if (offset <
0) throw new RangeError('index out of range')
3920 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3922 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3924 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3928 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3929 return writeFloat(this, value, offset, true, noAssert)
3932 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3933 return writeFloat(this, value, offset, false, noAssert)
3936 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3938 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3940 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3944 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3945 return writeDouble(this, value, offset, true, noAssert)
3948 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3949 return writeDouble(this, value, offset, false, noAssert)
3952 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3953 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3954 if (!start) start =
0
3955 if (!end && end !==
0) end = this.length
3956 if (targetStart
>= target.length) targetStart = target.length
3957 if (!targetStart) targetStart =
0
3958 if (end
> 0 && end < start) end = start
3960 // Copy
0 bytes; we're done
3961 if (end === start) return
0
3962 if (target.length ===
0 || this.length ===
0) return
0
3964 // Fatal error conditions
3965 if (targetStart <
0) {
3966 throw new RangeError('targetStart out of bounds')
3968 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3969 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3972 if (end
> this.length) end = this.length
3973 if (target.length - targetStart < end - start) {
3974 end = target.length - targetStart + start
3977 var len = end - start
3980 if (this === target && start < targetStart && targetStart < end) {
3981 // descending copy from end
3982 for (i = len -
1; i
>=
0; i--) {
3983 target[i + targetStart] = this[i + start]
3985 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3986 // ascending copy from start
3987 for (i =
0; i < len; i++) {
3988 target[i + targetStart] = this[i + start]
3991 target._set(this.subarray(start, start + len), targetStart)
3997 // fill(value, start=
0, end=buffer.length)
3998 Buffer.prototype.fill = function fill (value, start, end) {
3999 if (!value) value =
0
4000 if (!start) start =
0
4001 if (!end) end = this.length
4003 if (end < start) throw new RangeError('end < start')
4005 // Fill
0 bytes; we're done
4006 if (end === start) return
4007 if (this.length ===
0) return
4009 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
4010 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
4013 if (typeof value === 'number') {
4014 for (i = start; i < end; i++) {
4018 var bytes = utf8ToBytes(value.toString())
4019 var len = bytes.length
4020 for (i = start; i < end; i++) {
4021 this[i] = bytes[i % len]
4029 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4030 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
4032 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4033 if (typeof Uint8Array !== 'undefined') {
4034 if (Buffer.TYPED_ARRAY_SUPPORT) {
4035 return (new Buffer(this)).buffer
4037 var buf = new Uint8Array(this.length)
4038 for (var i =
0, len = buf.length; i < len; i +=
1) {
4044 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4051 var BP = Buffer.prototype
4054 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4056 Buffer._augment = function _augment (arr) {
4057 arr.constructor = Buffer
4058 arr._isBuffer = true
4060 // save reference to original Uint8Array set method before overwriting
4067 arr.write = BP.write
4068 arr.toString = BP.toString
4069 arr.toLocaleString = BP.toString
4070 arr.toJSON = BP.toJSON
4071 arr.equals = BP.equals
4072 arr.compare = BP.compare
4073 arr.indexOf = BP.indexOf
4075 arr.slice = BP.slice
4076 arr.readUIntLE = BP.readUIntLE
4077 arr.readUIntBE = BP.readUIntBE
4078 arr.readUInt8 = BP.readUInt8
4079 arr.readUInt16LE = BP.readUInt16LE
4080 arr.readUInt16BE = BP.readUInt16BE
4081 arr.readUInt32LE = BP.readUInt32LE
4082 arr.readUInt32BE = BP.readUInt32BE
4083 arr.readIntLE = BP.readIntLE
4084 arr.readIntBE = BP.readIntBE
4085 arr.readInt8 = BP.readInt8
4086 arr.readInt16LE = BP.readInt16LE
4087 arr.readInt16BE = BP.readInt16BE
4088 arr.readInt32LE = BP.readInt32LE
4089 arr.readInt32BE = BP.readInt32BE
4090 arr.readFloatLE = BP.readFloatLE
4091 arr.readFloatBE = BP.readFloatBE
4092 arr.readDoubleLE = BP.readDoubleLE
4093 arr.readDoubleBE = BP.readDoubleBE
4094 arr.writeUInt8 = BP.writeUInt8
4095 arr.writeUIntLE = BP.writeUIntLE
4096 arr.writeUIntBE = BP.writeUIntBE
4097 arr.writeUInt16LE = BP.writeUInt16LE
4098 arr.writeUInt16BE = BP.writeUInt16BE
4099 arr.writeUInt32LE = BP.writeUInt32LE
4100 arr.writeUInt32BE = BP.writeUInt32BE
4101 arr.writeIntLE = BP.writeIntLE
4102 arr.writeIntBE = BP.writeIntBE
4103 arr.writeInt8 = BP.writeInt8
4104 arr.writeInt16LE = BP.writeInt16LE
4105 arr.writeInt16BE = BP.writeInt16BE
4106 arr.writeInt32LE = BP.writeInt32LE
4107 arr.writeInt32BE = BP.writeInt32BE
4108 arr.writeFloatLE = BP.writeFloatLE
4109 arr.writeFloatBE = BP.writeFloatBE
4110 arr.writeDoubleLE = BP.writeDoubleLE
4111 arr.writeDoubleBE = BP.writeDoubleBE
4113 arr.inspect = BP.inspect
4114 arr.toArrayBuffer = BP.toArrayBuffer
4119 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4121 function base64clean (str) {
4122 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4123 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4124 // Node converts strings with length <
2 to ''
4125 if (str.length <
2) return ''
4126 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4127 while (str.length %
4 !==
0) {
4133 function stringtrim (str) {
4134 if (str.trim) return str.trim()
4135 return str.replace(/^\s+|\s+$/g, '')
4138 function toHex (n) {
4139 if (n <
16) return '
0' + n.toString(
16)
4140 return n.toString(
16)
4143 function utf8ToBytes (string, units) {
4144 units = units || Infinity
4146 var length = string.length
4147 var leadSurrogate = null
4150 for (var i =
0; i < length; i++) {
4151 codePoint = string.charCodeAt(i)
4153 // is surrogate component
4154 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4155 // last char was a lead
4156 if (!leadSurrogate) {
4158 if (codePoint
> 0xDBFF) {
4160 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4163 } else if (i +
1 === length) {
4165 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4170 leadSurrogate = codePoint
4176 if (codePoint <
0xDC00) {
4177 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4178 leadSurrogate = codePoint
4182 // valid surrogate pair
4183 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4185 } else if (leadSurrogate) {
4186 // valid bmp char, but last char was a lead
4187 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4190 leadSurrogate = null
4193 if (codePoint <
0x80) {
4194 if ((units -=
1) <
0) break
4195 bytes.push(codePoint)
4196 } else if (codePoint <
0x800) {
4197 if ((units -=
2) <
0) break
4199 codePoint
>> 0x6 |
0xC0,
4200 codePoint &
0x3F |
0x80
4202 } else if (codePoint <
0x10000) {
4203 if ((units -=
3) <
0) break
4205 codePoint
>> 0xC |
0xE0,
4206 codePoint
>> 0x6 &
0x3F |
0x80,
4207 codePoint &
0x3F |
0x80
4209 } else if (codePoint <
0x110000) {
4210 if ((units -=
4) <
0) break
4212 codePoint
>> 0x12 |
0xF0,
4213 codePoint
>> 0xC &
0x3F |
0x80,
4214 codePoint
>> 0x6 &
0x3F |
0x80,
4215 codePoint &
0x3F |
0x80
4218 throw new Error('Invalid code point')
4225 function asciiToBytes (str) {
4227 for (var i =
0; i < str.length; i++) {
4228 // Node's code seems to be doing this and not &
0x7F..
4229 byteArray.push(str.charCodeAt(i) &
0xFF)
4234 function utf16leToBytes (str, units) {
4237 for (var i =
0; i < str.length; i++) {
4238 if ((units -=
2) <
0) break
4240 c = str.charCodeAt(i)
4250 function base64ToBytes (str) {
4251 return base64.toByteArray(base64clean(str))
4254 function blitBuffer (src, dst, offset, length) {
4255 for (var i =
0; i < length; i++) {
4256 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4257 dst[i + offset] = src[i]
4262 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4263 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4265 ;(function (exports) {
4268 var Arr = (typeof Uint8Array !== 'undefined')
4272 var PLUS = '+'.charCodeAt(
0)
4273 var SLASH = '/'.charCodeAt(
0)
4274 var NUMBER = '
0'.charCodeAt(
0)
4275 var LOWER = 'a'.charCodeAt(
0)
4276 var UPPER = 'A'.charCodeAt(
0)
4277 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4278 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4280 function decode (elt) {
4281 var code = elt.charCodeAt(
0)
4282 if (code === PLUS ||
4283 code === PLUS_URL_SAFE)
4285 if (code === SLASH ||
4286 code === SLASH_URL_SAFE)
4289 return -
1 //no match
4290 if (code < NUMBER +
10)
4291 return code - NUMBER +
26 +
26
4292 if (code < UPPER +
26)
4294 if (code < LOWER +
26)
4295 return code - LOWER +
26
4298 function b64ToByteArray (b64) {
4299 var i, j, l, tmp, placeHolders, arr
4301 if (b64.length %
4 > 0) {
4302 throw new Error('Invalid string. Length must be a multiple of
4')
4305 // the number of equal signs (place holders)
4306 // if there are two placeholders, than the two characters before it
4307 // represent one byte
4308 // if there is only one, then the three characters before it represent
2 bytes
4309 // this is just a cheap hack to not do indexOf twice
4310 var len = b64.length
4311 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4313 // base64 is
4/
3 + up to two characters of the original data
4314 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4316 // if there are placeholders, only get up to the last complete
4 chars
4317 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4325 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4326 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4327 push((tmp &
0xFF0000)
>> 16)
4328 push((tmp &
0xFF00)
>> 8)
4332 if (placeHolders ===
2) {
4333 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4335 } else if (placeHolders ===
1) {
4336 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4337 push((tmp
>> 8) &
0xFF)
4344 function uint8ToBase64 (uint8) {
4346 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4350 function encode (num) {
4351 return lookup.charAt(num)
4354 function tripletToBase64 (num) {
4355 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4358 // go through the array every three bytes, we'll deal with trailing stuff later
4359 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4360 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4361 output += tripletToBase64(temp)
4364 // pad the end with zeros, but make sure to not forget the extra bytes
4365 switch (extraBytes) {
4367 temp = uint8[uint8.length -
1]
4368 output += encode(temp
>> 2)
4369 output += encode((temp <<
4) &
0x3F)
4373 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4374 output += encode(temp
>> 10)
4375 output += encode((temp
>> 4) &
0x3F)
4376 output += encode((temp <<
2) &
0x3F)
4384 exports.toByteArray = b64ToByteArray
4385 exports.fromByteArray = uint8ToBase64
4386 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4388 },{}],
9:[function(require,module,exports){
4389 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4391 var eLen = nBytes *
8 - mLen -
1
4392 var eMax = (
1 << eLen) -
1
4393 var eBias = eMax
>> 1
4395 var i = isLE ? (nBytes -
1) :
0
4396 var d = isLE ? -
1 :
1
4397 var s = buffer[offset + i]
4401 e = s & ((
1 << (-nBits)) -
1)
4404 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4406 m = e & ((
1 << (-nBits)) -
1)
4409 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4413 } else if (e === eMax) {
4414 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4416 m = m + Math.pow(
2, mLen)
4419 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4422 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4424 var eLen = nBytes *
8 - mLen -
1
4425 var eMax = (
1 << eLen) -
1
4426 var eBias = eMax
>> 1
4427 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4428 var i = isLE ?
0 : (nBytes -
1)
4429 var d = isLE ?
1 : -
1
4430 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4432 value = Math.abs(value)
4434 if (isNaN(value) || value === Infinity) {
4435 m = isNaN(value) ?
1 :
0
4438 e = Math.floor(Math.log(value) / Math.LN2)
4439 if (value * (c = Math.pow(
2, -e)) <
1) {
4443 if (e + eBias
>=
1) {
4446 value += rt * Math.pow(
2,
1 - eBias)
4448 if (value * c
>=
2) {
4453 if (e + eBias
>= eMax) {
4456 } else if (e + eBias
>=
1) {
4457 m = (value * c -
1) * Math.pow(
2, mLen)
4460 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4465 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4469 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4471 buffer[offset + i - d] |= s *
128
4474 },{}],
10:[function(require,module,exports){
4480 var isArray = Array.isArray;
4486 var str = Object.prototype.toString;
4489 * Whether or not the given `val`
4496 * isArray(arguments);
4501 * @param {mixed} val
4505 module.exports = isArray || function (val) {
4506 return !! val && '[object Array]' == str.call(val);
4509 },{}],
11:[function(require,module,exports){
4510 // Copyright Joyent, Inc. and other Node contributors.
4512 // Permission is hereby granted, free of charge, to any person obtaining a
4513 // copy of this software and associated documentation files (the
4514 // "Software"), to deal in the Software without restriction, including
4515 // without limitation the rights to use, copy, modify, merge, publish,
4516 // distribute, sublicense, and/or sell copies of the Software, and to permit
4517 // persons to whom the Software is furnished to do so, subject to the
4518 // following conditions:
4520 // The above copyright notice and this permission notice shall be included
4521 // in all copies or substantial portions of the Software.
4523 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4524 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4525 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4526 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4527 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4528 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4529 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4531 function EventEmitter() {
4532 this._events = this._events || {};
4533 this._maxListeners = this._maxListeners || undefined;
4535 module.exports = EventEmitter;
4537 // Backwards-compat with node
0.10.x
4538 EventEmitter.EventEmitter = EventEmitter;
4540 EventEmitter.prototype._events = undefined;
4541 EventEmitter.prototype._maxListeners = undefined;
4543 // By default EventEmitters will print a warning if more than
10 listeners are
4544 // added to it. This is a useful default which helps finding memory leaks.
4545 EventEmitter.defaultMaxListeners =
10;
4547 // Obviously not all Emitters should be limited to
10. This function allows
4548 // that to be increased. Set to zero for unlimited.
4549 EventEmitter.prototype.setMaxListeners = function(n) {
4550 if (!isNumber(n) || n <
0 || isNaN(n))
4551 throw TypeError('n must be a positive number');
4552 this._maxListeners = n;
4556 EventEmitter.prototype.emit = function(type) {
4557 var er, handler, len, args, i, listeners;
4562 // If there is no 'error' event listener then throw.
4563 if (type === 'error') {
4564 if (!this._events.error ||
4565 (isObject(this._events.error) && !this._events.error.length)) {
4567 if (er instanceof Error) {
4568 throw er; // Unhandled 'error' event
4570 throw TypeError('Uncaught, unspecified "error" event.');
4574 handler = this._events[type];
4576 if (isUndefined(handler))
4579 if (isFunction(handler)) {
4580 switch (arguments.length) {
4586 handler.call(this, arguments[
1]);
4589 handler.call(this, arguments[
1], arguments[
2]);
4593 len = arguments.length;
4594 args = new Array(len -
1);
4595 for (i =
1; i < len; i++)
4596 args[i -
1] = arguments[i];
4597 handler.apply(this, args);
4599 } else if (isObject(handler)) {
4600 len = arguments.length;
4601 args = new Array(len -
1);
4602 for (i =
1; i < len; i++)
4603 args[i -
1] = arguments[i];
4605 listeners = handler.slice();
4606 len = listeners.length;
4607 for (i =
0; i < len; i++)
4608 listeners[i].apply(this, args);
4614 EventEmitter.prototype.addListener = function(type, listener) {
4617 if (!isFunction(listener))
4618 throw TypeError('listener must be a function');
4623 // To avoid recursion in the case that type === "newListener"! Before
4624 // adding it to the listeners, first emit "newListener".
4625 if (this._events.newListener)
4626 this.emit('newListener', type,
4627 isFunction(listener.listener) ?
4628 listener.listener : listener);
4630 if (!this._events[type])
4631 // Optimize the case of one listener. Don't need the extra array object.
4632 this._events[type] = listener;
4633 else if (isObject(this._events[type]))
4634 // If we've already got an array, just append.
4635 this._events[type].push(listener);
4637 // Adding the second element, need to change to array.
4638 this._events[type] = [this._events[type], listener];
4640 // Check for listener leak
4641 if (isObject(this._events[type]) && !this._events[type].warned) {
4643 if (!isUndefined(this._maxListeners)) {
4644 m = this._maxListeners;
4646 m = EventEmitter.defaultMaxListeners;
4649 if (m && m
> 0 && this._events[type].length
> m) {
4650 this._events[type].warned = true;
4651 console.error('(node) warning: possible EventEmitter memory ' +
4652 'leak detected. %d listeners added. ' +
4653 'Use emitter.setMaxListeners() to increase limit.',
4654 this._events[type].length);
4655 if (typeof console.trace === 'function') {
4656 // not supported in IE
10
4665 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4667 EventEmitter.prototype.once = function(type, listener) {
4668 if (!isFunction(listener))
4669 throw TypeError('listener must be a function');
4674 this.removeListener(type, g);
4678 listener.apply(this, arguments);
4682 g.listener = listener;
4688 // emits a 'removeListener' event iff the listener was removed
4689 EventEmitter.prototype.removeListener = function(type, listener) {
4690 var list, position, length, i;
4692 if (!isFunction(listener))
4693 throw TypeError('listener must be a function');
4695 if (!this._events || !this._events[type])
4698 list = this._events[type];
4699 length = list.length;
4702 if (list === listener ||
4703 (isFunction(list.listener) && list.listener === listener)) {
4704 delete this._events[type];
4705 if (this._events.removeListener)
4706 this.emit('removeListener', type, listener);
4708 } else if (isObject(list)) {
4709 for (i = length; i--
> 0;) {
4710 if (list[i] === listener ||
4711 (list[i].listener && list[i].listener === listener)) {
4720 if (list.length ===
1) {
4722 delete this._events[type];
4724 list.splice(position,
1);
4727 if (this._events.removeListener)
4728 this.emit('removeListener', type, listener);
4734 EventEmitter.prototype.removeAllListeners = function(type) {
4740 // not listening for removeListener, no need to emit
4741 if (!this._events.removeListener) {
4742 if (arguments.length ===
0)
4744 else if (this._events[type])
4745 delete this._events[type];
4749 // emit removeListener for all listeners on all events
4750 if (arguments.length ===
0) {
4751 for (key in this._events) {
4752 if (key === 'removeListener') continue;
4753 this.removeAllListeners(key);
4755 this.removeAllListeners('removeListener');
4760 listeners = this._events[type];
4762 if (isFunction(listeners)) {
4763 this.removeListener(type, listeners);
4766 while (listeners.length)
4767 this.removeListener(type, listeners[listeners.length -
1]);
4769 delete this._events[type];
4774 EventEmitter.prototype.listeners = function(type) {
4776 if (!this._events || !this._events[type])
4778 else if (isFunction(this._events[type]))
4779 ret = [this._events[type]];
4781 ret = this._events[type].slice();
4785 EventEmitter.listenerCount = function(emitter, type) {
4787 if (!emitter._events || !emitter._events[type])
4789 else if (isFunction(emitter._events[type]))
4792 ret = emitter._events[type].length;
4796 function isFunction(arg) {
4797 return typeof arg === 'function';
4800 function isNumber(arg) {
4801 return typeof arg === 'number';
4804 function isObject(arg) {
4805 return typeof arg === 'object' && arg !== null;
4808 function isUndefined(arg) {
4809 return arg === void
0;
4812 },{}],
12:[function(require,module,exports){
4813 if (typeof Object.create === 'function') {
4814 // implementation from standard node.js 'util' module
4815 module.exports = function inherits(ctor, superCtor) {
4816 ctor.super_ = superCtor
4817 ctor.prototype = Object.create(superCtor.prototype, {
4827 // old school shim for old browsers
4828 module.exports = function inherits(ctor, superCtor) {
4829 ctor.super_ = superCtor
4830 var TempCtor = function () {}
4831 TempCtor.prototype = superCtor.prototype
4832 ctor.prototype = new TempCtor()
4833 ctor.prototype.constructor = ctor
4837 },{}],
13:[function(require,module,exports){
4838 module.exports = Array.isArray || function (arr) {
4839 return Object.prototype.toString.call(arr) == '[object Array]';
4842 },{}],
14:[function(require,module,exports){
4843 // shim for using process in browser
4845 var process = module.exports = {};
4847 var draining = false;
4849 var queueIndex = -
1;
4851 function cleanUpNextTick() {
4853 if (currentQueue.length) {
4854 queue = currentQueue.concat(queue);
4863 function drainQueue() {
4867 var timeout = setTimeout(cleanUpNextTick);
4870 var len = queue.length;
4872 currentQueue = queue;
4874 while (++queueIndex < len) {
4875 currentQueue[queueIndex].run();
4880 currentQueue = null;
4882 clearTimeout(timeout);
4885 process.nextTick = function (fun) {
4886 var args = new Array(arguments.length -
1);
4887 if (arguments.length
> 1) {
4888 for (var i =
1; i < arguments.length; i++) {
4889 args[i -
1] = arguments[i];
4892 queue.push(new Item(fun, args));
4893 if (queue.length ===
1 && !draining) {
4894 setTimeout(drainQueue,
0);
4898 // v8 likes predictible objects
4899 function Item(fun, array) {
4903 Item.prototype.run = function () {
4904 this.fun.apply(null, this.array);
4906 process.title = 'browser';
4907 process.browser = true;
4910 process.version = ''; // empty string to avoid regexp issues
4911 process.versions = {};
4916 process.addListener = noop;
4917 process.once = noop;
4919 process.removeListener = noop;
4920 process.removeAllListeners = noop;
4921 process.emit = noop;
4923 process.binding = function (name) {
4924 throw new Error('process.binding is not supported');
4928 process.cwd = function () { return '/' };
4929 process.chdir = function (dir) {
4930 throw new Error('process.chdir is not supported');
4932 process.umask = function() { return
0; };
4934 },{}],
15:[function(require,module,exports){
4935 module.exports = require(
"./lib/_stream_duplex.js")
4937 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4938 (function (process){
4939 // Copyright Joyent, Inc. and other Node contributors.
4941 // Permission is hereby granted, free of charge, to any person obtaining a
4942 // copy of this software and associated documentation files (the
4943 //
"Software"), to deal in the Software without restriction, including
4944 // without limitation the rights to use, copy, modify, merge, publish,
4945 // distribute, sublicense, and/or sell copies of the Software, and to permit
4946 // persons to whom the Software is furnished to do so, subject to the
4947 // following conditions:
4949 // The above copyright notice and this permission notice shall be included
4950 // in all copies or substantial portions of the Software.
4952 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4953 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4954 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4955 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4956 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4957 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4958 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4960 // a duplex stream is just a stream that is both readable and writable.
4961 // Since JS doesn't have multiple prototypal inheritance, this class
4962 // prototypally inherits from Readable, and then parasitically from
4965 module.exports = Duplex;
4968 var objectKeys = Object.keys || function (obj) {
4970 for (var key in obj) keys.push(key);
4977 var util = require('core-util-is');
4978 util.inherits = require('inherits');
4981 var Readable = require('./_stream_readable');
4982 var Writable = require('./_stream_writable');
4984 util.inherits(Duplex, Readable);
4986 forEach(objectKeys(Writable.prototype), function(method) {
4987 if (!Duplex.prototype[method])
4988 Duplex.prototype[method] = Writable.prototype[method];
4991 function Duplex(options) {
4992 if (!(this instanceof Duplex))
4993 return new Duplex(options);
4995 Readable.call(this, options);
4996 Writable.call(this, options);
4998 if (options && options.readable === false)
4999 this.readable = false;
5001 if (options && options.writable === false)
5002 this.writable = false;
5004 this.allowHalfOpen = true;
5005 if (options && options.allowHalfOpen === false)
5006 this.allowHalfOpen = false;
5008 this.once('end', onend);
5011 // the no-half-open enforcer
5013 // if we allow half-open state, or if the writable side ended,
5015 if (this.allowHalfOpen || this._writableState.ended)
5018 // no more data can be written.
5019 // But allow more writes to happen in this tick.
5020 process.nextTick(this.end.bind(this));
5023 function forEach (xs, f) {
5024 for (var i =
0, l = xs.length; i < l; i++) {
5029 }).call(this,require('_process'))
5030 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
5031 // Copyright Joyent, Inc. and other Node contributors.
5033 // Permission is hereby granted, free of charge, to any person obtaining a
5034 // copy of this software and associated documentation files (the
5035 // "Software"), to deal in the Software without restriction, including
5036 // without limitation the rights to use, copy, modify, merge, publish,
5037 // distribute, sublicense, and/or sell copies of the Software, and to permit
5038 // persons to whom the Software is furnished to do so, subject to the
5039 // following conditions:
5041 // The above copyright notice and this permission notice shall be included
5042 // in all copies or substantial portions of the Software.
5044 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5045 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5046 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5047 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5048 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5049 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5050 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5052 // a passthrough stream.
5053 // basically just the most minimal sort of Transform stream.
5054 // Every written chunk gets output as-is.
5056 module.exports = PassThrough;
5058 var Transform = require('./_stream_transform');
5061 var util = require('core-util-is');
5062 util.inherits = require('inherits');
5065 util.inherits(PassThrough, Transform);
5067 function PassThrough(options) {
5068 if (!(this instanceof PassThrough))
5069 return new PassThrough(options);
5071 Transform.call(this, options);
5074 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5078 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5079 (function (process){
5080 // Copyright Joyent, Inc. and other Node contributors.
5082 // Permission is hereby granted, free of charge, to any person obtaining a
5083 // copy of this software and associated documentation files (the
5084 // "Software"), to deal in the Software without restriction, including
5085 // without limitation the rights to use, copy, modify, merge, publish,
5086 // distribute, sublicense, and/or sell copies of the Software, and to permit
5087 // persons to whom the Software is furnished to do so, subject to the
5088 // following conditions:
5090 // The above copyright notice and this permission notice shall be included
5091 // in all copies or substantial portions of the Software.
5093 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5094 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5095 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5096 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5097 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5098 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5099 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5101 module.exports = Readable;
5104 var isArray = require('isarray');
5109 var Buffer = require('buffer').Buffer;
5112 Readable.ReadableState = ReadableState;
5114 var EE = require('events').EventEmitter;
5117 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5118 return emitter.listeners(type).length;
5122 var Stream = require('stream');
5125 var util = require('core-util-is');
5126 util.inherits = require('inherits');
5133 var debug = require('util');
5134 if (debug && debug.debuglog) {
5135 debug = debug.debuglog('stream');
5137 debug = function () {};
5142 util.inherits(Readable, Stream);
5144 function ReadableState(options, stream) {
5145 var Duplex = require('./_stream_duplex');
5147 options = options || {};
5149 // the point at which it stops calling _read() to fill the buffer
5150 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5151 var hwm = options.highWaterMark;
5152 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5153 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5156 this.highWaterMark = ~~this.highWaterMark;
5161 this.pipesCount =
0;
5162 this.flowing = null;
5164 this.endEmitted = false;
5165 this.reading = false;
5167 // a flag to be able to tell if the onwrite cb is called immediately,
5168 // or on a later tick. We set this to true at first, because any
5169 // actions that shouldn't happen until "later" should generally also
5170 // not happen before the first write call.
5173 // whenever we return null, then we set a flag to say
5174 // that we're awaiting a 'readable' event emission.
5175 this.needReadable = false;
5176 this.emittedReadable = false;
5177 this.readableListening = false;
5180 // object stream flag. Used to make read(n) ignore n and to
5181 // make all the buffer merging and length checks go away
5182 this.objectMode = !!options.objectMode;
5184 if (stream instanceof Duplex)
5185 this.objectMode = this.objectMode || !!options.readableObjectMode;
5187 // Crypto is kind of old and crusty. Historically, its default string
5188 // encoding is 'binary' so we have to make this configurable.
5189 // Everything else in the universe uses 'utf8', though.
5190 this.defaultEncoding = options.defaultEncoding || 'utf8';
5192 // when piping, we only care about 'readable' events that happen
5193 // after read()ing all the bytes and not getting any pushback.
5194 this.ranOut = false;
5196 // the number of writers that are awaiting a drain event in .pipe()s
5197 this.awaitDrain =
0;
5199 // if true, a maybeReadMore has been scheduled
5200 this.readingMore = false;
5202 this.decoder = null;
5203 this.encoding = null;
5204 if (options.encoding) {
5206 StringDecoder = require('string_decoder/').StringDecoder;
5207 this.decoder = new StringDecoder(options.encoding);
5208 this.encoding = options.encoding;
5212 function Readable(options) {
5213 var Duplex = require('./_stream_duplex');
5215 if (!(this instanceof Readable))
5216 return new Readable(options);
5218 this._readableState = new ReadableState(options, this);
5221 this.readable = true;
5226 // Manually shove something into the read() buffer.
5227 // This returns true if the highWaterMark has not been hit yet,
5228 // similar to how Writable.write() returns true if you should
5229 // write() some more.
5230 Readable.prototype.push = function(chunk, encoding) {
5231 var state = this._readableState;
5233 if (util.isString(chunk) && !state.objectMode) {
5234 encoding = encoding || state.defaultEncoding;
5235 if (encoding !== state.encoding) {
5236 chunk = new Buffer(chunk, encoding);
5241 return readableAddChunk(this, state, chunk, encoding, false);
5244 // Unshift should *always* be something directly out of read()
5245 Readable.prototype.unshift = function(chunk) {
5246 var state = this._readableState;
5247 return readableAddChunk(this, state, chunk, '', true);
5250 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5251 var er = chunkInvalid(state, chunk);
5253 stream.emit('error', er);
5254 } else if (util.isNullOrUndefined(chunk)) {
5255 state.reading = false;
5257 onEofChunk(stream, state);
5258 } else if (state.objectMode || chunk && chunk.length
> 0) {
5259 if (state.ended && !addToFront) {
5260 var e = new Error('stream.push() after EOF');
5261 stream.emit('error', e);
5262 } else if (state.endEmitted && addToFront) {
5263 var e = new Error('stream.unshift() after end event');
5264 stream.emit('error', e);
5266 if (state.decoder && !addToFront && !encoding)
5267 chunk = state.decoder.write(chunk);
5270 state.reading = false;
5272 // if we want the data now, just emit it.
5273 if (state.flowing && state.length ===
0 && !state.sync) {
5274 stream.emit('data', chunk);
5277 // update the buffer info.
5278 state.length += state.objectMode ?
1 : chunk.length;
5280 state.buffer.unshift(chunk);
5282 state.buffer.push(chunk);
5284 if (state.needReadable)
5285 emitReadable(stream);
5288 maybeReadMore(stream, state);
5290 } else if (!addToFront) {
5291 state.reading = false;
5294 return needMoreData(state);
5299 // if it's past the high water mark, we can push in some more.
5300 // Also, if we have no data yet, we can stand some
5301 // more bytes. This is to work around cases where hwm=
0,
5302 // such as the repl. Also, if the push() triggered a
5303 // readable event, and the user called read(largeNumber) such that
5304 // needReadable was set, then we ought to push more, so that another
5305 // 'readable' event will be triggered.
5306 function needMoreData(state) {
5307 return !state.ended &&
5308 (state.needReadable ||
5309 state.length < state.highWaterMark ||
5310 state.length ===
0);
5313 // backwards compatibility.
5314 Readable.prototype.setEncoding = function(enc) {
5316 StringDecoder = require('string_decoder/').StringDecoder;
5317 this._readableState.decoder = new StringDecoder(enc);
5318 this._readableState.encoding = enc;
5322 // Don't raise the hwm
> 128MB
5323 var MAX_HWM =
0x800000;
5324 function roundUpToNextPowerOf2(n) {
5328 // Get the next highest power of
2
5330 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5336 function howMuchToRead(n, state) {
5337 if (state.length ===
0 && state.ended)
5340 if (state.objectMode)
5341 return n ===
0 ?
0 :
1;
5343 if (isNaN(n) || util.isNull(n)) {
5344 // only flow one buffer at a time
5345 if (state.flowing && state.buffer.length)
5346 return state.buffer[
0].length;
5348 return state.length;
5354 // If we're asking for more than the target buffer level,
5355 // then raise the water mark. Bump up to the next highest
5356 // power of
2, to prevent increasing it excessively in tiny
5358 if (n
> state.highWaterMark)
5359 state.highWaterMark = roundUpToNextPowerOf2(n);
5361 // don't have that much. return null, unless we've ended.
5362 if (n
> state.length) {
5364 state.needReadable = true;
5367 return state.length;
5373 // you can override either this method, or the async _read(n) below.
5374 Readable.prototype.read = function(n) {
5376 var state = this._readableState;
5379 if (!util.isNumber(n) || n
> 0)
5380 state.emittedReadable = false;
5382 // if we're doing read(
0) to trigger a readable event, but we
5383 // already have a bunch of data in the buffer, then just trigger
5384 // the 'readable' event and move on.
5386 state.needReadable &&
5387 (state.length
>= state.highWaterMark || state.ended)) {
5388 debug('read: emitReadable', state.length, state.ended);
5389 if (state.length ===
0 && state.ended)
5396 n = howMuchToRead(n, state);
5398 // if we've ended, and we're now clear, then finish it up.
5399 if (n ===
0 && state.ended) {
5400 if (state.length ===
0)
5405 // All the actual chunk generation logic needs to be
5406 // *below* the call to _read. The reason is that in certain
5407 // synthetic stream cases, such as passthrough streams, _read
5408 // may be a completely synchronous operation which may change
5409 // the state of the read buffer, providing enough data when
5410 // before there was *not* enough.
5412 // So, the steps are:
5413 //
1. Figure out what the state of things will be after we do
5414 // a read from the buffer.
5416 //
2. If that resulting state will trigger a _read, then call _read.
5417 // Note that this may be asynchronous, or synchronous. Yes, it is
5418 // deeply ugly to write APIs this way, but that still doesn't mean
5419 // that the Readable class should behave improperly, as streams are
5420 // designed to be sync/async agnostic.
5421 // Take note if the _read call is sync or async (ie, if the read call
5422 // has returned yet), so that we know whether or not it's safe to emit
5425 //
3. Actually pull the requested chunks out of the buffer and return.
5427 // if we need a readable event, then we need to do some reading.
5428 var doRead = state.needReadable;
5429 debug('need readable', doRead);
5431 // if we currently have less than the highWaterMark, then also read some
5432 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5434 debug('length less than watermark', doRead);
5437 // however, if we've ended, then there's no point, and if we're already
5438 // reading, then it's unnecessary.
5439 if (state.ended || state.reading) {
5441 debug('reading or ended', doRead);
5446 state.reading = true;
5448 // if the length is currently zero, then we *need* a readable event.
5449 if (state.length ===
0)
5450 state.needReadable = true;
5451 // call internal read method
5452 this._read(state.highWaterMark);
5456 // If _read pushed data synchronously, then `reading` will be false,
5457 // and we need to re-evaluate how much data we can return to the user.
5458 if (doRead && !state.reading)
5459 n = howMuchToRead(nOrig, state);
5463 ret = fromList(n, state);
5467 if (util.isNull(ret)) {
5468 state.needReadable = true;
5474 // If we have nothing in the buffer, then we want to know
5475 // as soon as we *do* get something into the buffer.
5476 if (state.length ===
0 && !state.ended)
5477 state.needReadable = true;
5479 // If we tried to read() past the EOF, then emit end on the next tick.
5480 if (nOrig !== n && state.ended && state.length ===
0)
5483 if (!util.isNull(ret))
5484 this.emit('data', ret);
5489 function chunkInvalid(state, chunk) {
5491 if (!util.isBuffer(chunk) &&
5492 !util.isString(chunk) &&
5493 !util.isNullOrUndefined(chunk) &&
5494 !state.objectMode) {
5495 er = new TypeError('Invalid non-string/buffer chunk');
5501 function onEofChunk(stream, state) {
5502 if (state.decoder && !state.ended) {
5503 var chunk = state.decoder.end();
5504 if (chunk && chunk.length) {
5505 state.buffer.push(chunk);
5506 state.length += state.objectMode ?
1 : chunk.length;
5511 // emit 'readable' now to make sure it gets picked up.
5512 emitReadable(stream);
5515 // Don't emit readable right away in sync mode, because this can trigger
5516 // another read() call =
> stack overflow. This way, it might trigger
5517 // a nextTick recursion warning, but that's not so bad.
5518 function emitReadable(stream) {
5519 var state = stream._readableState;
5520 state.needReadable = false;
5521 if (!state.emittedReadable) {
5522 debug('emitReadable', state.flowing);
5523 state.emittedReadable = true;
5525 process.nextTick(function() {
5526 emitReadable_(stream);
5529 emitReadable_(stream);
5533 function emitReadable_(stream) {
5534 debug('emit readable');
5535 stream.emit('readable');
5540 // at this point, the user has presumably seen the 'readable' event,
5541 // and called read() to consume some data. that may have triggered
5542 // in turn another _read(n) call, in which case reading = true if
5543 // it's in progress.
5544 // However, if we're not ended, or reading, and the length < hwm,
5545 // then go ahead and try to read some more preemptively.
5546 function maybeReadMore(stream, state) {
5547 if (!state.readingMore) {
5548 state.readingMore = true;
5549 process.nextTick(function() {
5550 maybeReadMore_(stream, state);
5555 function maybeReadMore_(stream, state) {
5556 var len = state.length;
5557 while (!state.reading && !state.flowing && !state.ended &&
5558 state.length < state.highWaterMark) {
5559 debug('maybeReadMore read
0');
5561 if (len === state.length)
5562 // didn't get any data, stop spinning.
5567 state.readingMore = false;
5570 // abstract method. to be overridden in specific implementation classes.
5571 // call cb(er, data) where data is <= n in length.
5572 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5573 // arbitrary, and perhaps not very meaningful.
5574 Readable.prototype._read = function(n) {
5575 this.emit('error', new Error('not implemented'));
5578 Readable.prototype.pipe = function(dest, pipeOpts) {
5580 var state = this._readableState;
5582 switch (state.pipesCount) {
5587 state.pipes = [state.pipes, dest];
5590 state.pipes.push(dest);
5593 state.pipesCount +=
1;
5594 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5596 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5597 dest !== process.stdout &&
5598 dest !== process.stderr;
5600 var endFn = doEnd ? onend : cleanup;
5601 if (state.endEmitted)
5602 process.nextTick(endFn);
5604 src.once('end', endFn);
5606 dest.on('unpipe', onunpipe);
5607 function onunpipe(readable) {
5609 if (readable === src) {
5619 // when the dest drains, it reduces the awaitDrain counter
5620 // on the source. This would be more elegant with a .once()
5621 // handler in flow(), but adding and removing repeatedly is
5623 var ondrain = pipeOnDrain(src);
5624 dest.on('drain', ondrain);
5626 function cleanup() {
5628 // cleanup event handlers once the pipe is broken
5629 dest.removeListener('close', onclose);
5630 dest.removeListener('finish', onfinish);
5631 dest.removeListener('drain', ondrain);
5632 dest.removeListener('error', onerror);
5633 dest.removeListener('unpipe', onunpipe);
5634 src.removeListener('end', onend);
5635 src.removeListener('end', cleanup);
5636 src.removeListener('data', ondata);
5638 // if the reader is waiting for a drain event from this
5639 // specific writer, then it would cause it to never start
5641 // So, if this is awaiting a drain, then we just call it now.
5642 // If we don't know, then assume that we are waiting for one.
5643 if (state.awaitDrain &&
5644 (!dest._writableState || dest._writableState.needDrain))
5648 src.on('data', ondata);
5649 function ondata(chunk) {
5651 var ret = dest.write(chunk);
5652 if (false === ret) {
5653 debug('false write response, pause',
5654 src._readableState.awaitDrain);
5655 src._readableState.awaitDrain++;
5660 // if the dest has an error, then stop piping into it.
5661 // however, don't suppress the throwing behavior for this.
5662 function onerror(er) {
5663 debug('onerror', er);
5665 dest.removeListener('error', onerror);
5666 if (EE.listenerCount(dest, 'error') ===
0)
5667 dest.emit('error', er);
5669 // This is a brutally ugly hack to make sure that our error handler
5670 // is attached before any userland ones. NEVER DO THIS.
5671 if (!dest._events || !dest._events.error)
5672 dest.on('error', onerror);
5673 else if (isArray(dest._events.error))
5674 dest._events.error.unshift(onerror);
5676 dest._events.error = [onerror, dest._events.error];
5680 // Both close and finish should trigger unpipe, but only once.
5681 function onclose() {
5682 dest.removeListener('finish', onfinish);
5685 dest.once('close', onclose);
5686 function onfinish() {
5688 dest.removeListener('close', onclose);
5691 dest.once('finish', onfinish);
5698 // tell the dest that it's being piped to
5699 dest.emit('pipe', src);
5701 // start the flow if it hasn't been started already.
5702 if (!state.flowing) {
5703 debug('pipe resume');
5710 function pipeOnDrain(src) {
5712 var state = src._readableState;
5713 debug('pipeOnDrain', state.awaitDrain);
5714 if (state.awaitDrain)
5716 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5717 state.flowing = true;
5724 Readable.prototype.unpipe = function(dest) {
5725 var state = this._readableState;
5727 // if we're not piping anywhere, then do nothing.
5728 if (state.pipesCount ===
0)
5731 // just one destination. most common case.
5732 if (state.pipesCount ===
1) {
5733 // passed in one, but it's not the right one.
5734 if (dest && dest !== state.pipes)
5742 state.pipesCount =
0;
5743 state.flowing = false;
5745 dest.emit('unpipe', this);
5749 // slow case. multiple pipe destinations.
5753 var dests = state.pipes;
5754 var len = state.pipesCount;
5756 state.pipesCount =
0;
5757 state.flowing = false;
5759 for (var i =
0; i < len; i++)
5760 dests[i].emit('unpipe', this);
5764 // try to find the right one.
5765 var i = indexOf(state.pipes, dest);
5769 state.pipes.splice(i,
1);
5770 state.pipesCount -=
1;
5771 if (state.pipesCount ===
1)
5772 state.pipes = state.pipes[
0];
5774 dest.emit('unpipe', this);
5779 // set up data events if they are asked for
5780 // Ensure readable listeners eventually get something
5781 Readable.prototype.on = function(ev, fn) {
5782 var res = Stream.prototype.on.call(this, ev, fn);
5784 // If listening to data, and it has not explicitly been paused,
5785 // then call resume to start the flow of data on the next tick.
5786 if (ev === 'data' && false !== this._readableState.flowing) {
5790 if (ev === 'readable' && this.readable) {
5791 var state = this._readableState;
5792 if (!state.readableListening) {
5793 state.readableListening = true;
5794 state.emittedReadable = false;
5795 state.needReadable = true;
5796 if (!state.reading) {
5798 process.nextTick(function() {
5799 debug('readable nexttick read
0');
5802 } else if (state.length) {
5803 emitReadable(this, state);
5810 Readable.prototype.addListener = Readable.prototype.on;
5812 // pause() and resume() are remnants of the legacy readable stream API
5813 // If the user uses them, then switch into old mode.
5814 Readable.prototype.resume = function() {
5815 var state = this._readableState;
5816 if (!state.flowing) {
5818 state.flowing = true;
5819 if (!state.reading) {
5820 debug('resume read
0');
5823 resume(this, state);
5828 function resume(stream, state) {
5829 if (!state.resumeScheduled) {
5830 state.resumeScheduled = true;
5831 process.nextTick(function() {
5832 resume_(stream, state);
5837 function resume_(stream, state) {
5838 state.resumeScheduled = false;
5839 stream.emit('resume');
5841 if (state.flowing && !state.reading)
5845 Readable.prototype.pause = function() {
5846 debug('call pause flowing=%j', this._readableState.flowing);
5847 if (false !== this._readableState.flowing) {
5849 this._readableState.flowing = false;
5855 function flow(stream) {
5856 var state = stream._readableState;
5857 debug('flow', state.flowing);
5858 if (state.flowing) {
5860 var chunk = stream.read();
5861 } while (null !== chunk && state.flowing);
5865 // wrap an old-style stream as the async data source.
5866 // This is *not* part of the readable stream interface.
5867 // It is an ugly unfortunate mess of history.
5868 Readable.prototype.wrap = function(stream) {
5869 var state = this._readableState;
5873 stream.on('end', function() {
5874 debug('wrapped end');
5875 if (state.decoder && !state.ended) {
5876 var chunk = state.decoder.end();
5877 if (chunk && chunk.length)
5884 stream.on('data', function(chunk) {
5885 debug('wrapped data');
5887 chunk = state.decoder.write(chunk);
5888 if (!chunk || !state.objectMode && !chunk.length)
5891 var ret = self.push(chunk);
5898 // proxy all the other methods.
5899 // important when wrapping filters and duplexes.
5900 for (var i in stream) {
5901 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5902 this[i] = function(method) { return function() {
5903 return stream[method].apply(stream, arguments);
5908 // proxy certain important events.
5909 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5910 forEach(events, function(ev) {
5911 stream.on(ev, self.emit.bind(self, ev));
5914 // when we try to consume some more bytes, simply unpause the
5915 // underlying stream.
5916 self._read = function(n) {
5917 debug('wrapped _read', n);
5929 // exposed for testing purposes only.
5930 Readable._fromList = fromList;
5932 // Pluck off n bytes from an array of buffers.
5933 // Length is the combined lengths of all the buffers in the list.
5934 function fromList(n, state) {
5935 var list = state.buffer;
5936 var length = state.length;
5937 var stringMode = !!state.decoder;
5938 var objectMode = !!state.objectMode;
5941 // nothing in the list, definitely empty.
5942 if (list.length ===
0)
5947 else if (objectMode)
5949 else if (!n || n
>= length) {
5950 // read it all, truncate the array.
5952 ret = list.join('');
5954 ret = Buffer.concat(list, length);
5957 // read just some of it.
5958 if (n < list[
0].length) {
5959 // just take a part of the first list item.
5960 // slice is the same for buffers and strings.
5962 ret = buf.slice(
0, n);
5963 list[
0] = buf.slice(n);
5964 } else if (n === list[
0].length) {
5965 // first list is a perfect match
5969 // we have enough to cover it, but it spans past the first buffer.
5973 ret = new Buffer(n);
5976 for (var i =
0, l = list.length; i < l && c < n; i++) {
5978 var cpy = Math.min(n - c, buf.length);
5981 ret += buf.slice(
0, cpy);
5983 buf.copy(ret, c,
0, cpy);
5985 if (cpy < buf.length)
5986 list[
0] = buf.slice(cpy);
5998 function endReadable(stream) {
5999 var state = stream._readableState;
6001 // If we get here before consuming all the bytes, then that is a
6002 // bug in node. Should never happen.
6003 if (state.length
> 0)
6004 throw new Error('endReadable called on non-empty stream');
6006 if (!state.endEmitted) {
6008 process.nextTick(function() {
6009 // Check that we didn't get one last unshift.
6010 if (!state.endEmitted && state.length ===
0) {
6011 state.endEmitted = true;
6012 stream.readable = false;
6019 function forEach (xs, f) {
6020 for (var i =
0, l = xs.length; i < l; i++) {
6025 function indexOf (xs, x) {
6026 for (var i =
0, l = xs.length; i < l; i++) {
6027 if (xs[i] === x) return i;
6032 }).call(this,require('_process'))
6033 },{
"./_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){
6034 // Copyright Joyent, Inc. and other Node contributors.
6036 // Permission is hereby granted, free of charge, to any person obtaining a
6037 // copy of this software and associated documentation files (the
6038 //
"Software"), to deal in the Software without restriction, including
6039 // without limitation the rights to use, copy, modify, merge, publish,
6040 // distribute, sublicense, and/or sell copies of the Software, and to permit
6041 // persons to whom the Software is furnished to do so, subject to the
6042 // following conditions:
6044 // The above copyright notice and this permission notice shall be included
6045 // in all copies or substantial portions of the Software.
6047 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6048 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6049 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6050 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6051 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6052 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6053 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6056 // a transform stream is a readable/writable stream where you do
6057 // something with the data. Sometimes it's called a
"filter",
6058 // but that's not a great name for it, since that implies a thing where
6059 // some bits pass through, and others are simply ignored. (That would
6060 // be a valid example of a transform, of course.)
6062 // While the output is causally related to the input, it's not a
6063 // necessarily symmetric or synchronous transformation. For example,
6064 // a zlib stream might take multiple plain-text writes(), and then
6065 // emit a single compressed chunk some time in the future.
6067 // Here's how this works:
6069 // The Transform stream has all the aspects of the readable and writable
6070 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6071 // internally, and returns false if there's a lot of pending writes
6072 // buffered up. When you call read(), that calls _read(n) until
6073 // there's enough pending readable data buffered up.
6075 // In a transform stream, the written data is placed in a buffer. When
6076 // _read(n) is called, it transforms the queued up data, calling the
6077 // buffered _write cb's as it consumes chunks. If consuming a single
6078 // written chunk would result in multiple output chunks, then the first
6079 // outputted bit calls the readcb, and subsequent chunks just go into
6080 // the read buffer, and will cause it to emit 'readable' if necessary.
6082 // This way, back-pressure is actually determined by the reading side,
6083 // since _read has to be called to start processing a new chunk. However,
6084 // a pathological inflate type of transform can cause excessive buffering
6085 // here. For example, imagine a stream where every byte of input is
6086 // interpreted as an integer from
0-
255, and then results in that many
6087 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6088 //
1kb of data being output. In this case, you could write a very small
6089 // amount of input, and end up with a very large amount of output. In
6090 // such a pathological inflating mechanism, there'd be no way to tell
6091 // the system to stop doing the transform. A single
4MB write could
6092 // cause the system to run out of memory.
6094 // However, even in such a pathological case, only a single written chunk
6095 // would be consumed, and then the rest would wait (un-transformed) until
6096 // the results of the previous transformed chunk were consumed.
6098 module.exports = Transform;
6100 var Duplex = require('./_stream_duplex');
6103 var util = require('core-util-is');
6104 util.inherits = require('inherits');
6107 util.inherits(Transform, Duplex);
6110 function TransformState(options, stream) {
6111 this.afterTransform = function(er, data) {
6112 return afterTransform(stream, er, data);
6115 this.needTransform = false;
6116 this.transforming = false;
6117 this.writecb = null;
6118 this.writechunk = null;
6121 function afterTransform(stream, er, data) {
6122 var ts = stream._transformState;
6123 ts.transforming = false;
6125 var cb = ts.writecb;
6128 return stream.emit('error', new Error('no writecb in Transform class'));
6130 ts.writechunk = null;
6133 if (!util.isNullOrUndefined(data))
6139 var rs = stream._readableState;
6141 if (rs.needReadable || rs.length < rs.highWaterMark) {
6142 stream._read(rs.highWaterMark);
6147 function Transform(options) {
6148 if (!(this instanceof Transform))
6149 return new Transform(options);
6151 Duplex.call(this, options);
6153 this._transformState = new TransformState(options, this);
6155 // when the writable side finishes, then flush out anything remaining.
6158 // start out asking for a readable event once data is transformed.
6159 this._readableState.needReadable = true;
6161 // we have implemented the _read method, and done the other things
6162 // that Readable wants before the first _read call, so unset the
6164 this._readableState.sync = false;
6166 this.once('prefinish', function() {
6167 if (util.isFunction(this._flush))
6168 this._flush(function(er) {
6176 Transform.prototype.push = function(chunk, encoding) {
6177 this._transformState.needTransform = false;
6178 return Duplex.prototype.push.call(this, chunk, encoding);
6181 // This is the part where you do stuff!
6182 // override this function in implementation classes.
6183 // 'chunk' is an input chunk.
6185 // Call `push(newChunk)` to pass along transformed output
6186 // to the readable side. You may call 'push' zero or more times.
6188 // Call `cb(err)` when you are done with this chunk. If you pass
6189 // an error, then that'll put the hurt on the whole operation. If you
6190 // never call cb(), then you'll never get another chunk.
6191 Transform.prototype._transform = function(chunk, encoding, cb) {
6192 throw new Error('not implemented');
6195 Transform.prototype._write = function(chunk, encoding, cb) {
6196 var ts = this._transformState;
6198 ts.writechunk = chunk;
6199 ts.writeencoding = encoding;
6200 if (!ts.transforming) {
6201 var rs = this._readableState;
6202 if (ts.needTransform ||
6204 rs.length < rs.highWaterMark)
6205 this._read(rs.highWaterMark);
6209 // Doesn't matter what the args are here.
6210 // _transform does all the work.
6211 // That we got here means that the readable side wants more data.
6212 Transform.prototype._read = function(n) {
6213 var ts = this._transformState;
6215 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6216 ts.transforming = true;
6217 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6219 // mark that we need a transform, so that any data that comes in
6220 // will get processed, now that we've asked for it.
6221 ts.needTransform = true;
6226 function done(stream, er) {
6228 return stream.emit('error', er);
6230 // if there's nothing in the write buffer, then that means
6231 // that nothing more will ever be provided
6232 var ws = stream._writableState;
6233 var ts = stream._transformState;
6236 throw new Error('calling transform done when ws.length !=
0');
6238 if (ts.transforming)
6239 throw new Error('calling transform done when still transforming');
6241 return stream.push(null);
6244 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6245 (function (process){
6246 // Copyright Joyent, Inc. and other Node contributors.
6248 // Permission is hereby granted, free of charge, to any person obtaining a
6249 // copy of this software and associated documentation files (the
6250 // "Software"), to deal in the Software without restriction, including
6251 // without limitation the rights to use, copy, modify, merge, publish,
6252 // distribute, sublicense, and/or sell copies of the Software, and to permit
6253 // persons to whom the Software is furnished to do so, subject to the
6254 // following conditions:
6256 // The above copyright notice and this permission notice shall be included
6257 // in all copies or substantial portions of the Software.
6259 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6260 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6261 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6262 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6263 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6264 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6265 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6267 // A bit simpler than readable streams.
6268 // Implement an async ._write(chunk, cb), and it'll handle all
6269 // the drain event emission and buffering.
6271 module.exports = Writable;
6274 var Buffer = require('buffer').Buffer;
6277 Writable.WritableState = WritableState;
6281 var util = require('core-util-is');
6282 util.inherits = require('inherits');
6285 var Stream = require('stream');
6287 util.inherits(Writable, Stream);
6289 function WriteReq(chunk, encoding, cb) {
6291 this.encoding = encoding;
6295 function WritableState(options, stream) {
6296 var Duplex = require('./_stream_duplex');
6298 options = options || {};
6300 // the point at which write() starts returning false
6301 // Note:
0 is a valid value, means that we always return false if
6302 // the entire buffer is not flushed immediately on write()
6303 var hwm = options.highWaterMark;
6304 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6305 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6307 // object stream flag to indicate whether or not this stream
6308 // contains buffers or objects.
6309 this.objectMode = !!options.objectMode;
6311 if (stream instanceof Duplex)
6312 this.objectMode = this.objectMode || !!options.writableObjectMode;
6315 this.highWaterMark = ~~this.highWaterMark;
6317 this.needDrain = false;
6318 // at the start of calling end()
6319 this.ending = false;
6320 // when end() has been called, and returned
6322 // when 'finish' is emitted
6323 this.finished = false;
6325 // should we decode strings into buffers before passing to _write?
6326 // this is here so that some node-core streams can optimize string
6327 // handling at a lower level.
6328 var noDecode = options.decodeStrings === false;
6329 this.decodeStrings = !noDecode;
6331 // Crypto is kind of old and crusty. Historically, its default string
6332 // encoding is 'binary' so we have to make this configurable.
6333 // Everything else in the universe uses 'utf8', though.
6334 this.defaultEncoding = options.defaultEncoding || 'utf8';
6336 // not an actual buffer we keep track of, but a measurement
6337 // of how much we're waiting to get pushed to some underlying
6341 // a flag to see when we're in the middle of a write.
6342 this.writing = false;
6344 // when true all writes will be buffered until .uncork() call
6347 // a flag to be able to tell if the onwrite cb is called immediately,
6348 // or on a later tick. We set this to true at first, because any
6349 // actions that shouldn't happen until "later" should generally also
6350 // not happen before the first write call.
6353 // a flag to know if we're processing previously buffered items, which
6354 // may call the _write() callback in the same tick, so that we don't
6355 // end up in an overlapped onwrite situation.
6356 this.bufferProcessing = false;
6358 // the callback that's passed to _write(chunk,cb)
6359 this.onwrite = function(er) {
6360 onwrite(stream, er);
6363 // the callback that the user supplies to write(chunk,encoding,cb)
6364 this.writecb = null;
6366 // the amount that is being written when _write is called.
6371 // number of pending user-supplied write callbacks
6372 // this must be
0 before 'finish' can be emitted
6375 // emit prefinish if the only thing we're waiting for is _write cbs
6376 // This is relevant for synchronous Transform streams
6377 this.prefinished = false;
6379 // True if the error was already emitted and should not be thrown again
6380 this.errorEmitted = false;
6383 function Writable(options) {
6384 var Duplex = require('./_stream_duplex');
6386 // Writable ctor is applied to Duplexes, though they're not
6387 // instanceof Writable, they're instanceof Readable.
6388 if (!(this instanceof Writable) && !(this instanceof Duplex))
6389 return new Writable(options);
6391 this._writableState = new WritableState(options, this);
6394 this.writable = true;
6399 // Otherwise people can pipe Writable streams, which is just wrong.
6400 Writable.prototype.pipe = function() {
6401 this.emit('error', new Error('Cannot pipe. Not readable.'));
6405 function writeAfterEnd(stream, state, cb) {
6406 var er = new Error('write after end');
6407 // TODO: defer error events consistently everywhere, not just the cb
6408 stream.emit('error', er);
6409 process.nextTick(function() {
6414 // If we get something that is not a buffer, string, null, or undefined,
6415 // and we're not in objectMode, then that's an error.
6416 // Otherwise stream chunks are all considered to be of length=
1, and the
6417 // watermarks determine how many objects to keep in the buffer, rather than
6418 // how many bytes or characters.
6419 function validChunk(stream, state, chunk, cb) {
6421 if (!util.isBuffer(chunk) &&
6422 !util.isString(chunk) &&
6423 !util.isNullOrUndefined(chunk) &&
6424 !state.objectMode) {
6425 var er = new TypeError('Invalid non-string/buffer chunk');
6426 stream.emit('error', er);
6427 process.nextTick(function() {
6435 Writable.prototype.write = function(chunk, encoding, cb) {
6436 var state = this._writableState;
6439 if (util.isFunction(encoding)) {
6444 if (util.isBuffer(chunk))
6445 encoding = 'buffer';
6447 encoding = state.defaultEncoding;
6449 if (!util.isFunction(cb))
6453 writeAfterEnd(this, state, cb);
6454 else if (validChunk(this, state, chunk, cb)) {
6456 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6462 Writable.prototype.cork = function() {
6463 var state = this._writableState;
6468 Writable.prototype.uncork = function() {
6469 var state = this._writableState;
6474 if (!state.writing &&
6477 !state.bufferProcessing &&
6478 state.buffer.length)
6479 clearBuffer(this, state);
6483 function decodeChunk(state, chunk, encoding) {
6484 if (!state.objectMode &&
6485 state.decodeStrings !== false &&
6486 util.isString(chunk)) {
6487 chunk = new Buffer(chunk, encoding);
6492 // if we're already writing something, then just put this
6493 // in the queue, and wait our turn. Otherwise, call _write
6494 // If we return false, then we need a drain event, so set that flag.
6495 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6496 chunk = decodeChunk(state, chunk, encoding);
6497 if (util.isBuffer(chunk))
6498 encoding = 'buffer';
6499 var len = state.objectMode ?
1 : chunk.length;
6501 state.length += len;
6503 var ret = state.length < state.highWaterMark;
6504 // we must ensure that previous needDrain will not be reset to false.
6506 state.needDrain = true;
6508 if (state.writing || state.corked)
6509 state.buffer.push(new WriteReq(chunk, encoding, cb));
6511 doWrite(stream, state, false, len, chunk, encoding, cb);
6516 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6517 state.writelen = len;
6519 state.writing = true;
6522 stream._writev(chunk, state.onwrite);
6524 stream._write(chunk, encoding, state.onwrite);
6528 function onwriteError(stream, state, sync, er, cb) {
6530 process.nextTick(function() {
6539 stream._writableState.errorEmitted = true;
6540 stream.emit('error', er);
6543 function onwriteStateUpdate(state) {
6544 state.writing = false;
6545 state.writecb = null;
6546 state.length -= state.writelen;
6550 function onwrite(stream, er) {
6551 var state = stream._writableState;
6552 var sync = state.sync;
6553 var cb = state.writecb;
6555 onwriteStateUpdate(state);
6558 onwriteError(stream, state, sync, er, cb);
6560 // Check if we're actually ready to finish, but don't emit yet
6561 var finished = needFinish(stream, state);
6565 !state.bufferProcessing &&
6566 state.buffer.length) {
6567 clearBuffer(stream, state);
6571 process.nextTick(function() {
6572 afterWrite(stream, state, finished, cb);
6575 afterWrite(stream, state, finished, cb);
6580 function afterWrite(stream, state, finished, cb) {
6582 onwriteDrain(stream, state);
6585 finishMaybe(stream, state);
6588 // Must force callback to be called on nextTick, so that we don't
6589 // emit 'drain' before the write() consumer gets the 'false' return
6590 // value, and has a chance to attach a 'drain' listener.
6591 function onwriteDrain(stream, state) {
6592 if (state.length ===
0 && state.needDrain) {
6593 state.needDrain = false;
6594 stream.emit('drain');
6599 // if there's something in the buffer waiting, then process it
6600 function clearBuffer(stream, state) {
6601 state.bufferProcessing = true;
6603 if (stream._writev && state.buffer.length
> 1) {
6604 // Fast case, write everything using _writev()
6606 for (var c =
0; c < state.buffer.length; c++)
6607 cbs.push(state.buffer[c].callback);
6609 // count the one we are adding, as well.
6610 // TODO(isaacs) clean this up
6612 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6613 for (var i =
0; i < cbs.length; i++) {
6622 // Slow case, write chunks one-by-one
6623 for (var c =
0; c < state.buffer.length; c++) {
6624 var entry = state.buffer[c];
6625 var chunk = entry.chunk;
6626 var encoding = entry.encoding;
6627 var cb = entry.callback;
6628 var len = state.objectMode ?
1 : chunk.length;
6630 doWrite(stream, state, false, len, chunk, encoding, cb);
6632 // if we didn't call the onwrite immediately, then
6633 // it means that we need to wait until it does.
6634 // also, that means that the chunk and cb are currently
6635 // being processed, so move the buffer counter past them.
6636 if (state.writing) {
6642 if (c < state.buffer.length)
6643 state.buffer = state.buffer.slice(c);
6645 state.buffer.length =
0;
6648 state.bufferProcessing = false;
6651 Writable.prototype._write = function(chunk, encoding, cb) {
6652 cb(new Error('not implemented'));
6656 Writable.prototype._writev = null;
6658 Writable.prototype.end = function(chunk, encoding, cb) {
6659 var state = this._writableState;
6661 if (util.isFunction(chunk)) {
6665 } else if (util.isFunction(encoding)) {
6670 if (!util.isNullOrUndefined(chunk))
6671 this.write(chunk, encoding);
6673 // .end() fully uncorks
6679 // ignore unnecessary end() calls.
6680 if (!state.ending && !state.finished)
6681 endWritable(this, state, cb);
6685 function needFinish(stream, state) {
6686 return (state.ending &&
6687 state.length ===
0 &&
6692 function prefinish(stream, state) {
6693 if (!state.prefinished) {
6694 state.prefinished = true;
6695 stream.emit('prefinish');
6699 function finishMaybe(stream, state) {
6700 var need = needFinish(stream, state);
6702 if (state.pendingcb ===
0) {
6703 prefinish(stream, state);
6704 state.finished = true;
6705 stream.emit('finish');
6707 prefinish(stream, state);
6712 function endWritable(stream, state, cb) {
6713 state.ending = true;
6714 finishMaybe(stream, state);
6717 process.nextTick(cb);
6719 stream.once('finish', cb);
6724 }).call(this,require('_process'))
6725 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6727 // Copyright Joyent, Inc. and other Node contributors.
6729 // Permission is hereby granted, free of charge, to any person obtaining a
6730 // copy of this software and associated documentation files (the
6731 //
"Software"), to deal in the Software without restriction, including
6732 // without limitation the rights to use, copy, modify, merge, publish,
6733 // distribute, sublicense, and/or sell copies of the Software, and to permit
6734 // persons to whom the Software is furnished to do so, subject to the
6735 // following conditions:
6737 // The above copyright notice and this permission notice shall be included
6738 // in all copies or substantial portions of the Software.
6740 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6741 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6742 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6743 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6744 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6745 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6746 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6748 // NOTE: These type checking functions intentionally don't use `instanceof`
6749 // because it is fragile and can be easily faked with `Object.create()`.
6750 function isArray(ar) {
6751 return Array.isArray(ar);
6753 exports.isArray = isArray;
6755 function isBoolean(arg) {
6756 return typeof arg === 'boolean';
6758 exports.isBoolean = isBoolean;
6760 function isNull(arg) {
6761 return arg === null;
6763 exports.isNull = isNull;
6765 function isNullOrUndefined(arg) {
6768 exports.isNullOrUndefined = isNullOrUndefined;
6770 function isNumber(arg) {
6771 return typeof arg === 'number';
6773 exports.isNumber = isNumber;
6775 function isString(arg) {
6776 return typeof arg === 'string';
6778 exports.isString = isString;
6780 function isSymbol(arg) {
6781 return typeof arg === 'symbol';
6783 exports.isSymbol = isSymbol;
6785 function isUndefined(arg) {
6786 return arg === void
0;
6788 exports.isUndefined = isUndefined;
6790 function isRegExp(re) {
6791 return isObject(re) && objectToString(re) === '[object RegExp]';
6793 exports.isRegExp = isRegExp;
6795 function isObject(arg) {
6796 return typeof arg === 'object' && arg !== null;
6798 exports.isObject = isObject;
6800 function isDate(d) {
6801 return isObject(d) && objectToString(d) === '[object Date]';
6803 exports.isDate = isDate;
6805 function isError(e) {
6806 return isObject(e) &&
6807 (objectToString(e) === '[object Error]' || e instanceof Error);
6809 exports.isError = isError;
6811 function isFunction(arg) {
6812 return typeof arg === 'function';
6814 exports.isFunction = isFunction;
6816 function isPrimitive(arg) {
6817 return arg === null ||
6818 typeof arg === 'boolean' ||
6819 typeof arg === 'number' ||
6820 typeof arg === 'string' ||
6821 typeof arg === 'symbol' || // ES6 symbol
6822 typeof arg === 'undefined';
6824 exports.isPrimitive = isPrimitive;
6826 function isBuffer(arg) {
6827 return Buffer.isBuffer(arg);
6829 exports.isBuffer = isBuffer;
6831 function objectToString(o) {
6832 return Object.prototype.toString.call(o);
6834 }).call(this,require(
"buffer").Buffer)
6835 },{
"buffer":
7}],
22:[function(require,module,exports){
6836 module.exports = require(
"./lib/_stream_passthrough.js")
6838 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6839 exports = module.exports = require('./lib/_stream_readable.js');
6840 exports.Stream = require('stream');
6841 exports.Readable = exports;
6842 exports.Writable = require('./lib/_stream_writable.js');
6843 exports.Duplex = require('./lib/_stream_duplex.js');
6844 exports.Transform = require('./lib/_stream_transform.js');
6845 exports.PassThrough = require('./lib/_stream_passthrough.js');
6847 },{
"./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){
6848 module.exports = require(
"./lib/_stream_transform.js")
6850 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6851 module.exports = require(
"./lib/_stream_writable.js")
6853 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6854 // Copyright Joyent, Inc. and other Node contributors.
6856 // Permission is hereby granted, free of charge, to any person obtaining a
6857 // copy of this software and associated documentation files (the
6858 //
"Software"), to deal in the Software without restriction, including
6859 // without limitation the rights to use, copy, modify, merge, publish,
6860 // distribute, sublicense, and/or sell copies of the Software, and to permit
6861 // persons to whom the Software is furnished to do so, subject to the
6862 // following conditions:
6864 // The above copyright notice and this permission notice shall be included
6865 // in all copies or substantial portions of the Software.
6867 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6868 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6869 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6870 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6871 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6872 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6873 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6875 module.exports = Stream;
6877 var EE = require('events').EventEmitter;
6878 var inherits = require('inherits');
6880 inherits(Stream, EE);
6881 Stream.Readable = require('readable-stream/readable.js');
6882 Stream.Writable = require('readable-stream/writable.js');
6883 Stream.Duplex = require('readable-stream/duplex.js');
6884 Stream.Transform = require('readable-stream/transform.js');
6885 Stream.PassThrough = require('readable-stream/passthrough.js');
6887 // Backwards-compat with node
0.4.x
6888 Stream.Stream = Stream;
6892 // old-style streams. Note that the pipe method (the only relevant
6893 // part of this class) is overridden in the Readable class.
6899 Stream.prototype.pipe = function(dest, options) {
6902 function ondata(chunk) {
6903 if (dest.writable) {
6904 if (false === dest.write(chunk) && source.pause) {
6910 source.on('data', ondata);
6912 function ondrain() {
6913 if (source.readable && source.resume) {
6918 dest.on('drain', ondrain);
6920 // If the 'end' option is not supplied, dest.end() will be called when
6921 // source gets the 'end' or 'close' events. Only dest.end() once.
6922 if (!dest._isStdio && (!options || options.end !== false)) {
6923 source.on('end', onend);
6924 source.on('close', onclose);
6927 var didOnEnd = false;
6929 if (didOnEnd) return;
6936 function onclose() {
6937 if (didOnEnd) return;
6940 if (typeof dest.destroy === 'function') dest.destroy();
6943 // don't leave dangling pipes when there are errors.
6944 function onerror(er) {
6946 if (EE.listenerCount(this, 'error') ===
0) {
6947 throw er; // Unhandled stream error in pipe.
6951 source.on('error', onerror);
6952 dest.on('error', onerror);
6954 // remove all the event listeners that were added.
6955 function cleanup() {
6956 source.removeListener('data', ondata);
6957 dest.removeListener('drain', ondrain);
6959 source.removeListener('end', onend);
6960 source.removeListener('close', onclose);
6962 source.removeListener('error', onerror);
6963 dest.removeListener('error', onerror);
6965 source.removeListener('end', cleanup);
6966 source.removeListener('close', cleanup);
6968 dest.removeListener('close', cleanup);
6971 source.on('end', cleanup);
6972 source.on('close', cleanup);
6974 dest.on('close', cleanup);
6976 dest.emit('pipe', source);
6978 // Allow for unix-like usage: A.pipe(B).pipe(C)
6982 },{
"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){
6983 // Copyright Joyent, Inc. and other Node contributors.
6985 // Permission is hereby granted, free of charge, to any person obtaining a
6986 // copy of this software and associated documentation files (the
6987 //
"Software"), to deal in the Software without restriction, including
6988 // without limitation the rights to use, copy, modify, merge, publish,
6989 // distribute, sublicense, and/or sell copies of the Software, and to permit
6990 // persons to whom the Software is furnished to do so, subject to the
6991 // following conditions:
6993 // The above copyright notice and this permission notice shall be included
6994 // in all copies or substantial portions of the Software.
6996 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6997 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6998 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6999 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7000 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7001 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7002 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7004 var Buffer = require('buffer').Buffer;
7006 var isBufferEncoding = Buffer.isEncoding
7007 || function(encoding) {
7008 switch (encoding && encoding.toLowerCase()) {
7009 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;
7010 default: return false;
7015 function assertEncoding(encoding) {
7016 if (encoding && !isBufferEncoding(encoding)) {
7017 throw new Error('Unknown encoding: ' + encoding);
7021 // StringDecoder provides an interface for efficiently splitting a series of
7022 // buffers into a series of JS strings without breaking apart multi-byte
7023 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
7025 // @TODO Handling all encodings inside a single object makes it very difficult
7026 // to reason about this code, so it should be split up in the future.
7027 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
7028 // points as used by CESU-
8.
7029 var StringDecoder = exports.StringDecoder = function(encoding) {
7030 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7031 assertEncoding(encoding);
7032 switch (this.encoding) {
7034 // CESU-
8 represents each of Surrogate Pair by
3-bytes
7035 this.surrogateSize =
3;
7039 // UTF-
16 represents each of Surrogate Pair by
2-bytes
7040 this.surrogateSize =
2;
7041 this.detectIncompleteChar = utf16DetectIncompleteChar;
7044 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
7045 this.surrogateSize =
3;
7046 this.detectIncompleteChar = base64DetectIncompleteChar;
7049 this.write = passThroughWrite;
7053 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7054 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7055 this.charBuffer = new Buffer(
6);
7056 // Number of bytes received for the current incomplete multi-byte character.
7057 this.charReceived =
0;
7058 // Number of bytes expected for the current incomplete multi-byte character.
7059 this.charLength =
0;
7063 // write decodes the given buffer and returns it as JS string that is
7064 // guaranteed to not contain any partial multi-byte characters. Any partial
7065 // character found at the end of the buffer is buffered up, and will be
7066 // returned when calling write again with the remaining bytes.
7068 // Note: Converting a Buffer containing an orphan surrogate to a String
7069 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7070 // Buffer#write) will replace incomplete surrogates with the unicode
7071 // replacement character. See https://codereview.chromium.org/
121173009/ .
7072 StringDecoder.prototype.write = function(buffer) {
7074 // if our last write ended with an incomplete multibyte character
7075 while (this.charLength) {
7076 // determine how many remaining bytes this buffer has to offer for this char
7077 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7078 this.charLength - this.charReceived :
7081 // add the new bytes to the char buffer
7082 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7083 this.charReceived += available;
7085 if (this.charReceived < this.charLength) {
7086 // still not enough chars in this buffer? wait for more ...
7090 // remove bytes belonging to the current character from the buffer
7091 buffer = buffer.slice(available, buffer.length);
7093 // get the character that was split
7094 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7096 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7097 var charCode = charStr.charCodeAt(charStr.length -
1);
7098 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7099 this.charLength += this.surrogateSize;
7103 this.charReceived = this.charLength =
0;
7105 // if there are no more bytes in this buffer, just emit our char
7106 if (buffer.length ===
0) {
7112 // determine and set charLength / charReceived
7113 this.detectIncompleteChar(buffer);
7115 var end = buffer.length;
7116 if (this.charLength) {
7117 // buffer the incomplete character bytes we got
7118 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7119 end -= this.charReceived;
7122 charStr += buffer.toString(this.encoding,
0, end);
7124 var end = charStr.length -
1;
7125 var charCode = charStr.charCodeAt(end);
7126 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7127 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7128 var size = this.surrogateSize;
7129 this.charLength += size;
7130 this.charReceived += size;
7131 this.charBuffer.copy(this.charBuffer, size,
0, size);
7132 buffer.copy(this.charBuffer,
0,
0, size);
7133 return charStr.substring(
0, end);
7136 // or just emit the charStr
7140 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7141 // the end of the given buffer. If so, it sets this.charLength to the byte
7142 // length that character, and sets this.charReceived to the number of bytes
7143 // that are available for this character.
7144 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7145 // determine how many bytes we have to check at the end of this buffer
7146 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7148 // Figure out if one of the last i bytes of our buffer announces an
7150 for (; i
> 0; i--) {
7151 var c = buffer[buffer.length - i];
7153 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7156 if (i ==
1 && c
>> 5 ==
0x06) {
7157 this.charLength =
2;
7162 if (i <=
2 && c
>> 4 ==
0x0E) {
7163 this.charLength =
3;
7168 if (i <=
3 && c
>> 3 ==
0x1E) {
7169 this.charLength =
4;
7173 this.charReceived = i;
7176 StringDecoder.prototype.end = function(buffer) {
7178 if (buffer && buffer.length)
7179 res = this.write(buffer);
7181 if (this.charReceived) {
7182 var cr = this.charReceived;
7183 var buf = this.charBuffer;
7184 var enc = this.encoding;
7185 res += buf.slice(
0, cr).toString(enc);
7191 function passThroughWrite(buffer) {
7192 return buffer.toString(this.encoding);
7195 function utf16DetectIncompleteChar(buffer) {
7196 this.charReceived = buffer.length %
2;
7197 this.charLength = this.charReceived ?
2 :
0;
7200 function base64DetectIncompleteChar(buffer) {
7201 this.charReceived = buffer.length %
3;
7202 this.charLength = this.charReceived ?
3 :
0;
7205 },{
"buffer":
7}],
28:[function(require,module,exports){
7206 module.exports = function isBuffer(arg) {
7207 return arg && typeof arg === 'object'
7208 && typeof arg.copy === 'function'
7209 && typeof arg.fill === 'function'
7210 && typeof arg.readUInt8 === 'function';
7212 },{}],
29:[function(require,module,exports){
7213 (function (process,global){
7214 // Copyright Joyent, Inc. and other Node contributors.
7216 // Permission is hereby granted, free of charge, to any person obtaining a
7217 // copy of this software and associated documentation files (the
7218 //
"Software"), to deal in the Software without restriction, including
7219 // without limitation the rights to use, copy, modify, merge, publish,
7220 // distribute, sublicense, and/or sell copies of the Software, and to permit
7221 // persons to whom the Software is furnished to do so, subject to the
7222 // following conditions:
7224 // The above copyright notice and this permission notice shall be included
7225 // in all copies or substantial portions of the Software.
7227 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7228 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7229 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7230 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7231 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7232 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7233 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7235 var formatRegExp = /%[sdj%]/g;
7236 exports.format = function(f) {
7239 for (var i =
0; i < arguments.length; i++) {
7240 objects.push(inspect(arguments[i]));
7242 return objects.join(' ');
7246 var args = arguments;
7247 var len = args.length;
7248 var str = String(f).replace(formatRegExp, function(x) {
7249 if (x === '%%') return '%';
7250 if (i
>= len) return x;
7252 case '%s': return String(args[i++]);
7253 case '%d': return Number(args[i++]);
7256 return JSON.stringify(args[i++]);
7258 return '[Circular]';
7264 for (var x = args[i]; i < len; x = args[++i]) {
7265 if (isNull(x) || !isObject(x)) {
7268 str += ' ' + inspect(x);
7275 // Mark that a method should not be used.
7276 // Returns a modified function which warns once by default.
7277 // If --no-deprecation is set, then it is a no-op.
7278 exports.deprecate = function(fn, msg) {
7279 // Allow for deprecating things in the process of starting up.
7280 if (isUndefined(global.process)) {
7282 return exports.deprecate(fn, msg).apply(this, arguments);
7286 if (process.noDeprecation === true) {
7291 function deprecated() {
7293 if (process.throwDeprecation) {
7294 throw new Error(msg);
7295 } else if (process.traceDeprecation) {
7302 return fn.apply(this, arguments);
7311 exports.debuglog = function(set) {
7312 if (isUndefined(debugEnviron))
7313 debugEnviron = process.env.NODE_DEBUG || '';
7314 set = set.toUpperCase();
7316 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7317 var pid = process.pid;
7318 debugs[set] = function() {
7319 var msg = exports.format.apply(exports, arguments);
7320 console.error('%s %d: %s', set, pid, msg);
7323 debugs[set] = function() {};
7331 * Echos the value of a value. Trys to print the value out
7332 * in the best way possible given the different types.
7334 * @param {Object} obj The object to print out.
7335 * @param {Object} opts Optional options object that alters the output.
7337 /* legacy: obj, showHidden, depth, colors*/
7338 function inspect(obj, opts) {
7342 stylize: stylizeNoColor
7345 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7346 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7347 if (isBoolean(opts)) {
7349 ctx.showHidden = opts;
7351 // got an "options" object
7352 exports._extend(ctx, opts);
7354 // set default options
7355 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7356 if (isUndefined(ctx.depth)) ctx.depth =
2;
7357 if (isUndefined(ctx.colors)) ctx.colors = false;
7358 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7359 if (ctx.colors) ctx.stylize = stylizeWithColor;
7360 return formatValue(ctx, obj, ctx.depth);
7362 exports.inspect = inspect;
7365 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7369 'underline' : [
4,
24],
7370 'inverse' : [
7,
27],
7377 'magenta' : [
35,
39],
7382 // Don't use 'blue' not visible on cmd.exe
7386 'boolean': 'yellow',
7387 'undefined': 'grey',
7391 // "name": intentionally not styling
7396 function stylizeWithColor(str, styleType) {
7397 var style = inspect.styles[styleType];
7400 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7401 '\u001b[' + inspect.colors[style][
1] + 'm';
7408 function stylizeNoColor(str, styleType) {
7413 function arrayToHash(array) {
7416 array.forEach(function(val, idx) {
7424 function formatValue(ctx, value, recurseTimes) {
7425 // Provide a hook for user-specified inspect functions.
7426 // Check that value is an object with an inspect function on it
7427 if (ctx.customInspect &&
7429 isFunction(value.inspect) &&
7430 // Filter out the util module, it's inspect function is special
7431 value.inspect !== exports.inspect &&
7432 // Also filter out any prototype objects using the circular check.
7433 !(value.constructor && value.constructor.prototype === value)) {
7434 var ret = value.inspect(recurseTimes, ctx);
7435 if (!isString(ret)) {
7436 ret = formatValue(ctx, ret, recurseTimes);
7441 // Primitive types cannot have properties
7442 var primitive = formatPrimitive(ctx, value);
7447 // Look up the keys of the object.
7448 var keys = Object.keys(value);
7449 var visibleKeys = arrayToHash(keys);
7451 if (ctx.showHidden) {
7452 keys = Object.getOwnPropertyNames(value);
7455 // IE doesn't make error fields non-enumerable
7456 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7458 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7459 return formatError(value);
7462 // Some type of object without properties can be shortcutted.
7463 if (keys.length ===
0) {
7464 if (isFunction(value)) {
7465 var name = value.name ? ': ' + value.name : '';
7466 return ctx.stylize('[Function' + name + ']', 'special');
7468 if (isRegExp(value)) {
7469 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7471 if (isDate(value)) {
7472 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7474 if (isError(value)) {
7475 return formatError(value);
7479 var base = '', array = false, braces = ['{', '}'];
7481 // Make Array say that they are Array
7482 if (isArray(value)) {
7484 braces = ['[', ']'];
7487 // Make functions say that they are functions
7488 if (isFunction(value)) {
7489 var n = value.name ? ': ' + value.name : '';
7490 base = ' [Function' + n + ']';
7493 // Make RegExps say that they are RegExps
7494 if (isRegExp(value)) {
7495 base = ' ' + RegExp.prototype.toString.call(value);
7498 // Make dates with properties first say the date
7499 if (isDate(value)) {
7500 base = ' ' + Date.prototype.toUTCString.call(value);
7503 // Make error with message first say the error
7504 if (isError(value)) {
7505 base = ' ' + formatError(value);
7508 if (keys.length ===
0 && (!array || value.length ==
0)) {
7509 return braces[
0] + base + braces[
1];
7512 if (recurseTimes <
0) {
7513 if (isRegExp(value)) {
7514 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7516 return ctx.stylize('[Object]', 'special');
7520 ctx.seen.push(value);
7524 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7526 output = keys.map(function(key) {
7527 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7533 return reduceToSingleString(output, base, braces);
7537 function formatPrimitive(ctx, value) {
7538 if (isUndefined(value))
7539 return ctx.stylize('undefined', 'undefined');
7540 if (isString(value)) {
7541 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7542 .replace(/'/g, "\\'")
7543 .replace(/\\"/g, '"') + '\'';
7544 return ctx.stylize(simple, 'string');
7546 if (isNumber(value))
7547 return ctx.stylize('' + value, 'number');
7548 if (isBoolean(value))
7549 return ctx.stylize('' + value, 'boolean');
7550 // For some reason typeof null is "object", so special case here.
7552 return ctx.stylize('null', 'null');
7556 function formatError(value) {
7557 return '[' + Error.prototype.toString.call(value) + ']';
7561 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7563 for (var i =
0, l = value.length; i < l; ++i) {
7564 if (hasOwnProperty(value, String(i))) {
7565 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7571 keys.forEach(function(key) {
7572 if (!key.match(/^\d+$/)) {
7573 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7581 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7582 var name, str, desc;
7583 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7586 str = ctx.stylize('[Getter/Setter]', 'special');
7588 str = ctx.stylize('[Getter]', 'special');
7592 str = ctx.stylize('[Setter]', 'special');
7595 if (!hasOwnProperty(visibleKeys, key)) {
7596 name = '[' + key + ']';
7599 if (ctx.seen.indexOf(desc.value) <
0) {
7600 if (isNull(recurseTimes)) {
7601 str = formatValue(ctx, desc.value, null);
7603 str = formatValue(ctx, desc.value, recurseTimes -
1);
7605 if (str.indexOf('\n')
> -
1) {
7607 str = str.split('\n').map(function(line) {
7609 }).join('\n').substr(
2);
7611 str = '\n' + str.split('\n').map(function(line) {
7617 str = ctx.stylize('[Circular]', 'special');
7620 if (isUndefined(name)) {
7621 if (array && key.match(/^\d+$/)) {
7624 name = JSON.stringify('' + key);
7625 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7626 name = name.substr(
1, name.length -
2);
7627 name = ctx.stylize(name, 'name');
7629 name = name.replace(/'/g, "\\'")
7630 .replace(/\\"/g, '"')
7631 .replace(/(^"|"$)/g, "'");
7632 name = ctx.stylize(name, 'string');
7636 return name + ': ' + str;
7640 function reduceToSingleString(output, base, braces) {
7641 var numLinesEst =
0;
7642 var length = output.reduce(function(prev, cur) {
7644 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7645 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7650 (base === '' ? '' : base + '\n ') +
7652 output.join(',\n ') +
7657 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7661 // NOTE: These type checking functions intentionally don't use `instanceof`
7662 // because it is fragile and can be easily faked with `Object.create()`.
7663 function isArray(ar) {
7664 return Array.isArray(ar);
7666 exports.isArray = isArray;
7668 function isBoolean(arg) {
7669 return typeof arg === 'boolean';
7671 exports.isBoolean = isBoolean;
7673 function isNull(arg) {
7674 return arg === null;
7676 exports.isNull = isNull;
7678 function isNullOrUndefined(arg) {
7681 exports.isNullOrUndefined = isNullOrUndefined;
7683 function isNumber(arg) {
7684 return typeof arg === 'number';
7686 exports.isNumber = isNumber;
7688 function isString(arg) {
7689 return typeof arg === 'string';
7691 exports.isString = isString;
7693 function isSymbol(arg) {
7694 return typeof arg === 'symbol';
7696 exports.isSymbol = isSymbol;
7698 function isUndefined(arg) {
7699 return arg === void
0;
7701 exports.isUndefined = isUndefined;
7703 function isRegExp(re) {
7704 return isObject(re) && objectToString(re) === '[object RegExp]';
7706 exports.isRegExp = isRegExp;
7708 function isObject(arg) {
7709 return typeof arg === 'object' && arg !== null;
7711 exports.isObject = isObject;
7713 function isDate(d) {
7714 return isObject(d) && objectToString(d) === '[object Date]';
7716 exports.isDate = isDate;
7718 function isError(e) {
7719 return isObject(e) &&
7720 (objectToString(e) === '[object Error]' || e instanceof Error);
7722 exports.isError = isError;
7724 function isFunction(arg) {
7725 return typeof arg === 'function';
7727 exports.isFunction = isFunction;
7729 function isPrimitive(arg) {
7730 return arg === null ||
7731 typeof arg === 'boolean' ||
7732 typeof arg === 'number' ||
7733 typeof arg === 'string' ||
7734 typeof arg === 'symbol' || // ES6 symbol
7735 typeof arg === 'undefined';
7737 exports.isPrimitive = isPrimitive;
7739 exports.isBuffer = require('./support/isBuffer');
7741 function objectToString(o) {
7742 return Object.prototype.toString.call(o);
7747 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7751 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7752 'Oct', 'Nov', 'Dec'];
7755 function timestamp() {
7757 var time = [pad(d.getHours()),
7758 pad(d.getMinutes()),
7759 pad(d.getSeconds())].join(':');
7760 return [d.getDate(), months[d.getMonth()], time].join(' ');
7764 // log is just a thin wrapper to console.log that prepends a timestamp
7765 exports.log = function() {
7766 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7771 * Inherit the prototype methods from one constructor into another.
7773 * The Function.prototype.inherits from lang.js rewritten as a standalone
7774 * function (not on Function.prototype). NOTE: If this file is to be loaded
7775 * during bootstrapping this function needs to be rewritten using some native
7776 * functions as prototype setup using normal JavaScript does not work as
7777 * expected during bootstrapping (see mirror.js in r114903).
7779 * @param {function} ctor Constructor function which needs to inherit the
7781 * @param {function} superCtor Constructor function to inherit prototype from.
7783 exports.inherits = require('inherits');
7785 exports._extend = function(origin, add) {
7786 // Don't do anything if add isn't an object
7787 if (!add || !isObject(add)) return origin;
7789 var keys = Object.keys(add);
7790 var i = keys.length;
7792 origin[keys[i]] = add[keys[i]];
7797 function hasOwnProperty(obj, prop) {
7798 return Object.prototype.hasOwnProperty.call(obj, prop);
7801 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7802 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7803 // Base58 encoding/decoding
7804 // Originally written by Mike Hearn for BitcoinJ
7805 // Copyright (c)
2011 Google Inc
7806 // Ported to JavaScript by Stefan Thomas
7807 // Merged Buffer refactorings from base58-native by Stephen Pair
7808 // Copyright (c)
2013 BitPay Inc
7810 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7811 var ALPHABET_MAP = {}
7812 for(var i =
0; i < ALPHABET.length; i++) {
7813 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7817 function encode(buffer) {
7818 if (buffer.length ===
0) return ''
7820 var i, j, digits = [
0]
7821 for (i =
0; i < buffer.length; i++) {
7822 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7824 digits[
0] += buffer[i]
7827 for (j =
0; j < digits.length; ++j) {
7830 carry = (digits[j] / BASE) |
0
7835 digits.push(carry % BASE)
7837 carry = (carry / BASE) |
0
7841 // deal with leading zeros
7842 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7844 // convert digits to a string
7845 var stringOutput =
""
7846 for (var i = digits.length -
1; i
>=
0; i--) {
7847 stringOutput = stringOutput + ALPHABET[digits[i]]
7852 function decode(string) {
7853 if (string.length ===
0) return []
7855 var i, j, bytes = [
0]
7856 for (i =
0; i < string.length; i++) {
7858 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7860 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7861 bytes[
0] += ALPHABET_MAP[c]
7864 for (j =
0; j < bytes.length; ++j) {
7867 carry = bytes[j]
>> 8
7872 bytes.push(carry &
0xff)
7878 // deal with leading zeros
7879 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7881 return bytes.reverse()
7889 },{}],
31:[function(require,module,exports){
7893 var base58 = require('bs58')
7894 var createHash = require('create-hash')
7896 // SHA256(SHA256(buffer))
7897 function sha256x2 (buffer) {
7898 buffer = createHash('sha256').update(buffer).digest()
7899 return createHash('sha256').update(buffer).digest()
7902 // Encode a buffer as a base58-check encoded string
7903 function encode (payload) {
7904 var checksum = sha256x2(payload).slice(
0,
4)
7906 return base58.encode(Buffer.concat([
7912 // Decode a base58-check encoded string to a buffer
7913 function decode (string) {
7914 var buffer = new Buffer(base58.decode(string))
7916 var payload = buffer.slice(
0, -
4)
7917 var checksum = buffer.slice(-
4)
7918 var newChecksum = sha256x2(payload).slice(
0,
4)
7920 for (var i =
0; i < newChecksum.length; ++i) {
7921 if (newChecksum[i] === checksum[i]) continue
7923 throw new Error('Invalid checksum')
7934 }).call(this,require("buffer").Buffer)
7935 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7938 var inherits = require('inherits')
7939 var md5 = require('./md5')
7940 var rmd160 = require('ripemd160')
7941 var sha = require('sha.js')
7943 var Transform = require('stream').Transform
7945 function HashNoConstructor(hash) {
7946 Transform.call(this)
7952 inherits(HashNoConstructor, Transform)
7954 HashNoConstructor.prototype._transform = function (data, _, next) {
7955 this.buffers.push(data)
7960 HashNoConstructor.prototype._flush = function (next) {
7961 this.push(this.digest())
7965 HashNoConstructor.prototype.update = function (data, enc) {
7966 if (typeof data === 'string') {
7967 data = new Buffer(data, enc)
7970 this.buffers.push(data)
7974 HashNoConstructor.prototype.digest = function (enc) {
7975 var buf = Buffer.concat(this.buffers)
7976 var r = this._hash(buf)
7979 return enc ? r.toString(enc) : r
7982 function Hash(hash) {
7983 Transform.call(this)
7988 inherits(Hash, Transform)
7990 Hash.prototype._transform = function (data, enc, next) {
7991 if (enc) data = new Buffer(data, enc)
7993 this._hash.update(data)
7998 Hash.prototype._flush = function (next) {
7999 this.push(this._hash.digest())
8005 Hash.prototype.update = function (data, enc) {
8006 if (typeof data === 'string') {
8007 data = new Buffer(data, enc)
8010 this._hash.update(data)
8014 Hash.prototype.digest = function (enc) {
8015 var outData = this._hash.digest()
8017 return enc ? outData.toString(enc) : outData
8020 module.exports = function createHash (alg) {
8021 if ('md5' === alg) return new HashNoConstructor(md5)
8022 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8024 return new Hash(sha(alg))
8027 }).call(this,require("buffer").Buffer)
8028 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
8032 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
8035 function toArray(buf, bigEndian) {
8036 if ((buf.length % intSize) !==
0) {
8037 var len = buf.length + (intSize - (buf.length % intSize));
8038 buf = Buffer.concat([buf, zeroBuffer], len);
8042 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8043 for (var i =
0; i < buf.length; i += intSize) {
8044 arr.push(fn.call(buf, i));
8049 function toBuffer(arr, size, bigEndian) {
8050 var buf = new Buffer(size);
8051 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8052 for (var i =
0; i < arr.length; i++) {
8053 fn.call(buf, arr[i], i *
4, true);
8058 function hash(buf, fn, hashSize, bigEndian) {
8059 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8060 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8061 return toBuffer(arr, hashSize, bigEndian);
8063 exports.hash = hash;
8064 }).call(this,require("buffer").Buffer)
8065 },{"buffer":
7}],
34:[function(require,module,exports){
8068 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8069 * Digest Algorithm, as defined in RFC
1321.
8070 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8071 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8072 * Distributed under the BSD License
8073 * See http://pajhome.org.uk/crypt/md5 for more info.
8076 var helpers = require('./helpers');
8079 * Calculate the MD5 of an array of little-endian words, and a bit length
8081 function core_md5(x, len)
8083 /* append padding */
8084 x[len
>> 5] |=
0x80 << ((len) %
32);
8085 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8089 var c = -
1732584194;
8092 for(var i =
0; i < x.length; i +=
16)
8099 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8100 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8101 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8102 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8103 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8104 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8105 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8106 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8107 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8108 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8109 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8110 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8111 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8112 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8113 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8114 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8116 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8117 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8118 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8119 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8120 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8121 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8122 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8123 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8124 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8125 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8126 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8127 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8128 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8129 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8130 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8131 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8133 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8134 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8135 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8136 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8137 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8138 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8139 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8140 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8141 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8142 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8143 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8144 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8145 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8146 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8147 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8148 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8150 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8151 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8152 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8153 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8154 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8155 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8156 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8157 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8158 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8159 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8160 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8161 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8162 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8163 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8164 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8165 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8167 a = safe_add(a, olda);
8168 b = safe_add(b, oldb);
8169 c = safe_add(c, oldc);
8170 d = safe_add(d, oldd);
8172 return Array(a, b, c, d);
8177 * These functions implement the four basic operations the algorithm uses.
8179 function md5_cmn(q, a, b, x, s, t)
8181 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8183 function md5_ff(a, b, c, d, x, s, t)
8185 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8187 function md5_gg(a, b, c, d, x, s, t)
8189 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8191 function md5_hh(a, b, c, d, x, s, t)
8193 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8195 function md5_ii(a, b, c, d, x, s, t)
8197 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8201 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8202 * to work around bugs in some JS interpreters.
8204 function safe_add(x, y)
8206 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8207 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8208 return (msw <<
16) | (lsw &
0xFFFF);
8212 * Bitwise rotate a
32-bit number to the left.
8214 function bit_rol(num, cnt)
8216 return (num << cnt) | (num
>>> (
32 - cnt));
8219 module.exports = function md5(buf) {
8220 return helpers.hash(buf, core_md5,
16);
8222 },{"./helpers":
33}],
35:[function(require,module,exports){
8223 arguments[
4][
12][
0].apply(exports,arguments)
8224 },{"dup":
12}],
36:[function(require,module,exports){
8228 code.google.com/p/crypto-js
8229 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8230 code.google.com/p/crypto-js/wiki/License
8233 (c)
2012 by Cédric Mesnil. All rights reserved.
8235 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8237 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8238 - 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.
8240 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.
8245 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8246 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8247 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8248 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8249 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8253 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8254 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8255 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8256 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8257 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8261 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8262 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8263 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8264 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8265 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8269 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8270 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8271 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8272 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8273 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8276 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8277 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8279 function bytesToWords (bytes) {
8281 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8282 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8287 function wordsToBytes (words) {
8289 for (var b =
0; b < words.length *
32; b +=
8) {
8290 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8295 function processBlock (H, M, offset) {
8297 for (var i =
0; i <
16; i++) {
8298 var offset_i = offset + i
8299 var M_offset_i = M[offset_i]
8303 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8304 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8308 // Working variables
8309 var al, bl, cl, dl, el
8310 var ar, br, cr, dr, er
8320 for (i =
0; i <
80; i +=
1) {
8321 t = (al + M[offset + zl[i]]) |
0
8323 t += f1(bl, cl, dl) + hl[
0]
8324 } else if (i <
32) {
8325 t += f2(bl, cl, dl) + hl[
1]
8326 } else if (i <
48) {
8327 t += f3(bl, cl, dl) + hl[
2]
8328 } else if (i <
64) {
8329 t += f4(bl, cl, dl) + hl[
3]
8330 } else {// if (i
<80) {
8331 t += f5(bl, cl, dl) + hl[
4]
8342 t = (ar + M[offset + zr[i]]) |
0
8344 t += f5(br, cr, dr) + hr[
0]
8345 } else if (i <
32) {
8346 t += f4(br, cr, dr) + hr[
1]
8347 } else if (i <
48) {
8348 t += f3(br, cr, dr) + hr[
2]
8349 } else if (i <
64) {
8350 t += f2(br, cr, dr) + hr[
3]
8351 } else {// if (i
<80) {
8352 t += f1(br, cr, dr) + hr[
4]
8365 // intermediate hash value
8366 t = (H[
1] + cl + dr) |
0
8367 H[
1] = (H[
2] + dl + er) |
0
8368 H[
2] = (H[
3] + el + ar) |
0
8369 H[
3] = (H[
4] + al + br) |
0
8370 H[
4] = (H[
0] + bl + cr) |
0
8374 function f1 (x, y, z) {
8375 return ((x) ^ (y) ^ (z))
8378 function f2 (x, y, z) {
8379 return (((x) & (y)) | ((~x) & (z)))
8382 function f3 (x, y, z) {
8383 return (((x) | (~(y))) ^ (z))
8386 function f4 (x, y, z) {
8387 return (((x) & (z)) | ((y) & (~(z))))
8390 function f5 (x, y, z) {
8391 return ((x) ^ ((y) | (~(z))))
8394 function rotl (x, n) {
8395 return (x << n) | (x
>>> (
32 - n))
8398 function ripemd160 (message) {
8399 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8401 if (typeof message === 'string') {
8402 message = new Buffer(message, 'utf8')
8405 var m = bytesToWords(message)
8407 var nBitsLeft = message.length *
8
8408 var nBitsTotal = message.length *
8
8411 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8412 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8413 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8414 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8417 for (var i =
0; i < m.length; i +=
16) {
8418 processBlock(H, m, i)
8422 for (i =
0; i <
5; i++) {
8427 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8428 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8431 var digestbytes = wordsToBytes(H)
8432 return new Buffer(digestbytes)
8435 module.exports = ripemd160
8437 }).call(this,require(
"buffer").Buffer)
8438 },{
"buffer":
7}],
37:[function(require,module,exports){
8440 // prototype class for hash functions
8441 function Hash (blockSize, finalSize) {
8442 this._block = new Buffer(blockSize)
8443 this._finalSize = finalSize
8444 this._blockSize = blockSize
8449 Hash.prototype.update = function (data, enc) {
8450 if (typeof data === 'string') {
8452 data = new Buffer(data, enc)
8455 var l = this._len += data.length
8456 var s = this._s ||
0
8458 var buffer = this._block
8461 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8464 for (var i =
0; i < ch; i++) {
8465 buffer[(s % this._blockSize) + i] = data[i + f]
8471 if ((s % this._blockSize) ===
0) {
8472 this._update(buffer)
8480 Hash.prototype.digest = function (enc) {
8481 // Suppose the length of the message M, in bits, is l
8482 var l = this._len *
8
8484 // Append the bit
1 to the end of the message
8485 this._block[this._len % this._blockSize] =
0x80
8487 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8488 this._block.fill(
0, this._len % this._blockSize +
1)
8490 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8491 this._update(this._block)
8495 // to this append the block which is equal to the number l written in binary
8496 // TODO: handle case where l is
> Math.pow(
2,
29)
8497 this._block.writeInt32BE(l, this._blockSize -
4)
8499 var hash = this._update(this._block) || this._hash()
8501 return enc ? hash.toString(enc) : hash
8504 Hash.prototype._update = function () {
8505 throw new Error('_update must be implemented by subclass')
8508 module.exports = Hash
8510 }).call(this,require("buffer").Buffer)
8511 },{"buffer":
7}],
38:[function(require,module,exports){
8512 var exports = module.exports = function SHA (algorithm) {
8513 algorithm = algorithm.toLowerCase()
8515 var Algorithm = exports[algorithm]
8516 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8518 return new Algorithm()
8521 exports.sha = require('./sha')
8522 exports.sha1 = require('./sha1')
8523 exports.sha224 = require('./sha224')
8524 exports.sha256 = require('./sha256')
8525 exports.sha384 = require('./sha384')
8526 exports.sha512 = require('./sha512')
8528 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8531 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8533 * This source code is derived from sha1.js of the same repository.
8534 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8535 * operation was added.
8538 var inherits = require('inherits')
8539 var Hash = require('./hash')
8541 var W = new Array(
80)
8547 Hash.call(this,
64,
56)
8552 Sha.prototype.init = function () {
8553 this._a =
0x67452301 |
0
8554 this._b =
0xefcdab89 |
0
8555 this._c =
0x98badcfe |
0
8556 this._d =
0x10325476 |
0
8557 this._e =
0xc3d2e1f0 |
0
8563 * Bitwise rotate a
32-bit number to the left.
8565 function rol (num, cnt) {
8566 return (num << cnt) | (num
>>> (
32 - cnt))
8569 Sha.prototype._update = function (M) {
8581 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8582 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8584 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8585 function loop (w, f) {
8588 var t = rol(a,
5) + f + e + w + k
8599 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8600 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8602 while (j <
40) loop(calcW(), b ^ c ^ d)
8604 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8606 while (j <
80) loop(calcW(), b ^ c ^ d)
8608 this._a = (a + this._a) |
0
8609 this._b = (b + this._b) |
0
8610 this._c = (c + this._c) |
0
8611 this._d = (d + this._d) |
0
8612 this._e = (e + this._e) |
0
8615 Sha.prototype._hash = function () {
8616 var H = new Buffer(
20)
8618 H.writeInt32BE(this._a |
0,
0)
8619 H.writeInt32BE(this._b |
0,
4)
8620 H.writeInt32BE(this._c |
0,
8)
8621 H.writeInt32BE(this._d |
0,
12)
8622 H.writeInt32BE(this._e |
0,
16)
8627 module.exports = Sha
8630 }).call(this,require("buffer").Buffer)
8631 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8634 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8636 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8637 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8638 * Distributed under the BSD License
8639 * See http://pajhome.org.uk/crypt/md5 for details.
8642 var inherits = require('inherits')
8643 var Hash = require('./hash')
8645 var W = new Array(
80)
8651 Hash.call(this,
64,
56)
8654 inherits(Sha1, Hash)
8656 Sha1.prototype.init = function () {
8657 this._a =
0x67452301 |
0
8658 this._b =
0xefcdab89 |
0
8659 this._c =
0x98badcfe |
0
8660 this._d =
0x10325476 |
0
8661 this._e =
0xc3d2e1f0 |
0
8667 * Bitwise rotate a
32-bit number to the left.
8669 function rol (num, cnt) {
8670 return (num << cnt) | (num
>>> (
32 - cnt))
8673 Sha1.prototype._update = function (M) {
8684 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8685 function loop (w, f) {
8688 var t = rol(a,
5) + f + e + w + k
8699 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8700 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8702 while (j <
40) loop(calcW(), b ^ c ^ d)
8704 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8706 while (j <
80) loop(calcW(), b ^ c ^ d)
8708 this._a = (a + this._a) |
0
8709 this._b = (b + this._b) |
0
8710 this._c = (c + this._c) |
0
8711 this._d = (d + this._d) |
0
8712 this._e = (e + this._e) |
0
8715 Sha1.prototype._hash = function () {
8716 var H = new Buffer(
20)
8718 H.writeInt32BE(this._a |
0,
0)
8719 H.writeInt32BE(this._b |
0,
4)
8720 H.writeInt32BE(this._c |
0,
8)
8721 H.writeInt32BE(this._d |
0,
12)
8722 H.writeInt32BE(this._e |
0,
16)
8727 module.exports = Sha1
8729 }).call(this,require("buffer").Buffer)
8730 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8733 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8735 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8736 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8740 var inherits = require('inherits')
8741 var Sha256 = require('./sha256')
8742 var Hash = require('./hash')
8744 var W = new Array(
64)
8746 function Sha224 () {
8749 this._w = W // new Array(
64)
8751 Hash.call(this,
64,
56)
8754 inherits(Sha224, Sha256)
8756 Sha224.prototype.init = function () {
8757 this._a =
0xc1059ed8 |
0
8758 this._b =
0x367cd507 |
0
8759 this._c =
0x3070dd17 |
0
8760 this._d =
0xf70e5939 |
0
8761 this._e =
0xffc00b31 |
0
8762 this._f =
0x68581511 |
0
8763 this._g =
0x64f98fa7 |
0
8764 this._h =
0xbefa4fa4 |
0
8769 Sha224.prototype._hash = function () {
8770 var H = new Buffer(
28)
8772 H.writeInt32BE(this._a,
0)
8773 H.writeInt32BE(this._b,
4)
8774 H.writeInt32BE(this._c,
8)
8775 H.writeInt32BE(this._d,
12)
8776 H.writeInt32BE(this._e,
16)
8777 H.writeInt32BE(this._f,
20)
8778 H.writeInt32BE(this._g,
24)
8783 module.exports = Sha224
8785 }).call(this,require("buffer").Buffer)
8786 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8789 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8791 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8792 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8796 var inherits = require('inherits')
8797 var Hash = require('./hash')
8800 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8801 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8802 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8803 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8804 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8805 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8806 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8807 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8808 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8809 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8810 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8811 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8812 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8813 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8814 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8815 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8818 var W = new Array(
64)
8820 function Sha256 () {
8823 this._w = W // new Array(
64)
8825 Hash.call(this,
64,
56)
8828 inherits(Sha256, Hash)
8830 Sha256.prototype.init = function () {
8831 this._a =
0x6a09e667 |
0
8832 this._b =
0xbb67ae85 |
0
8833 this._c =
0x3c6ef372 |
0
8834 this._d =
0xa54ff53a |
0
8835 this._e =
0x510e527f |
0
8836 this._f =
0x9b05688c |
0
8837 this._g =
0x1f83d9ab |
0
8838 this._h =
0x5be0cd19 |
0
8844 return (X
>>> n) | (X << (
32 - n))
8851 function Ch (x, y, z) {
8852 return ((x & y) ^ ((~x) & z))
8855 function Maj (x, y, z) {
8856 return ((x & y) ^ (x & z) ^ (y & z))
8859 function Sigma0256 (x) {
8860 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8863 function Sigma1256 (x) {
8864 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8867 function Gamma0256 (x) {
8868 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8871 function Gamma1256 (x) {
8872 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8875 Sha256.prototype._update = function (M) {
8889 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8893 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8894 var T2 = Sigma0256(a) + Maj(a, b, c)
8908 while (j <
16) loop(M.readInt32BE(j *
4))
8909 while (j <
64) loop(calcW())
8911 this._a = (a + this._a) |
0
8912 this._b = (b + this._b) |
0
8913 this._c = (c + this._c) |
0
8914 this._d = (d + this._d) |
0
8915 this._e = (e + this._e) |
0
8916 this._f = (f + this._f) |
0
8917 this._g = (g + this._g) |
0
8918 this._h = (h + this._h) |
0
8921 Sha256.prototype._hash = function () {
8922 var H = new Buffer(
32)
8924 H.writeInt32BE(this._a,
0)
8925 H.writeInt32BE(this._b,
4)
8926 H.writeInt32BE(this._c,
8)
8927 H.writeInt32BE(this._d,
12)
8928 H.writeInt32BE(this._e,
16)
8929 H.writeInt32BE(this._f,
20)
8930 H.writeInt32BE(this._g,
24)
8931 H.writeInt32BE(this._h,
28)
8936 module.exports = Sha256
8938 }).call(this,require("buffer").Buffer)
8939 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8941 var inherits = require('inherits')
8942 var SHA512 = require('./sha512')
8943 var Hash = require('./hash')
8945 var W = new Array(
160)
8947 function Sha384 () {
8951 Hash.call(this,
128,
112)
8954 inherits(Sha384, SHA512)
8956 Sha384.prototype.init = function () {
8957 this._a =
0xcbbb9d5d |
0
8958 this._b =
0x629a292a |
0
8959 this._c =
0x9159015a |
0
8960 this._d =
0x152fecd8 |
0
8961 this._e =
0x67332667 |
0
8962 this._f =
0x8eb44a87 |
0
8963 this._g =
0xdb0c2e0d |
0
8964 this._h =
0x47b5481d |
0
8966 this._al =
0xc1059ed8 |
0
8967 this._bl =
0x367cd507 |
0
8968 this._cl =
0x3070dd17 |
0
8969 this._dl =
0xf70e5939 |
0
8970 this._el =
0xffc00b31 |
0
8971 this._fl =
0x68581511 |
0
8972 this._gl =
0x64f98fa7 |
0
8973 this._hl =
0xbefa4fa4 |
0
8978 Sha384.prototype._hash = function () {
8979 var H = new Buffer(
48)
8981 function writeInt64BE (h, l, offset) {
8982 H.writeInt32BE(h, offset)
8983 H.writeInt32BE(l, offset +
4)
8986 writeInt64BE(this._a, this._al,
0)
8987 writeInt64BE(this._b, this._bl,
8)
8988 writeInt64BE(this._c, this._cl,
16)
8989 writeInt64BE(this._d, this._dl,
24)
8990 writeInt64BE(this._e, this._el,
32)
8991 writeInt64BE(this._f, this._fl,
40)
8996 module.exports = Sha384
8998 }).call(this,require("buffer").Buffer)
8999 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
9001 var inherits = require('inherits')
9002 var Hash = require('./hash')
9005 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
9006 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
9007 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
9008 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
9009 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
9010 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
9011 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
9012 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
9013 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
9014 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
9015 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
9016 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
9017 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
9018 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
9019 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
9020 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
9021 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
9022 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
9023 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
9024 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
9025 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
9026 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
9027 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
9028 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
9029 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
9030 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
9031 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
9032 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
9033 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
9034 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
9035 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
9036 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
9037 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
9038 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
9039 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
9040 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
9041 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
9042 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
9043 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
9044 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
9047 var W = new Array(
160)
9049 function Sha512 () {
9053 Hash.call(this,
128,
112)
9056 inherits(Sha512, Hash)
9058 Sha512.prototype.init = function () {
9059 this._a =
0x6a09e667 |
0
9060 this._b =
0xbb67ae85 |
0
9061 this._c =
0x3c6ef372 |
0
9062 this._d =
0xa54ff53a |
0
9063 this._e =
0x510e527f |
0
9064 this._f =
0x9b05688c |
0
9065 this._g =
0x1f83d9ab |
0
9066 this._h =
0x5be0cd19 |
0
9068 this._al =
0xf3bcc908 |
0
9069 this._bl =
0x84caa73b |
0
9070 this._cl =
0xfe94f82b |
0
9071 this._dl =
0x5f1d36f1 |
0
9072 this._el =
0xade682d1 |
0
9073 this._fl =
0x2b3e6c1f |
0
9074 this._gl =
0xfb41bd6b |
0
9075 this._hl =
0x137e2179 |
0
9080 function S (X, Xl, n) {
9081 return (X
>>> n) | (Xl << (
32 - n))
9084 function Ch (x, y, z) {
9085 return ((x & y) ^ ((~x) & z))
9088 function Maj (x, y, z) {
9089 return ((x & y) ^ (x & z) ^ (y & z))
9092 Sha512.prototype._update = function (M) {
9104 var al = this._al |
0
9105 var bl = this._bl |
0
9106 var cl = this._cl |
0
9107 var dl = this._dl |
0
9108 var el = this._el |
0
9109 var fl = this._fl |
0
9110 var gl = this._gl |
0
9111 var hl = this._hl |
0
9116 var x = W[j -
15 *
2]
9117 var xl = W[j -
15 *
2 +
1]
9118 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9119 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9122 xl = W[j -
2 *
2 +
1]
9123 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9124 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9126 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9127 var Wi7 = W[j -
7 *
2]
9128 var Wi7l = W[j -
7 *
2 +
1]
9130 var Wi16 = W[j -
16 *
2]
9131 var Wi16l = W[j -
16 *
2 +
1]
9133 Wil = gamma0l + Wi7l
9134 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9136 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9138 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9145 var maj = Maj(a, b, c)
9146 var majl = Maj(al, bl, cl)
9148 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9149 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9150 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9151 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9153 // t1 = h + sigma1 + ch + K[i] + W[i]
9157 var ch = Ch(e, f, g)
9158 var chl = Ch(el, fl, gl)
9160 var t1l = hl + sigma1l
9161 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9163 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9165 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9167 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9169 // t2 = sigma0 + maj
9170 var t2l = sigma0l + majl
9171 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9180 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9187 al = (t1l + t2l) |
0
9188 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9195 Wi = M.readInt32BE(j *
4)
9196 Wil = M.readInt32BE(j *
4 +
4)
9206 this._al = (this._al + al) |
0
9207 this._bl = (this._bl + bl) |
0
9208 this._cl = (this._cl + cl) |
0
9209 this._dl = (this._dl + dl) |
0
9210 this._el = (this._el + el) |
0
9211 this._fl = (this._fl + fl) |
0
9212 this._gl = (this._gl + gl) |
0
9213 this._hl = (this._hl + hl) |
0
9215 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9216 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9217 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9218 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9219 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9220 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9221 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9222 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9225 Sha512.prototype._hash = function () {
9226 var H = new Buffer(
64)
9228 function writeInt64BE (h, l, offset) {
9229 H.writeInt32BE(h, offset)
9230 H.writeInt32BE(l, offset +
4)
9233 writeInt64BE(this._a, this._al,
0)
9234 writeInt64BE(this._b, this._bl,
8)
9235 writeInt64BE(this._c, this._cl,
16)
9236 writeInt64BE(this._d, this._dl,
24)
9237 writeInt64BE(this._e, this._el,
32)
9238 writeInt64BE(this._f, this._fl,
40)
9239 writeInt64BE(this._g, this._gl,
48)
9240 writeInt64BE(this._h, this._hl,
56)
9245 module.exports = Sha512
9247 }).call(this,require(
"buffer").Buffer)
9248 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9251 var createHash = require('create-hash/browser');
9252 var inherits = require('inherits')
9254 var Transform = require('stream').Transform
9256 var ZEROS = new Buffer(
128)
9259 function Hmac(alg, key) {
9260 Transform.call(this)
9262 if (typeof key === 'string') {
9263 key = new Buffer(key)
9266 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9271 if (key.length
> blocksize) {
9272 key = createHash(alg).update(key).digest()
9274 } else if (key.length < blocksize) {
9275 key = Buffer.concat([key, ZEROS], blocksize)
9278 var ipad = this._ipad = new Buffer(blocksize)
9279 var opad = this._opad = new Buffer(blocksize)
9281 for (var i =
0; i < blocksize; i++) {
9282 ipad[i] = key[i] ^
0x36
9283 opad[i] = key[i] ^
0x5C
9286 this._hash = createHash(alg).update(ipad)
9289 inherits(Hmac, Transform)
9291 Hmac.prototype.update = function (data, enc) {
9292 this._hash.update(data, enc)
9297 Hmac.prototype._transform = function (data, _, next) {
9298 this._hash.update(data)
9303 Hmac.prototype._flush = function (next) {
9304 this.push(this.digest())
9309 Hmac.prototype.digest = function (enc) {
9310 var h = this._hash.digest()
9312 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9315 module.exports = function createHmac(alg, key) {
9316 return new Hmac(alg, key)
9319 }).call(this,require("buffer").Buffer)
9320 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9321 arguments[
4][
12][
0].apply(exports,arguments)
9322 },{"dup":
12}],
47:[function(require,module,exports){
9323 var assert = require('assert')
9324 var BigInteger = require('bigi')
9326 var Point = require('./point')
9328 function Curve(p, a, b, Gx, Gy, n, h) {
9332 this.G = Point.fromAffine(this, Gx, Gy)
9336 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9339 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9342 Curve.prototype.pointFromX = function(isOdd, x) {
9343 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9344 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9347 if (beta.isEven() ^ !isOdd) {
9348 y = this.p.subtract(y) // -y % p
9351 return Point.fromAffine(this, x, y)
9354 Curve.prototype.isInfinity = function(Q) {
9355 if (Q === this.infinity) return true
9357 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9360 Curve.prototype.isOnCurve = function(Q) {
9361 if (this.isInfinity(Q)) return true
9369 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9370 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9371 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9373 // and check that y^
2 = x^
3 + ax + b (mod p)
9374 var lhs = y.square().mod(p)
9375 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9376 return lhs.equals(rhs)
9380 * Validate an elliptic curve point.
9382 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9384 Curve.prototype.validate = function(Q) {
9386 assert(!this.isInfinity(Q), 'Point is at infinity')
9387 assert(this.isOnCurve(Q), 'Point is not on the curve')
9389 // Check nQ = O (where Q is a scalar multiple of G)
9390 var nQ = Q.multiply(this.n)
9391 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9396 module.exports = Curve
9398 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9401 "p": "fffffffdffffffffffffffffffffffff",
9402 "a": "fffffffdfffffffffffffffffffffffc",
9403 "b": "e87579c11079f43dd824993c2cee5ed3",
9404 "n": "fffffffe0000000075a30d1b9038a115",
9406 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9407 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9410 "p": "fffffffffffffffffffffffffffffffeffffac73",
9413 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9415 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9416 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9419 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9420 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9421 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9422 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9424 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9425 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9428 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9431 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9433 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9434 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9437 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9438 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9439 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9440 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9442 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9443 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9446 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9449 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9451 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9452 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9455 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9456 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9457 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9458 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9460 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9461 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9465 },{}],
49:[function(require,module,exports){
9466 var Point = require('./point')
9467 var Curve = require('./curve')
9469 var getCurveByName = require('./names')
9474 getCurveByName: getCurveByName
9477 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9478 var BigInteger = require('bigi')
9480 var curves = require('./curves')
9481 var Curve = require('./curve')
9483 function getCurveByName(name) {
9484 var curve = curves[name]
9485 if (!curve) return null
9487 var p = new BigInteger(curve.p,
16)
9488 var a = new BigInteger(curve.a,
16)
9489 var b = new BigInteger(curve.b,
16)
9490 var n = new BigInteger(curve.n,
16)
9491 var h = new BigInteger(curve.h,
16)
9492 var Gx = new BigInteger(curve.Gx,
16)
9493 var Gy = new BigInteger(curve.Gy,
16)
9495 return new Curve(p, a, b, Gx, Gy, n, h)
9498 module.exports = getCurveByName
9500 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9502 var assert = require('assert')
9503 var BigInteger = require('bigi')
9505 var THREE = BigInteger.valueOf(
3)
9507 function Point(curve, x, y, z) {
9508 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9516 this.compressed = true
9519 Object.defineProperty(Point.prototype, 'zInv', {
9521 if (this._zInv === null) {
9522 this._zInv = this.z.modInverse(this.curve.p)
9529 Object.defineProperty(Point.prototype, 'affineX', {
9531 return this.x.multiply(this.zInv).mod(this.curve.p)
9535 Object.defineProperty(Point.prototype, 'affineY', {
9537 return this.y.multiply(this.zInv).mod(this.curve.p)
9541 Point.fromAffine = function(curve, x, y) {
9542 return new Point(curve, x, y, BigInteger.ONE)
9545 Point.prototype.equals = function(other) {
9546 if (other === this) return true
9547 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9548 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9550 // u = Y2 * Z1 - Y1 * Z2
9551 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9553 if (u.signum() !==
0) return false
9555 // v = X2 * Z1 - X1 * Z2
9556 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9558 return v.signum() ===
0
9561 Point.prototype.negate = function() {
9562 var y = this.curve.p.subtract(this.y)
9564 return new Point(this.curve, this.x, y, this.z)
9567 Point.prototype.add = function(b) {
9568 if (this.curve.isInfinity(this)) return b
9569 if (this.curve.isInfinity(b)) return this
9576 // u = Y2 * Z1 - Y1 * Z2
9577 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9578 // v = X2 * Z1 - X1 * Z2
9579 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9581 if (v.signum() ===
0) {
9582 if (u.signum() ===
0) {
9583 return this.twice() // this == b, so double
9586 return this.curve.infinity // this = -b, so infinity
9590 var v3 = v2.multiply(v)
9591 var x1v2 = x1.multiply(v2)
9592 var zu2 = u.square().multiply(this.z)
9594 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9595 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9596 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9597 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)
9598 // z3 = v^
3 * z1 * z2
9599 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9601 return new Point(this.curve, x3, y3, z3)
9604 Point.prototype.twice = function() {
9605 if (this.curve.isInfinity(this)) return this
9606 if (this.y.signum() ===
0) return this.curve.infinity
9611 var y1z1 = y1.multiply(this.z)
9612 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9613 var a = this.curve.a
9615 // w =
3 * x1^
2 + a * z1^
2
9616 var w = x1.square().multiply(THREE)
9618 if (a.signum() !==
0) {
9619 w = w.add(this.z.square().multiply(a))
9622 w = w.mod(this.curve.p)
9623 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9624 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9625 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9626 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9627 // z3 =
8 * (y1 * z1)^
3
9628 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9630 return new Point(this.curve, x3, y3, z3)
9633 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9634 // TODO: modularize the multiplication algorithm
9635 Point.prototype.multiply = function(k) {
9636 if (this.curve.isInfinity(this)) return this
9637 if (k.signum() ===
0) return this.curve.infinity
9640 var h = e.multiply(THREE)
9642 var neg = this.negate()
9645 for (var i = h.bitLength() -
2; i
> 0; --i) {
9648 var hBit = h.testBit(i)
9649 var eBit = e.testBit(i)
9652 R = R.add(hBit ? this : neg)
9659 // Compute this*j + x*k (simultaneous multiplication)
9660 Point.prototype.multiplyTwo = function(j, x, k) {
9663 if (j.bitLength()
> k.bitLength())
9664 i = j.bitLength() -
1
9666 i = k.bitLength() -
1
9668 var R = this.curve.infinity
9669 var both = this.add(x)
9674 var jBit = j.testBit(i)
9675 var kBit = k.testBit(i)
9696 Point.prototype.getEncoded = function(compressed) {
9697 if (compressed == undefined) compressed = this.compressed
9698 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9700 var x = this.affineX
9701 var y = this.affineY
9705 // Determine size of q in bytes
9706 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9710 buffer = new Buffer(
1 + byteLength)
9711 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9715 buffer = new Buffer(
1 + byteLength + byteLength)
9716 buffer.writeUInt8(
0x04,
0)
9718 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9721 x.toBuffer(byteLength).copy(buffer,
1)
9726 Point.decodeFrom = function(curve, buffer) {
9727 var type = buffer.readUInt8(
0)
9728 var compressed = (type !==
4)
9730 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9731 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9735 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9736 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9738 var isOdd = (type ===
0x03)
9739 Q = curve.pointFromX(isOdd, x)
9742 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9744 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9745 Q = Point.fromAffine(curve, x, y)
9748 Q.compressed = compressed
9752 Point.prototype.toString = function () {
9753 if (this.curve.isInfinity(this)) return '(INFINITY)'
9755 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9758 module.exports = Point
9760 }).call(this,require("buffer").Buffer)
9761 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9762 (function (process,global,Buffer){
9765 var crypto = global.crypto || global.msCrypto
9766 if(crypto && crypto.getRandomValues) {
9767 module.exports = randomBytes;
9769 module.exports = oldBrowser;
9771 function randomBytes(size, cb) {
9772 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9773 /* This will not work in older browsers.
9774 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9777 crypto.getRandomValues(bytes);
9778 if (typeof cb === 'function') {
9779 return process.nextTick(function () {
9785 function oldBrowser() {
9787 'secure random number generation not supported by this browser\n'+
9788 'use chrome, FireFox or Internet Explorer
11'
9792 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9793 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9797 function getFunctionName(fn) {
9798 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9801 function getTypeTypeName(type) {
9802 if (nativeTypes.Function(type)) {
9803 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9805 if (nativeTypes.Object(type)) return JSON.stringify(type);
9810 function getValueTypeName(value) {
9811 if (nativeTypes.Null(value)) return '';
9813 return getFunctionName(value.constructor);
9816 function tfErrorString(type, value) {
9817 var typeTypeName = getTypeTypeName(type);
9818 var valueTypeName = getValueTypeName(value);
9820 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9823 function tfPropertyErrorString(type, name, value) {
9824 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9828 Array: (function (_Array) {
9829 function Array(_x) {
9830 return _Array.apply(this, arguments);
9833 Array.toString = function () {
9834 return _Array.toString();
9838 })(function (value) {
9839 return value !== null && value !== undefined && value.constructor === Array;
9841 Boolean: function Boolean(value) {
9842 return typeof value === 'boolean';
9844 Buffer: (function (_Buffer) {
9845 function Buffer(_x2) {
9846 return _Buffer.apply(this, arguments);
9849 Buffer.toString = function () {
9850 return _Buffer.toString();
9854 })(function (value) {
9855 return Buffer.isBuffer(value);
9857 Function: function Function(value) {
9858 return typeof value === 'function';
9860 Null: function Null(value) {
9861 return value === undefined || value === null;
9863 Number: function Number(value) {
9864 return typeof value === 'number';
9866 Object: function Object(value) {
9867 return typeof value === 'object';
9869 String: function String(value) {
9870 return typeof value === 'string';
9877 function tJSON(type) {
9878 return type && type.toJSON ? type.toJSON() : type;
9881 function sJSON(type) {
9882 var json = tJSON(type);
9883 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9887 arrayOf: function arrayOf(type) {
9888 function arrayOf(value, strict) {
9890 return nativeTypes.Array(value) && value.every(function (x) {
9891 return typeforce(type, x, strict);
9897 arrayOf.toJSON = function () {
9898 return [tJSON(type)];
9904 maybe: function maybe(type) {
9905 function maybe(value, strict) {
9906 return nativeTypes.Null(value) || typeforce(type, value, strict);
9908 maybe.toJSON = function () {
9909 return '?' + sJSON(type);
9915 object: function object(type) {
9916 function object(value, strict) {
9917 typeforce(nativeTypes.Object, value, strict);
9919 var propertyName, propertyType, propertyValue;
9922 for (propertyName in type) {
9923 propertyType = type[propertyName];
9924 propertyValue = value[propertyName];
9926 typeforce(propertyType, propertyValue, strict);
9929 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9933 for (propertyName in value) {
9934 if (type[propertyName]) continue;
9936 throw new TypeError('Unexpected property "' + propertyName + '"');
9942 object.toJSON = function () {
9949 oneOf: function oneOf() {
9950 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9951 types[_key] = arguments[_key];
9954 function oneOf(value, strict) {
9955 return types.some(function (type) {
9957 return typeforce(type, value, strict);
9963 oneOf.toJSON = function () {
9964 return types.map(sJSON).join('|');
9970 quacksLike: function quacksLike(type) {
9971 function quacksLike(value, strict) {
9972 return type === getValueTypeName(value);
9974 quacksLike.toJSON = function () {
9981 tuple: function tuple() {
9982 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9983 types[_key2] = arguments[_key2];
9986 function tuple(value, strict) {
9987 return types.every(function (type, i) {
9988 return typeforce(type, value[i], strict);
9991 tuple.toJSON = function () {
9992 return '(' + types.map(sJSON).join(', ') + ')';
9998 value: function value(expected) {
9999 function value(actual) {
10000 return actual === expected;
10002 value.toJSON = function () {
10010 function compile(type) {
10011 if (nativeTypes.String(type)) {
10012 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
10014 return nativeTypes[type] || otherTypes.quacksLike(type);
10015 } else if (type && nativeTypes.Object(type)) {
10016 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
10020 for (var propertyName in type) {
10021 compiled[propertyName] = compile(type[propertyName]);
10024 return otherTypes.object(compiled);
10025 } else if (nativeTypes.Function(type)) {
10029 return otherTypes.value(type);
10032 function typeforce(_x3, _x4, _x5) {
10035 _function: while (_again) {
10041 if (nativeTypes.Function(type)) {
10042 if (type(value, strict)) return true;
10044 throw new TypeError(tfErrorString(type, value));
10048 _x3 = compile(type);
10052 continue _function;
10056 // assign all types to typeforce function
10058 Object.keys(nativeTypes).forEach(function (typeName) {
10059 var nativeType = nativeTypes[typeName];
10060 nativeType.toJSON = function () {
10064 typeforce[typeName] = nativeType;
10067 for (typeName in otherTypes) {
10068 typeforce[typeName] = otherTypes[typeName];
10071 module.exports = typeforce;
10072 module.exports.compile = compile;
10073 }).call(this,require("buffer").Buffer)
10074 },{"buffer":
7}],
54:[function(require,module,exports){
10075 (function (Buffer){
10076 var assert = require('assert')
10077 var base58check = require('bs58check')
10078 var typeForce = require('typeforce')
10079 var networks = require('./networks')
10080 var scripts = require('./scripts')
10082 function findScriptTypeByVersion (version) {
10083 for (var networkName in networks) {
10084 var network = networks[networkName]
10086 if (version === network.pubKeyHash) return 'pubkeyhash'
10087 if (version === network.scriptHash) return 'scripthash'
10091 function Address (hash, version) {
10092 typeForce('Buffer', hash)
10094 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10095 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10098 this.version = version
10101 Address.fromBase58Check = function (string) {
10102 var payload = base58check.decode(string)
10103 var version = payload.readUInt8(
0)
10104 var hash = payload.slice(
1)
10106 return new Address(hash, version)
10109 Address.fromOutputScript = function (script, network) {
10110 network = network || networks.bitcoin
10112 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10113 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10115 assert(false, script.toASM() + ' has no matching Address')
10118 Address.prototype.toBase58Check = function () {
10119 var payload = new Buffer(
21)
10120 payload.writeUInt8(this.version,
0)
10121 this.hash.copy(payload,
1)
10123 return base58check.encode(payload)
10126 Address.prototype.toOutputScript = function () {
10127 var scriptType = findScriptTypeByVersion(this.version)
10129 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10130 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10132 assert(false, this.toString() + ' has no matching Script')
10135 Address.prototype.toString = Address.prototype.toBase58Check
10137 module.exports = Address
10139 }).call(this,require("buffer").Buffer)
10140 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10141 var bs58check = require('bs58check')
10143 function decode () {
10144 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10146 return bs58check.decode.apply(undefined, arguments)
10149 function encode () {
10150 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10152 return bs58check.encode.apply(undefined, arguments)
10160 },{"bs58check":
31}],
56:[function(require,module,exports){
10161 (function (Buffer){
10162 var assert = require('assert')
10163 var bufferutils = require('./bufferutils')
10164 var crypto = require('./crypto')
10166 var Transaction = require('./transaction')
10168 function Block () {
10170 this.prevHash = null
10171 this.merkleRoot = null
10177 Block.fromBuffer = function (buffer) {
10178 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10181 function readSlice (n) {
10183 return buffer.slice(offset - n, offset)
10186 function readUInt32 () {
10187 var i = buffer.readUInt32LE(offset)
10192 var block = new Block()
10193 block.version = readUInt32()
10194 block.prevHash = readSlice(
32)
10195 block.merkleRoot = readSlice(
32)
10196 block.timestamp = readUInt32()
10197 block.bits = readUInt32()
10198 block.nonce = readUInt32()
10200 if (buffer.length ===
80) return block
10202 function readVarInt () {
10203 var vi = bufferutils.readVarInt(buffer, offset)
10208 // FIXME: poor performance
10209 function readTransaction () {
10210 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10212 offset += tx.toBuffer().length
10216 var nTransactions = readVarInt()
10217 block.transactions = []
10219 for (var i =
0; i < nTransactions; ++i) {
10220 var tx = readTransaction()
10221 block.transactions.push(tx)
10227 Block.fromHex = function (hex) {
10228 return Block.fromBuffer(new Buffer(hex, 'hex'))
10231 Block.prototype.getHash = function () {
10232 return crypto.hash256(this.toBuffer(true))
10235 Block.prototype.getId = function () {
10236 return bufferutils.reverse(this.getHash()).toString('hex')
10239 Block.prototype.getUTCDate = function () {
10240 var date = new Date(
0) // epoch
10241 date.setUTCSeconds(this.timestamp)
10246 Block.prototype.toBuffer = function (headersOnly) {
10247 var buffer = new Buffer(
80)
10250 function writeSlice (slice) {
10251 slice.copy(buffer, offset)
10252 offset += slice.length
10255 function writeUInt32 (i) {
10256 buffer.writeUInt32LE(i, offset)
10260 writeUInt32(this.version)
10261 writeSlice(this.prevHash)
10262 writeSlice(this.merkleRoot)
10263 writeUInt32(this.timestamp)
10264 writeUInt32(this.bits)
10265 writeUInt32(this.nonce)
10267 if (headersOnly || !this.transactions) return buffer
10269 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10270 var txBuffers = this.transactions.map(function (tx) {
10271 return tx.toBuffer()
10274 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10277 Block.prototype.toHex = function (headersOnly) {
10278 return this.toBuffer(headersOnly).toString('hex')
10281 module.exports = Block
10283 }).call(this,require("buffer").Buffer)
10284 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10285 (function (Buffer){
10286 var assert = require('assert')
10287 var opcodes = require('./opcodes')
10289 // https://github.com/feross/buffer/blob/master/index.js#L1127
10290 function verifuint (value, max) {
10291 assert(typeof value === 'number', 'cannot write a non-number as a number')
10292 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10293 assert(value <= max, 'value is larger than maximum value for type')
10294 assert(Math.floor(value) === value, 'value has a fractional component')
10297 function pushDataSize (i) {
10298 return i < opcodes.OP_PUSHDATA1 ?
1
10304 function readPushDataInt (buffer, offset) {
10305 var opcode = buffer.readUInt8(offset)
10309 if (opcode < opcodes.OP_PUSHDATA1) {
10314 } else if (opcode === opcodes.OP_PUSHDATA1) {
10315 if (offset +
2 > buffer.length) return null
10316 number = buffer.readUInt8(offset +
1)
10320 } else if (opcode === opcodes.OP_PUSHDATA2) {
10321 if (offset +
3 > buffer.length) return null
10322 number = buffer.readUInt16LE(offset +
1)
10327 if (offset +
5 > buffer.length) return null
10328 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10330 number = buffer.readUInt32LE(offset +
1)
10341 function readUInt64LE (buffer, offset) {
10342 var a = buffer.readUInt32LE(offset)
10343 var b = buffer.readUInt32LE(offset +
4)
10346 verifuint(b + a,
0x001fffffffffffff)
10351 function readVarInt (buffer, offset) {
10352 var t = buffer.readUInt8(offset)
10361 } else if (t <
254) {
10362 number = buffer.readUInt16LE(offset +
1)
10366 } else if (t <
255) {
10367 number = buffer.readUInt32LE(offset +
1)
10372 number = readUInt64LE(buffer, offset +
1)
10382 function writePushDataInt (buffer, number, offset) {
10383 var size = pushDataSize(number)
10387 buffer.writeUInt8(number, offset)
10390 } else if (size ===
2) {
10391 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10392 buffer.writeUInt8(number, offset +
1)
10395 } else if (size ===
3) {
10396 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10397 buffer.writeUInt16LE(number, offset +
1)
10401 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10402 buffer.writeUInt32LE(number, offset +
1)
10408 function writeUInt64LE (buffer, value, offset) {
10409 verifuint(value,
0x001fffffffffffff)
10411 buffer.writeInt32LE(value & -
1, offset)
10412 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10415 function varIntSize (i) {
10418 : i <
0x100000000 ?
5
10422 function writeVarInt (buffer, number, offset) {
10423 var size = varIntSize(number)
10427 buffer.writeUInt8(number, offset)
10430 } else if (size ===
3) {
10431 buffer.writeUInt8(
253, offset)
10432 buffer.writeUInt16LE(number, offset +
1)
10435 } else if (size ===
5) {
10436 buffer.writeUInt8(
254, offset)
10437 buffer.writeUInt32LE(number, offset +
1)
10441 buffer.writeUInt8(
255, offset)
10442 writeUInt64LE(buffer, number, offset +
1)
10448 function varIntBuffer (i) {
10449 var size = varIntSize(i)
10450 var buffer = new Buffer(size)
10451 writeVarInt(buffer, i,
0)
10456 function reverse (buffer) {
10457 var buffer2 = new Buffer(buffer)
10458 Array.prototype.reverse.call(buffer2)
10463 pushDataSize: pushDataSize,
10464 readPushDataInt: readPushDataInt,
10465 readUInt64LE: readUInt64LE,
10466 readVarInt: readVarInt,
10468 varIntBuffer: varIntBuffer,
10469 varIntSize: varIntSize,
10470 writePushDataInt: writePushDataInt,
10471 writeUInt64LE: writeUInt64LE,
10472 writeVarInt: writeVarInt
10475 }).call(this,require("buffer").Buffer)
10476 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10477 var createHash = require('create-hash')
10479 function hash160 (buffer) {
10480 return ripemd160(sha256(buffer))
10483 function hash256 (buffer) {
10484 return sha256(sha256(buffer))
10487 function ripemd160 (buffer) {
10488 return createHash('rmd160').update(buffer).digest()
10491 function sha1 (buffer) {
10492 return createHash('sha1').update(buffer).digest()
10495 function sha256 (buffer) {
10496 return createHash('sha256').update(buffer).digest()
10499 // FIXME: Name not consistent with others
10500 var createHmac = require('create-hmac')
10502 function HmacSHA256 (buffer, secret) {
10503 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10504 return createHmac('sha256', secret).update(buffer).digest()
10507 function HmacSHA512 (buffer, secret) {
10508 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10509 return createHmac('sha512', secret).update(buffer).digest()
10513 ripemd160: ripemd160,
10518 HmacSHA256: HmacSHA256,
10519 HmacSHA512: HmacSHA512
10522 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10523 (function (Buffer){
10524 var assert = require('assert')
10525 var createHmac = require('create-hmac')
10526 var typeForce = require('typeforce')
10528 var BigInteger = require('bigi')
10529 var ECSignature = require('./ecsignature')
10531 var ZERO = new Buffer([
0])
10532 var ONE = new Buffer([
1])
10534 // https://tools.ietf.org/html/rfc6979#section-
3.2
10535 function deterministicGenerateK (curve, hash, d, checkSig) {
10536 typeForce('Buffer', hash)
10537 typeForce('BigInteger', d)
10539 // FIXME: remove/uncomment for
2.0.0
10540 // typeForce('Function', checkSig)
10542 if (typeof checkSig !== 'function') {
10543 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10545 checkSig = function (k) {
10548 var e = BigInteger.fromBuffer(hash)
10550 var Q = G.multiply(k)
10552 if (curve.isInfinity(Q))
10555 var r = Q.affineX.mod(n)
10556 if (r.signum() ===
0)
10559 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10560 if (s.signum() ===
0)
10568 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10570 var x = d.toBuffer(
32)
10571 var k = new Buffer(
32)
10572 var v = new Buffer(
32)
10574 // Step A, ignored as hash already provided
10582 k = createHmac('sha256', k)
10590 v = createHmac('sha256', k).update(v).digest()
10593 k = createHmac('sha256', k)
10601 v = createHmac('sha256', k).update(v).digest()
10603 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10605 v = createHmac('sha256', k).update(v).digest()
10607 var T = BigInteger.fromBuffer(v)
10609 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10610 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10611 k = createHmac('sha256', k)
10616 v = createHmac('sha256', k).update(v).digest()
10618 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10620 v = createHmac('sha256', k).update(v).digest()
10621 T = BigInteger.fromBuffer(v)
10627 function sign (curve, hash, d) {
10630 var e = BigInteger.fromBuffer(hash)
10634 deterministicGenerateK(curve, hash, d, function (k) {
10635 var Q = G.multiply(k)
10637 if (curve.isInfinity(Q))
10640 r = Q.affineX.mod(n)
10641 if (r.signum() ===
0)
10644 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10645 if (s.signum() ===
0)
10651 var N_OVER_TWO = n.shiftRight(
1)
10653 // enforce low S values, see bip62: 'low s values in signatures'
10654 if (s.compareTo(N_OVER_TWO)
> 0) {
10658 return new ECSignature(r, s)
10661 function verifyRaw (curve, e, signature, Q) {
10665 var r = signature.r
10666 var s = signature.s
10668 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10669 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10670 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10673 var c = s.modInverse(n)
10675 //
1.4.4 Compute u1 = es^−
1 mod n
10676 // u2 = rs^−
1 mod n
10677 var u1 = e.multiply(c).mod(n)
10678 var u2 = r.multiply(c).mod(n)
10680 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10681 var R = G.multiplyTwo(u1, Q, u2)
10682 var v = R.affineX.mod(n)
10684 //
1.4.5 (cont.) Enforce R is not at infinity
10685 if (curve.isInfinity(R)) return false
10687 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10691 function verify (curve, hash, signature, Q) {
10692 //
1.4.2 H = Hash(M), already done by the user
10694 var e = BigInteger.fromBuffer(hash)
10696 return verifyRaw(curve, e, signature, Q)
10700 * Recover a public key from a signature.
10702 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10703 * Key Recovery Operation".
10705 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10707 function recoverPubKey (curve, e, signature, i) {
10708 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10713 var r = signature.r
10714 var s = signature.s
10716 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10717 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10719 // A set LSB signifies that the y-coordinate is odd
10722 // The more significant bit specifies whether we should use the
10723 // first or second candidate key.
10724 var isSecondKey = i
>> 1
10726 //
1.1 Let x = r + jn
10727 var x = isSecondKey ? r.add(n) : r
10728 var R = curve.pointFromX(isYOdd, x)
10730 //
1.4 Check that nR is at infinity
10731 var nR = R.multiply(n)
10732 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10734 // Compute -e from e
10735 var eNeg = e.negate().mod(n)
10737 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10738 // Q = r^-
1 (sR + -eG)
10739 var rInv = r.modInverse(n)
10741 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10748 * Calculate pubkey extraction parameter.
10750 * When extracting a pubkey from a signature, we have to
10751 * distinguish four different cases. Rather than putting this
10752 * burden on the verifier, Bitcoin includes a
2-bit value with the
10755 * This function simply tries all four cases and returns the value
10756 * that resulted in a successful pubkey recovery.
10758 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10759 for (var i =
0; i <
4; i++) {
10760 var Qprime = recoverPubKey(curve, e, signature, i)
10763 if (Qprime.equals(Q)) {
10768 throw new Error('Unable to find valid recovery factor')
10772 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10773 deterministicGenerateK: deterministicGenerateK,
10774 recoverPubKey: recoverPubKey,
10777 verifyRaw: verifyRaw
10780 }).call(this,require(
"buffer").Buffer)
10781 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10782 (function (Buffer){
10783 var assert = require('assert')
10784 var base58check = require('bs58check')
10785 var ecdsa = require('./ecdsa')
10786 var networks = require('./networks')
10787 var randomBytes = require('randombytes')
10788 var typeForce = require('typeforce')
10790 var BigInteger = require('bigi')
10791 var ECPubKey = require('./ecpubkey')
10793 var ecurve = require('ecurve')
10794 var secp256k1 = ecurve.getCurveByName('secp256k1')
10796 function ECKey (d, compressed) {
10797 assert(d.signum()
> 0, 'Private key must be greater than
0')
10798 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10800 var Q = ECKey.curve.G.multiply(d)
10803 this.pub = new ECPubKey(Q, compressed)
10807 ECKey.curve = secp256k1
10809 // Static constructors
10810 ECKey.fromWIF = function (string) {
10811 var payload = base58check.decode(string)
10812 var compressed = false
10814 // Ignore the version byte
10815 payload = payload.slice(
1)
10817 if (payload.length ===
33) {
10818 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10820 // Truncate the compression flag
10821 payload = payload.slice(
0, -
1)
10825 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10827 var d = BigInteger.fromBuffer(payload)
10828 return new ECKey(d, compressed)
10831 ECKey.makeRandom = function (compressed, rng) {
10832 rng = rng || randomBytes
10834 var buffer = rng(
32)
10835 typeForce('Buffer', buffer)
10836 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10838 var d = BigInteger.fromBuffer(buffer)
10839 d = d.mod(ECKey.curve.n)
10841 return new ECKey(d, compressed)
10844 // Export functions
10845 ECKey.prototype.toWIF = function (network) {
10846 network = network || networks.bitcoin
10848 var bufferLen = this.pub.compressed ?
34 :
33
10849 var buffer = new Buffer(bufferLen)
10851 buffer.writeUInt8(network.wif,
0)
10852 this.d.toBuffer(
32).copy(buffer,
1)
10854 if (this.pub.compressed) {
10855 buffer.writeUInt8(
0x01,
33)
10858 return base58check.encode(buffer)
10862 ECKey.prototype.sign = function (hash) {
10863 return ecdsa.sign(ECKey.curve, hash, this.d)
10866 module.exports = ECKey
10868 }).call(this,require(
"buffer").Buffer)
10869 },{
"./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){
10870 (function (Buffer){
10871 var crypto = require('./crypto')
10872 var ecdsa = require('./ecdsa')
10873 var typeForce = require('typeforce')
10874 var networks = require('./networks')
10876 var Address = require('./address')
10878 var ecurve = require('ecurve')
10879 var secp256k1 = ecurve.getCurveByName('secp256k1')
10881 function ECPubKey (Q, compressed) {
10882 if (compressed === undefined) {
10886 typeForce('Point', Q)
10887 typeForce('Boolean', compressed)
10889 this.compressed = compressed
10894 ECPubKey.curve = secp256k1
10896 // Static constructors
10897 ECPubKey.fromBuffer = function (buffer) {
10898 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10899 return new ECPubKey(Q, Q.compressed)
10902 ECPubKey.fromHex = function (hex) {
10903 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10907 ECPubKey.prototype.getAddress = function (network) {
10908 network = network || networks.bitcoin
10910 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10913 ECPubKey.prototype.verify = function (hash, signature) {
10914 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10917 // Export functions
10918 ECPubKey.prototype.toBuffer = function () {
10919 return this.Q.getEncoded(this.compressed)
10922 ECPubKey.prototype.toHex = function () {
10923 return this.toBuffer().toString('hex')
10926 module.exports = ECPubKey
10928 }).call(this,require(
"buffer").Buffer)
10929 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10930 (function (Buffer){
10931 var assert = require('assert')
10932 var typeForce = require('typeforce')
10934 var BigInteger = require('bigi')
10936 function ECSignature (r, s) {
10937 typeForce('BigInteger', r)
10938 typeForce('BigInteger', s)
10944 ECSignature.parseCompact = function (buffer) {
10945 assert.equal(buffer.length,
65, 'Invalid signature length')
10946 var i = buffer.readUInt8(
0) -
27
10949 assert.equal(i, i &
7, 'Invalid signature parameter')
10950 var compressed = !!(i &
4)
10952 // Recovery param only
10955 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10956 var s = BigInteger.fromBuffer(buffer.slice(
33))
10959 compressed: compressed,
10961 signature: new ECSignature(r, s)
10965 ECSignature.fromDER = function (buffer) {
10966 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10967 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10968 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10970 var rLen = buffer.readUInt8(
3)
10971 assert(rLen
> 0, 'R length is zero')
10973 var offset =
4 + rLen
10974 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10976 var sLen = buffer.readUInt8(offset +
1)
10977 assert(sLen
> 0, 'S length is zero')
10979 var rB = buffer.slice(
4, offset)
10980 var sB = buffer.slice(offset +
2)
10983 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10984 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10987 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10988 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10991 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10992 var r = BigInteger.fromDERInteger(rB)
10993 var s = BigInteger.fromDERInteger(sB)
10995 assert(r.signum()
>=
0, 'R value is negative')
10996 assert(s.signum()
>=
0, 'S value is negative')
10998 return new ECSignature(r, s)
11001 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
11002 ECSignature.parseScriptSignature = function (buffer) {
11003 var hashType = buffer.readUInt8(buffer.length -
1)
11004 var hashTypeMod = hashType & ~
0x80
11006 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11009 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
11014 ECSignature.prototype.toCompact = function (i, compressed) {
11021 var buffer = new Buffer(
65)
11022 buffer.writeUInt8(i,
0)
11024 this.r.toBuffer(
32).copy(buffer,
1)
11025 this.s.toBuffer(
32).copy(buffer,
33)
11030 ECSignature.prototype.toDER = function () {
11031 var rBa = this.r.toDERInteger()
11032 var sBa = this.s.toDERInteger()
11037 sequence.push(
0x02, rBa.length)
11038 sequence = sequence.concat(rBa)
11041 sequence.push(
0x02, sBa.length)
11042 sequence = sequence.concat(sBa)
11045 sequence.unshift(
0x30, sequence.length)
11047 return new Buffer(sequence)
11050 ECSignature.prototype.toScriptSignature = function (hashType) {
11051 var hashTypeMod = hashType & ~
0x80
11052 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11054 var hashTypeBuffer = new Buffer(
1)
11055 hashTypeBuffer.writeUInt8(hashType,
0)
11057 return Buffer.concat([this.toDER(), hashTypeBuffer])
11060 module.exports = ECSignature
11062 }).call(this,require(
"buffer").Buffer)
11063 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11064 (function (Buffer){
11065 var assert = require('assert')
11066 var base58check = require('bs58check')
11067 var bcrypto = require('./crypto')
11068 var createHmac = require('create-hmac')
11069 var typeForce = require('typeforce')
11070 var networks = require('./networks')
11072 var BigInteger = require('bigi')
11073 var ECKey = require('./eckey')
11074 var ECPubKey = require('./ecpubkey')
11076 var ecurve = require('ecurve')
11077 var curve = ecurve.getCurveByName('secp256k1')
11079 function findBIP32NetworkByVersion (version) {
11080 for (var name in networks) {
11081 var network = networks[name]
11083 if (version === network.bip32.private || version === network.bip32.public) {
11088 assert(false, 'Could not find network for ' + version.toString(
16))
11091 function HDNode (K, chainCode, network) {
11092 network = network || networks.bitcoin
11094 typeForce('Buffer', chainCode)
11096 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11097 assert(network.bip32, 'Unknown BIP32 constants for network')
11099 this.chainCode = chainCode
11102 this.parentFingerprint =
0x00000000
11103 this.network = network
11105 if (K instanceof BigInteger) {
11106 this.privKey = new ECKey(K, true)
11107 this.pubKey = this.privKey.pub
11108 } else if (K instanceof ECKey) {
11109 assert(K.pub.compressed, 'ECKey must be compressed')
11111 this.pubKey = K.pub
11112 } else if (K instanceof ECPubKey) {
11113 assert(K.compressed, 'ECPubKey must be compressed')
11116 this.pubKey = new ECPubKey(K, true)
11120 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11121 HDNode.HIGHEST_BIT =
0x80000000
11124 HDNode.fromSeedBuffer = function (seed, network) {
11125 typeForce('Buffer', seed)
11127 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11128 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11130 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11131 var IL = I.slice(
0,
32)
11132 var IR = I.slice(
32)
11134 // In case IL is
0 or
>= n, the master key is invalid
11135 // This is handled by `new ECKey` in the HDNode constructor
11136 var pIL = BigInteger.fromBuffer(IL)
11138 return new HDNode(pIL, IR, network)
11141 HDNode.fromSeedHex = function (hex, network) {
11142 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11145 HDNode.fromBase58 = function (string, network) {
11146 return HDNode.fromBuffer(base58check.decode(string), network, true)
11149 // FIXME: remove in
2.x.y
11150 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11151 if (!__ignoreDeprecation) {
11152 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11155 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11157 //
4 byte: version bytes
11158 var version = buffer.readUInt32BE(
0)
11161 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11165 network = findBIP32NetworkByVersion(version)
11168 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11169 var depth = buffer.readUInt8(
4)
11171 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11172 var parentFingerprint = buffer.readUInt32BE(
5)
11174 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11177 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11178 // This is encoded in MSB order. (
0x00000000 if master key)
11179 var index = buffer.readUInt32BE(
9)
11180 assert(depth
> 0 || index ===
0, 'Invalid index')
11182 //
32 bytes: the chain code
11183 var chainCode = buffer.slice(
13,
45)
11186 //
33 bytes: private key data (
0x00 + k)
11187 if (version === network.bip32.private) {
11188 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11189 data = buffer.slice(
46,
78)
11190 var d = BigInteger.fromBuffer(data)
11191 hd = new HDNode(d, chainCode, network)
11193 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11195 data = buffer.slice(
45,
78)
11196 var Q = ecurve.Point.decodeFrom(curve, data)
11197 assert.equal(Q.compressed, true, 'Invalid public key')
11199 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11200 // If not, the extended public key is invalid.
11203 hd = new HDNode(Q, chainCode, network)
11208 hd.parentFingerprint = parentFingerprint
11213 // FIXME: remove in
2.x.y
11214 HDNode.fromHex = function (hex, network) {
11215 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11218 HDNode.prototype.getIdentifier = function () {
11219 return bcrypto.hash160(this.pubKey.toBuffer())
11222 HDNode.prototype.getFingerprint = function () {
11223 return this.getIdentifier().slice(
0,
4)
11226 HDNode.prototype.getAddress = function () {
11227 return this.pubKey.getAddress(this.network)
11230 HDNode.prototype.neutered = function () {
11231 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11232 neutered.depth = this.depth
11233 neutered.index = this.index
11234 neutered.parentFingerprint = this.parentFingerprint
11239 HDNode.prototype.toBase58 = function (isPrivate) {
11240 return base58check.encode(this.toBuffer(isPrivate, true))
11243 // FIXME: remove in
2.x.y
11244 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11245 if (isPrivate === undefined) {
11246 isPrivate = !!this.privKey
11248 // FIXME: remove in
2.x.y
11250 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11253 if (!__ignoreDeprecation) {
11254 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11258 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11259 var buffer = new Buffer(HDNode.LENGTH)
11261 //
4 bytes: version bytes
11262 buffer.writeUInt32BE(version,
0)
11265 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11266 buffer.writeUInt8(this.depth,
4)
11268 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11269 buffer.writeUInt32BE(this.parentFingerprint,
5)
11271 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11272 // This is encoded in Big endian. (
0x00000000 if master key)
11273 buffer.writeUInt32BE(this.index,
9)
11275 //
32 bytes: the chain code
11276 this.chainCode.copy(buffer,
13)
11278 //
33 bytes: the public key or private key data
11280 // FIXME: remove in
2.x.y
11281 assert(this.privKey, 'Missing private key')
11283 //
0x00 + k for private keys
11284 buffer.writeUInt8(
0,
45)
11285 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11287 // X9.62 encoding for public keys
11288 this.pubKey.toBuffer().copy(buffer,
45)
11294 // FIXME: remove in
2.x.y
11295 HDNode.prototype.toHex = function (isPrivate) {
11296 return this.toBuffer(isPrivate).toString('hex')
11299 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11300 HDNode.prototype.derive = function (index) {
11301 var isHardened = index
>= HDNode.HIGHEST_BIT
11302 var indexBuffer = new Buffer(
4)
11303 indexBuffer.writeUInt32BE(index,
0)
11309 assert(this.privKey, 'Could not derive hardened child key')
11311 // data =
0x00 || ser256(kpar) || ser32(index)
11312 data = Buffer.concat([
11313 this.privKey.d.toBuffer(
33),
11319 // data = serP(point(kpar)) || ser32(index)
11320 // = serP(Kpar) || ser32(index)
11321 data = Buffer.concat([
11322 this.pubKey.toBuffer(),
11327 var I = createHmac('sha512', this.chainCode).update(data).digest()
11328 var IL = I.slice(
0,
32)
11329 var IR = I.slice(
32)
11331 var pIL = BigInteger.fromBuffer(IL)
11333 // In case parse256(IL)
>= n, proceed with the next value for i
11334 if (pIL.compareTo(curve.n)
>=
0) {
11335 return this.derive(index +
1)
11338 // Private parent key -
> private child key
11340 if (this.privKey) {
11341 // ki = parse256(IL) + kpar (mod n)
11342 var ki = pIL.add(this.privKey.d).mod(curve.n)
11344 // In case ki ==
0, proceed with the next value for i
11345 if (ki.signum() ===
0) {
11346 return this.derive(index +
1)
11349 hd = new HDNode(ki, IR, this.network)
11351 // Public parent key -
> public child key
11353 // Ki = point(parse256(IL)) + Kpar
11355 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11357 // In case Ki is the point at infinity, proceed with the next value for i
11358 if (curve.isInfinity(Ki)) {
11359 return this.derive(index +
1)
11362 hd = new HDNode(Ki, IR, this.network)
11365 hd.depth = this.depth +
1
11367 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11372 HDNode.prototype.deriveHardened = function (index) {
11373 // Only derives hardened private keys by default
11374 return this.derive(index + HDNode.HIGHEST_BIT)
11377 HDNode.prototype.toString = HDNode.prototype.toBase58
11379 module.exports = HDNode
11381 }).call(this,require("buffer").Buffer)
11382 },{"./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){
11384 Address: require('./address'),
11385 base58check: require('./base58check'),
11386 Block: require('./block'),
11387 bufferutils: require('./bufferutils'),
11388 crypto: require('./crypto'),
11389 ecdsa: require('./ecdsa'),
11390 ECKey: require('./eckey'),
11391 ECPubKey: require('./ecpubkey'),
11392 ECSignature: require('./ecsignature'),
11393 Message: require('./message'),
11394 opcodes: require('./opcodes'),
11395 HDNode: require('./hdnode'),
11396 Script: require('./script'),
11397 scripts: require('./scripts'),
11398 Transaction: require('./transaction'),
11399 TransactionBuilder: require('./transaction_builder'),
11400 networks: require('./networks'),
11401 Wallet: require('./wallet')
11404 },{"./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){
11405 (function (Buffer){
11406 var bufferutils = require('./bufferutils')
11407 var crypto = require('./crypto')
11408 var ecdsa = require('./ecdsa')
11409 var networks = require('./networks')
11411 var BigInteger = require('bigi')
11412 var ECPubKey = require('./ecpubkey')
11413 var ECSignature = require('./ecsignature')
11415 var ecurve = require('ecurve')
11416 var ecparams = ecurve.getCurveByName('secp256k1')
11418 function magicHash (message, network) {
11419 var magicPrefix = new Buffer(network.magicPrefix)
11420 var messageBuffer = new Buffer(message)
11421 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11423 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11424 return crypto.hash256(buffer)
11427 function sign (privKey, message, network) {
11428 network = network || networks.bitcoin
11430 var hash = magicHash(message, network)
11431 var signature = privKey.sign(hash)
11432 var e = BigInteger.fromBuffer(hash)
11433 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11435 return signature.toCompact(i, privKey.pub.compressed)
11438 // TODO: network could be implied from address
11439 function verify (address, signature, message, network) {
11440 if (!Buffer.isBuffer(signature)) {
11441 signature = new Buffer(signature, 'base64')
11444 network = network || networks.bitcoin
11446 var hash = magicHash(message, network)
11447 var parsed = ECSignature.parseCompact(signature)
11448 var e = BigInteger.fromBuffer(hash)
11449 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11451 var pubKey = new ECPubKey(Q, parsed.compressed)
11452 return pubKey.getAddress(network).toString() === address.toString()
11456 magicHash: magicHash,
11461 }).call(this,require("buffer").Buffer)
11462 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11463 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11464 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11468 magicPrefix: '\x18Bitcoin Signed Message:\n',
11470 public:
0x0488b21e,
11471 private:
0x0488ade4
11476 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11477 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11478 estimateFee: estimateFee('bitcoin')
11481 magicPrefix: '\x18Bitcoin Signed Message:\n',
11483 public:
0x043587cf,
11484 private:
0x04358394
11489 dustThreshold:
546,
11491 estimateFee: estimateFee('testnet')
11494 magicPrefix: '\x19Litecoin Signed Message:\n',
11496 public:
0x019da462,
11497 private:
0x019d9cfe
11502 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11503 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11504 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11505 estimateFee: estimateFee('litecoin')
11508 magicPrefix: '\x19Dogecoin Signed Message:\n',
11510 public:
0x02facafd,
11511 private:
0x02fac398
11516 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11517 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11518 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11519 estimateFee: estimateFee('dogecoin')
11522 magicPrefix: '\x18Viacoin Signed Message:\n',
11524 public:
0x0488b21e,
11525 private:
0x0488ade4
11530 dustThreshold:
560,
11531 dustSoftThreshold:
100000,
11532 feePerKb:
100000, //
11533 estimateFee: estimateFee('viacoin')
11536 magicPrefix: '\x18Viacoin Signed Message:\n',
11538 public:
0x043587cf,
11539 private:
0x04358394
11544 dustThreshold:
560,
11545 dustSoftThreshold:
100000,
11547 estimateFee: estimateFee('viacointestnet')
11550 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11552 public:
0x019da462,
11553 private:
0x019d9cfe
11558 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11559 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11560 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11561 estimateFee: estimateFee('gamerscoin')
11564 magicPrefix: '\x19Jumbucks Signed Message:\n',
11566 public:
0x037a689a,
11567 private:
0x037a6460
11573 dustSoftThreshold:
10000,
11575 estimateFee: estimateFee('jumbucks')
11578 magicPrefix: '\x18Zetacoin Signed Message:\n',
11580 public:
0x0488b21e,
11581 private:
0x0488ade4
11586 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11587 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11588 estimateFee: estimateFee('zetacoin')
11592 function estimateFee (type) {
11593 return function (tx) {
11594 var network = networks[type]
11595 var baseFee = network.feePerKb
11596 var byteSize = tx.toBuffer().length
11598 var fee = baseFee * Math.ceil(byteSize /
1000)
11599 if (network.dustSoftThreshold === undefined) return fee
11601 tx.outs.forEach(function (e) {
11602 if (e.value < network.dustSoftThreshold) {
11611 module.exports = networks
11613 },{}],
67:[function(require,module,exports){
11654 OP_TOALTSTACK:
107,
11655 OP_FROMALTSTACK:
108,
11687 OP_EQUALVERIFY:
136,
11712 OP_NUMEQUALVERIFY:
157,
11713 OP_NUMNOTEQUAL:
158,
11715 OP_GREATERTHAN:
160,
11716 OP_LESSTHANOREQUAL:
161,
11717 OP_GREATERTHANOREQUAL:
162,
11729 OP_CODESEPARATOR:
171,
11731 OP_CHECKSIGVERIFY:
173,
11732 OP_CHECKMULTISIG:
174,
11733 OP_CHECKMULTISIGVERIFY:
175,
11747 // template matching params
11748 OP_PUBKEYHASH:
253,
11750 OP_INVALIDOPCODE:
255
11753 },{}],
68:[function(require,module,exports){
11754 (function (Buffer){
11755 var assert = require('assert')
11756 var bufferutils = require('./bufferutils')
11757 var crypto = require('./crypto')
11758 var typeForce = require('typeforce')
11759 var opcodes = require('./opcodes')
11761 function Script (buffer, chunks) {
11762 typeForce('Buffer', buffer)
11763 typeForce('Array', chunks)
11765 this.buffer = buffer
11766 this.chunks = chunks
11769 Script.fromASM = function (asm) {
11770 var strChunks = asm.split(' ')
11771 var chunks = strChunks.map(function (strChunk) {
11773 if (strChunk in opcodes) {
11774 return opcodes[strChunk]
11778 return new Buffer(strChunk, 'hex')
11782 return Script.fromChunks(chunks)
11785 Script.fromBuffer = function (buffer) {
11789 while (i < buffer.length) {
11790 var opcode = buffer.readUInt8(i)
11793 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11794 var d = bufferutils.readPushDataInt(buffer, i)
11796 // did reading a pushDataInt fail? return non-chunked script
11797 if (d === null) return new Script(buffer, [])
11800 // attempt to read too much data?
11801 if (i + d.number
> buffer.length) return new Script(buffer, [])
11803 var data = buffer.slice(i, i + d.number)
11810 chunks.push(opcode)
11816 return new Script(buffer, chunks)
11819 Script.fromChunks = function (chunks) {
11820 typeForce('Array', chunks)
11822 var bufferSize = chunks.reduce(function (accum, chunk) {
11824 if (Buffer.isBuffer(chunk)) {
11825 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11832 var buffer = new Buffer(bufferSize)
11835 chunks.forEach(function (chunk) {
11837 if (Buffer.isBuffer(chunk)) {
11838 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11840 chunk.copy(buffer, offset)
11841 offset += chunk.length
11845 buffer.writeUInt8(chunk, offset)
11850 assert.equal(offset, buffer.length, 'Could not decode chunks')
11851 return new Script(buffer, chunks)
11854 Script.fromHex = function (hex) {
11855 return Script.fromBuffer(new Buffer(hex, 'hex'))
11858 Script.EMPTY = Script.fromChunks([])
11860 Script.prototype.getHash = function () {
11861 return crypto.hash160(this.buffer)
11864 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11865 Script.prototype.without = function (needle) {
11866 return Script.fromChunks(this.chunks.filter(function (op) {
11867 return op !== needle
11871 var reverseOps = []
11872 for (var op in opcodes) {
11873 var code = opcodes[op]
11874 reverseOps[code] = op
11877 Script.prototype.toASM = function () {
11878 return this.chunks.map(function (chunk) {
11880 if (Buffer.isBuffer(chunk)) {
11881 return chunk.toString('hex')
11885 return reverseOps[chunk]
11890 Script.prototype.toBuffer = function () {
11894 Script.prototype.toHex = function () {
11895 return this.toBuffer().toString('hex')
11898 module.exports = Script
11900 }).call(this,require("buffer").Buffer)
11901 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11902 (function (Buffer){
11903 var assert = require('assert')
11904 var ops = require('./opcodes')
11905 var typeForce = require('typeforce')
11907 var ecurve = require('ecurve')
11908 var curve = ecurve.getCurveByName('secp256k1')
11910 var ECSignature = require('./ecsignature')
11911 var Script = require('./script')
11913 function isCanonicalPubKey (buffer) {
11914 if (!Buffer.isBuffer(buffer)) return false
11917 ecurve.Point.decodeFrom(curve, buffer)
11919 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11928 function isCanonicalSignature (buffer) {
11929 if (!Buffer.isBuffer(buffer)) return false
11932 ECSignature.parseScriptSignature(buffer)
11934 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/))) {
11944 function isPubKeyHashInput (script) {
11945 return script.chunks.length ===
2 &&
11946 isCanonicalSignature(script.chunks[
0]) &&
11947 isCanonicalPubKey(script.chunks[
1])
11950 function isPubKeyHashOutput (script) {
11951 return script.chunks.length ===
5 &&
11952 script.chunks[
0] === ops.OP_DUP &&
11953 script.chunks[
1] === ops.OP_HASH160 &&
11954 Buffer.isBuffer(script.chunks[
2]) &&
11955 script.chunks[
2].length ===
20 &&
11956 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11957 script.chunks[
4] === ops.OP_CHECKSIG
11960 function isPubKeyInput (script) {
11961 return script.chunks.length ===
1 &&
11962 isCanonicalSignature(script.chunks[
0])
11965 function isPubKeyOutput (script) {
11966 return script.chunks.length ===
2 &&
11967 isCanonicalPubKey(script.chunks[
0]) &&
11968 script.chunks[
1] === ops.OP_CHECKSIG
11971 function isScriptHashInput (script, allowIncomplete) {
11972 if (script.chunks.length <
2) return false
11974 var lastChunk = script.chunks[script.chunks.length -
1]
11975 if (!Buffer.isBuffer(lastChunk)) return false
11977 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11978 var redeemScript = Script.fromBuffer(lastChunk)
11980 // is redeemScript a valid script?
11981 if (redeemScript.chunks.length ===
0) return false
11983 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11986 function isScriptHashOutput (script) {
11987 return script.chunks.length ===
3 &&
11988 script.chunks[
0] === ops.OP_HASH160 &&
11989 Buffer.isBuffer(script.chunks[
1]) &&
11990 script.chunks[
1].length ===
20 &&
11991 script.chunks[
2] === ops.OP_EQUAL
11994 // allowIncomplete is to account for combining signatures
11995 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11996 function isMultisigInput (script, allowIncomplete) {
11997 if (script.chunks.length <
2) return false
11998 if (script.chunks[
0] !== ops.OP_0) return false
12000 if (allowIncomplete) {
12001 return script.chunks.slice(
1).every(function (chunk) {
12002 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12006 return script.chunks.slice(
1).every(isCanonicalSignature)
12009 function isMultisigOutput (script) {
12010 if (script.chunks.length <
4) return false
12011 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
12013 var mOp = script.chunks[
0]
12014 if (mOp === ops.OP_0) return false
12015 if (mOp < ops.OP_1) return false
12016 if (mOp
> ops.OP_16) return false
12018 var nOp = script.chunks[script.chunks.length -
2]
12019 if (nOp === ops.OP_0) return false
12020 if (nOp < ops.OP_1) return false
12021 if (nOp
> ops.OP_16) return false
12023 var m = mOp - (ops.OP_1 -
1)
12024 var n = nOp - (ops.OP_1 -
1)
12025 if (n < m) return false
12027 var pubKeys = script.chunks.slice(
1, -
2)
12028 if (n < pubKeys.length) return false
12030 return pubKeys.every(isCanonicalPubKey)
12033 function isNullDataOutput (script) {
12034 return script.chunks[
0] === ops.OP_RETURN
12037 function classifyOutput (script) {
12038 typeForce('Script', script)
12040 if (isPubKeyHashOutput(script)) {
12041 return 'pubkeyhash'
12042 } else if (isScriptHashOutput(script)) {
12043 return 'scripthash'
12044 } else if (isMultisigOutput(script)) {
12046 } else if (isPubKeyOutput(script)) {
12048 } else if (isNullDataOutput(script)) {
12052 return 'nonstandard'
12055 function classifyInput (script, allowIncomplete) {
12056 typeForce('Script', script)
12058 if (isPubKeyHashInput(script)) {
12059 return 'pubkeyhash'
12060 } else if (isMultisigInput(script, allowIncomplete)) {
12062 } else if (isScriptHashInput(script, allowIncomplete)) {
12063 return 'scripthash'
12064 } else if (isPubKeyInput(script)) {
12068 return 'nonstandard'
12071 // Standard Script Templates
12072 // {pubKey} OP_CHECKSIG
12073 function pubKeyOutput (pubKey) {
12074 return Script.fromChunks([
12080 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12081 function pubKeyHashOutput (hash) {
12082 typeForce('Buffer', hash)
12084 return Script.fromChunks([
12088 ops.OP_EQUALVERIFY,
12093 // OP_HASH160 {scriptHash} OP_EQUAL
12094 function scriptHashOutput (hash) {
12095 typeForce('Buffer', hash)
12097 return Script.fromChunks([
12104 // m [pubKeys ...] n OP_CHECKMULTISIG
12105 function multisigOutput (m, pubKeys) {
12106 typeForce(['ECPubKey'], pubKeys)
12108 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12110 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12111 return pubKey.toBuffer()
12113 var n = pubKeys.length
12115 return Script.fromChunks([].concat(
12116 (ops.OP_1 -
1) + m,
12118 (ops.OP_1 -
1) + n,
12119 ops.OP_CHECKMULTISIG
12124 function pubKeyInput (signature) {
12125 typeForce('Buffer', signature)
12127 return Script.fromChunks([signature])
12130 // {signature} {pubKey}
12131 function pubKeyHashInput (signature, pubKey) {
12132 typeForce('Buffer', signature)
12134 return Script.fromChunks([signature, pubKey.toBuffer()])
12137 //
<scriptSig> {serialized scriptPubKey script}
12138 function scriptHashInput (scriptSig, scriptPubKey) {
12139 return Script.fromChunks([].concat(
12141 scriptPubKey.toBuffer()
12145 // OP_0 [signatures ...]
12146 function multisigInput (signatures, scriptPubKey) {
12147 if (scriptPubKey) {
12148 assert(isMultisigOutput(scriptPubKey))
12150 var mOp = scriptPubKey.chunks[
0]
12151 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12152 var m = mOp - (ops.OP_1 -
1)
12153 var n = nOp - (ops.OP_1 -
1)
12155 assert(signatures.length
>= m, 'Not enough signatures provided')
12156 assert(signatures.length <= n, 'Too many signatures provided')
12159 return Script.fromChunks([].concat(ops.OP_0, signatures))
12162 function nullDataOutput (data) {
12163 return Script.fromChunks([ops.OP_RETURN, data])
12167 isCanonicalPubKey: isCanonicalPubKey,
12168 isCanonicalSignature: isCanonicalSignature,
12169 isPubKeyHashInput: isPubKeyHashInput,
12170 isPubKeyHashOutput: isPubKeyHashOutput,
12171 isPubKeyInput: isPubKeyInput,
12172 isPubKeyOutput: isPubKeyOutput,
12173 isScriptHashInput: isScriptHashInput,
12174 isScriptHashOutput: isScriptHashOutput,
12175 isMultisigInput: isMultisigInput,
12176 isMultisigOutput: isMultisigOutput,
12177 isNullDataOutput: isNullDataOutput,
12178 classifyOutput: classifyOutput,
12179 classifyInput: classifyInput,
12180 pubKeyOutput: pubKeyOutput,
12181 pubKeyHashOutput: pubKeyHashOutput,
12182 scriptHashOutput: scriptHashOutput,
12183 multisigOutput: multisigOutput,
12184 pubKeyInput: pubKeyInput,
12185 pubKeyHashInput: pubKeyHashInput,
12186 scriptHashInput: scriptHashInput,
12187 multisigInput: multisigInput,
12188 dataOutput: function (data) {
12189 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12190 return nullDataOutput(data)
12192 nullDataOutput: nullDataOutput
12195 }).call(this,require("buffer").Buffer)
12196 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12197 (function (Buffer){
12198 var assert = require('assert')
12199 var bufferutils = require('./bufferutils')
12200 var crypto = require('./crypto')
12201 var typeForce = require('typeforce')
12202 var opcodes = require('./opcodes')
12203 var scripts = require('./scripts')
12205 var Address = require('./address')
12206 var ECSignature = require('./ecsignature')
12207 var Script = require('./script')
12209 function Transaction () {
12216 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12217 Transaction.SIGHASH_ALL =
0x01
12218 Transaction.SIGHASH_NONE =
0x02
12219 Transaction.SIGHASH_SINGLE =
0x03
12220 Transaction.SIGHASH_ANYONECANPAY =
0x80
12222 Transaction.fromBuffer = function (buffer, __disableAssert) {
12224 function readSlice (n) {
12226 return buffer.slice(offset - n, offset)
12229 function readUInt32 () {
12230 var i = buffer.readUInt32LE(offset)
12235 function readUInt64 () {
12236 var i = bufferutils.readUInt64LE(buffer, offset)
12241 function readVarInt () {
12242 var vi = bufferutils.readVarInt(buffer, offset)
12247 function readScript () {
12248 return Script.fromBuffer(readSlice(readVarInt()))
12251 function readGenerationScript () {
12252 return new Script(readSlice(readVarInt()), [])
12255 var tx = new Transaction()
12256 tx.version = readUInt32()
12258 var vinLen = readVarInt()
12259 for (var i =
0; i < vinLen; ++i) {
12260 var hash = readSlice(
32)
12262 if (Transaction.isCoinbaseHash(hash)) {
12265 index: readUInt32(),
12266 script: readGenerationScript(),
12267 sequence: readUInt32()
12272 index: readUInt32(),
12273 script: readScript(),
12274 sequence: readUInt32()
12279 var voutLen = readVarInt()
12280 for (i =
0; i < voutLen; ++i) {
12282 value: readUInt64(),
12283 script: readScript()
12287 tx.locktime = readUInt32()
12289 if (!__disableAssert) {
12290 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12296 Transaction.fromHex = function (hex) {
12297 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12300 Transaction.isCoinbaseHash = function (buffer) {
12301 return Array.prototype.every.call(buffer, function (x) {
12307 * Create a new txIn.
12309 * Can be called with any of:
12311 * - A transaction and an index
12312 * - A transaction hash and an index
12314 * Note that this method does not sign the created input.
12316 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12317 if (sequence === undefined || sequence === null) {
12318 sequence = Transaction.DEFAULT_SEQUENCE
12321 script = script || Script.EMPTY
12323 if (typeof hash === 'string') {
12324 // TxId hex is big-endian, we need little-endian
12325 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12326 } else if (hash instanceof Transaction) {
12327 hash = hash.getHash()
12330 typeForce('Buffer', hash)
12331 typeForce('Number', index)
12332 typeForce('Number', sequence)
12333 typeForce('Script', script)
12335 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12337 // Add the input and return the input's index
12338 return (this.ins.push({
12347 * Create a new txOut.
12349 * Can be called with:
12351 * - A base58 address string and a value
12352 * - An Address object and a value
12353 * - A scriptPubKey Script and a value
12355 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12356 // Attempt to get a valid address if it's a base58 address string
12357 if (typeof scriptPubKey === 'string') {
12358 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12361 // Attempt to get a valid script if it's an Address object
12362 if (scriptPubKey instanceof Address) {
12363 scriptPubKey = scriptPubKey.toOutputScript()
12366 typeForce('Script', scriptPubKey)
12367 typeForce('Number', value)
12369 // Add the output and return the output's index
12370 return (this.outs.push({
12371 script: scriptPubKey,
12376 Transaction.prototype.clone = function () {
12377 var newTx = new Transaction()
12378 newTx.version = this.version
12379 newTx.locktime = this.locktime
12381 newTx.ins = this.ins.map(function (txIn) {
12385 script: txIn.script,
12386 sequence: txIn.sequence
12390 newTx.outs = this.outs.map(function (txOut) {
12392 script: txOut.script,
12401 * Hash transaction for signing a specific input.
12403 * Bitcoin uses a different hash for each signed transaction input. This
12404 * method copies the transaction, makes the necessary changes based on the
12405 * hashType, serializes and finally hashes the result. This hash can then be
12406 * used to sign the transaction input in question.
12408 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12409 // FIXME: remove in
2.x.y
12410 if (arguments[
0] instanceof Script) {
12411 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12413 // swap the arguments (must be stored in tmp, arguments is special)
12414 var tmp = arguments[
0]
12415 inIndex = arguments[
1]
12416 prevOutScript = tmp
12419 typeForce('Number', inIndex)
12420 typeForce('Script', prevOutScript)
12421 typeForce('Number', hashType)
12423 assert(inIndex
>=
0, 'Invalid vin index')
12424 assert(inIndex < this.ins.length, 'Invalid vin index')
12426 var txTmp = this.clone()
12427 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12429 // Blank out other inputs' signatures
12430 txTmp.ins.forEach(function (txIn) {
12431 txIn.script = Script.EMPTY
12433 txTmp.ins[inIndex].script = hashScript
12435 var hashTypeModifier = hashType &
0x1f
12437 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12438 assert(false, 'SIGHASH_NONE not yet supported')
12439 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12440 assert(false, 'SIGHASH_SINGLE not yet supported')
12443 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12444 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12447 var hashTypeBuffer = new Buffer(
4)
12448 hashTypeBuffer.writeInt32LE(hashType,
0)
12450 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12451 return crypto.hash256(buffer)
12454 Transaction.prototype.getHash = function () {
12455 return crypto.hash256(this.toBuffer())
12458 Transaction.prototype.getId = function () {
12459 // TxHash is little-endian, we need big-endian
12460 return bufferutils.reverse(this.getHash()).toString('hex')
12463 Transaction.prototype.toBuffer = function () {
12464 function scriptSize (script) {
12465 var length = script.buffer.length
12467 return bufferutils.varIntSize(length) + length
12470 var buffer = new Buffer(
12472 bufferutils.varIntSize(this.ins.length) +
12473 bufferutils.varIntSize(this.outs.length) +
12474 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12475 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12479 function writeSlice (slice) {
12480 slice.copy(buffer, offset)
12481 offset += slice.length
12484 function writeUInt32 (i) {
12485 buffer.writeUInt32LE(i, offset)
12489 function writeUInt64 (i) {
12490 bufferutils.writeUInt64LE(buffer, i, offset)
12494 function writeVarInt (i) {
12495 var n = bufferutils.writeVarInt(buffer, i, offset)
12499 writeUInt32(this.version)
12500 writeVarInt(this.ins.length)
12502 this.ins.forEach(function (txIn) {
12503 writeSlice(txIn.hash)
12504 writeUInt32(txIn.index)
12505 writeVarInt(txIn.script.buffer.length)
12506 writeSlice(txIn.script.buffer)
12507 writeUInt32(txIn.sequence)
12510 writeVarInt(this.outs.length)
12511 this.outs.forEach(function (txOut) {
12512 writeUInt64(txOut.value)
12513 writeVarInt(txOut.script.buffer.length)
12514 writeSlice(txOut.script.buffer)
12517 writeUInt32(this.locktime)
12522 Transaction.prototype.toHex = function () {
12523 return this.toBuffer().toString('hex')
12526 Transaction.prototype.setInputScript = function (index, script) {
12527 typeForce('Number', index)
12528 typeForce('Script', script)
12530 this.ins[index].script = script
12533 // FIXME: remove in
2.x.y
12534 Transaction.prototype.sign = function (index, privKey, hashType) {
12535 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12537 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12538 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12540 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12541 this.setInputScript(index, scriptSig)
12544 // FIXME: remove in
2.x.y
12545 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12546 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12548 hashType = hashType || Transaction.SIGHASH_ALL
12550 var hash = this.hashForSignature(index, prevOutScript, hashType)
12551 var signature = privKey.sign(hash)
12553 return signature.toScriptSignature(hashType)
12556 // FIXME: remove in
2.x.y
12557 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12558 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12560 var parsed = ECSignature.parseScriptSignature(buffer)
12561 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12563 return pubKey.verify(hash, parsed.signature)
12566 module.exports = Transaction
12568 }).call(this,require("buffer").Buffer)
12569 },{"./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){
12570 (function (Buffer){
12571 var assert = require('assert')
12572 var ops = require('./opcodes')
12573 var scripts = require('./scripts')
12575 var ECPubKey = require('./ecpubkey')
12576 var ECSignature = require('./ecsignature')
12577 var Script = require('./script')
12578 var Transaction = require('./transaction')
12580 function extractInput (txIn) {
12582 var scriptSig = txIn.script
12584 var prevOutType = scripts.classifyInput(scriptSig, true)
12587 // Re-classify if scriptHash
12588 if (prevOutType === 'scripthash') {
12589 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12590 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12592 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12593 scriptType = scripts.classifyInput(scriptSig, true)
12595 scriptType = prevOutType
12598 // Extract hashType, pubKeys and signatures
12599 var hashType, parsed, pubKeys, signatures
12601 switch (scriptType) {
12602 case 'pubkeyhash': {
12603 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12604 hashType = parsed.hashType
12605 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12606 signatures = [parsed.signature]
12607 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12613 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12614 hashType = parsed.hashType
12615 signatures = [parsed.signature]
12617 if (redeemScript) {
12618 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12625 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12626 if (chunk === ops.OP_0) return chunk
12628 var parsed = ECSignature.parseScriptSignature(chunk)
12629 hashType = parsed.hashType
12631 return parsed.signature
12634 if (redeemScript) {
12635 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12643 hashType: hashType,
12644 prevOutScript: prevOutScript,
12645 prevOutType: prevOutType,
12647 redeemScript: redeemScript,
12648 scriptType: scriptType,
12649 signatures: signatures
12653 function TransactionBuilder () {
12654 this.prevTxMap = {}
12655 this.prevOutScripts = {}
12656 this.prevOutTypes = {}
12659 this.tx = new Transaction()
12662 TransactionBuilder.fromTransaction = function (transaction) {
12663 var txb = new TransactionBuilder()
12665 // Copy other transaction fields
12666 txb.tx.version = transaction.version
12667 txb.tx.locktime = transaction.locktime
12669 // Extract/add inputs
12670 transaction.ins.forEach(function (txIn) {
12671 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12674 // Extract/add outputs
12675 transaction.outs.forEach(function (txOut) {
12676 txb.addOutput(txOut.script, txOut.value)
12679 // Extract/add signatures
12680 txb.inputs = transaction.ins.map(function (txIn) {
12681 // TODO: remove me after testcase added
12682 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12684 // Ignore empty scripts
12685 if (txIn.script.buffer.length ===
0) return {}
12687 return extractInput(txIn)
12693 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12697 if (typeof prevTx === 'string') {
12698 prevOutHash = new Buffer(prevTx, 'hex')
12700 // TxId hex is big-endian, we want little-endian hash
12701 Array.prototype.reverse.call(prevOutHash)
12704 } else if (prevTx instanceof Transaction) {
12705 prevOutHash = prevTx.getHash()
12706 prevOutScript = prevTx.outs[index].script
12710 prevOutHash = prevTx
12714 if (prevOutScript) {
12715 var prevOutType = scripts.classifyOutput(prevOutScript)
12717 // if we can, extract pubKey information
12718 switch (prevOutType) {
12720 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12725 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12730 if (prevOutType !== 'scripthash') {
12731 input.scriptType = prevOutType
12734 input.prevOutScript = prevOutScript
12735 input.prevOutType = prevOutType
12738 assert(this.inputs.every(function (input2) {
12739 if (input2.hashType === undefined) return true
12741 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12742 }), 'No, this would invalidate signatures')
12744 var prevOut = prevOutHash.toString('hex') + ':' + index
12745 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12747 var vin = this.tx.addInput(prevOutHash, index, sequence)
12748 this.inputs[vin] = input
12749 this.prevTxMap[prevOut] = vin
12754 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12755 assert(this.inputs.every(function (input) {
12756 if (input.hashType === undefined) return true
12758 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12759 }), 'No, this would invalidate signatures')
12761 return this.tx.addOutput(scriptPubKey, value)
12764 TransactionBuilder.prototype.build = function () {
12765 return this.__build(false)
12767 TransactionBuilder.prototype.buildIncomplete = function () {
12768 return this.__build(true)
12771 var canSignTypes = {
12772 'pubkeyhash': true,
12777 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12778 if (!allowIncomplete) {
12779 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12780 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12783 var tx = this.tx.clone()
12785 // Create script signatures from signature meta-data
12786 this.inputs.forEach(function (input, index) {
12787 var scriptType = input.scriptType
12790 if (!allowIncomplete) {
12791 assert(!!scriptType, 'Transaction is not complete')
12792 assert(scriptType in canSignTypes, scriptType + ' not supported')
12793 assert(input.signatures, 'Transaction is missing signatures')
12796 if (input.signatures) {
12797 switch (scriptType) {
12798 case 'pubkeyhash': {
12799 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12800 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12805 // Array.prototype.map is sparse-compatible
12806 var msSignatures = input.signatures.map(function (signature) {
12807 return signature && signature.toScriptSignature(input.hashType)
12810 // fill in blanks with OP_0
12811 if (allowIncomplete) {
12812 for (var i =
0; i < msSignatures.length; ++i) {
12813 if (msSignatures[i]) continue
12815 msSignatures[i] = ops.OP_0
12818 // Array.prototype.filter returns non-sparse array
12819 msSignatures = msSignatures.filter(function (x) { return x })
12822 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12823 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12828 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12829 scriptSig = scripts.pubKeyInput(pkSignature)
12835 // did we build a scriptSig?
12837 // wrap as scriptHash if necessary
12838 if (input.prevOutType === 'scripthash') {
12839 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12842 tx.setInputScript(index, scriptSig)
12849 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12850 assert(index in this.inputs, 'No input at index: ' + index)
12851 hashType = hashType || Transaction.SIGHASH_ALL
12853 var input = this.inputs[index]
12854 var canSign = input.hashType &&
12855 input.prevOutScript &&
12856 input.prevOutType &&
12858 input.scriptType &&
12861 // are we almost ready to sign?
12863 // if redeemScript was provided, enforce consistency
12864 if (redeemScript) {
12865 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12868 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12872 // must be pay-to-scriptHash?
12873 if (redeemScript) {
12874 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12875 if (input.prevOutScript) {
12876 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12878 var scriptHash = input.prevOutScript.chunks[
1]
12879 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12882 var scriptType = scripts.classifyOutput(redeemScript)
12883 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12886 switch (scriptType) {
12888 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12892 case 'pubkeyhash': {
12893 var pkh1 = redeemScript.chunks[
2]
12894 var pkh2 = privKey.pub.getAddress().hash
12896 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12897 pubKeys = [privKey.pub]
12902 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12907 if (!input.prevOutScript) {
12908 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12909 input.prevOutType = 'scripthash'
12912 input.pubKeys = pubKeys
12913 input.redeemScript = redeemScript
12914 input.scriptType = scriptType
12916 // cannot be pay-to-scriptHash
12918 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12920 // can we otherwise sign this?
12921 if (input.scriptType) {
12922 assert(input.pubKeys, input.scriptType + ' not supported')
12924 // we know nothin' Jon Snow, assume pubKeyHash
12926 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12927 input.prevOutType = 'pubkeyhash'
12928 input.pubKeys = [privKey.pub]
12929 input.scriptType = input.prevOutType
12933 input.hashType = hashType
12934 input.signatures = input.signatures || []
12937 var signatureScript = input.redeemScript || input.prevOutScript
12938 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12940 // enforce signature order matches public keys
12941 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12942 // maintain a local copy of unmatched signatures
12943 var unmatched = input.signatures.slice()
12945 input.signatures = input.pubKeys.map(function (pubKey) {
12948 // check for any matching signatures
12949 unmatched.some(function (signature, i) {
12950 if (!pubKey.verify(signatureHash, signature)) return false
12953 // remove matched signature from unmatched
12954 unmatched.splice(i,
1)
12959 return match || undefined
12963 // enforce in order signing of public keys
12964 assert(input.pubKeys.some(function (pubKey, i) {
12965 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12967 assert(!input.signatures[i], 'Signature already exists')
12968 var signature = privKey.sign(signatureHash)
12969 input.signatures[i] = signature
12972 }, this), 'privateKey cannot sign for this input')
12975 module.exports = TransactionBuilder
12977 }).call(this,require(
"buffer").Buffer)
12978 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12979 (function (Buffer){
12980 var assert = require('assert')
12981 var bufferutils = require('./bufferutils')
12982 var typeForce = require('typeforce')
12983 var networks = require('./networks')
12984 var randomBytes = require('randombytes')
12986 var Address = require('./address')
12987 var HDNode = require('./hdnode')
12988 var TransactionBuilder = require('./transaction_builder')
12989 var Script = require('./script')
12991 function Wallet (seed, network) {
12992 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12994 seed = seed || randomBytes(
32)
12995 network = network || networks.bitcoin
12997 // Stored in a closure to make accidental serialization less likely
12998 var masterKey = HDNode.fromSeedBuffer(seed, network)
13000 // HD first-level child derivation method should be hardened
13001 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
13002 var accountZero = masterKey.deriveHardened(
0)
13003 var externalAccount = accountZero.derive(
0)
13004 var internalAccount = accountZero.derive(
1)
13006 this.addresses = []
13007 this.changeAddresses = []
13008 this.network = network
13011 // FIXME: remove in
2.0.0
13012 this.unspentMap = {}
13014 // FIXME: remove in
2.0.0
13016 this.newMasterKey = function (seed) {
13017 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13019 seed = seed || randomBytes(
32)
13020 masterKey = HDNode.fromSeedBuffer(seed, network)
13022 accountZero = masterKey.deriveHardened(
0)
13023 externalAccount = accountZero.derive(
0)
13024 internalAccount = accountZero.derive(
1)
13027 me.changeAddresses = []
13033 this.getMasterKey = function () {
13036 this.getAccountZero = function () {
13039 this.getExternalAccount = function () {
13040 return externalAccount
13042 this.getInternalAccount = function () {
13043 return internalAccount
13047 Wallet.prototype.createTransaction = function (to, value, options) {
13048 // FIXME: remove in
2.0.0
13049 if (typeof options !== 'object') {
13050 if (options !== undefined) {
13051 console.warn('Non options object parameters are deprecated, use options object instead')
13054 fixedFee: arguments[
2],
13055 changeAddress: arguments[
3]
13060 options = options || {}
13062 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13064 var changeAddress = options.changeAddress
13065 var fixedFee = options.fixedFee
13066 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13068 // filter by minConf, then pending and sort by descending value
13069 var unspents = this.unspents.filter(function (unspent) {
13070 return unspent.confirmations
>= minConf
13071 }).filter(function (unspent) {
13072 return !unspent.pending
13073 }).sort(function (o1, o2) {
13074 return o2.value - o1.value
13079 var subTotal = value
13081 var txb = new TransactionBuilder()
13082 txb.addOutput(to, value)
13084 for (var i =
0; i < unspents.length; ++i) {
13085 var unspent = unspents[i]
13086 addresses.push(unspent.address)
13088 txb.addInput(unspent.txHash, unspent.index)
13090 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13092 accum += unspent.value
13093 subTotal = value + fee
13095 if (accum
>= subTotal) {
13096 var change = accum - subTotal
13098 if (change
> this.network.dustThreshold) {
13099 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13106 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13108 return this.signWith(txb, addresses).build()
13111 // FIXME: remove in
2.0.0
13112 Wallet.prototype.processPendingTx = function (tx) {
13113 this.__processTx(tx, true)
13116 // FIXME: remove in
2.0.0
13117 Wallet.prototype.processConfirmedTx = function (tx) {
13118 this.__processTx(tx, false)
13121 // FIXME: remove in
2.0.0
13122 Wallet.prototype.__processTx = function (tx, isPending) {
13123 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13125 var txId = tx.getId()
13126 var txHash = tx.getHash()
13128 tx.outs.forEach(function (txOut, i) {
13132 address = Address.fromOutputScript(txOut.script, this.network).toString()
13134 if (!(e.message.match(/has no matching Address/)))
13138 var myAddresses = this.addresses.concat(this.changeAddresses)
13139 if (myAddresses.indexOf(address)
> -
1) {
13140 var lookup = txId + ':' + i
13141 if (lookup in this.unspentMap) return
13143 // its unique, add it
13146 confirmations:
0, // no way to determine this without more information
13150 value: txOut.value,
13154 this.unspentMap[lookup] = unspent
13155 this.unspents.push(unspent)
13159 tx.ins.forEach(function (txIn) {
13160 // copy and convert to big-endian hex
13161 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13163 var lookup = txInId + ':' + txIn.index
13164 if (!(lookup in this.unspentMap)) return
13166 var unspent = this.unspentMap[lookup]
13169 unspent.pending = true
13170 unspent.spent = true
13172 delete this.unspentMap[lookup]
13174 this.unspents = this.unspents.filter(function (unspent2) {
13175 return unspent !== unspent2
13181 Wallet.prototype.generateAddress = function () {
13182 var k = this.addresses.length
13183 var address = this.getExternalAccount().derive(k).getAddress()
13185 this.addresses.push(address.toString())
13187 return this.getReceiveAddress()
13190 Wallet.prototype.generateChangeAddress = function () {
13191 var k = this.changeAddresses.length
13192 var address = this.getInternalAccount().derive(k).getAddress()
13194 this.changeAddresses.push(address.toString())
13196 return this.getChangeAddress()
13199 Wallet.prototype.getAddress = function () {
13200 if (this.addresses.length ===
0) {
13201 this.generateAddress()
13204 return this.addresses[this.addresses.length -
1]
13207 Wallet.prototype.getBalance = function (minConf) {
13208 minConf = minConf ||
0
13210 return this.unspents.filter(function (unspent) {
13211 return unspent.confirmations
>= minConf
13213 // FIXME: remove spent filter in
2.0.0
13214 }).filter(function (unspent) {
13215 return !unspent.spent
13216 }).reduce(function (accum, unspent) {
13217 return accum + unspent.value
13221 Wallet.prototype.getChangeAddress = function () {
13222 if (this.changeAddresses.length ===
0) {
13223 this.generateChangeAddress()
13226 return this.changeAddresses[this.changeAddresses.length -
1]
13229 Wallet.prototype.getInternalPrivateKey = function (index) {
13230 return this.getInternalAccount().derive(index).privKey
13233 Wallet.prototype.getPrivateKey = function (index) {
13234 return this.getExternalAccount().derive(index).privKey
13237 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13240 if ((index = this.addresses.indexOf(address))
> -
1) {
13241 return this.getPrivateKey(index)
13244 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13245 return this.getInternalPrivateKey(index)
13248 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13251 Wallet.prototype.getUnspentOutputs = function (minConf) {
13252 minConf = minConf ||
0
13254 return this.unspents.filter(function (unspent) {
13255 return unspent.confirmations
>= minConf
13257 // FIXME: remove spent filter in
2.0.0
13258 }).filter(function (unspent) {
13259 return !unspent.spent
13260 }).map(function (unspent) {
13262 address: unspent.address,
13263 confirmations: unspent.confirmations,
13264 index: unspent.index,
13265 txId: unspent.txId,
13266 value: unspent.value,
13268 // FIXME: remove in
2.0.0
13269 hash: unspent.txId,
13270 pending: unspent.pending
13275 Wallet.prototype.setUnspentOutputs = function (unspents) {
13276 this.unspentMap = {}
13277 this.unspents = unspents.map(function (unspent) {
13278 // FIXME: remove unspent.hash in
2.0.0
13279 var txId = unspent.txId || unspent.hash
13280 var index = unspent.index
13282 // FIXME: remove in
2.0.0
13283 if (unspent.hash !== undefined) {
13284 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13287 // FIXME: remove in
2.0.0
13288 if (index === undefined) {
13289 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13290 index = unspent.outputIndex
13293 typeForce('String', txId)
13294 typeForce('Number', index)
13295 typeForce('Number', unspent.value)
13297 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13298 assert.doesNotThrow(function () {
13299 Address.fromBase58Check(unspent.address)
13300 }, 'Expected Base58 Address, got ' + unspent.address)
13301 assert(isFinite(index), 'Expected finite index, got ' + index)
13303 // FIXME: remove branch in
2.0.0
13304 if (unspent.confirmations !== undefined) {
13305 typeForce('Number', unspent.confirmations)
13308 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13311 address: unspent.address,
13312 confirmations: unspent.confirmations ||
0,
13316 value: unspent.value,
13318 // FIXME: remove in
2.0.0
13319 pending: unspent.pending || false
13322 // FIXME: remove in
2.0.0
13323 this.unspentMap[txId + ':' + index] = unspent
13329 Wallet.prototype.signWith = function (tx, addresses) {
13330 addresses.forEach(function (address, i) {
13331 var privKey = this.getPrivateKeyForAddress(address)
13333 tx.sign(i, privKey)
13339 function estimatePaddedFee (tx, network) {
13340 var tmpTx = tx.clone()
13341 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13343 return network.estimateFee(tmpTx)
13346 // FIXME:
1.0.0 shims, remove in
2.0.0
13347 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13348 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13350 module.exports = Wallet
13352 }).call(this,require("buffer").Buffer)
13353 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13355 <script>bitcoin.networks.shadow = {
13356 magicPrefix: '\x19ShadowCash Signed Message:\n',
13358 public:
0xEE80286A,
13359 private:
0xEE8031E8
13366 estimateFee: function() { return "unused in this app" },
13369 bitcoin.networks.shadowtn = {
13370 magicPrefix: '\x19ShadowCash Signed Message:\n',
13372 public:
0x76C0FDFB,
13373 private:
0x76C1077A
13380 estimateFee: function() { return "unused in this app" },
13383 bitcoin.networks.clam = {
13385 public:
0xa8c26d64,
13386 private:
0xa8c17826
13392 bitcoin.networks.dash = {
13394 public:
0x0488b21e,
13395 private:
0x0488ade4
13402 bitcoin.networks.namecoin = {
13404 public:
0x0488b21e,
13405 private:
0x0488ade4
13408 //scriptHash:
0x10,
13412 bitcoin.networks.peercoin = {
13414 public:
0x0488b21e,
13415 private:
0x0488ade4
13418 //scriptHash:
0x10,
13423 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13427 /** @fileOverview Javascript cryptography implementation.
13429 * Crush to remove comments, shorten variable names and
13430 * generally reduce transmission size.
13432 * @author Emily Stark
13433 * @author Mike Hamburg
13434 * @author Dan Boneh
13438 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13439 /*global document, window, escape, unescape, module, require, Uint32Array */
13441 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13443 /** @namespace Symmetric ciphers. */
13446 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13449 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13452 /** @namespace Block cipher modes of operation. */
13455 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13459 * @namespace Bit array encoders and decoders.
13462 * The members of this namespace are functions which translate between
13463 * SJCL's bitArrays and other objects (usually strings). Because it
13464 * isn't always clear which direction is encoding and which is decoding,
13465 * the method names are "fromBits" and "toBits".
13469 /** @namespace Exceptions. */
13471 /** @constructor Ciphertext is corrupt. */
13472 corrupt: function(message) {
13473 this.toString = function() { return "CORRUPT: "+this.message; };
13474 this.message = message;
13477 /** @constructor Invalid parameter. */
13478 invalid: function(message) {
13479 this.toString = function() { return "INVALID: "+this.message; };
13480 this.message = message;
13483 /** @constructor Bug or missing feature in SJCL. @constructor */
13484 bug: function(message) {
13485 this.toString = function() { return "BUG: "+this.message; };
13486 this.message = message;
13489 /** @constructor Something isn't ready. */
13490 notReady: function(message) {
13491 this.toString = function() { return "NOT READY: "+this.message; };
13492 this.message = message;
13497 if(typeof module !== 'undefined' && module.exports){
13498 module.exports = sjcl;
13500 if (typeof define === "function") {
13501 define([], function () {
13509 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13511 * @author Emily Stark
13512 * @author Mike Hamburg
13513 * @author Dan Boneh
13516 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13520 * These objects are the currency accepted by SJCL's crypto functions.
13524 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13525 * but many of them can take arguments that are not a multiple of
4 bytes.
13526 * This library encodes arrays of bits (whose size need not be a multiple of
8
13527 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13528 * array of words,
32 bits at a time. Since the words are double-precision
13529 * floating point numbers, they fit some extra data. We use this (in a private,
13530 * possibly-changing manner) to encode the number of bits actually present
13531 * in the last word of the array.
13535 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13536 * to ciphers like AES which want arrays of words.
13541 * Array slices in units of bits.
13542 * @param {bitArray} a The array to slice.
13543 * @param {Number} bstart The offset to the start of the slice, in bits.
13544 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13545 * slice until the end of the array.
13546 * @return {bitArray} The requested slice.
13548 bitSlice: function (a, bstart, bend) {
13549 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13550 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13554 * Extract a number packed into a bit array.
13555 * @param {bitArray} a The array to slice.
13556 * @param {Number} bstart The offset to the start of the slice, in bits.
13557 * @param {Number} length The length of the number to extract.
13558 * @return {Number} The requested slice.
13560 extract: function(a, bstart, blength) {
13561 // FIXME: this Math.floor is not necessary at all, but for some reason
13562 // seems to suppress a bug in the Chromium JIT.
13563 var x, sh = Math.floor((-bstart-blength) &
31);
13564 if ((bstart + blength -
1 ^ bstart) & -
32) {
13565 // it crosses a boundary
13566 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13568 // within a single word
13569 x = a[bstart/
32|
0]
>>> sh;
13571 return x & ((
1<
<blength) -
1);
13575 * Concatenate two bit arrays.
13576 * @param {bitArray} a1 The first array.
13577 * @param {bitArray} a2 The second array.
13578 * @return {bitArray} The concatenation of a1 and a2.
13580 concat: function (a1, a2) {
13581 if (a1.length ===
0 || a2.length ===
0) {
13582 return a1.concat(a2);
13585 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13586 if (shift ===
32) {
13587 return a1.concat(a2);
13589 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13594 * Find the length of an array of bits.
13595 * @param {bitArray} a The array.
13596 * @return {Number} The length of a, in bits.
13598 bitLength: function (a) {
13599 var l = a.length, x;
13600 if (l ===
0) { return
0; }
13602 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13606 * Truncate an array.
13607 * @param {bitArray} a The array.
13608 * @param {Number} len The length to truncate to, in bits.
13609 * @return {bitArray} A new array, truncated to len bits.
13611 clamp: function (a, len) {
13612 if (a.length *
32 < len) { return a; }
13613 a = a.slice(
0, Math.ceil(len /
32));
13616 if (l
> 0 && len) {
13617 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13623 * Make a partial word for a bit array.
13624 * @param {Number} len The number of bits in the word.
13625 * @param {Number} x The bits.
13626 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13627 * @return {Number} The partial word.
13629 partial: function (len, x, _end) {
13630 if (len ===
32) { return x; }
13631 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13635 * Get the number of bits used by a partial word.
13636 * @param {Number} x The partial word.
13637 * @return {Number} The number of bits used by the partial word.
13639 getPartial: function (x) {
13640 return Math.round(x/
0x10000000000) ||
32;
13644 * Compare two arrays for equality in a predictable amount of time.
13645 * @param {bitArray} a The first array.
13646 * @param {bitArray} b The second array.
13647 * @return {boolean} true if a == b; false otherwise.
13649 equal: function (a, b) {
13650 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13654 for (i=
0; i
<a.length; i++) {
13660 /** Shift an array right.
13661 * @param {bitArray} a The array to shift.
13662 * @param {Number} shift The number of bits to shift.
13663 * @param {Number} [carry=
0] A byte to carry in
13664 * @param {bitArray} [out=[]] An array to prepend to the output.
13667 _shiftRight: function (a, shift, carry, out) {
13668 var i, last2=
0, shift2;
13669 if (out === undefined) { out = []; }
13671 for (; shift
>=
32; shift -=
32) {
13676 return out.concat(a);
13679 for (i=
0; i
<a.length; i++) {
13680 out.push(carry | a[i]
>>>shift);
13681 carry = a[i] << (
32-shift);
13683 last2 = a.length ? a[a.length-
1] :
0;
13684 shift2 = sjcl.bitArray.getPartial(last2);
13685 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13689 /** xor a block of
4 words together.
13692 _xor4: function(x,y) {
13693 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13696 /** byteswap a word array inplace.
13697 * (does not handle partial words)
13698 * @param {sjcl.bitArray} a word array
13699 * @return {sjcl.bitArray} byteswapped array
13701 byteswapM: function(a) {
13702 var i, v, m =
0xff00;
13703 for (i =
0; i < a.length; ++i) {
13705 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13712 //// codecString.js
13714 /** @fileOverview Bit array codec implementations.
13716 * @author Emily Stark
13717 * @author Mike Hamburg
13718 * @author Dan Boneh
13721 /** @namespace UTF-
8 strings */
13722 sjcl.codec.utf8String = {
13723 /** Convert from a bitArray to a UTF-
8 string. */
13724 fromBits: function (arr) {
13725 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13726 for (i=
0; i
<bl/
8; i++) {
13730 out += String.fromCharCode(tmp
>>> 24);
13733 return decodeURIComponent(escape(out));
13736 /** Convert from a UTF-
8 string to a bitArray. */
13737 toBits: function (str) {
13738 str = unescape(encodeURIComponent(str));
13739 var out = [], i, tmp=
0;
13740 for (i=
0; i
<str.length; i++) {
13741 tmp = tmp <<
8 | str.charCodeAt(i);
13748 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13757 /** @fileOverview Bit array codec implementations.
13759 * @author Emily Stark
13760 * @author Mike Hamburg
13761 * @author Dan Boneh
13764 /** @namespace Hexadecimal */
13766 /** Convert from a bitArray to a hex string. */
13767 fromBits: function (arr) {
13769 for (i=
0; i
<arr.length; i++) {
13770 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13772 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13774 /** Convert from a hex string to a bitArray. */
13775 toBits: function (str) {
13776 var i, out=[], len;
13777 str = str.replace(/\s|
0x/g,
"");
13779 str = str +
"00000000";
13780 for (i=
0; i
<str.length; i+=
8) {
13781 out.push(parseInt(str.substr(i,
8),
16)^
0);
13783 return sjcl.bitArray.clamp(out, len*
4);
13790 /** @fileOverview Javascript SHA-
512 implementation.
13792 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13793 * SJCL by Stefan Thomas.
13795 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13796 * Released with New BSD License
13798 * @author Emily Stark
13799 * @author Mike Hamburg
13800 * @author Dan Boneh
13801 * @author Jeff Mott
13802 * @author Stefan Thomas
13806 * Context for a SHA-
512 operation in progress.
13808 * @class Secure Hash Algorithm,
512 bits.
13810 sjcl.hash.sha512 = function (hash) {
13811 if (!this._key[
0]) { this._precompute(); }
13813 this._h = hash._h.slice(
0);
13814 this._buffer = hash._buffer.slice(
0);
13815 this._length = hash._length;
13822 * Hash a string or an array of words.
13824 * @param {bitArray|String} data the data to hash.
13825 * @return {bitArray} The hash value, an array of
16 big-endian words.
13827 sjcl.hash.sha512.hash = function (data) {
13828 return (new sjcl.hash.sha512()).update(data).finalize();
13831 sjcl.hash.sha512.prototype = {
13833 * The hash's block size, in bits.
13839 * Reset the hash state.
13842 reset:function () {
13843 this._h = this._init.slice(
0);
13850 * Input several words to the hash.
13851 * @param {bitArray|String} data the data to hash.
13854 update: function (data) {
13855 if (typeof data ===
"string") {
13856 data = sjcl.codec.utf8String.toBits(data);
13858 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13860 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13861 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13862 this._block(b.splice(
0,
32));
13868 * Complete hashing and output the hash value.
13869 * @return {bitArray} The hash value, an array of
16 big-endian words.
13871 finalize:function () {
13872 var i, b = this._buffer, h = this._h;
13874 // Round out and push the buffer
13875 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13877 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13878 for (i = b.length +
4; i &
31; i++) {
13882 // append the length
13885 b.push(Math.floor(this._length /
0x100000000));
13886 b.push(this._length |
0);
13889 this._block(b.splice(
0,
32));
13897 * The SHA-
512 initialization vector, to be precomputed.
13903 * Least significant
24 bits of SHA512 initialization values.
13905 * Javascript only has
53 bits of precision, so we compute the
40 most
13906 * significant bits and add the remaining
24 bits as constants.
13910 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13914 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13915 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13919 * The SHA-
512 hash key, to be precomputed.
13925 * Least significant
24 bits of SHA512 key values.
13929 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13930 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13931 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13932 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13933 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13934 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13935 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13936 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13937 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13938 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13942 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13943 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13944 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13945 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13946 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13947 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13948 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13949 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13950 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13951 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13952 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13953 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13954 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13955 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13956 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13957 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13958 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13959 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13960 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13961 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13965 * Function to precompute _init and _key.
13968 _precompute: function () {
13969 // XXX: This code is for precomputing the SHA256 constants, change for
13970 // SHA512 and re-enable.
13971 var i =
0, prime =
2, factor;
13973 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13974 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13976 outer: for (; i
<80; prime++) {
13977 for (factor=
2; factor*factor <= prime; factor++) {
13978 if (prime % factor ===
0) {
13985 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13986 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13988 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13989 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13995 * Perform one cycle of SHA-
512.
13996 * @param {bitArray} words one block of words.
13999 _block:function (words) {
14001 w = words.slice(
0),
14004 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
14005 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
14006 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
14007 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
14009 // Working variables
14010 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14011 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14012 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14013 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14015 for (i=
0; i
<80; i++) {
14016 // load up the input word for this round
14019 wrl = w[i *
2 +
1];
14022 var gamma0xh = w[(i-
15) *
2];
14023 var gamma0xl = w[(i-
15) *
2 +
1];
14025 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
14026 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
14029 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
14030 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
14031 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
14034 var gamma1xh = w[(i-
2) *
2];
14035 var gamma1xl = w[(i-
2) *
2 +
1];
14037 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
14038 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
14041 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
14042 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
14043 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
14046 var wr7h = w[(i-
7) *
2];
14047 var wr7l = w[(i-
7) *
2 +
1];
14049 var wr16h = w[(i-
16) *
2];
14050 var wr16l = w[(i-
16) *
2 +
1];
14052 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
14053 wrl = gamma0l + wr7l;
14054 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
14056 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
14058 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
14062 w[i*
2 +
1] = wrl |=
0;
14065 var chh = (eh & fh) ^ (~eh & gh);
14066 var chl = (el & fl) ^ (~el & gl);
14069 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14070 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14073 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
14074 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
14077 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
14078 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14082 var krl = k[i*
2+
1];
14084 // t1 = h + sigma1 + ch + K(round) + W(round)
14085 var t1l = hl + sigma1l;
14086 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14088 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14090 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14091 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14092 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14094 // t2 = sigma0 + maj
14095 var t2l = sigma0l + majl;
14096 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14098 // Update working variables
14105 el = (dl + t1l) |
0;
14106 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14113 al = (t1l + t2l) |
0;
14114 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14117 // Intermediate hash
14118 h0l = h[
1] = (h0l + al) |
0;
14119 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14120 h1l = h[
3] = (h1l + bl) |
0;
14121 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14122 h2l = h[
5] = (h2l + cl) |
0;
14123 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14124 h3l = h[
7] = (h3l + dl) |
0;
14125 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14126 h4l = h[
9] = (h4l + el) |
0;
14127 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14128 h5l = h[
11] = (h5l + fl) |
0;
14129 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14130 h6l = h[
13] = (h6l + gl) |
0;
14131 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14132 h7l = h[
15] = (h7l + hl) |
0;
14133 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14140 /** @fileOverview HMAC implementation.
14142 * @author Emily Stark
14143 * @author Mike Hamburg
14144 * @author Dan Boneh
14147 /** HMAC with the specified hash function.
14149 * @param {bitArray} key the key for HMAC.
14150 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14152 sjcl.misc.hmac = function (key, Hash) {
14153 this._hash = Hash = Hash || sjcl.hash.sha256;
14154 var exKey = [[],[]], i,
14155 bs = Hash.prototype.blockSize /
32;
14156 this._baseHash = [new Hash(), new Hash()];
14158 if (key.length
> bs) {
14159 key = Hash.hash(key);
14162 for (i=
0; i
<bs; i++) {
14163 exKey[
0][i] = key[i]^
0x36363636;
14164 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14167 this._baseHash[
0].update(exKey[
0]);
14168 this._baseHash[
1].update(exKey[
1]);
14169 this._resultHash = new Hash(this._baseHash[
0]);
14172 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14173 * @param {bitArray|String} data The data to mac.
14175 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14176 if (!this._updated) {
14178 return this.digest(data);
14180 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14184 sjcl.misc.hmac.prototype.reset = function () {
14185 this._resultHash = new this._hash(this._baseHash[
0]);
14186 this._updated = false;
14189 sjcl.misc.hmac.prototype.update = function (data) {
14190 this._updated = true;
14191 this._resultHash.update(data);
14194 sjcl.misc.hmac.prototype.digest = function () {
14195 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14206 /** @fileOverview Password-based key-derivation function, version
2.0.
14208 * @author Emily Stark
14209 * @author Mike Hamburg
14210 * @author Dan Boneh
14213 /** Password-Based Key-Derivation Function, version
2.0.
14215 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14217 * This is the method specified by RSA's PKCS #
5 standard.
14219 * @param {bitArray|String} password The password.
14220 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14221 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14222 * @param {Number} [length] The length of the derived key. Defaults to the
14223 output size of the hash function.
14224 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14225 * @return {bitArray} the derived key.
14227 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14228 count = count ||
1000;
14230 if (length <
0 || count <
0) {
14231 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14234 if (typeof password ===
"string") {
14235 password = sjcl.codec.utf8String.toBits(password);
14238 if (typeof salt ===
"string") {
14239 salt = sjcl.codec.utf8String.toBits(salt);
14242 Prff = Prff || sjcl.misc.hmac;
14244 var prf = new Prff(password),
14245 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14247 for (k =
1;
32 * out.length < (length ||
1); k++) {
14248 u = ui = prf.encrypt(b.concat(salt,[k]));
14250 for (i=
1; i
<count; i++) {
14251 ui = prf.encrypt(ui);
14252 for (j=
0; j
<ui.length; j++) {
14257 out = out.concat(u);
14260 if (length) { out = b.clamp(out, length); }
14268 /** @fileOverview Javascript SHA-
256 implementation.
14270 * An older version of this implementation is available in the public
14271 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14272 * Stanford University
2008-
2010 and BSD-licensed for liability
14275 * Special thanks to Aldo Cortesi for pointing out several bugs in
14278 * @author Emily Stark
14279 * @author Mike Hamburg
14280 * @author Dan Boneh
14284 * Context for a SHA-
256 operation in progress.
14286 * @class Secure Hash Algorithm,
256 bits.
14288 sjcl.hash.sha256 = function (hash) {
14289 if (!this._key[
0]) { this._precompute(); }
14291 this._h = hash._h.slice(
0);
14292 this._buffer = hash._buffer.slice(
0);
14293 this._length = hash._length;
14300 * Hash a string or an array of words.
14302 * @param {bitArray|String} data the data to hash.
14303 * @return {bitArray} The hash value, an array of
16 big-endian words.
14305 sjcl.hash.sha256.hash = function (data) {
14306 return (new sjcl.hash.sha256()).update(data).finalize();
14309 sjcl.hash.sha256.prototype = {
14311 * The hash's block size, in bits.
14317 * Reset the hash state.
14320 reset:function () {
14321 this._h = this._init.slice(
0);
14328 * Input several words to the hash.
14329 * @param {bitArray|String} data the data to hash.
14332 update: function (data) {
14333 if (typeof data ===
"string") {
14334 data = sjcl.codec.utf8String.toBits(data);
14336 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14338 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14339 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14340 this._block(b.splice(
0,
16));
14346 * Complete hashing and output the hash value.
14347 * @return {bitArray} The hash value, an array of
8 big-endian words.
14349 finalize:function () {
14350 var i, b = this._buffer, h = this._h;
14352 // Round out and push the buffer
14353 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14355 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14356 for (i = b.length +
2; i &
15; i++) {
14360 // append the length
14361 b.push(Math.floor(this._length /
0x100000000));
14362 b.push(this._length |
0);
14365 this._block(b.splice(
0,
16));
14373 * The SHA-
256 initialization vector, to be precomputed.
14378 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14382 * The SHA-
256 hash key, to be precomputed.
14388 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14389 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14390 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14391 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14392 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14393 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14394 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14395 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14400 * Function to precompute _init and _key.
14403 _precompute: function () {
14404 var i =
0, prime =
2, factor;
14406 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14408 outer: for (; i
<64; prime++) {
14409 for (factor=
2; factor*factor <= prime; factor++) {
14410 if (prime % factor ===
0) {
14417 this._init[i] = frac(Math.pow(prime,
1/
2));
14419 this._key[i] = frac(Math.pow(prime,
1/
3));
14425 * Perform one cycle of SHA-
256.
14426 * @param {bitArray} words one block of words.
14429 _block:function (words) {
14431 w = words.slice(
0),
14434 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14435 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14437 /* Rationale for placement of |
0 :
14438 * If a value can overflow is original
32 bits by a factor of more than a few
14439 * million (
2^
23 ish), there is a possibility that it might overflow the
14440 *
53-bit mantissa and lose precision.
14442 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14443 * propagates around the loop, and on the hash state h[]. I don't believe
14444 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14445 * (for h4 anyway), and better safe than sorry.
14447 * The clamps on h[] are necessary for the output to be correct even in the
14448 * common case and for short inputs.
14450 for (i=
0; i
<64; i++) {
14451 // load up the input word for this round
14455 a = w[(i+
1 ) &
15];
14456 b = w[(i+
14) &
15];
14457 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14458 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14459 w[i&
15] + w[(i+
9) &
15]) |
0;
14462 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14465 h7 = h6; h6 = h5; h5 = h4;
14467 h3 = h2; h2 = h1; h1 = h0;
14469 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14472 h[
0] = h[
0]+h0 |
0;
14473 h[
1] = h[
1]+h1 |
0;
14474 h[
2] = h[
2]+h2 |
0;
14475 h[
3] = h[
3]+h3 |
0;
14476 h[
4] = h[
4]+h4 |
0;
14477 h[
5] = h[
5]+h5 |
0;
14478 h[
6] = h[
6]+h6 |
0;
14479 h[
7] = h[
7]+h7 |
0;
14483 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14484 WORDLISTS["english"] = [
14485 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14486 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14487 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14488 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14489 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14490 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14491 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14492 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14493 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14494 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14495 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14496 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14497 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14498 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14499 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14500 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14501 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14502 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14503 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14504 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14505 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14506 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14507 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14508 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14509 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14510 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14511 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14512 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14513 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14514 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14515 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14516 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14517 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14518 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14519 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14520 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14521 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14522 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14523 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14524 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14525 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14526 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14527 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14528 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14529 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14530 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14531 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14532 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14533 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14534 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14535 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14536 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14537 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14538 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14539 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14540 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14541 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14542 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14543 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14544 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14545 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14546 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14547 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14548 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14549 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14550 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14551 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14552 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14553 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14554 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14555 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14556 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14557 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14558 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14559 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14560 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14561 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14562 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14563 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14564 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14565 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14566 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14567 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14568 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14569 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14570 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14571 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14572 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14573 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14574 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14575 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14576 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14577 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14578 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14579 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14580 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14581 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14582 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14583 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14584 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14585 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14586 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14587 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14588 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14589 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14590 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14591 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14592 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14593 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14594 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14595 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14596 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14597 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14598 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14599 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14600 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14601 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14602 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14603 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14604 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14605 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14606 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14607 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14608 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14609 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14610 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14611 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14612 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14613 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14614 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14615 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14616 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14617 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14618 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14619 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14620 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14621 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14622 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14623 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14624 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14625 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14626 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14627 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14628 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14629 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14630 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14631 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14632 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14633 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14634 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14635 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14636 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14637 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14638 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14639 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14640 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14641 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14642 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14643 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14644 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14645 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14646 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14647 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14648 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14649 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14650 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14651 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14652 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14653 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14654 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14655 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14656 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14657 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14658 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14659 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14660 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14661 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14662 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14663 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14664 "thank","that","theme","then","theory","there","they","thing","this","thought",
14665 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14666 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14667 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14668 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14669 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14670 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14671 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14672 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14673 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14674 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14675 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14676 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14677 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14678 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14679 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14680 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14681 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14682 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14683 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14684 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14685 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14686 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14687 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14688 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14689 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14691 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14692 WORDLISTS["japanese"] = [
14693 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14694 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14695 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14696 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14697 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14698 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14699 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14700 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14701 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14702 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14703 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14704 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14705 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14706 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14707 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14708 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14709 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14710 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14711 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14712 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14713 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14714 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14715 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14716 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14717 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14718 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14719 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14720 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14721 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14722 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14723 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14724 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14725 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14726 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14727 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14728 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14729 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14730 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14731 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14732 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14733 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14734 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14735 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14736 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14737 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14738 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14739 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14740 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14741 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14742 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14743 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14744 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14745 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14746 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14747 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14748 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14749 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14750 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14751 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14752 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14753 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14754 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14755 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14756 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14757 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14758 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14759 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14760 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14761 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14762 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14763 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14764 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14765 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14766 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14767 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14768 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14769 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14770 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14771 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14772 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14773 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14774 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14775 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14776 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14777 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14778 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14779 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14780 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14781 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14782 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14783 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14784 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14785 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14786 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14787 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14788 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14789 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14790 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14791 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14792 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14793 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14794 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14795 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14796 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14797 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14798 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14799 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14800 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14801 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14802 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14803 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14804 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14805 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14806 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14807 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14808 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14809 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14810 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14811 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14812 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14813 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14814 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14815 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14816 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14817 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14818 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14819 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14820 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14821 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14822 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14823 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14824 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14825 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14826 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14827 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14828 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14829 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14830 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14831 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14832 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14833 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14834 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14835 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14836 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14837 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14838 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14839 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14840 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14841 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14842 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14843 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14844 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14845 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14846 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14847 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14848 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14849 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14850 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14851 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14852 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14853 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14854 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14855 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14856 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14857 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14858 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14859 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14860 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14861 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14862 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14863 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14864 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14865 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14866 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14867 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14868 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14869 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14870 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14871 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14872 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14873 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14874 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14875 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14876 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14877 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14878 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14879 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14880 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14881 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14882 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14883 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14884 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14885 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14886 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14887 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14888 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14889 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14890 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14891 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14892 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14893 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14894 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14895 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14896 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14897 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14899 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14900 WORDLISTS["spanish"] = [
14901 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14902 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14903 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14904 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14905 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14906 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14907 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14908 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14909 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14910 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14911 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14912 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14913 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14914 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14915 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14916 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14917 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14918 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14919 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14920 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14921 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14922 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14923 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14924 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14925 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14926 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14927 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14928 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14929 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14930 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14931 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14932 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14933 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14934 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14935 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14936 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14937 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14938 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14939 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14940 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14941 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14942 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14943 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14944 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14945 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14946 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14947 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14948 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14949 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14950 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14951 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14952 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14953 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14954 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14955 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14956 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14957 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14958 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14959 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14960 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14961 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14962 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14963 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14964 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14965 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14966 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14967 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14968 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14969 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14970 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14971 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14972 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14973 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14974 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14975 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14976 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14977 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14978 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14979 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14980 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14981 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14982 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14983 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14984 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14985 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14986 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14987 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14988 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14989 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14990 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14991 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14992 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14993 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
14994 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
14995 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
14996 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
14997 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
14998 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
14999 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15000 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15001 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15002 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15003 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15004 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15005 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15006 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15007 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15008 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15009 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15010 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15011 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15012 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15013 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15014 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15015 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15016 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15017 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15018 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15019 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15020 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15021 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15022 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15023 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15024 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15025 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15026 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15027 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15028 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15029 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15030 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15031 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15032 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15033 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15034 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15035 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15036 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15037 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15038 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15039 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15040 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15041 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15042 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15043 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15044 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15045 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15046 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15047 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15048 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15049 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15050 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15051 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15052 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15053 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15054 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15055 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15056 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15057 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15058 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15059 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15060 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15061 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15062 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15063 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15064 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15065 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15066 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15067 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15068 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15069 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15070 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15071 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15072 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15073 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15074 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15075 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15076 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15077 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15078 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15079 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15080 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15081 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15082 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15083 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15084 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15085 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15086 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15087 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15088 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15089 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15090 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15091 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15092 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15093 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15094 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15095 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15096 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15097 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15098 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15099 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15100 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15101 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15102 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15103 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15104 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15105 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15107 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15108 WORDLISTS["chinese_simplified"] = [
15109 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15110 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15111 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15112 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15113 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15114 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15115 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15116 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15117 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15118 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15119 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15120 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15121 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15122 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15123 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15124 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15125 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15126 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15127 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15128 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15129 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15130 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15131 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15132 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15133 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15134 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15135 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15136 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15137 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15138 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15139 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15140 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15141 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15142 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15143 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15144 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15145 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15146 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15147 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15148 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15149 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15150 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15151 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15152 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15153 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15154 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15155 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15156 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15157 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15158 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15159 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15160 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15161 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15162 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15163 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15164 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15165 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15166 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15167 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15168 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15169 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15170 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15171 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15172 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15173 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15174 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15175 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15176 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15177 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15178 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15179 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15180 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15181 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15182 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15183 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15184 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15185 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15186 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15187 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15188 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15189 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15190 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15191 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15192 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15193 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15194 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15195 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15196 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15197 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15198 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15199 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15200 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15201 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15202 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15203 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15204 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15205 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15206 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15207 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15208 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15209 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15210 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15211 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15212 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15213 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15214 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15215 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15216 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15217 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15218 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15219 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15220 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15221 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15222 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15223 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15224 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15225 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15226 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15227 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15228 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15229 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15230 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15231 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15232 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15233 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15234 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15235 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15236 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15237 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15238 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15239 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15240 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15241 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15242 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15243 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15244 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15245 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15246 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15247 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15248 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15249 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15250 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15251 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15252 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15253 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15254 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15255 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15256 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15257 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15258 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15259 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15260 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15261 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15262 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15263 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15264 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15265 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15266 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15267 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15268 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15269 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15270 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15271 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15272 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15273 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15274 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15275 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15276 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15277 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15278 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15279 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15280 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15281 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15282 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15283 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15284 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15285 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15286 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15287 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15288 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15289 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15290 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15291 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15292 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15293 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15294 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15295 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15296 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15297 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15298 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15299 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15300 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15301 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15302 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15303 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15304 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15305 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15306 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15307 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15308 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15309 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15310 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15311 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15312 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15313 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15315 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15316 WORDLISTS["chinese_traditional"] = [
15317 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15318 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15319 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15320 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15321 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15322 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15323 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15324 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15325 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15326 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15327 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15328 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15329 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15330 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15331 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15332 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15333 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15334 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15335 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15336 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15337 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15338 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15339 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15340 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15341 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15342 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15343 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15344 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15345 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15346 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15347 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15348 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15349 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15350 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15351 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15352 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15353 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15354 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15355 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15356 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15357 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15358 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15359 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15360 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15361 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15362 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15363 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15364 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15365 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15366 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15367 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15368 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15369 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15370 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15371 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15372 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15373 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15374 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15375 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15376 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15377 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15378 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15379 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15380 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15381 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15382 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15383 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15384 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15385 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15386 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15387 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15388 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15389 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15390 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15391 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15392 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15393 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15394 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15395 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15396 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15397 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15398 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15399 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15400 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15401 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15402 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15403 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15404 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15405 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15406 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15407 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15408 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15409 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15410 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15411 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15412 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15413 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15414 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15415 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15416 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15417 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15418 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15419 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15420 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15421 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15422 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15423 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15424 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15425 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15426 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15427 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15428 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15429 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15430 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15431 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15432 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15433 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15434 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15435 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15436 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15437 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15438 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15439 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15440 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15441 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15442 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15443 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15444 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15445 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15446 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15447 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15448 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15449 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15450 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15451 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15452 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15453 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15454 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15455 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15456 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15457 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15458 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15459 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15460 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15461 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15462 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15463 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15464 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15465 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15466 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15467 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15468 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15469 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15470 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15471 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15472 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15473 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15474 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15475 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15476 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15477 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15478 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15479 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15480 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15481 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15482 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15483 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15484 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15485 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15486 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15487 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15488 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15489 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15490 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15491 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15492 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15493 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15494 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15495 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15496 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15497 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15498 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15499 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15500 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15501 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15502 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15503 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15504 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15505 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15506 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15507 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15508 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15509 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15510 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15511 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15512 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15513 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15514 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15515 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15516 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15517 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15518 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15519 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15520 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15521 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15523 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15524 WORDLISTS["french"] = [
15525 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15526 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15527 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15528 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15529 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15530 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15531 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15532 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15533 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15534 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15535 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15536 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15537 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15538 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15539 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15540 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15541 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15542 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15543 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15544 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15545 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15546 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15547 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15548 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15549 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15550 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15551 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15552 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15553 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15554 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15555 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15556 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15557 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15558 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15559 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15560 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15561 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15562 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15563 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15564 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15565 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15566 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15567 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15568 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15569 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15570 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15571 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15572 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15573 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15574 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15575 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15576 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15577 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15578 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15579 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15580 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15581 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15582 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15583 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15584 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15585 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15586 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15587 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15588 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15589 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15590 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15591 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15592 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15593 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15594 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15595 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15596 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15597 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15598 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15599 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15600 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15601 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15602 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15603 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15604 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15605 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15606 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15607 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15608 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15609 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15610 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15611 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15612 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15613 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15614 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15615 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15616 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15617 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15618 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15619 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15620 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15621 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15622 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15623 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15624 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15625 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15626 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15627 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15628 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15629 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15630 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15631 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15632 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15633 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15634 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15635 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15636 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15637 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15638 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15639 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15640 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15641 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15642 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15643 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15644 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15645 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15646 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15647 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15648 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15649 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15650 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15651 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15652 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15653 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15654 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15655 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15656 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15657 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15658 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15659 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15660 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15661 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15662 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15663 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15664 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15665 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15666 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15667 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15668 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15669 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15670 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15671 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15672 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15673 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15674 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15675 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15676 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15677 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15678 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15679 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15680 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15681 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15682 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15683 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15684 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15685 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15686 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15687 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15688 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15689 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15690 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15691 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15692 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15693 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15694 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15695 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15696 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15697 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15698 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15699 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15700 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15701 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15702 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15703 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15704 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15705 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15706 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15707 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15708 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15709 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15710 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15711 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15712 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15713 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15714 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15715 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15716 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15717 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15718 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15719 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15720 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15721 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15722 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15723 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15724 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15725 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15726 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15727 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15728 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15729 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15731 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15732 WORDLISTS["italian"] = [
15733 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15734 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15735 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15736 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15737 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15738 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15739 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15740 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15741 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15742 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15743 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15744 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15745 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15746 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15747 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15748 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15749 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15750 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15751 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15752 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15753 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15754 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15755 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15756 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15757 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15758 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15759 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15760 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15761 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15762 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15763 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15764 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15765 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15766 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15767 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15768 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15769 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15770 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15771 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15772 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15773 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15774 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15775 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15776 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15777 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15778 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15779 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15780 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15781 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15782 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15783 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15784 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15785 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15786 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15787 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15788 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15789 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15790 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15791 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15792 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15793 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15794 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15795 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15796 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15797 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15798 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15799 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15800 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15801 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15802 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15803 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15804 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15805 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15806 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15807 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15808 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15809 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15810 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15811 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15812 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15813 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15814 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15815 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15816 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15817 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15818 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15819 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15820 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15821 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15822 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15823 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15824 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15825 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15826 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15827 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15828 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15829 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15830 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15831 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15832 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15833 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15834 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15835 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15836 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15837 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15838 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15839 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15840 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15841 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15842 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15843 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15844 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15845 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15846 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15847 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15848 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15849 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15850 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15851 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15852 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15853 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15854 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15855 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15856 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15857 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15858 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15859 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15860 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15861 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15862 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15863 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15864 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15865 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15866 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15867 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15868 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15869 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15870 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15871 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15872 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15873 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15874 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15875 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15876 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15877 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15878 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15879 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15880 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15881 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15882 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15883 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15884 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15885 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15886 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15887 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15888 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15889 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15890 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15891 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15892 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15893 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15894 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15895 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15896 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15897 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15898 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15899 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15900 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15901 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15902 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15903 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15904 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15905 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15906 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15907 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15908 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15909 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15910 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15911 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15912 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15913 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15914 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15915 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15916 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15917 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15918 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15919 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15920 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15921 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15922 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15923 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15924 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15925 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15926 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15927 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15928 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15929 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15930 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15931 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15932 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15933 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15934 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15935 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15936 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15937 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15940 * Copyright (c)
2013 Pavol Rusnak
15942 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15943 * this software and associated documentation files (the "Software"), to deal in
15944 * the Software without restriction, including without limitation the rights to
15945 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15946 * of the Software, and to permit persons to whom the Software is furnished to do
15947 * so, subject to the following conditions:
15949 * The above copyright notice and this permission notice shall be included in all
15950 * copies or substantial portions of the Software.
15952 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15953 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15954 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15955 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15956 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15957 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15961 * Javascript port from python by Ian Coleman
15963 * Requires code from sjcl
15964 * https://github.com/bitwiseshiftleft/sjcl
15967 var Mnemonic = function(language) {
15969 var PBKDF2_ROUNDS =
2048;
15975 var hmacSHA512 = function(key) {
15976 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15977 this.encrypt = function() {
15978 return hasher.encrypt.apply(hasher, arguments);
15983 wordlist = WORDLISTS[language];
15984 if (wordlist.length != RADIX) {
15985 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15990 self.generate = function(strength) {
15991 strength = strength ||
128;
15992 var r = strength %
32;
15994 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
15996 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
15997 if (!hasStrongCrypto) {
15998 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
16000 var buffer = new Uint8Array(strength /
8);
16001 var data = crypto.getRandomValues(buffer);
16002 return self.toMnemonic(data);
16005 self.toMnemonic = function(byteArray) {
16006 if (byteArray.length %
4 > 0) {
16007 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
16010 //h = hashlib.sha256(data).hexdigest()
16011 var data = byteArrayToWordArray(byteArray);
16012 var hash = sjcl.hash.sha256.hash(data);
16013 var h = sjcl.codec.hex.fromBits(hash);
16015 // b is a binary string, eg '
00111010101100...'
16016 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
16017 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
16019 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
16020 // c = bin(int(h,
16))[
2:].zfill(
256)
16021 // d = c[:len(data) *
8 /
32]
16022 var a = byteArrayToBinaryString(byteArray);
16023 var c = zfill(hexStringToBinaryString(h),
256);
16024 var d = c.substring(
0, byteArray.length *
8 /
32);
16025 // b = line1 + line2
16029 var blen = b.length /
11;
16030 for (var i=
0; i
<blen; i++) {
16031 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
16032 result.push(wordlist[idx]);
16034 return self.joinWords(result);
16037 self.check = function(mnemonic) {
16038 var mnemonic = self.splitWords(mnemonic);
16039 if (mnemonic.length %
3 > 0) {
16042 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
16044 for (var i=
0; i
<mnemonic.length; i++) {
16045 var word = mnemonic[i];
16046 var wordIndex = wordlist.indexOf(word);
16047 if (wordIndex == -
1) {
16050 var binaryIndex = zfill(wordIndex.toString(
2),
11);
16051 idx.push(binaryIndex);
16053 var b = idx.join('');
16055 //d = b[:l /
33 *
32]
16057 var d = b.substring(
0, l /
33 *
32);
16058 var h = b.substring(l - l /
33, l);
16059 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
16060 var nd = binaryStringToWordArray(d);
16061 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
16062 var ndHash = sjcl.hash.sha256.hash(nd);
16063 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16064 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
16065 var nh = ndBstr.substring(
0,l/
33);
16069 self.toSeed = function(mnemonic, passphrase) {
16070 passphrase = passphrase || '';
16071 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16072 passphrase = self.normalizeString(passphrase)
16073 passphrase =
"mnemonic" + passphrase;
16074 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16075 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16076 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
16077 var hashHex = sjcl.codec.hex.fromBits(result);
16081 self.splitWords = function(mnemonic) {
16082 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16085 self.joinWords = function(words) {
16086 // Set space correctly depending on the language
16087 // see https://github.com/bitcoin/bips/blob/master/bip-
0039/bip-
0039-wordlists.md#japanese
16089 if (language ==
"japanese") {
16090 space =
"\u3000"; // ideographic space
16092 return words.join(space);
16095 self.normalizeString = function(str) {
16096 if (typeof str.normalize ==
"function") {
16097 return str.normalize(
"NFKD");
16100 // TODO decide how to handle this in the future.
16101 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16106 function byteArrayToWordArray(data) {
16108 for (var i=
0; i
<data.length/
4; i++) {
16110 v += data[i*
4 +
0] <<
8 *
3;
16111 v += data[i*
4 +
1] <<
8 *
2;
16112 v += data[i*
4 +
2] <<
8 *
1;
16113 v += data[i*
4 +
3] <<
8 *
0;
16119 function byteArrayToBinaryString(data) {
16121 for (var i=
0; i
<data.length; i++) {
16122 bin += zfill(data[i].toString(
2),
8);
16127 function hexStringToBinaryString(hexString) {
16129 for (var i=
0; i
<hexString.length; i++) {
16130 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
16132 return binaryString;
16135 function binaryStringToWordArray(binary) {
16136 var aLen = binary.length /
32;
16138 for (var i=
0; i
<aLen; i++) {
16139 var valueStr = binary.substring(
0,
32);
16140 var value = parseInt(valueStr,
2);
16142 binary = binary.slice(
32);
16147 // Pad a numeric string on the left with zero digits until the given width
16149 // Note this differs to the python implementation because it does not
16150 // handle numbers starting with a sign.
16151 function zfill(source, length) {
16152 source = source.toString();
16153 while (source.length < length) {
16154 source = '
0' + source;
16163 <script>(function() {
16165 // mnemonics is populated as required by getLanguage
16166 var mnemonics = { "english": new Mnemonic("english") };
16167 var mnemonic = mnemonics["english"];
16169 var bip32RootKey = null;
16170 var bip32ExtendedKey = null;
16171 var network = bitcoin.networks.bitcoin;
16172 var addressRowTemplate = $("#address-row-template");
16174 var showIndex = true;
16175 var showAddress = true;
16176 var showPrivKey = true;
16178 var phraseChangeTimeoutEvent = null;
16179 var rootKeyChangedTimeoutEvent = null;
16182 DOM.network = $(".network");
16183 DOM.phraseNetwork = $("#network-phrase");
16184 DOM.phrase = $(".phrase");
16185 DOM.passphrase = $(".passphrase");
16186 DOM.generate = $(".generate");
16187 DOM.seed = $(".seed");
16188 DOM.rootKey = $(".root-key");
16189 DOM.extendedPrivKey = $(".extended-priv-key");
16190 DOM.extendedPubKey = $(".extended-pub-key");
16191 DOM.bip32tab = $("#bip32-tab");
16192 DOM.bip44tab = $("#bip44-tab");
16193 DOM.bip32panel = $("#bip32");
16194 DOM.bip44panel = $("#bip44");
16195 DOM.bip32path = $("#bip32-path");
16196 DOM.bip44path = $("#bip44-path");
16197 DOM.bip44purpose = $("#bip44 .purpose");
16198 DOM.bip44coin = $("#bip44 .coin");
16199 DOM.bip44account = $("#bip44 .account");
16200 DOM.bip44change = $("#bip44 .change");
16201 DOM.strength = $(".strength");
16202 DOM.hardenedAddresses = $(".hardened-addresses");
16203 DOM.addresses = $(".addresses");
16204 DOM.rowsToAdd = $(".rows-to-add");
16205 DOM.more = $(".more");
16206 DOM.feedback = $(".feedback");
16207 DOM.tab = $(".derivation-type a");
16208 DOM.indexToggle = $(".index-toggle");
16209 DOM.addressToggle = $(".address-toggle");
16210 DOM.privateKeyToggle = $(".private-key-toggle");
16211 DOM.languages = $(".languages a");
16215 DOM.network.on("change", networkChanged);
16216 DOM.phrase.on("input", delayedPhraseChanged);
16217 DOM.passphrase.on("input", delayedPhraseChanged);
16218 DOM.generate.on("click", generateClicked);
16219 DOM.more.on("click", showMore);
16220 DOM.rootKey.on("input", delayedRootKeyChanged);
16221 DOM.bip32path.on("input", calcForDerivationPath);
16222 DOM.bip44purpose.on("input", calcForDerivationPath);
16223 DOM.bip44coin.on("input", calcForDerivationPath);
16224 DOM.bip44account.on("input", calcForDerivationPath);
16225 DOM.bip44change.on("input", calcForDerivationPath);
16226 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
16227 DOM.hardenedAddresses.on("change", calcForDerivationPath);
16228 DOM.indexToggle.on("click", toggleIndexes);
16229 DOM.addressToggle.on("click", toggleAddresses);
16230 DOM.privateKeyToggle.on("click", togglePrivateKeys);
16231 DOM.languages.on("click", languageChanged);
16234 hideValidationError();
16235 populateNetworkSelect();
16240 function networkChanged(e) {
16241 var networkIndex = e.target.value;
16242 networks[networkIndex].onSelect();
16243 if (seed != null) {
16251 function delayedPhraseChanged() {
16252 hideValidationError();
16254 if (phraseChangeTimeoutEvent != null) {
16255 clearTimeout(phraseChangeTimeoutEvent);
16257 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
16260 function phraseChanged() {
16262 hideValidationError();
16263 setMnemonicLanguage();
16264 // Get the mnemonic phrase
16265 var phrase = DOM.phrase.val();
16266 var errorText = findPhraseErrors(phrase);
16268 showValidationError(errorText);
16271 // Calculate and display
16272 var passphrase = DOM.passphrase.val();
16273 calcBip32RootKeyFromSeed(phrase, passphrase);
16274 calcForDerivationPath();
16278 function delayedRootKeyChanged() {
16279 // Warn if there is an existing mnemonic or passphrase.
16280 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
16281 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
16282 DOM.rootKey.val(bip32RootKey);
16286 hideValidationError();
16288 // Clear existing mnemonic and passphrase
16289 DOM.phrase.val(
"");
16290 DOM.passphrase.val(
"");
16292 if (rootKeyChangedTimeoutEvent != null) {
16293 clearTimeout(rootKeyChangedTimeoutEvent);
16295 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
16298 function rootKeyChanged() {
16300 hideValidationError();
16301 // Validate the root key TODO
16302 var rootKeyBase58 = DOM.rootKey.val();
16303 var errorText = validateRootKey(rootKeyBase58);
16305 showValidationError(errorText);
16308 // Calculate and display
16309 calcBip32RootKeyFromBase58(rootKeyBase58);
16310 calcForDerivationPath();
16314 function calcForDerivationPath() {
16316 hideValidationError();
16317 // Get the derivation path
16318 var derivationPath = getDerivationPath();
16319 var errorText = findDerivationPathErrors(derivationPath);
16321 showValidationError(errorText);
16324 calcBip32ExtendedKey(derivationPath);
16325 displayBip32Info();
16329 function generateClicked() {
16332 setTimeout(function() {
16333 setMnemonicLanguage();
16334 var phrase = generateRandomPhrase();
16342 function languageChanged() {
16343 setTimeout(function() {
16344 setMnemonicLanguage();
16345 if (DOM.phrase.val().length
> 0) {
16346 var newPhrase = convertPhraseToNewLanguage();
16347 DOM.phrase.val(newPhrase);
16351 DOM.generate.trigger(
"click");
16356 function toggleIndexes() {
16357 showIndex = !showIndex;
16358 $(
"td.index span").toggleClass(
"invisible");
16361 function toggleAddresses() {
16362 showAddress = !showAddress;
16363 $(
"td.address span").toggleClass(
"invisible");
16366 function togglePrivateKeys() {
16367 showPrivKey = !showPrivKey;
16368 $(
"td.privkey span").toggleClass(
"invisible");
16373 function generateRandomPhrase() {
16374 if (!hasStrongRandom()) {
16375 var errorText =
"This browser does not support strong randomness";
16376 showValidationError(errorText);
16379 var numWords = parseInt(DOM.strength.val());
16380 var strength = numWords /
3 *
32;
16381 var words = mnemonic.generate(strength);
16382 DOM.phrase.val(words);
16386 function calcBip32RootKeyFromSeed(phrase, passphrase) {
16387 seed = mnemonic.toSeed(phrase, passphrase);
16388 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
16391 function calcBip32RootKeyFromBase58(rootKeyBase58) {
16392 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
16395 function calcBip32ExtendedKey(path) {
16396 bip32ExtendedKey = bip32RootKey;
16397 // Derive the key from the path
16398 var pathBits = path.split(
"/");
16399 for (var i=
0; i
<pathBits.length; i++) {
16400 var bit = pathBits[i];
16401 var index = parseInt(bit);
16402 if (isNaN(index)) {
16405 var hardened = bit[bit.length-
1] ==
"'";
16407 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16410 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16415 function showValidationError(errorText) {
16421 function hideValidationError() {
16427 function findPhraseErrors(phrase) {
16428 // TODO make this right
16429 // Preprocess the words
16430 phrase = mnemonic.normalizeString(phrase);
16431 var words = phraseToWordArray(phrase);
16433 for (var i=
0; i
<words.length; i++) {
16434 var word = words[i];
16435 var language = getLanguage();
16436 if (WORDLISTS[language].indexOf(word) == -
1) {
16437 console.log(
"Finding closest match to " + word);
16438 var nearestWord = findNearestWord(word);
16439 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
16442 // Check the words are valid
16443 var properPhrase = wordArrayToPhrase(words);
16444 var isValid = mnemonic.check(properPhrase);
16446 return
"Invalid mnemonic";
16451 function validateRootKey(rootKeyBase58) {
16453 bitcoin.HDNode.fromBase58(rootKeyBase58);
16456 return
"Invalid root key";
16461 function getDerivationPath() {
16462 if (DOM.bip44tab.hasClass(
"active")) {
16463 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
16464 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
16465 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
16466 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
16468 path += purpose +
"'/";
16469 path += coin +
"'/";
16470 path += account +
"'/";
16472 DOM.bip44path.val(path);
16473 var derivationPath = DOM.bip44path.val();
16474 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
16475 return derivationPath;
16477 else if (DOM.bip32tab.hasClass(
"active")) {
16478 var derivationPath = DOM.bip32path.val();
16479 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
16480 return derivationPath;
16483 console.log(
"Unknown derivation path");
16487 function findDerivationPathErrors(path) {
16488 // TODO is not perfect but is better than nothing
16490 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
16492 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
16493 var maxDepth =
255; // TODO verify this!!
16494 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
16495 if (path[
0] !=
"m") {
16496 return
"First character must be 'm'";
16498 if (path.length
> 1) {
16499 if (path[
1] !=
"/") {
16500 return
"Separator must be '/'";
16502 var indexes = path.split(
"/");
16503 if (indexes.length
> maxDepth) {
16504 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16506 for (var depth =
1; depth
<indexes.length; depth++) {
16507 var index = indexes[depth];
16508 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
16509 if (invalidChars.length
> 0) {
16510 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
16512 var indexValue = parseInt(index.replace(
"'",
""));
16513 if (isNaN(depth)) {
16514 return
"Invalid number at depth " + depth;
16516 if (indexValue
> maxIndexValue) {
16517 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16524 function displayBip32Info() {
16526 DOM.seed.val(seed);
16527 var rootKey = bip32RootKey.toBase58();
16528 DOM.rootKey.val(rootKey);
16529 var extendedPrivKey = bip32ExtendedKey.toBase58();
16530 DOM.extendedPrivKey.val(extendedPrivKey);
16531 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16532 DOM.extendedPubKey.val(extendedPubKey);
16533 // Display the addresses and privkeys
16534 clearAddressesList();
16535 displayAddresses(
0,
20);
16538 function displayAddresses(start, total) {
16539 for (var i=
0; i
<total; i++) {
16540 var index = i + start;
16541 new TableRow(index);
16545 function TableRow(index) {
16547 var useHardenedAddresses = DOM.hardenedAddresses.prop(
"checked");
16553 function calculateValues() {
16554 setTimeout(function() {
16556 if (useHardenedAddresses) {
16557 key = bip32ExtendedKey.deriveHardened(index);
16560 key = bip32ExtendedKey.derive(index);
16562 var address = key.getAddress().toString();
16563 var privkey = key.privKey.toWIF(network);
16564 var indexText = getDerivationPath() +
"/" + index;
16565 if (useHardenedAddresses) {
16566 indexText = indexText +
"'";
16568 addAddressToList(indexText, address, privkey);
16576 function showMore() {
16577 var start = DOM.addresses.children().length;
16578 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16579 if (isNaN(rowsToAdd)) {
16581 DOM.rowsToAdd.val(
"20");
16583 if (rowsToAdd
> 200) {
16584 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
16585 msg +=
"Do you want to continue?";
16586 if (!confirm(msg)) {
16590 displayAddresses(start, rowsToAdd);
16593 function clearDisplay() {
16594 clearAddressesList();
16596 hideValidationError();
16599 function clearAddressesList() {
16600 DOM.addresses.empty();
16603 function clearKey() {
16604 DOM.rootKey.val(
"");
16605 DOM.extendedPrivKey.val(
"");
16606 DOM.extendedPubKey.val(
"");
16609 function addAddressToList(indexText, address, privkey) {
16610 var row = $(addressRowTemplate.html());
16612 var indexCell = row.find(
".index span");
16613 var addressCell = row.find(
".address span");
16614 var privkeyCell = row.find(
".privkey span");
16616 indexCell.text(indexText);
16617 addressCell.text(address);
16618 privkeyCell.text(privkey);
16621 indexCell.addClass(
"invisible");
16623 if (!showAddress) {
16624 addressCell.addClass(
"invisible");
16626 if (!showPrivKey) {
16627 privkeyCell.addClass(
"invisible");
16629 DOM.addresses.append(row);
16632 function hasStrongRandom() {
16633 return 'crypto' in window && window['crypto'] !== null;
16636 function disableForms() {
16637 $(
"form").on(
"submit", function(e) {
16638 e.preventDefault();
16642 function parseIntNoNaN(val, defaultVal) {
16643 var v = parseInt(val);
16650 function showPending() {
16652 .text(
"Calculating...")
16656 function findNearestWord(word) {
16657 var language = getLanguage();
16658 var words = WORDLISTS[language];
16659 var minDistance =
99;
16660 var closestWord = words[
0];
16661 for (var i=
0; i
<words.length; i++) {
16662 var comparedTo = words[i];
16663 var distance = Levenshtein.get(word, comparedTo);
16664 if (distance < minDistance) {
16665 closestWord = comparedTo;
16666 minDistance = distance;
16669 return closestWord;
16672 function hidePending() {
16678 function populateNetworkSelect() {
16679 for (var i=
0; i
<networks.length; i++) {
16680 var network = networks[i];
16681 var option = $(
"<option>");
16682 option.attr(
"value", i);
16683 option.text(network.name);
16684 DOM.phraseNetwork.append(option);
16688 function getLanguage() {
16689 var defaultLanguage =
"english";
16690 // Try to get from existing phrase
16691 var language = getLanguageFromPhrase();
16692 // Try to get from url if not from phrase
16693 if (language.length ==
0) {
16694 language = getLanguageFromUrl();
16696 // Default to English if no other option
16697 if (language.length ==
0) {
16698 language = defaultLanguage;
16703 function getLanguageFromPhrase(phrase) {
16704 // Check if how many words from existing phrase match a language.
16707 phrase = DOM.phrase.val();
16709 if (phrase.length
> 0) {
16710 var words = phraseToWordArray(phrase);
16711 var languageMatches = {};
16712 for (l in WORDLISTS) {
16713 // Track how many words match in this language
16714 languageMatches[l] =
0;
16715 for (var i=
0; i
<words.length; i++) {
16716 var wordInLanguage = WORDLISTS[l].indexOf(words[i])
> -
1;
16717 if (wordInLanguage) {
16718 languageMatches[l]++;
16721 // Find languages with most word matches.
16722 // This is made difficult due to commonalities between Chinese
16723 // simplified vs traditional.
16724 var mostMatches =
0;
16725 var mostMatchedLanguages = [];
16726 for (var l in languageMatches) {
16727 var numMatches = languageMatches[l];
16728 if (numMatches
> mostMatches) {
16729 mostMatches = numMatches;
16730 mostMatchedLanguages = [l];
16732 else if (numMatches == mostMatches) {
16733 mostMatchedLanguages.push(l);
16737 if (mostMatchedLanguages.length
> 0) {
16738 // Use first language and warn if multiple detected
16739 language = mostMatchedLanguages[
0];
16740 if (mostMatchedLanguages.length
> 1) {
16741 console.warn(
"Multiple possible languages");
16742 console.warn(mostMatchedLanguages);
16749 function getLanguageFromUrl() {
16750 return window.location.hash.substring(
1);
16753 function setMnemonicLanguage() {
16754 var language = getLanguage();
16755 // Load the bip39 mnemonic generator for this language if required
16756 if (!(language in mnemonics)) {
16757 mnemonics[language] = new Mnemonic(language);
16759 mnemonic = mnemonics[language];
16762 function convertPhraseToNewLanguage() {
16763 var oldLanguage = getLanguageFromPhrase();
16764 var newLanguage = getLanguageFromUrl();
16765 var oldPhrase = DOM.phrase.val();
16766 var oldWords = phraseToWordArray(oldPhrase);
16768 for (var i=
0; i
<oldWords.length; i++) {
16769 var oldWord = oldWords[i];
16770 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16771 var newWord = WORDLISTS[newLanguage][index];
16772 newWords.push(newWord);
16774 newPhrase = wordArrayToPhrase(newWords);
16778 // TODO look at jsbip39 - mnemonic.splitWords
16779 function phraseToWordArray(phrase) {
16780 var words = phrase.split(/\s/g);
16782 for (var i=
0; i
<words.length; i++) {
16783 var word = words[i];
16784 if (word.length
> 0) {
16785 noBlanks.push(word);
16791 // TODO look at jsbip39 - mnemonic.joinWords
16792 function wordArrayToPhrase(words) {
16793 var phrase = words.join(
" ");
16794 var language = getLanguageFromPhrase(phrase);
16795 if (language ==
"japanese") {
16796 phrase = words.join(
"\u3000");
16804 onSelect: function() {
16805 network = bitcoin.networks.bitcoin;
16806 DOM.bip44coin.val(
0);
16810 name:
"Bitcoin Testnet",
16811 onSelect: function() {
16812 network = bitcoin.networks.testnet;
16813 DOM.bip44coin.val(
1);
16818 onSelect: function() {
16819 network = bitcoin.networks.litecoin;
16820 DOM.bip44coin.val(
2);
16825 onSelect: function() {
16826 network = bitcoin.networks.dogecoin;
16827 DOM.bip44coin.val(
3);
16831 name:
"ShadowCash",
16832 onSelect: function() {
16833 network = bitcoin.networks.shadow;
16834 DOM.bip44coin.val(
35);
16838 name:
"ShadowCash Testnet",
16839 onSelect: function() {
16840 network = bitcoin.networks.shadowtn;
16841 DOM.bip44coin.val(
1);
16846 onSelect: function() {
16847 network = bitcoin.networks.viacoin;
16848 DOM.bip44coin.val(
14);
16852 name:
"Viacoin Testnet",
16853 onSelect: function() {
16854 network = bitcoin.networks.viacointestnet;
16855 DOM.bip44coin.val(
1);
16860 onSelect: function() {
16861 network = bitcoin.networks.jumbucks;
16862 DOM.bip44coin.val(
26);
16867 onSelect: function() {
16868 network = bitcoin.networks.clam;
16869 DOM.bip44coin.val(
23);
16874 onSelect: function() {
16875 network = bitcoin.networks.dash;
16876 DOM.bip44coin.val(
5);
16881 onSelect: function() {
16882 network = bitcoin.networks.namecoin;
16883 DOM.bip44coin.val(
7);
16888 onSelect: function() {
16889 network = bitcoin.networks.peercoin;
16890 DOM.bip44coin.val(
6);