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=
"DC POS" 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);
50 <div class=
"container">
52 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
55 <div class=
"col-md-12">
57 <form class=
"form-horizontal" role=
"form">
58 <div class=
"col-sm-2"></div>
59 <div class=
"col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)
</p>
61 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
63 <div class=
"form-group">
64 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
65 <div class=
"col-sm-10">
66 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
69 <div class=
"form-group">
70 <label for=
"strength" class=
"col-sm-2 control-label">Number of words
</label>
71 <div class=
"col-sm-10">
72 <div class=
"input-group">
73 <input type=
"number" class=
"strength form-control" id=
"strength" value=
"12">
74 <span class=
"input-group-btn">
75 <button class=
"btn generate">Generate Random Mnemonic
</button>
80 <div class=
"form-group">
81 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
82 <div class=
"col-sm-10">
83 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
86 <div class=
"form-group">
87 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
88 <div class=
"col-sm-10">
89 <select id=
"network-phrase" class=
"network form-control">
90 <!-- populated by javascript -->
94 <div class=
"form-group">
95 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
96 <div class=
"col-sm-10">
97 <textarea id=
"root-key" class=
"root-key form-control" readonly=
"readonly"></textarea>
107 <div class=
"col-md-12">
108 <h2>Derivation Path
</h2>
109 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
110 <li id=
"bip44-tab" class=
"active">
111 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
114 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
117 <div class=
"derivation-type tab-content">
118 <div id=
"bip44" class=
"tab-pane active">
119 <form class=
"form-horizontal" role=
"form">
121 <div class=
"col-sm-2"></div>
122 <div class=
"col-sm-10">
123 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
125 <div class=
"form-group">
126 <label for=
"purpose" class=
"col-sm-2 control-label">
127 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
129 <div class=
"col-sm-10">
130 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
133 <div class=
"form-group">
134 <label for=
"coin" class=
"col-sm-2 control-label">
135 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
137 <div class=
"col-sm-10">
138 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
141 <div class=
"form-group">
142 <label for=
"account" class=
"col-sm-2 control-label">
143 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
145 <div class=
"col-sm-10">
146 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
149 <div class=
"form-group">
150 <label for=
"change" class=
"col-sm-2 control-label">
151 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
153 <div class=
"col-sm-10">
154 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
157 <div class=
"form-group">
158 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
159 <div class=
"col-sm-10">
160 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
165 <div id=
"bip32" class=
"tab-pane">
166 <form class=
"form-horizontal" role=
"form">
168 <div class=
"col-sm-2"></div>
169 <div class=
"col-sm-10">
170 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
172 <div class=
"form-group">
173 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
174 <div class=
"col-sm-10">
175 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
178 <div class=
"form-group">
179 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
180 <div class=
"col-sm-10">
181 <p class=
"form-control no-border">
182 Use path
<code>m/
0'/
0</code>.
183 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
187 <div class=
"form-group">
188 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
189 <div class=
"col-sm-10">
190 <p class=
"form-control no-border">
191 Use path
<code>m/
44'/
0'/
0'/
0</code>.
192 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
199 <form class=
"form-horizontal" role=
"form">
200 <div class=
"form-group">
201 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
202 <div class=
"col-sm-10">
203 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
206 <div class=
"form-group">
207 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
208 <div class=
"col-sm-10">
209 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
219 <div class=
"col-md-12">
220 <h2>Derived Addresses
</h2>
221 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
222 <table class=
"table table-striped">
225 <div class=
"input-group">
227 <button class=
"index-toggle">Toggle
</button>
231 <div class=
"input-group">
233 <button class=
"address-toggle">Toggle
</button>
237 <div class=
"input-group">
238 Private Key
239 <button class=
"private-key-toggle">Toggle
</button>
243 <tbody class=
"addresses">
244 <tr><td> </td><td> </td><td> </td></tr>
245 <tr><td> </td><td> </td><td> </td></tr>
246 <tr><td> </td><td> </td><td> </td></tr>
247 <tr><td> </td><td> </td><td> </td></tr>
248 <tr><td> </td><td> </td><td> </td></tr>
253 <span>Show next
</button>
254 <input type=
"number" class=
"rows-to-add" value=
"20">
255 <button class=
"more">Show
</button>
260 <div class=
"col-md-12">
262 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
265 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
267 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
270 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
272 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
274 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
277 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
279 <h3>Private Keys
</h3>
282 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
283 but be careful - it can be easy to make mistakes if you
284 don't know what you're doing
292 <div class=
"col-md-12">
294 <h2>Offline Usage
</h2>
297 You can use this tool without having to be online.
300 In your browser, select file save-as, and save this page
304 Double-click that file to open it in a browser
305 on any offline computer.
308 Alternatively, download it from
309 <a href=
"https://github.com/dcpos/bip39">
310 https://github.com/dcpos/bip39
319 <div class=
"col-md-12">
321 <h2>This project is
100% open-source code
</h2>
324 <span>Get the source code at -
</span>
325 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
326 https://github.com/dcpos/bip39
333 <span>BitcoinJS -
</span>
334 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
335 https://github.com/bitcoinjs/bitcoinjs-lib
340 <span>jsBIP39 -
</span>
341 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
342 https://github.com/iancoleman/jsbip39
348 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
349 https://github.com/bitwiseshiftleft/sjcl
354 <span>jQuery -
</span>
355 <a href=
"https://jquery.com/" target=
"_blank">
361 <span>Twitter Bootstrap -
</span>
362 <a href=
"http://getbootstrap.com/" target=
"_blank">
363 http://getbootstrap.com/
372 <div class=
"feedback-container">
373 <div class=
"feedback">Loading...
</div>
376 <script type=
"text/template" id=
"address-row-template">
378 <td class=
"index"><span></span></td>
379 <td class=
"address"><span></span></td>
380 <td class=
"privkey"><span></span></td>
383 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
384 !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)
385 },_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))
386 },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});
389 * Bootstrap v3.2.0 (http://getbootstrap.com)
390 * Copyright 2011-2014 Twitter, Inc.
391 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
393 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>
394 <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){
395 // (public) Constructor
396 function BigInteger(a, b, c) {
397 if (!(this instanceof BigInteger))
398 return new BigInteger(a, b, c)
401 if (
"number" == typeof a) this.fromNumber(a, b, c)
402 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
403 else this.fromString(a, b)
407 var proto = BigInteger.prototype
409 // duck-typed isBigInteger
410 proto.__bigi = require('../package.json').version
411 BigInteger.isBigInteger = function (obj, check_ver) {
412 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
418 // am: Compute w_j += (x*this_i), propagate carries,
419 // c is initial carry, returns final carry.
420 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
421 // We need to select the fastest one that works in this environment.
423 // am1: use a single mult and divide to get the high bits,
424 // max digit bits should be
26 because
425 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
426 function am1(i, x, w, j, c, n) {
428 var v = x * this[i++] + w[j] + c
429 c = Math.floor(v /
0x4000000)
430 w[j++] = v &
0x3ffffff
434 // am2 avoids a big mult-and-extract completely.
435 // Max digit bits should be <=
30 because we do bitwise ops
436 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
437 function am2(i, x, w, j, c, n) {
441 var l = this[i] &
0x7fff
442 var h = this[i++]
>> 15
443 var m = xh * l + h * xl
444 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
445 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
446 w[j++] = l &
0x3fffffff
450 // Alternately, set max digit bits to
28 since some
451 // browsers slow down when dealing with
32-bit numbers.
452 function am3(i, x, w, j, c, n) {
456 var l = this[i] &
0x3fff
457 var h = this[i++]
>> 14
458 var m = xh * l + h * xl
459 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
460 c = (l
>> 28) + (m
>> 14) + xh * h
461 w[j++] = l &
0xfffffff
467 BigInteger.prototype.am = am1
470 BigInteger.prototype.DB = dbits
471 BigInteger.prototype.DM = ((
1 << dbits) -
1)
472 var DV = BigInteger.prototype.DV = (
1 << dbits)
475 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
476 BigInteger.prototype.F1 = BI_FP - dbits
477 BigInteger.prototype.F2 =
2 * dbits - BI_FP
480 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
481 var BI_RC = new Array()
483 rr =
"0".charCodeAt(
0)
484 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
485 rr =
"a".charCodeAt(
0)
486 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
487 rr =
"A".charCodeAt(
0)
488 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
490 function int2char(n) {
491 return BI_RM.charAt(n)
494 function intAt(s, i) {
495 var c = BI_RC[s.charCodeAt(i)]
496 return (c == null) ? -
1 : c
499 // (protected) copy this to r
500 function bnpCopyTo(r) {
501 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
506 // (protected) set from integer value x, -DV <= x < DV
507 function bnpFromInt(x) {
509 this.s = (x <
0) ? -
1 :
0
510 if (x
> 0) this[
0] = x
511 else if (x < -
1) this[
0] = x + DV
515 // return bigint initialized to value
517 var r = new BigInteger()
522 // (protected) set from string and radix
523 function bnpFromString(s, b) {
528 else if (b ==
8) k =
3
529 else if (b ==
256) k =
8; // byte array
530 else if (b ==
2) k =
1
531 else if (b ==
32) k =
5
532 else if (b ==
4) k =
2
543 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
545 if (s.charAt(i) == "-") mi = true
551 else if (sh + k
> self.DB) {
552 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
553 self[self.t++] = (x
>> (self.DB - sh))
555 self[self.t -
1] |= x << sh
557 if (sh
>= self.DB) sh -= self.DB
559 if (k ==
8 && (s[
0] &
0x80) !=
0) {
561 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
564 if (mi) BigInteger.ZERO.subTo(self, self)
567 // (protected) clamp off excess high words
568 function bnpClamp() {
569 var c = this.s & this.DM
570 while (this.t
> 0 && this[this.t -
1] == c)--this.t
573 // (public) return string representation in given radix
574 function bnToString(b) {
576 if (self.s <
0) return
"-" + self.negate()
580 else if (b ==
8) k =
3
581 else if (b ==
2) k =
1
582 else if (b ==
32) k =
5
583 else if (b ==
4) k =
2
584 else return self.toRadix(b)
585 var km = (
1 << k) -
1,
589 var p = self.DB - (i * self.DB) % k
591 if (p < self.DB && (d = self[i]
>> p)
> 0) {
597 d = (self[i] & ((
1 << p) -
1)) << (k - p)
598 d |= self[--i]
>> (p += self.DB - k)
600 d = (self[i]
>> (p -= k)) & km
607 if (m) r += int2char(d)
614 function bnNegate() {
615 var r = new BigInteger()
616 BigInteger.ZERO.subTo(this, r)
622 return (this.s <
0) ? this.negate() : this
625 // (public) return + if this
> a, - if this < a,
0 if equal
626 function bnCompareTo(a) {
631 if (r !=
0) return (this.s <
0) ? -r : r
633 if ((r = this[i] - a[i]) !=
0) return r
637 // returns bit length of the integer x
641 if ((t = x
>>> 16) !=
0) {
645 if ((t = x
>> 8) !=
0) {
649 if ((t = x
>> 4) !=
0) {
653 if ((t = x
>> 2) !=
0) {
657 if ((t = x
>> 1) !=
0) {
664 // (public) return the number of bits in
"this"
665 function bnBitLength() {
666 if (this.t <=
0) return
0
667 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
670 // (public) return the number of bytes in
"this"
671 function bnByteLength() {
672 return this.bitLength()
>> 3
675 // (protected) r = this << n*DB
676 function bnpDLShiftTo(n, r) {
678 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
679 for (i = n -
1; i
>=
0; --i) r[i] =
0
684 // (protected) r = this
>> n*DB
685 function bnpDRShiftTo(n, r) {
686 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
687 r.t = Math.max(this.t - n,
0)
691 // (protected) r = this << n
692 function bnpLShiftTo(n, r) {
695 var cbs = self.DB - bs
696 var bm = (
1 << cbs) -
1
697 var ds = Math.floor(n / self.DB),
698 c = (self.s << bs) & self.DM,
700 for (i = self.t -
1; i
>=
0; --i) {
701 r[i + ds +
1] = (self[i]
>> cbs) | c
702 c = (self[i] & bm) << bs
704 for (i = ds -
1; i
>=
0; --i) r[i] =
0
706 r.t = self.t + ds +
1
711 // (protected) r = this
>> n
712 function bnpRShiftTo(n, r) {
715 var ds = Math.floor(n / self.DB)
721 var cbs = self.DB - bs
722 var bm = (
1 << bs) -
1
723 r[
0] = self[ds]
>> bs
724 for (var i = ds +
1; i < self.t; ++i) {
725 r[i - ds -
1] |= (self[i] & bm) << cbs
726 r[i - ds] = self[i]
>> bs
728 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
733 // (protected) r = this - a
734 function bnpSubTo(a, r) {
738 m = Math.min(a.t, self.t)
761 r.s = (c <
0) ? -
1 :
0
762 if (c < -
1) r[i++] = self.DV + c
763 else if (c
> 0) r[i++] = c
768 // (protected) r = this * a, r != this,a (HAC
14.12)
769 //
"this" should be the larger one if appropriate.
770 function bnpMultiplyTo(a, r) {
775 while (--i
>=
0) r[i] =
0
776 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
779 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
782 // (protected) r = this^
2, r != this (HAC
14.16)
783 function bnpSquareTo(r) {
785 var i = r.t =
2 * x.t
786 while (--i
>=
0) r[i] =
0
787 for (i =
0; i < x.t -
1; ++i) {
788 var c = x.am(i, x[i], r,
2 * i,
0,
1)
789 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
794 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
799 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
800 // r != q, this != m. q or r may be null.
801 function bnpDivRemTo(m, q, r) {
804 if (pm.t <=
0) return
807 if (q != null) q.fromInt(
0)
808 if (r != null) self.copyTo(r)
811 if (r == null) r = new BigInteger()
812 var y = new BigInteger(),
815 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
826 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
827 var d1 = self.FV / yt,
828 d2 = (
1 << self.F1) / yt,
832 t = (q == null) ? new BigInteger() : q
834 if (r.compareTo(t)
>=
0) {
838 BigInteger.ONE.dlShiftTo(ys, t)
839 t.subTo(y, y); // "negative" y so we can replace sub with am later
840 while (y.t < ys) y[y.t++] =
0
842 // Estimate quotient digit
843 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
844 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
847 while (r[i] < --qd) r.subTo(t, r)
852 if (ts != ms) BigInteger.ZERO.subTo(q, q)
856 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
857 if (ts <
0) BigInteger.ZERO.subTo(r, r)
860 // (public) this mod a
862 var r = new BigInteger()
864 .divRemTo(a, null, r)
865 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
869 // Modular reduction using
"classic" algorithm
870 function Classic(m) {
874 function cConvert(x) {
875 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
879 function cRevert(x) {
883 function cReduce(x) {
884 x.divRemTo(this.m, null, x)
887 function cMulTo(x, y, r) {
892 function cSqrTo(x, r) {
897 Classic.prototype.convert = cConvert
898 Classic.prototype.revert = cRevert
899 Classic.prototype.reduce = cReduce
900 Classic.prototype.mulTo = cMulTo
901 Classic.prototype.sqrTo = cSqrTo
903 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
907 // xy(
2-xy) = (
1+km)(
1-km)
908 // x[y(
2-xy)] =
1-k^
2m^
2
909 // x[y(
2-xy)] ==
1 (mod m^
2)
910 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
911 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
912 // JS multiply "overflows" differently from C/C++, so care is needed here.
913 function bnpInvDigit() {
914 if (this.t <
1) return
0
916 if ((x &
1) ==
0) return
0
917 var y = x &
3; // y ==
1/x mod
2^
2
918 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
919 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
920 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
921 // last step - calculate inverse mod DV directly
922 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
923 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
924 // we really want the negative inverse, and -DV < y < DV
925 return (y
> 0) ? this.DV - y : -y
928 // Montgomery reduction
929 function Montgomery(m) {
931 this.mp = m.invDigit()
932 this.mpl = this.mp &
0x7fff
933 this.mph = this.mp
>> 15
934 this.um = (
1 << (m.DB -
15)) -
1
939 function montConvert(x) {
940 var r = new BigInteger()
942 .dlShiftTo(this.m.t, r)
943 r.divRemTo(this.m, null, r)
944 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
949 function montRevert(x) {
950 var r = new BigInteger()
956 // x = x/R mod m (HAC
14.32)
957 function montReduce(x) {
958 while (x.t <= this.mt2) // pad x so am has enough room later
960 for (var i =
0; i < this.m.t; ++i) {
961 // faster way of calculating u0 = x[i]*mp mod DV
962 var j = x[i] &
0x7fff
963 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
964 // use am to combine the multiply-shift-add into one call
966 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
968 while (x[j]
>= x.DV) {
974 x.drShiftTo(this.m.t, x)
975 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
978 // r = "x^
2/R mod m"; x != r
979 function montSqrTo(x, r) {
984 // r = "xy/R mod m"; x,y != r
985 function montMulTo(x, y, r) {
990 Montgomery.prototype.convert = montConvert
991 Montgomery.prototype.revert = montRevert
992 Montgomery.prototype.reduce = montReduce
993 Montgomery.prototype.mulTo = montMulTo
994 Montgomery.prototype.sqrTo = montSqrTo
996 // (protected) true iff this is even
997 function bnpIsEven() {
998 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1001 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1002 function bnpExp(e, z) {
1003 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1004 var r = new BigInteger(),
1005 r2 = new BigInteger(),
1006 g = z.convert(this),
1011 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1021 // (public) this^e % m,
0 <= e <
2^
32
1022 function bnModPowInt(e, m) {
1024 if (e <
256 || m.isEven()) z = new Classic(m)
1025 else z = new Montgomery(m)
1026 return this.exp(e, z)
1030 proto.copyTo = bnpCopyTo
1031 proto.fromInt = bnpFromInt
1032 proto.fromString = bnpFromString
1033 proto.clamp = bnpClamp
1034 proto.dlShiftTo = bnpDLShiftTo
1035 proto.drShiftTo = bnpDRShiftTo
1036 proto.lShiftTo = bnpLShiftTo
1037 proto.rShiftTo = bnpRShiftTo
1038 proto.subTo = bnpSubTo
1039 proto.multiplyTo = bnpMultiplyTo
1040 proto.squareTo = bnpSquareTo
1041 proto.divRemTo = bnpDivRemTo
1042 proto.invDigit = bnpInvDigit
1043 proto.isEven = bnpIsEven
1047 proto.toString = bnToString
1048 proto.negate = bnNegate
1050 proto.compareTo = bnCompareTo
1051 proto.bitLength = bnBitLength
1052 proto.byteLength = bnByteLength
1054 proto.modPowInt = bnModPowInt
1057 function bnClone() {
1058 var r = new BigInteger()
1063 // (public) return value as integer
1064 function bnIntValue() {
1066 if (this.t ==
1) return this[
0] - this.DV
1067 else if (this.t ==
0) return -
1
1068 } else if (this.t ==
1) return this[
0]
1069 else if (this.t ==
0) return
0
1070 // assumes
16 < DB <
32
1071 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1074 // (public) return value as byte
1075 function bnByteValue() {
1076 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1079 // (public) return value as short (assumes DB
>=
16)
1080 function bnShortValue() {
1081 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1084 // (protected) return x s.t. r^x < DV
1085 function bnpChunkSize(r) {
1086 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1089 // (public)
0 if this ==
0,
1 if this
> 0
1090 function bnSigNum() {
1091 if (this.s <
0) return -
1
1092 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1096 // (protected) convert to radix string
1097 function bnpToRadix(b) {
1098 if (b == null) b =
10
1099 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1100 var cs = this.chunkSize(b)
1101 var a = Math.pow(b, cs)
1103 y = new BigInteger(),
1104 z = new BigInteger(),
1106 this.divRemTo(d, y, z)
1107 while (y.signum()
> 0) {
1108 r = (a + z.intValue())
1117 // (protected) convert from radix string
1118 function bnpFromRadix(s, b) {
1121 if (b == null) b =
10
1122 var cs = self.chunkSize(b)
1123 var d = Math.pow(b, cs),
1127 for (var i =
0; i < s.length; ++i) {
1130 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1136 self.dAddOffset(w,
0)
1142 self.dMultiply(Math.pow(b, j))
1143 self.dAddOffset(w,
0)
1145 if (mi) BigInteger.ZERO.subTo(self, self)
1148 // (protected) alternate constructor
1149 function bnpFromNumber(a, b, c) {
1151 if (
"number" == typeof b) {
1152 // new BigInteger(int,int,RNG)
1153 if (a <
2) self.fromInt(
1)
1155 self.fromNumber(a, c)
1156 if (!self.testBit(a -
1)) // force MSB set
1157 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1158 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1159 while (!self.isProbablePrime(b)) {
1160 self.dAddOffset(
2,
0)
1161 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1165 // new BigInteger(int,RNG)
1166 var x = new Array(),
1168 x.length = (a
>> 3) +
1
1170 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1172 self.fromString(x,
256)
1176 // (public) convert to bigendian byte array
1177 function bnToByteArray() {
1182 var p = self.DB - (i * self.DB) %
8,
1185 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1186 r[k++] = d | (self.s << (self.DB - p))
1189 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1190 d |= self[--i]
>> (p += self.DB -
8)
1192 d = (self[i]
>> (p -=
8)) &
0xff
1198 if ((d &
0x80) !=
0) d |= -
256
1199 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1200 if (k
> 0 || d != self.s) r[k++] = d
1206 function bnEquals(a) {
1207 return (this.compareTo(a) ==
0)
1211 return (this.compareTo(a) <
0) ? this : a
1215 return (this.compareTo(a)
> 0) ? this : a
1218 // (protected) r = this op a (bitwise)
1219 function bnpBitwiseTo(a, op, r) {
1221 var i, f, m = Math.min(a.t, self.t)
1222 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1225 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1228 f = self.s & self.DM
1229 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1232 r.s = op(self.s, a.s)
1236 // (public) this & a
1237 function op_and(x, y) {
1242 var r = new BigInteger()
1243 this.bitwiseTo(a, op_and, r)
1247 // (public) this | a
1248 function op_or(x, y) {
1253 var r = new BigInteger()
1254 this.bitwiseTo(a, op_or, r)
1258 // (public) this ^ a
1259 function op_xor(x, y) {
1264 var r = new BigInteger()
1265 this.bitwiseTo(a, op_xor, r)
1269 // (public) this & ~a
1270 function op_andnot(x, y) {
1274 function bnAndNot(a) {
1275 var r = new BigInteger()
1276 this.bitwiseTo(a, op_andnot, r)
1282 var r = new BigInteger()
1283 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1289 // (public) this << n
1290 function bnShiftLeft(n) {
1291 var r = new BigInteger()
1292 if (n <
0) this.rShiftTo(-n, r)
1293 else this.lShiftTo(n, r)
1297 // (public) this
>> n
1298 function bnShiftRight(n) {
1299 var r = new BigInteger()
1300 if (n <
0) this.lShiftTo(-n, r)
1301 else this.rShiftTo(n, r)
1305 // return index of lowest
1-bit in x, x <
2^
31
1307 if (x ==
0) return -
1
1309 if ((x &
0xffff) ==
0) {
1313 if ((x &
0xff) ==
0) {
1317 if ((x &
0xf) ==
0) {
1325 if ((x &
1) ==
0)++r
1329 // (public) returns index of lowest
1-bit (or -
1 if none)
1330 function bnGetLowestSetBit() {
1331 for (var i =
0; i < this.t; ++i)
1332 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1333 if (this.s <
0) return this.t * this.DB
1337 // return number of
1 bits in x
1347 // (public) return number of set bits
1348 function bnBitCount() {
1350 x = this.s & this.DM
1351 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1355 // (public) true iff nth bit is set
1356 function bnTestBit(n) {
1357 var j = Math.floor(n / this.DB)
1358 if (j
>= this.t) return (this.s !=
0)
1359 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1362 // (protected) this op (
1<
<n)
1363 function bnpChangeBit(n, op) {
1364 var r = BigInteger.ONE.shiftLeft(n)
1365 this.bitwiseTo(r, op, r)
1369 // (public) this | (
1<
<n)
1370 function bnSetBit(n) {
1371 return this.changeBit(n, op_or)
1374 // (public) this & ~(
1<
<n)
1375 function bnClearBit(n) {
1376 return this.changeBit(n, op_andnot)
1379 // (public) this ^ (
1<
<n)
1380 function bnFlipBit(n) {
1381 return this.changeBit(n, op_xor)
1384 // (protected) r = this + a
1385 function bnpAddTo(a, r) {
1390 m = Math.min(a.t, self.t)
1393 r[i++] = c & self.DM
1398 while (i < self.t) {
1400 r[i++] = c & self.DM
1408 r[i++] = c & self.DM
1413 r.s = (c <
0) ? -
1 :
0
1414 if (c
> 0) r[i++] = c
1415 else if (c < -
1) r[i++] = self.DV + c
1420 // (public) this + a
1422 var r = new BigInteger()
1427 // (public) this - a
1428 function bnSubtract(a) {
1429 var r = new BigInteger()
1434 // (public) this * a
1435 function bnMultiply(a) {
1436 var r = new BigInteger()
1437 this.multiplyTo(a, r)
1442 function bnSquare() {
1443 var r = new BigInteger()
1448 // (public) this / a
1449 function bnDivide(a) {
1450 var r = new BigInteger()
1451 this.divRemTo(a, r, null)
1455 // (public) this % a
1456 function bnRemainder(a) {
1457 var r = new BigInteger()
1458 this.divRemTo(a, null, r)
1462 // (public) [this/a,this%a]
1463 function bnDivideAndRemainder(a) {
1464 var q = new BigInteger(),
1465 r = new BigInteger()
1466 this.divRemTo(a, q, r)
1467 return new Array(q, r)
1470 // (protected) this *= n, this
>=
0,
1 < n < DV
1471 function bnpDMultiply(n) {
1472 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1477 // (protected) this += n << w words, this
>=
0
1478 function bnpDAddOffset(n, w) {
1480 while (this.t <= w) this[this.t++] =
0
1482 while (this[w]
>= this.DV) {
1484 if (++w
>= this.t) this[this.t++] =
0
1490 function NullExp() {}
1496 function nMulTo(x, y, r) {
1500 function nSqrTo(x, r) {
1504 NullExp.prototype.convert = nNop
1505 NullExp.prototype.revert = nNop
1506 NullExp.prototype.mulTo = nMulTo
1507 NullExp.prototype.sqrTo = nSqrTo
1511 return this.exp(e, new NullExp())
1514 // (protected) r = lower n words of "this * a", a.t <= n
1515 // "this" should be the larger one if appropriate.
1516 function bnpMultiplyLowerTo(a, n, r) {
1517 var i = Math.min(this.t + a.t, n)
1518 r.s =
0; // assumes a,this
>=
0
1520 while (i
> 0) r[--i] =
0
1522 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1523 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1527 // (protected) r =
"this * a" without lower n words, n
> 0
1528 //
"this" should be the larger one if appropriate.
1529 function bnpMultiplyUpperTo(a, n, r) {
1531 var i = r.t = this.t + a.t - n
1532 r.s =
0; // assumes a,this
>=
0
1533 while (--i
>=
0) r[i] =
0
1534 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1535 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1540 // Barrett modular reduction
1541 function Barrett(m) {
1543 this.r2 = new BigInteger()
1544 this.q3 = new BigInteger()
1545 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1546 this.mu = this.r2.divide(m)
1550 function barrettConvert(x) {
1551 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1552 else if (x.compareTo(this.m) <
0) return x
1554 var r = new BigInteger()
1561 function barrettRevert(x) {
1565 // x = x mod m (HAC
14.42)
1566 function barrettReduce(x) {
1568 x.drShiftTo(self.m.t -
1, self.r2)
1569 if (x.t
> self.m.t +
1) {
1573 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1574 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1575 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1577 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1580 // r = x^
2 mod m; x != r
1581 function barrettSqrTo(x, r) {
1586 // r = x*y mod m; x,y != r
1587 function barrettMulTo(x, y, r) {
1592 Barrett.prototype.convert = barrettConvert
1593 Barrett.prototype.revert = barrettRevert
1594 Barrett.prototype.reduce = barrettReduce
1595 Barrett.prototype.mulTo = barrettMulTo
1596 Barrett.prototype.sqrTo = barrettSqrTo
1598 // (public) this^e % m (HAC
14.85)
1599 function bnModPow(e, m) {
1600 var i = e.bitLength(),
1603 if (i <=
0) return r
1604 else if (i <
18) k =
1
1605 else if (i <
48) k =
3
1606 else if (i <
144) k =
4
1607 else if (i <
768) k =
5
1611 else if (m.isEven())
1614 z = new Montgomery(m)
1617 var g = new Array(),
1621 g[
1] = z.convert(this)
1623 var g2 = new BigInteger()
1626 g[n] = new BigInteger()
1627 z.mulTo(g2, g[n -
2], g[n])
1634 r2 = new BigInteger(),
1638 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1640 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1641 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1645 while ((w &
1) ==
0) {
1653 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1662 if (n
> 0) z.sqrTo(r, r2)
1668 z.mulTo(r2, g[w], r)
1671 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1685 // (public) gcd(this,a) (HAC
14.54)
1687 var x = (this.s <
0) ? this.negate() : this.clone()
1688 var y = (a.s <
0) ? a.negate() : a.clone()
1689 if (x.compareTo(y) <
0) {
1694 var i = x.getLowestSetBit(),
1695 g = y.getLowestSetBit()
1702 while (x.signum()
> 0) {
1703 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1704 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1705 if (x.compareTo(y)
>=
0) {
1713 if (g
> 0) y.lShiftTo(g, y)
1717 // (protected) this % n, n <
2^
26
1718 function bnpModInt(n) {
1719 if (n <=
0) return
0
1720 var d = this.DV % n,
1721 r = (this.s <
0) ? n -
1 :
0
1723 if (d ==
0) r = this[
0] % n
1725 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1729 // (public)
1/this % m (HAC
14.61)
1730 function bnModInverse(m) {
1732 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1739 while (u.signum() !=
0) {
1740 while (u.isEven()) {
1743 if (!a.isEven() || !b.isEven()) {
1748 } else if (!b.isEven()) b.subTo(m, b)
1751 while (v.isEven()) {
1754 if (!c.isEven() || !d.isEven()) {
1759 } else if (!d.isEven()) d.subTo(m, d)
1762 if (u.compareTo(v)
>=
0) {
1764 if (ac) a.subTo(c, a)
1768 if (ac) c.subTo(a, c)
1772 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
1773 if (d.compareTo(m)
>=
0) return d.subtract(m)
1774 if (d.signum() <
0) d.addTo(m, d)
1776 if (d.signum() <
0) return d.add(m)
1781 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
1782 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
1783 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
1784 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
1785 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
1786 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
1787 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
1788 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
1789 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
1790 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
1791 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
1794 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
1796 // (public) test primality with certainty
>=
1-
.5^t
1797 function bnIsProbablePrime(t) {
1798 var i, x = this.abs()
1799 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
1800 for (i =
0; i < lowprimes.length; ++i)
1801 if (x[
0] == lowprimes[i]) return true
1804 if (x.isEven()) return false
1806 while (i < lowprimes.length) {
1807 var m = lowprimes[i],
1809 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1811 while (i < j) if (m % lowprimes[i++] ==
0) return false
1813 return x.millerRabin(t)
1816 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
1817 function bnpMillerRabin(t) {
1818 var n1 = this.subtract(BigInteger.ONE)
1819 var k = n1.getLowestSetBit()
1820 if (k <=
0) return false
1821 var r = n1.shiftRight(k)
1823 if (t
> lowprimes.length) t = lowprimes.length
1824 var a = new BigInteger(null)
1826 for (var i =
0; i < t; ++i) {
1828 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1829 if (bases.indexOf(j) == -
1) break
1833 var y = a.modPow(r, this)
1834 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
1836 while (j++ < k && y.compareTo(n1) !=
0) {
1837 y = y.modPowInt(
2, this)
1838 if (y.compareTo(BigInteger.ONE) ==
0) return false
1840 if (y.compareTo(n1) !=
0) return false
1847 proto.chunkSize = bnpChunkSize
1848 proto.toRadix = bnpToRadix
1849 proto.fromRadix = bnpFromRadix
1850 proto.fromNumber = bnpFromNumber
1851 proto.bitwiseTo = bnpBitwiseTo
1852 proto.changeBit = bnpChangeBit
1853 proto.addTo = bnpAddTo
1854 proto.dMultiply = bnpDMultiply
1855 proto.dAddOffset = bnpDAddOffset
1856 proto.multiplyLowerTo = bnpMultiplyLowerTo
1857 proto.multiplyUpperTo = bnpMultiplyUpperTo
1858 proto.modInt = bnpModInt
1859 proto.millerRabin = bnpMillerRabin
1862 proto.clone = bnClone
1863 proto.intValue = bnIntValue
1864 proto.byteValue = bnByteValue
1865 proto.shortValue = bnShortValue
1866 proto.signum = bnSigNum
1867 proto.toByteArray = bnToByteArray
1868 proto.equals = bnEquals
1874 proto.andNot = bnAndNot
1876 proto.shiftLeft = bnShiftLeft
1877 proto.shiftRight = bnShiftRight
1878 proto.getLowestSetBit = bnGetLowestSetBit
1879 proto.bitCount = bnBitCount
1880 proto.testBit = bnTestBit
1881 proto.setBit = bnSetBit
1882 proto.clearBit = bnClearBit
1883 proto.flipBit = bnFlipBit
1885 proto.subtract = bnSubtract
1886 proto.multiply = bnMultiply
1887 proto.divide = bnDivide
1888 proto.remainder = bnRemainder
1889 proto.divideAndRemainder = bnDivideAndRemainder
1890 proto.modPow = bnModPow
1891 proto.modInverse = bnModInverse
1894 proto.isProbablePrime = bnIsProbablePrime
1896 // JSBN-specific extension
1897 proto.square = bnSquare
1900 BigInteger.ZERO = nbv(
0)
1901 BigInteger.ONE = nbv(
1)
1902 BigInteger.valueOf = nbv
1904 module.exports = BigInteger
1906 },{"../package.json":
4}],
2:[function(require,module,exports){
1908 // FIXME: Kind of a weird way to throw exceptions, consider removing
1909 var assert = require('assert')
1910 var BigInteger = require('./bigi')
1913 * Turns a byte array into a big integer.
1915 * This function will interpret a byte array as a big integer in big
1918 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1919 // BigInteger expects a DER integer conformant byte array
1920 if (byteArray[
0] &
0x80) {
1921 return new BigInteger([
0].concat(byteArray))
1924 return new BigInteger(byteArray)
1928 * Returns a byte array representation of the big integer.
1930 * This returns the absolute of the contained value in big endian
1931 * form. A value of zero results in an empty array.
1933 BigInteger.prototype.toByteArrayUnsigned = function() {
1934 var byteArray = this.toByteArray()
1935 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
1938 BigInteger.fromDERInteger = function(byteArray) {
1939 return new BigInteger(byteArray)
1943 * Converts BigInteger to a DER integer representation.
1945 * The format for this value uses the most significant bit as a sign
1946 * bit. If the most significant bit is already set and the integer is
1947 * positive, a
0x00 is prepended.
1963 * -
62300 =
> 0xff0ca4
1965 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1967 BigInteger.fromBuffer = function(buffer) {
1968 // BigInteger expects a DER integer conformant byte array
1969 if (buffer[
0] &
0x80) {
1970 var byteArray = Array.prototype.slice.call(buffer)
1972 return new BigInteger([
0].concat(byteArray))
1975 return new BigInteger(buffer)
1978 BigInteger.fromHex = function(hex) {
1979 if (hex === '') return BigInteger.ZERO
1981 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
1982 assert.equal(hex.length %
2,
0, 'Incomplete hex')
1983 return new BigInteger(hex,
16)
1986 BigInteger.prototype.toBuffer = function(size) {
1987 var byteArray = this.toByteArrayUnsigned()
1990 var padding = size - byteArray.length
1991 while (zeros.length < padding) zeros.push(
0)
1993 return new Buffer(zeros.concat(byteArray))
1996 BigInteger.prototype.toHex = function(size) {
1997 return this.toBuffer(size).toString('hex')
2000 }).call(this,require(
"buffer").Buffer)
2001 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2002 var BigInteger = require('./bigi')
2005 require('./convert')
2007 module.exports = BigInteger
2008 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2012 "description":
"Big integers.",
2030 "devDependencies": {
2033 "coveralls":
"^2.10.0",
2034 "istanbul":
"^0.2.11"
2037 "url":
"https://github.com/cryptocoinjs/bigi",
2040 "main":
"./lib/index.js",
2042 "test":
"_mocha -- test/*.js",
2043 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2045 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2046 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2050 "files":
"test/*.js",
2056 "safari/6.0..latest",
2057 "iphone/6.0..latest",
2058 "android-browser/4.2..latest"
2062 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2064 "homepage":
"https://github.com/cryptocoinjs/bigi",
2065 "_id":
"bigi@1.4.0",
2067 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2068 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2070 "_from":
"bigi@^1.4.0",
2071 "_npmVersion":
"1.4.3",
2074 "email":
"jprichardson@gmail.com"
2079 "email":
"jprichardson@gmail.com"
2082 "name":
"midnightlightning",
2083 "email":
"boydb@midnightdesign.ws"
2086 "name":
"sidazhang",
2087 "email":
"sidazhang89@gmail.com"
2091 "email":
"npm@shesek.info"
2095 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2096 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2099 },{}],
5:[function(require,module,exports){
2100 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2102 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2104 // Originally from narwhal.js (http://narwhaljs.org)
2105 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2107 // Permission is hereby granted, free of charge, to any person obtaining a copy
2108 // of this software and associated documentation files (the 'Software'), to
2109 // deal in the Software without restriction, including without limitation the
2110 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2111 // sell copies of the Software, and to permit persons to whom the Software is
2112 // furnished to do so, subject to the following conditions:
2114 // The above copyright notice and this permission notice shall be included in
2115 // all copies or substantial portions of the Software.
2117 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2118 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2119 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2120 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2121 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2122 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2124 // when used in node, this will actually load the util module we depend on
2125 // versus loading the builtin util module as happens otherwise
2126 // this is a bug in node module loading as far as I am concerned
2127 var util = require('util/');
2129 var pSlice = Array.prototype.slice;
2130 var hasOwn = Object.prototype.hasOwnProperty;
2132 //
1. The assert module provides functions that throw
2133 // AssertionError's when particular conditions are not met. The
2134 // assert module must conform to the following interface.
2136 var assert = module.exports = ok;
2138 //
2. The AssertionError is defined in assert.
2139 // new assert.AssertionError({ message: message,
2141 // expected: expected })
2143 assert.AssertionError = function AssertionError(options) {
2144 this.name = 'AssertionError';
2145 this.actual = options.actual;
2146 this.expected = options.expected;
2147 this.operator = options.operator;
2148 if (options.message) {
2149 this.message = options.message;
2150 this.generatedMessage = false;
2152 this.message = getMessage(this);
2153 this.generatedMessage = true;
2155 var stackStartFunction = options.stackStartFunction || fail;
2157 if (Error.captureStackTrace) {
2158 Error.captureStackTrace(this, stackStartFunction);
2161 // non v8 browsers so we can have a stacktrace
2162 var err = new Error();
2164 var out = err.stack;
2166 // try to strip useless frames
2167 var fn_name = stackStartFunction.name;
2168 var idx = out.indexOf('\n' + fn_name);
2170 // once we have located the function frame
2171 // we need to strip out everything before it (and its line)
2172 var next_line = out.indexOf('\n', idx +
1);
2173 out = out.substring(next_line +
1);
2181 // assert.AssertionError instanceof Error
2182 util.inherits(assert.AssertionError, Error);
2184 function replacer(key, value) {
2185 if (util.isUndefined(value)) {
2188 if (util.isNumber(value) && !isFinite(value)) {
2189 return value.toString();
2191 if (util.isFunction(value) || util.isRegExp(value)) {
2192 return value.toString();
2197 function truncate(s, n) {
2198 if (util.isString(s)) {
2199 return s.length < n ? s : s.slice(
0, n);
2205 function getMessage(self) {
2206 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2207 self.operator + ' ' +
2208 truncate(JSON.stringify(self.expected, replacer),
128);
2211 // At present only the three keys mentioned above are used and
2212 // understood by the spec. Implementations or sub modules can pass
2213 // other keys to the AssertionError's constructor - they will be
2216 //
3. All of the following functions must throw an AssertionError
2217 // when a corresponding condition is not met, with a message that
2218 // may be undefined if not provided. All assertion methods provide
2219 // both the actual and expected values to the assertion error for
2220 // display purposes.
2222 function fail(actual, expected, message, operator, stackStartFunction) {
2223 throw new assert.AssertionError({
2228 stackStartFunction: stackStartFunction
2232 // EXTENSION! allows for well behaved errors defined elsewhere.
2235 //
4. Pure assertion tests whether a value is truthy, as determined
2237 // assert.ok(guard, message_opt);
2238 // This statement is equivalent to assert.equal(true, !!guard,
2239 // message_opt);. To test strictly for the value true, use
2240 // assert.strictEqual(true, guard, message_opt);.
2242 function ok(value, message) {
2243 if (!value) fail(value, true, message, '==', assert.ok);
2247 //
5. The equality assertion tests shallow, coercive equality with
2249 // assert.equal(actual, expected, message_opt);
2251 assert.equal = function equal(actual, expected, message) {
2252 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2255 //
6. The non-equality assertion tests for whether two objects are not equal
2256 // with != assert.notEqual(actual, expected, message_opt);
2258 assert.notEqual = function notEqual(actual, expected, message) {
2259 if (actual == expected) {
2260 fail(actual, expected, message, '!=', assert.notEqual);
2264 //
7. The equivalence assertion tests a deep equality relation.
2265 // assert.deepEqual(actual, expected, message_opt);
2267 assert.deepEqual = function deepEqual(actual, expected, message) {
2268 if (!_deepEqual(actual, expected)) {
2269 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2273 function _deepEqual(actual, expected) {
2274 //
7.1. All identical values are equivalent, as determined by ===.
2275 if (actual === expected) {
2278 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2279 if (actual.length != expected.length) return false;
2281 for (var i =
0; i < actual.length; i++) {
2282 if (actual[i] !== expected[i]) return false;
2287 //
7.2. If the expected value is a Date object, the actual value is
2288 // equivalent if it is also a Date object that refers to the same time.
2289 } else if (util.isDate(actual) && util.isDate(expected)) {
2290 return actual.getTime() === expected.getTime();
2292 //
7.3 If the expected value is a RegExp object, the actual value is
2293 // equivalent if it is also a RegExp object with the same source and
2294 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2295 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2296 return actual.source === expected.source &&
2297 actual.global === expected.global &&
2298 actual.multiline === expected.multiline &&
2299 actual.lastIndex === expected.lastIndex &&
2300 actual.ignoreCase === expected.ignoreCase;
2302 //
7.4. Other pairs that do not both pass typeof value == 'object',
2303 // equivalence is determined by ==.
2304 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2305 return actual == expected;
2307 //
7.5 For all other Object pairs, including Array objects, equivalence is
2308 // determined by having the same number of owned properties (as verified
2309 // with Object.prototype.hasOwnProperty.call), the same set of keys
2310 // (although not necessarily the same order), equivalent values for every
2311 // corresponding key, and an identical 'prototype' property. Note: this
2312 // accounts for both named and indexed properties on Arrays.
2314 return objEquiv(actual, expected);
2318 function isArguments(object) {
2319 return Object.prototype.toString.call(object) == '[object Arguments]';
2322 function objEquiv(a, b) {
2323 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2325 // an identical 'prototype' property.
2326 if (a.prototype !== b.prototype) return false;
2327 // if one is a primitive, the other must be same
2328 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2331 var aIsArgs = isArguments(a),
2332 bIsArgs = isArguments(b);
2333 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2338 return _deepEqual(a, b);
2340 var ka = objectKeys(a),
2343 // having the same number of owned properties (keys incorporates
2345 if (ka.length != kb.length)
2347 //the same set of keys (although not necessarily the same order),
2351 for (i = ka.length -
1; i
>=
0; i--) {
2355 //equivalent values for every corresponding key, and
2356 //~~~possibly expensive deep test
2357 for (i = ka.length -
1; i
>=
0; i--) {
2359 if (!_deepEqual(a[key], b[key])) return false;
2364 //
8. The non-equivalence assertion tests for any deep inequality.
2365 // assert.notDeepEqual(actual, expected, message_opt);
2367 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2368 if (_deepEqual(actual, expected)) {
2369 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2373 //
9. The strict equality assertion tests strict equality, as determined by ===.
2374 // assert.strictEqual(actual, expected, message_opt);
2376 assert.strictEqual = function strictEqual(actual, expected, message) {
2377 if (actual !== expected) {
2378 fail(actual, expected, message, '===', assert.strictEqual);
2382 //
10. The strict non-equality assertion tests for strict inequality, as
2383 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2385 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2386 if (actual === expected) {
2387 fail(actual, expected, message, '!==', assert.notStrictEqual);
2391 function expectedException(actual, expected) {
2392 if (!actual || !expected) {
2396 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2397 return expected.test(actual);
2398 } else if (actual instanceof expected) {
2400 } else if (expected.call({}, actual) === true) {
2407 function _throws(shouldThrow, block, expected, message) {
2410 if (util.isString(expected)) {
2421 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2422 (message ? ' ' + message : '.');
2424 if (shouldThrow && !actual) {
2425 fail(actual, expected, 'Missing expected exception' + message);
2428 if (!shouldThrow && expectedException(actual, expected)) {
2429 fail(actual, expected, 'Got unwanted exception' + message);
2432 if ((shouldThrow && actual && expected &&
2433 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2438 //
11. Expected to throw an error:
2439 // assert.throws(block, Error_opt, message_opt);
2441 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2442 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2445 // EXTENSION! This is annoying to write outside this module.
2446 assert.doesNotThrow = function(block, /*optional*/message) {
2447 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2450 assert.ifError = function(err) { if (err) {throw err;}};
2452 var objectKeys = Object.keys || function (obj) {
2454 for (var key in obj) {
2455 if (hasOwn.call(obj, key)) keys.push(key);
2460 },{"util/":
29}],
6:[function(require,module,exports){
2462 },{}],
7:[function(require,module,exports){
2464 * The buffer module from node.js, for the browser.
2466 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2470 var base64 = require('base64-js')
2471 var ieee754 = require('ieee754')
2472 var isArray = require('is-array')
2474 exports.Buffer = Buffer
2475 exports.SlowBuffer = SlowBuffer
2476 exports.INSPECT_MAX_BYTES =
50
2477 Buffer.poolSize =
8192 // not used by this implementation
2482 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2483 * === true Use Uint8Array implementation (fastest)
2484 * === false Use Object implementation (most compatible, even IE6)
2486 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2487 * Opera
11.6+, iOS
4.2+.
2489 * Due to various browser bugs, sometimes the Object implementation will be used even
2490 * when the browser supports typed arrays.
2494 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2495 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2497 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2500 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2502 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2503 * incorrect length in some situations.
2505 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2506 * get the Object implementation, which is slower but behaves correctly.
2508 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2511 var arr = new Uint8Array(
1)
2512 arr.foo = function () { return
42 }
2513 arr.constructor = Bar
2514 return arr.foo() ===
42 && // typed array instances can be augmented
2515 arr.constructor === Bar && // constructor can be set
2516 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2517 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2523 function kMaxLength () {
2524 return Buffer.TYPED_ARRAY_SUPPORT
2533 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2534 * with function properties for all the node `Buffer` API functions. We use
2535 * `Uint8Array` so that square bracket notation works as expected -- it returns
2538 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2541 function Buffer (arg) {
2542 if (!(this instanceof Buffer)) {
2543 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2544 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2545 return new Buffer(arg)
2549 this.parent = undefined
2552 if (typeof arg === 'number') {
2553 return fromNumber(this, arg)
2556 // Slightly less common case.
2557 if (typeof arg === 'string') {
2558 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2562 return fromObject(this, arg)
2565 function fromNumber (that, length) {
2566 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2567 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2568 for (var i =
0; i < length; i++) {
2575 function fromString (that, string, encoding) {
2576 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2578 // Assumption: byteLength() return value is always < kMaxLength.
2579 var length = byteLength(string, encoding) |
0
2580 that = allocate(that, length)
2582 that.write(string, encoding)
2586 function fromObject (that, object) {
2587 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2589 if (isArray(object)) return fromArray(that, object)
2591 if (object == null) {
2592 throw new TypeError('must start with number, buffer, array or string')
2595 if (typeof ArrayBuffer !== 'undefined') {
2596 if (object.buffer instanceof ArrayBuffer) {
2597 return fromTypedArray(that, object)
2599 if (object instanceof ArrayBuffer) {
2600 return fromArrayBuffer(that, object)
2604 if (object.length) return fromArrayLike(that, object)
2606 return fromJsonObject(that, object)
2609 function fromBuffer (that, buffer) {
2610 var length = checked(buffer.length) |
0
2611 that = allocate(that, length)
2612 buffer.copy(that,
0,
0, length)
2616 function fromArray (that, array) {
2617 var length = checked(array.length) |
0
2618 that = allocate(that, length)
2619 for (var i =
0; i < length; i +=
1) {
2620 that[i] = array[i] &
255
2625 // Duplicate of fromArray() to keep fromArray() monomorphic.
2626 function fromTypedArray (that, array) {
2627 var length = checked(array.length) |
0
2628 that = allocate(that, length)
2629 // Truncating the elements is probably not what people expect from typed
2630 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2631 // of the old Buffer constructor.
2632 for (var i =
0; i < length; i +=
1) {
2633 that[i] = array[i] &
255
2638 function fromArrayBuffer (that, array) {
2639 if (Buffer.TYPED_ARRAY_SUPPORT) {
2640 // Return an augmented `Uint8Array` instance, for best performance
2642 that = Buffer._augment(new Uint8Array(array))
2644 // Fallback: Return an object instance of the Buffer class
2645 that = fromTypedArray(that, new Uint8Array(array))
2650 function fromArrayLike (that, array) {
2651 var length = checked(array.length) |
0
2652 that = allocate(that, length)
2653 for (var i =
0; i < length; i +=
1) {
2654 that[i] = array[i] &
255
2659 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2660 // Returns a zero-length buffer for inputs that don't conform to the spec.
2661 function fromJsonObject (that, object) {
2665 if (object.type === 'Buffer' && isArray(object.data)) {
2667 length = checked(array.length) |
0
2669 that = allocate(that, length)
2671 for (var i =
0; i < length; i +=
1) {
2672 that[i] = array[i] &
255
2677 function allocate (that, length) {
2678 if (Buffer.TYPED_ARRAY_SUPPORT) {
2679 // Return an augmented `Uint8Array` instance, for best performance
2680 that = Buffer._augment(new Uint8Array(length))
2682 // Fallback: Return an object instance of the Buffer class
2683 that.length = length
2684 that._isBuffer = true
2687 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2688 if (fromPool) that.parent = rootParent
2693 function checked (length) {
2694 // Note: cannot use `length < kMaxLength` here because that fails when
2695 // length is NaN (which is otherwise coerced to zero.)
2696 if (length
>= kMaxLength()) {
2697 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2698 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2703 function SlowBuffer (subject, encoding) {
2704 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2706 var buf = new Buffer(subject, encoding)
2711 Buffer.isBuffer = function isBuffer (b) {
2712 return !!(b != null && b._isBuffer)
2715 Buffer.compare = function compare (a, b) {
2716 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2717 throw new TypeError('Arguments must be Buffers')
2720 if (a === b) return
0
2726 var len = Math.min(x, y)
2728 if (a[i] !== b[i]) break
2738 if (x < y) return -
1
2743 Buffer.isEncoding = function isEncoding (encoding) {
2744 switch (String(encoding).toLowerCase()) {
2762 Buffer.concat = function concat (list, length) {
2763 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2765 if (list.length ===
0) {
2766 return new Buffer(
0)
2770 if (length === undefined) {
2772 for (i =
0; i < list.length; i++) {
2773 length += list[i].length
2777 var buf = new Buffer(length)
2779 for (i =
0; i < list.length; i++) {
2787 function byteLength (string, encoding) {
2788 if (typeof string !== 'string') string = '' + string
2790 var len = string.length
2791 if (len ===
0) return
0
2793 // Use a for loop to avoid recursion
2794 var loweredCase = false
2805 return utf8ToBytes(string).length
2814 return base64ToBytes(string).length
2816 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2817 encoding = ('' + encoding).toLowerCase()
2822 Buffer.byteLength = byteLength
2824 // pre-set for values that may exist in the future
2825 Buffer.prototype.length = undefined
2826 Buffer.prototype.parent = undefined
2828 function slowToString (encoding, start, end) {
2829 var loweredCase = false
2832 end = end === undefined || end === Infinity ? this.length : end |
0
2834 if (!encoding) encoding = 'utf8'
2835 if (start <
0) start =
0
2836 if (end
> this.length) end = this.length
2837 if (end <= start) return ''
2842 return hexSlice(this, start, end)
2846 return utf8Slice(this, start, end)
2849 return asciiSlice(this, start, end)
2852 return binarySlice(this, start, end)
2855 return base64Slice(this, start, end)
2861 return utf16leSlice(this, start, end)
2864 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2865 encoding = (encoding + '').toLowerCase()
2871 Buffer.prototype.toString = function toString () {
2872 var length = this.length |
0
2873 if (length ===
0) return ''
2874 if (arguments.length ===
0) return utf8Slice(this,
0, length)
2875 return slowToString.apply(this, arguments)
2878 Buffer.prototype.equals = function equals (b) {
2879 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2880 if (this === b) return true
2881 return Buffer.compare(this, b) ===
0
2884 Buffer.prototype.inspect = function inspect () {
2886 var max = exports.INSPECT_MAX_BYTES
2887 if (this.length
> 0) {
2888 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
2889 if (this.length
> max) str += ' ... '
2891 return '
<Buffer ' + str + '
>'
2894 Buffer.prototype.compare = function compare (b) {
2895 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2896 if (this === b) return
0
2897 return Buffer.compare(this, b)
2900 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2901 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
2902 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
2905 if (this.length ===
0) return -
1
2906 if (byteOffset
>= this.length) return -
1
2908 // Negative offsets start from the end of the buffer
2909 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
2911 if (typeof val === 'string') {
2912 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
2913 return String.prototype.indexOf.call(this, val, byteOffset)
2915 if (Buffer.isBuffer(val)) {
2916 return arrayIndexOf(this, val, byteOffset)
2918 if (typeof val === 'number') {
2919 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2920 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2922 return arrayIndexOf(this, [ val ], byteOffset)
2925 function arrayIndexOf (arr, val, byteOffset) {
2927 for (var i =
0; byteOffset + i < arr.length; i++) {
2928 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
2929 if (foundIndex === -
1) foundIndex = i
2930 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
2938 throw new TypeError('val must be string, number or Buffer')
2941 // `get` is deprecated
2942 Buffer.prototype.get = function get (offset) {
2943 console.log('.get() is deprecated. Access using array indexes instead.')
2944 return this.readUInt8(offset)
2947 // `set` is deprecated
2948 Buffer.prototype.set = function set (v, offset) {
2949 console.log('.set() is deprecated. Access using array indexes instead.')
2950 return this.writeUInt8(v, offset)
2953 function hexWrite (buf, string, offset, length) {
2954 offset = Number(offset) ||
0
2955 var remaining = buf.length - offset
2959 length = Number(length)
2960 if (length
> remaining) {
2965 // must be an even number of digits
2966 var strLen = string.length
2967 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
2969 if (length
> strLen /
2) {
2972 for (var i =
0; i < length; i++) {
2973 var parsed = parseInt(string.substr(i *
2,
2),
16)
2974 if (isNaN(parsed)) throw new Error('Invalid hex string')
2975 buf[offset + i] = parsed
2980 function utf8Write (buf, string, offset, length) {
2981 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2984 function asciiWrite (buf, string, offset, length) {
2985 return blitBuffer(asciiToBytes(string), buf, offset, length)
2988 function binaryWrite (buf, string, offset, length) {
2989 return asciiWrite(buf, string, offset, length)
2992 function base64Write (buf, string, offset, length) {
2993 return blitBuffer(base64ToBytes(string), buf, offset, length)
2996 function ucs2Write (buf, string, offset, length) {
2997 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3000 Buffer.prototype.write = function write (string, offset, length, encoding) {
3001 // Buffer#write(string)
3002 if (offset === undefined) {
3004 length = this.length
3006 // Buffer#write(string, encoding)
3007 } else if (length === undefined && typeof offset === 'string') {
3009 length = this.length
3011 // Buffer#write(string, offset[, length][, encoding])
3012 } else if (isFinite(offset)) {
3014 if (isFinite(length)) {
3016 if (encoding === undefined) encoding = 'utf8'
3021 // legacy write(string, encoding, offset, length) - remove in v0.13
3029 var remaining = this.length - offset
3030 if (length === undefined || length
> remaining) length = remaining
3032 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3033 throw new RangeError('attempt to write outside buffer bounds')
3036 if (!encoding) encoding = 'utf8'
3038 var loweredCase = false
3042 return hexWrite(this, string, offset, length)
3046 return utf8Write(this, string, offset, length)
3049 return asciiWrite(this, string, offset, length)
3052 return binaryWrite(this, string, offset, length)
3055 // Warning: maxLength not taken into account in base64Write
3056 return base64Write(this, string, offset, length)
3062 return ucs2Write(this, string, offset, length)
3065 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3066 encoding = ('' + encoding).toLowerCase()
3072 Buffer.prototype.toJSON = function toJSON () {
3075 data: Array.prototype.slice.call(this._arr || this,
0)
3079 function base64Slice (buf, start, end) {
3080 if (start ===
0 && end === buf.length) {
3081 return base64.fromByteArray(buf)
3083 return base64.fromByteArray(buf.slice(start, end))
3087 function utf8Slice (buf, start, end) {
3088 end = Math.min(buf.length, end)
3093 var bytesPerSequence
3099 for (; i < end; i += bytesPerSequence) {
3103 if (firstByte
> 0xEF) {
3104 bytesPerSequence =
4
3105 } else if (firstByte
> 0xDF) {
3106 bytesPerSequence =
3
3107 } else if (firstByte
> 0xBF) {
3108 bytesPerSequence =
2
3110 bytesPerSequence =
1
3113 if (i + bytesPerSequence <= end) {
3114 switch (bytesPerSequence) {
3116 if (firstByte <
0x80) {
3117 codePoint = firstByte
3121 secondByte = buf[i +
1]
3122 if ((secondByte &
0xC0) ===
0x80) {
3123 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3124 if (tempCodePoint
> 0x7F) {
3125 codePoint = tempCodePoint
3130 secondByte = buf[i +
1]
3131 thirdByte = buf[i +
2]
3132 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3133 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3134 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3135 codePoint = tempCodePoint
3140 secondByte = buf[i +
1]
3141 thirdByte = buf[i +
2]
3142 fourthByte = buf[i +
3]
3143 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3144 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3145 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3146 codePoint = tempCodePoint
3152 if (codePoint ===
0xFFFD) {
3153 // we generated an invalid codePoint so make sure to only advance by
1 byte
3154 bytesPerSequence =
1
3155 } else if (codePoint
> 0xFFFF) {
3156 // encode to utf16 (surrogate pair dance)
3157 codePoint -=
0x10000
3158 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3159 codePoint =
0xDC00 | codePoint &
0x3FF
3165 return String.fromCharCode.apply(String, res)
3168 function asciiSlice (buf, start, end) {
3170 end = Math.min(buf.length, end)
3172 for (var i = start; i < end; i++) {
3173 ret += String.fromCharCode(buf[i] &
0x7F)
3178 function binarySlice (buf, start, end) {
3180 end = Math.min(buf.length, end)
3182 for (var i = start; i < end; i++) {
3183 ret += String.fromCharCode(buf[i])
3188 function hexSlice (buf, start, end) {
3189 var len = buf.length
3191 if (!start || start <
0) start =
0
3192 if (!end || end <
0 || end
> len) end = len
3195 for (var i = start; i < end; i++) {
3196 out += toHex(buf[i])
3201 function utf16leSlice (buf, start, end) {
3202 var bytes = buf.slice(start, end)
3204 for (var i =
0; i < bytes.length; i +=
2) {
3205 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3210 Buffer.prototype.slice = function slice (start, end) {
3211 var len = this.length
3213 end = end === undefined ? len : ~~end
3217 if (start <
0) start =
0
3218 } else if (start
> len) {
3224 if (end <
0) end =
0
3225 } else if (end
> len) {
3229 if (end < start) end = start
3232 if (Buffer.TYPED_ARRAY_SUPPORT) {
3233 newBuf = Buffer._augment(this.subarray(start, end))
3235 var sliceLen = end - start
3236 newBuf = new Buffer(sliceLen, undefined)
3237 for (var i =
0; i < sliceLen; i++) {
3238 newBuf[i] = this[i + start]
3242 if (newBuf.length) newBuf.parent = this.parent || this
3248 * Need to make sure that buffer isn't trying to write out of bounds.
3250 function checkOffset (offset, ext, length) {
3251 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3252 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3255 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3257 byteLength = byteLength |
0
3258 if (!noAssert) checkOffset(offset, byteLength, this.length)
3260 var val = this[offset]
3263 while (++i < byteLength && (mul *=
0x100)) {
3264 val += this[offset + i] * mul
3270 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3272 byteLength = byteLength |
0
3274 checkOffset(offset, byteLength, this.length)
3277 var val = this[offset + --byteLength]
3279 while (byteLength
> 0 && (mul *=
0x100)) {
3280 val += this[offset + --byteLength] * mul
3286 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3287 if (!noAssert) checkOffset(offset,
1, this.length)
3291 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3292 if (!noAssert) checkOffset(offset,
2, this.length)
3293 return this[offset] | (this[offset +
1] <<
8)
3296 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3297 if (!noAssert) checkOffset(offset,
2, this.length)
3298 return (this[offset] <<
8) | this[offset +
1]
3301 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3302 if (!noAssert) checkOffset(offset,
4, this.length)
3304 return ((this[offset]) |
3305 (this[offset +
1] <<
8) |
3306 (this[offset +
2] <<
16)) +
3307 (this[offset +
3] *
0x1000000)
3310 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3311 if (!noAssert) checkOffset(offset,
4, this.length)
3313 return (this[offset] *
0x1000000) +
3314 ((this[offset +
1] <<
16) |
3315 (this[offset +
2] <<
8) |
3319 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3321 byteLength = byteLength |
0
3322 if (!noAssert) checkOffset(offset, byteLength, this.length)
3324 var val = this[offset]
3327 while (++i < byteLength && (mul *=
0x100)) {
3328 val += this[offset + i] * mul
3332 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3337 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3339 byteLength = byteLength |
0
3340 if (!noAssert) checkOffset(offset, byteLength, this.length)
3344 var val = this[offset + --i]
3345 while (i
> 0 && (mul *=
0x100)) {
3346 val += this[offset + --i] * mul
3350 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3355 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3356 if (!noAssert) checkOffset(offset,
1, this.length)
3357 if (!(this[offset] &
0x80)) return (this[offset])
3358 return ((
0xff - this[offset] +
1) * -
1)
3361 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3362 if (!noAssert) checkOffset(offset,
2, this.length)
3363 var val = this[offset] | (this[offset +
1] <<
8)
3364 return (val &
0x8000) ? val |
0xFFFF0000 : val
3367 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3368 if (!noAssert) checkOffset(offset,
2, this.length)
3369 var val = this[offset +
1] | (this[offset] <<
8)
3370 return (val &
0x8000) ? val |
0xFFFF0000 : val
3373 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3374 if (!noAssert) checkOffset(offset,
4, this.length)
3376 return (this[offset]) |
3377 (this[offset +
1] <<
8) |
3378 (this[offset +
2] <<
16) |
3379 (this[offset +
3] <<
24)
3382 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset,
4, this.length)
3385 return (this[offset] <<
24) |
3386 (this[offset +
1] <<
16) |
3387 (this[offset +
2] <<
8) |
3391 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3392 if (!noAssert) checkOffset(offset,
4, this.length)
3393 return ieee754.read(this, offset, true,
23,
4)
3396 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3397 if (!noAssert) checkOffset(offset,
4, this.length)
3398 return ieee754.read(this, offset, false,
23,
4)
3401 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3402 if (!noAssert) checkOffset(offset,
8, this.length)
3403 return ieee754.read(this, offset, true,
52,
8)
3406 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3407 if (!noAssert) checkOffset(offset,
8, this.length)
3408 return ieee754.read(this, offset, false,
52,
8)
3411 function checkInt (buf, value, offset, ext, max, min) {
3412 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3413 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3414 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3417 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3420 byteLength = byteLength |
0
3421 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3425 this[offset] = value &
0xFF
3426 while (++i < byteLength && (mul *=
0x100)) {
3427 this[offset + i] = (value / mul) &
0xFF
3430 return offset + byteLength
3433 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3436 byteLength = byteLength |
0
3437 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3439 var i = byteLength -
1
3441 this[offset + i] = value &
0xFF
3442 while (--i
>=
0 && (mul *=
0x100)) {
3443 this[offset + i] = (value / mul) &
0xFF
3446 return offset + byteLength
3449 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3452 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3453 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3454 this[offset] = value
3458 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3459 if (value <
0) value =
0xffff + value +
1
3460 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3461 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3462 (littleEndian ? i :
1 - i) *
8
3466 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3469 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3470 if (Buffer.TYPED_ARRAY_SUPPORT) {
3471 this[offset] = value
3472 this[offset +
1] = (value
>>> 8)
3474 objectWriteUInt16(this, value, offset, true)
3479 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3482 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3483 if (Buffer.TYPED_ARRAY_SUPPORT) {
3484 this[offset] = (value
>>> 8)
3485 this[offset +
1] = value
3487 objectWriteUInt16(this, value, offset, false)
3492 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3493 if (value <
0) value =
0xffffffff + value +
1
3494 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3495 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3499 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3502 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3503 if (Buffer.TYPED_ARRAY_SUPPORT) {
3504 this[offset +
3] = (value
>>> 24)
3505 this[offset +
2] = (value
>>> 16)
3506 this[offset +
1] = (value
>>> 8)
3507 this[offset] = value
3509 objectWriteUInt32(this, value, offset, true)
3514 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3517 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3518 if (Buffer.TYPED_ARRAY_SUPPORT) {
3519 this[offset] = (value
>>> 24)
3520 this[offset +
1] = (value
>>> 16)
3521 this[offset +
2] = (value
>>> 8)
3522 this[offset +
3] = value
3524 objectWriteUInt32(this, value, offset, false)
3529 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3533 var limit = Math.pow(
2,
8 * byteLength -
1)
3535 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3540 var sub = value <
0 ?
1 :
0
3541 this[offset] = value &
0xFF
3542 while (++i < byteLength && (mul *=
0x100)) {
3543 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3546 return offset + byteLength
3549 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3553 var limit = Math.pow(
2,
8 * byteLength -
1)
3555 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3558 var i = byteLength -
1
3560 var sub = value <
0 ?
1 :
0
3561 this[offset + i] = value &
0xFF
3562 while (--i
>=
0 && (mul *=
0x100)) {
3563 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3566 return offset + byteLength
3569 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3572 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3573 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3574 if (value <
0) value =
0xff + value +
1
3575 this[offset] = value
3579 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3582 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3583 if (Buffer.TYPED_ARRAY_SUPPORT) {
3584 this[offset] = value
3585 this[offset +
1] = (value
>>> 8)
3587 objectWriteUInt16(this, value, offset, true)
3592 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3595 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3596 if (Buffer.TYPED_ARRAY_SUPPORT) {
3597 this[offset] = (value
>>> 8)
3598 this[offset +
1] = value
3600 objectWriteUInt16(this, value, offset, false)
3605 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3608 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3609 if (Buffer.TYPED_ARRAY_SUPPORT) {
3610 this[offset] = value
3611 this[offset +
1] = (value
>>> 8)
3612 this[offset +
2] = (value
>>> 16)
3613 this[offset +
3] = (value
>>> 24)
3615 objectWriteUInt32(this, value, offset, true)
3620 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3623 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3624 if (value <
0) value =
0xffffffff + value +
1
3625 if (Buffer.TYPED_ARRAY_SUPPORT) {
3626 this[offset] = (value
>>> 24)
3627 this[offset +
1] = (value
>>> 16)
3628 this[offset +
2] = (value
>>> 8)
3629 this[offset +
3] = value
3631 objectWriteUInt32(this, value, offset, false)
3636 function checkIEEE754 (buf, value, offset, ext, max, min) {
3637 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3638 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3639 if (offset <
0) throw new RangeError('index out of range')
3642 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3644 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3646 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3650 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3651 return writeFloat(this, value, offset, true, noAssert)
3654 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3655 return writeFloat(this, value, offset, false, noAssert)
3658 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3660 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3662 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3666 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3667 return writeDouble(this, value, offset, true, noAssert)
3670 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3671 return writeDouble(this, value, offset, false, noAssert)
3674 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3675 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3676 if (!start) start =
0
3677 if (!end && end !==
0) end = this.length
3678 if (targetStart
>= target.length) targetStart = target.length
3679 if (!targetStart) targetStart =
0
3680 if (end
> 0 && end < start) end = start
3682 // Copy
0 bytes; we're done
3683 if (end === start) return
0
3684 if (target.length ===
0 || this.length ===
0) return
0
3686 // Fatal error conditions
3687 if (targetStart <
0) {
3688 throw new RangeError('targetStart out of bounds')
3690 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3691 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3694 if (end
> this.length) end = this.length
3695 if (target.length - targetStart < end - start) {
3696 end = target.length - targetStart + start
3699 var len = end - start
3702 if (this === target && start < targetStart && targetStart < end) {
3703 // descending copy from end
3704 for (i = len -
1; i
>=
0; i--) {
3705 target[i + targetStart] = this[i + start]
3707 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3708 // ascending copy from start
3709 for (i =
0; i < len; i++) {
3710 target[i + targetStart] = this[i + start]
3713 target._set(this.subarray(start, start + len), targetStart)
3719 // fill(value, start=
0, end=buffer.length)
3720 Buffer.prototype.fill = function fill (value, start, end) {
3721 if (!value) value =
0
3722 if (!start) start =
0
3723 if (!end) end = this.length
3725 if (end < start) throw new RangeError('end < start')
3727 // Fill
0 bytes; we're done
3728 if (end === start) return
3729 if (this.length ===
0) return
3731 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
3732 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
3735 if (typeof value === 'number') {
3736 for (i = start; i < end; i++) {
3740 var bytes = utf8ToBytes(value.toString())
3741 var len = bytes.length
3742 for (i = start; i < end; i++) {
3743 this[i] = bytes[i % len]
3751 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3752 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
3754 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3755 if (typeof Uint8Array !== 'undefined') {
3756 if (Buffer.TYPED_ARRAY_SUPPORT) {
3757 return (new Buffer(this)).buffer
3759 var buf = new Uint8Array(this.length)
3760 for (var i =
0, len = buf.length; i < len; i +=
1) {
3766 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3773 var BP = Buffer.prototype
3776 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3778 Buffer._augment = function _augment (arr) {
3779 arr.constructor = Buffer
3780 arr._isBuffer = true
3782 // save reference to original Uint8Array set method before overwriting
3789 arr.write = BP.write
3790 arr.toString = BP.toString
3791 arr.toLocaleString = BP.toString
3792 arr.toJSON = BP.toJSON
3793 arr.equals = BP.equals
3794 arr.compare = BP.compare
3795 arr.indexOf = BP.indexOf
3797 arr.slice = BP.slice
3798 arr.readUIntLE = BP.readUIntLE
3799 arr.readUIntBE = BP.readUIntBE
3800 arr.readUInt8 = BP.readUInt8
3801 arr.readUInt16LE = BP.readUInt16LE
3802 arr.readUInt16BE = BP.readUInt16BE
3803 arr.readUInt32LE = BP.readUInt32LE
3804 arr.readUInt32BE = BP.readUInt32BE
3805 arr.readIntLE = BP.readIntLE
3806 arr.readIntBE = BP.readIntBE
3807 arr.readInt8 = BP.readInt8
3808 arr.readInt16LE = BP.readInt16LE
3809 arr.readInt16BE = BP.readInt16BE
3810 arr.readInt32LE = BP.readInt32LE
3811 arr.readInt32BE = BP.readInt32BE
3812 arr.readFloatLE = BP.readFloatLE
3813 arr.readFloatBE = BP.readFloatBE
3814 arr.readDoubleLE = BP.readDoubleLE
3815 arr.readDoubleBE = BP.readDoubleBE
3816 arr.writeUInt8 = BP.writeUInt8
3817 arr.writeUIntLE = BP.writeUIntLE
3818 arr.writeUIntBE = BP.writeUIntBE
3819 arr.writeUInt16LE = BP.writeUInt16LE
3820 arr.writeUInt16BE = BP.writeUInt16BE
3821 arr.writeUInt32LE = BP.writeUInt32LE
3822 arr.writeUInt32BE = BP.writeUInt32BE
3823 arr.writeIntLE = BP.writeIntLE
3824 arr.writeIntBE = BP.writeIntBE
3825 arr.writeInt8 = BP.writeInt8
3826 arr.writeInt16LE = BP.writeInt16LE
3827 arr.writeInt16BE = BP.writeInt16BE
3828 arr.writeInt32LE = BP.writeInt32LE
3829 arr.writeInt32BE = BP.writeInt32BE
3830 arr.writeFloatLE = BP.writeFloatLE
3831 arr.writeFloatBE = BP.writeFloatBE
3832 arr.writeDoubleLE = BP.writeDoubleLE
3833 arr.writeDoubleBE = BP.writeDoubleBE
3835 arr.inspect = BP.inspect
3836 arr.toArrayBuffer = BP.toArrayBuffer
3841 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
3843 function base64clean (str) {
3844 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3845 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3846 // Node converts strings with length <
2 to ''
3847 if (str.length <
2) return ''
3848 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3849 while (str.length %
4 !==
0) {
3855 function stringtrim (str) {
3856 if (str.trim) return str.trim()
3857 return str.replace(/^\s+|\s+$/g, '')
3860 function toHex (n) {
3861 if (n <
16) return '
0' + n.toString(
16)
3862 return n.toString(
16)
3865 function utf8ToBytes (string, units) {
3866 units = units || Infinity
3868 var length = string.length
3869 var leadSurrogate = null
3872 for (var i =
0; i < length; i++) {
3873 codePoint = string.charCodeAt(i)
3875 // is surrogate component
3876 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
3877 // last char was a lead
3878 if (!leadSurrogate) {
3880 if (codePoint
> 0xDBFF) {
3882 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3885 } else if (i +
1 === length) {
3887 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3892 leadSurrogate = codePoint
3898 if (codePoint <
0xDC00) {
3899 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3900 leadSurrogate = codePoint
3904 // valid surrogate pair
3905 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
3907 } else if (leadSurrogate) {
3908 // valid bmp char, but last char was a lead
3909 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3912 leadSurrogate = null
3915 if (codePoint <
0x80) {
3916 if ((units -=
1) <
0) break
3917 bytes.push(codePoint)
3918 } else if (codePoint <
0x800) {
3919 if ((units -=
2) <
0) break
3921 codePoint
>> 0x6 |
0xC0,
3922 codePoint &
0x3F |
0x80
3924 } else if (codePoint <
0x10000) {
3925 if ((units -=
3) <
0) break
3927 codePoint
>> 0xC |
0xE0,
3928 codePoint
>> 0x6 &
0x3F |
0x80,
3929 codePoint &
0x3F |
0x80
3931 } else if (codePoint <
0x110000) {
3932 if ((units -=
4) <
0) break
3934 codePoint
>> 0x12 |
0xF0,
3935 codePoint
>> 0xC &
0x3F |
0x80,
3936 codePoint
>> 0x6 &
0x3F |
0x80,
3937 codePoint &
0x3F |
0x80
3940 throw new Error('Invalid code point')
3947 function asciiToBytes (str) {
3949 for (var i =
0; i < str.length; i++) {
3950 // Node's code seems to be doing this and not &
0x7F..
3951 byteArray.push(str.charCodeAt(i) &
0xFF)
3956 function utf16leToBytes (str, units) {
3959 for (var i =
0; i < str.length; i++) {
3960 if ((units -=
2) <
0) break
3962 c = str.charCodeAt(i)
3972 function base64ToBytes (str) {
3973 return base64.toByteArray(base64clean(str))
3976 function blitBuffer (src, dst, offset, length) {
3977 for (var i =
0; i < length; i++) {
3978 if ((i + offset
>= dst.length) || (i
>= src.length)) break
3979 dst[i + offset] = src[i]
3984 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
3985 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3987 ;(function (exports) {
3990 var Arr = (typeof Uint8Array !== 'undefined')
3994 var PLUS = '+'.charCodeAt(
0)
3995 var SLASH = '/'.charCodeAt(
0)
3996 var NUMBER = '
0'.charCodeAt(
0)
3997 var LOWER = 'a'.charCodeAt(
0)
3998 var UPPER = 'A'.charCodeAt(
0)
3999 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4000 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4002 function decode (elt) {
4003 var code = elt.charCodeAt(
0)
4004 if (code === PLUS ||
4005 code === PLUS_URL_SAFE)
4007 if (code === SLASH ||
4008 code === SLASH_URL_SAFE)
4011 return -
1 //no match
4012 if (code < NUMBER +
10)
4013 return code - NUMBER +
26 +
26
4014 if (code < UPPER +
26)
4016 if (code < LOWER +
26)
4017 return code - LOWER +
26
4020 function b64ToByteArray (b64) {
4021 var i, j, l, tmp, placeHolders, arr
4023 if (b64.length %
4 > 0) {
4024 throw new Error('Invalid string. Length must be a multiple of
4')
4027 // the number of equal signs (place holders)
4028 // if there are two placeholders, than the two characters before it
4029 // represent one byte
4030 // if there is only one, then the three characters before it represent
2 bytes
4031 // this is just a cheap hack to not do indexOf twice
4032 var len = b64.length
4033 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4035 // base64 is
4/
3 + up to two characters of the original data
4036 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4038 // if there are placeholders, only get up to the last complete
4 chars
4039 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4047 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4048 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4049 push((tmp &
0xFF0000)
>> 16)
4050 push((tmp &
0xFF00)
>> 8)
4054 if (placeHolders ===
2) {
4055 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4057 } else if (placeHolders ===
1) {
4058 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4059 push((tmp
>> 8) &
0xFF)
4066 function uint8ToBase64 (uint8) {
4068 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4072 function encode (num) {
4073 return lookup.charAt(num)
4076 function tripletToBase64 (num) {
4077 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4080 // go through the array every three bytes, we'll deal with trailing stuff later
4081 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4082 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4083 output += tripletToBase64(temp)
4086 // pad the end with zeros, but make sure to not forget the extra bytes
4087 switch (extraBytes) {
4089 temp = uint8[uint8.length -
1]
4090 output += encode(temp
>> 2)
4091 output += encode((temp <<
4) &
0x3F)
4095 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4096 output += encode(temp
>> 10)
4097 output += encode((temp
>> 4) &
0x3F)
4098 output += encode((temp <<
2) &
0x3F)
4106 exports.toByteArray = b64ToByteArray
4107 exports.fromByteArray = uint8ToBase64
4108 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4110 },{}],
9:[function(require,module,exports){
4111 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4113 var eLen = nBytes *
8 - mLen -
1
4114 var eMax = (
1 << eLen) -
1
4115 var eBias = eMax
>> 1
4117 var i = isLE ? (nBytes -
1) :
0
4118 var d = isLE ? -
1 :
1
4119 var s = buffer[offset + i]
4123 e = s & ((
1 << (-nBits)) -
1)
4126 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4128 m = e & ((
1 << (-nBits)) -
1)
4131 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4135 } else if (e === eMax) {
4136 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4138 m = m + Math.pow(
2, mLen)
4141 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4144 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4146 var eLen = nBytes *
8 - mLen -
1
4147 var eMax = (
1 << eLen) -
1
4148 var eBias = eMax
>> 1
4149 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4150 var i = isLE ?
0 : (nBytes -
1)
4151 var d = isLE ?
1 : -
1
4152 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4154 value = Math.abs(value)
4156 if (isNaN(value) || value === Infinity) {
4157 m = isNaN(value) ?
1 :
0
4160 e = Math.floor(Math.log(value) / Math.LN2)
4161 if (value * (c = Math.pow(
2, -e)) <
1) {
4165 if (e + eBias
>=
1) {
4168 value += rt * Math.pow(
2,
1 - eBias)
4170 if (value * c
>=
2) {
4175 if (e + eBias
>= eMax) {
4178 } else if (e + eBias
>=
1) {
4179 m = (value * c -
1) * Math.pow(
2, mLen)
4182 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4187 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4191 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4193 buffer[offset + i - d] |= s *
128
4196 },{}],
10:[function(require,module,exports){
4202 var isArray = Array.isArray;
4208 var str = Object.prototype.toString;
4211 * Whether or not the given `val`
4218 * isArray(arguments);
4223 * @param {mixed} val
4227 module.exports = isArray || function (val) {
4228 return !! val && '[object Array]' == str.call(val);
4231 },{}],
11:[function(require,module,exports){
4232 // Copyright Joyent, Inc. and other Node contributors.
4234 // Permission is hereby granted, free of charge, to any person obtaining a
4235 // copy of this software and associated documentation files (the
4236 // "Software"), to deal in the Software without restriction, including
4237 // without limitation the rights to use, copy, modify, merge, publish,
4238 // distribute, sublicense, and/or sell copies of the Software, and to permit
4239 // persons to whom the Software is furnished to do so, subject to the
4240 // following conditions:
4242 // The above copyright notice and this permission notice shall be included
4243 // in all copies or substantial portions of the Software.
4245 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4246 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4247 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4248 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4249 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4250 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4251 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4253 function EventEmitter() {
4254 this._events = this._events || {};
4255 this._maxListeners = this._maxListeners || undefined;
4257 module.exports = EventEmitter;
4259 // Backwards-compat with node
0.10.x
4260 EventEmitter.EventEmitter = EventEmitter;
4262 EventEmitter.prototype._events = undefined;
4263 EventEmitter.prototype._maxListeners = undefined;
4265 // By default EventEmitters will print a warning if more than
10 listeners are
4266 // added to it. This is a useful default which helps finding memory leaks.
4267 EventEmitter.defaultMaxListeners =
10;
4269 // Obviously not all Emitters should be limited to
10. This function allows
4270 // that to be increased. Set to zero for unlimited.
4271 EventEmitter.prototype.setMaxListeners = function(n) {
4272 if (!isNumber(n) || n <
0 || isNaN(n))
4273 throw TypeError('n must be a positive number');
4274 this._maxListeners = n;
4278 EventEmitter.prototype.emit = function(type) {
4279 var er, handler, len, args, i, listeners;
4284 // If there is no 'error' event listener then throw.
4285 if (type === 'error') {
4286 if (!this._events.error ||
4287 (isObject(this._events.error) && !this._events.error.length)) {
4289 if (er instanceof Error) {
4290 throw er; // Unhandled 'error' event
4292 throw TypeError('Uncaught, unspecified "error" event.');
4296 handler = this._events[type];
4298 if (isUndefined(handler))
4301 if (isFunction(handler)) {
4302 switch (arguments.length) {
4308 handler.call(this, arguments[
1]);
4311 handler.call(this, arguments[
1], arguments[
2]);
4315 len = arguments.length;
4316 args = new Array(len -
1);
4317 for (i =
1; i < len; i++)
4318 args[i -
1] = arguments[i];
4319 handler.apply(this, args);
4321 } else if (isObject(handler)) {
4322 len = arguments.length;
4323 args = new Array(len -
1);
4324 for (i =
1; i < len; i++)
4325 args[i -
1] = arguments[i];
4327 listeners = handler.slice();
4328 len = listeners.length;
4329 for (i =
0; i < len; i++)
4330 listeners[i].apply(this, args);
4336 EventEmitter.prototype.addListener = function(type, listener) {
4339 if (!isFunction(listener))
4340 throw TypeError('listener must be a function');
4345 // To avoid recursion in the case that type === "newListener"! Before
4346 // adding it to the listeners, first emit "newListener".
4347 if (this._events.newListener)
4348 this.emit('newListener', type,
4349 isFunction(listener.listener) ?
4350 listener.listener : listener);
4352 if (!this._events[type])
4353 // Optimize the case of one listener. Don't need the extra array object.
4354 this._events[type] = listener;
4355 else if (isObject(this._events[type]))
4356 // If we've already got an array, just append.
4357 this._events[type].push(listener);
4359 // Adding the second element, need to change to array.
4360 this._events[type] = [this._events[type], listener];
4362 // Check for listener leak
4363 if (isObject(this._events[type]) && !this._events[type].warned) {
4365 if (!isUndefined(this._maxListeners)) {
4366 m = this._maxListeners;
4368 m = EventEmitter.defaultMaxListeners;
4371 if (m && m
> 0 && this._events[type].length
> m) {
4372 this._events[type].warned = true;
4373 console.error('(node) warning: possible EventEmitter memory ' +
4374 'leak detected. %d listeners added. ' +
4375 'Use emitter.setMaxListeners() to increase limit.',
4376 this._events[type].length);
4377 if (typeof console.trace === 'function') {
4378 // not supported in IE
10
4387 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4389 EventEmitter.prototype.once = function(type, listener) {
4390 if (!isFunction(listener))
4391 throw TypeError('listener must be a function');
4396 this.removeListener(type, g);
4400 listener.apply(this, arguments);
4404 g.listener = listener;
4410 // emits a 'removeListener' event iff the listener was removed
4411 EventEmitter.prototype.removeListener = function(type, listener) {
4412 var list, position, length, i;
4414 if (!isFunction(listener))
4415 throw TypeError('listener must be a function');
4417 if (!this._events || !this._events[type])
4420 list = this._events[type];
4421 length = list.length;
4424 if (list === listener ||
4425 (isFunction(list.listener) && list.listener === listener)) {
4426 delete this._events[type];
4427 if (this._events.removeListener)
4428 this.emit('removeListener', type, listener);
4430 } else if (isObject(list)) {
4431 for (i = length; i--
> 0;) {
4432 if (list[i] === listener ||
4433 (list[i].listener && list[i].listener === listener)) {
4442 if (list.length ===
1) {
4444 delete this._events[type];
4446 list.splice(position,
1);
4449 if (this._events.removeListener)
4450 this.emit('removeListener', type, listener);
4456 EventEmitter.prototype.removeAllListeners = function(type) {
4462 // not listening for removeListener, no need to emit
4463 if (!this._events.removeListener) {
4464 if (arguments.length ===
0)
4466 else if (this._events[type])
4467 delete this._events[type];
4471 // emit removeListener for all listeners on all events
4472 if (arguments.length ===
0) {
4473 for (key in this._events) {
4474 if (key === 'removeListener') continue;
4475 this.removeAllListeners(key);
4477 this.removeAllListeners('removeListener');
4482 listeners = this._events[type];
4484 if (isFunction(listeners)) {
4485 this.removeListener(type, listeners);
4488 while (listeners.length)
4489 this.removeListener(type, listeners[listeners.length -
1]);
4491 delete this._events[type];
4496 EventEmitter.prototype.listeners = function(type) {
4498 if (!this._events || !this._events[type])
4500 else if (isFunction(this._events[type]))
4501 ret = [this._events[type]];
4503 ret = this._events[type].slice();
4507 EventEmitter.listenerCount = function(emitter, type) {
4509 if (!emitter._events || !emitter._events[type])
4511 else if (isFunction(emitter._events[type]))
4514 ret = emitter._events[type].length;
4518 function isFunction(arg) {
4519 return typeof arg === 'function';
4522 function isNumber(arg) {
4523 return typeof arg === 'number';
4526 function isObject(arg) {
4527 return typeof arg === 'object' && arg !== null;
4530 function isUndefined(arg) {
4531 return arg === void
0;
4534 },{}],
12:[function(require,module,exports){
4535 if (typeof Object.create === 'function') {
4536 // implementation from standard node.js 'util' module
4537 module.exports = function inherits(ctor, superCtor) {
4538 ctor.super_ = superCtor
4539 ctor.prototype = Object.create(superCtor.prototype, {
4549 // old school shim for old browsers
4550 module.exports = function inherits(ctor, superCtor) {
4551 ctor.super_ = superCtor
4552 var TempCtor = function () {}
4553 TempCtor.prototype = superCtor.prototype
4554 ctor.prototype = new TempCtor()
4555 ctor.prototype.constructor = ctor
4559 },{}],
13:[function(require,module,exports){
4560 module.exports = Array.isArray || function (arr) {
4561 return Object.prototype.toString.call(arr) == '[object Array]';
4564 },{}],
14:[function(require,module,exports){
4565 // shim for using process in browser
4567 var process = module.exports = {};
4569 var draining = false;
4571 var queueIndex = -
1;
4573 function cleanUpNextTick() {
4575 if (currentQueue.length) {
4576 queue = currentQueue.concat(queue);
4585 function drainQueue() {
4589 var timeout = setTimeout(cleanUpNextTick);
4592 var len = queue.length;
4594 currentQueue = queue;
4596 while (++queueIndex < len) {
4597 currentQueue[queueIndex].run();
4602 currentQueue = null;
4604 clearTimeout(timeout);
4607 process.nextTick = function (fun) {
4608 var args = new Array(arguments.length -
1);
4609 if (arguments.length
> 1) {
4610 for (var i =
1; i < arguments.length; i++) {
4611 args[i -
1] = arguments[i];
4614 queue.push(new Item(fun, args));
4615 if (queue.length ===
1 && !draining) {
4616 setTimeout(drainQueue,
0);
4620 // v8 likes predictible objects
4621 function Item(fun, array) {
4625 Item.prototype.run = function () {
4626 this.fun.apply(null, this.array);
4628 process.title = 'browser';
4629 process.browser = true;
4632 process.version = ''; // empty string to avoid regexp issues
4633 process.versions = {};
4638 process.addListener = noop;
4639 process.once = noop;
4641 process.removeListener = noop;
4642 process.removeAllListeners = noop;
4643 process.emit = noop;
4645 process.binding = function (name) {
4646 throw new Error('process.binding is not supported');
4650 process.cwd = function () { return '/' };
4651 process.chdir = function (dir) {
4652 throw new Error('process.chdir is not supported');
4654 process.umask = function() { return
0; };
4656 },{}],
15:[function(require,module,exports){
4657 module.exports = require(
"./lib/_stream_duplex.js")
4659 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4660 (function (process){
4661 // Copyright Joyent, Inc. and other Node contributors.
4663 // Permission is hereby granted, free of charge, to any person obtaining a
4664 // copy of this software and associated documentation files (the
4665 //
"Software"), to deal in the Software without restriction, including
4666 // without limitation the rights to use, copy, modify, merge, publish,
4667 // distribute, sublicense, and/or sell copies of the Software, and to permit
4668 // persons to whom the Software is furnished to do so, subject to the
4669 // following conditions:
4671 // The above copyright notice and this permission notice shall be included
4672 // in all copies or substantial portions of the Software.
4674 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4675 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4676 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4677 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4678 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4679 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4680 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4682 // a duplex stream is just a stream that is both readable and writable.
4683 // Since JS doesn't have multiple prototypal inheritance, this class
4684 // prototypally inherits from Readable, and then parasitically from
4687 module.exports = Duplex;
4690 var objectKeys = Object.keys || function (obj) {
4692 for (var key in obj) keys.push(key);
4699 var util = require('core-util-is');
4700 util.inherits = require('inherits');
4703 var Readable = require('./_stream_readable');
4704 var Writable = require('./_stream_writable');
4706 util.inherits(Duplex, Readable);
4708 forEach(objectKeys(Writable.prototype), function(method) {
4709 if (!Duplex.prototype[method])
4710 Duplex.prototype[method] = Writable.prototype[method];
4713 function Duplex(options) {
4714 if (!(this instanceof Duplex))
4715 return new Duplex(options);
4717 Readable.call(this, options);
4718 Writable.call(this, options);
4720 if (options && options.readable === false)
4721 this.readable = false;
4723 if (options && options.writable === false)
4724 this.writable = false;
4726 this.allowHalfOpen = true;
4727 if (options && options.allowHalfOpen === false)
4728 this.allowHalfOpen = false;
4730 this.once('end', onend);
4733 // the no-half-open enforcer
4735 // if we allow half-open state, or if the writable side ended,
4737 if (this.allowHalfOpen || this._writableState.ended)
4740 // no more data can be written.
4741 // But allow more writes to happen in this tick.
4742 process.nextTick(this.end.bind(this));
4745 function forEach (xs, f) {
4746 for (var i =
0, l = xs.length; i < l; i++) {
4751 }).call(this,require('_process'))
4752 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
4753 // Copyright Joyent, Inc. and other Node contributors.
4755 // Permission is hereby granted, free of charge, to any person obtaining a
4756 // copy of this software and associated documentation files (the
4757 // "Software"), to deal in the Software without restriction, including
4758 // without limitation the rights to use, copy, modify, merge, publish,
4759 // distribute, sublicense, and/or sell copies of the Software, and to permit
4760 // persons to whom the Software is furnished to do so, subject to the
4761 // following conditions:
4763 // The above copyright notice and this permission notice shall be included
4764 // in all copies or substantial portions of the Software.
4766 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4767 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4768 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4769 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4770 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4771 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4772 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4774 // a passthrough stream.
4775 // basically just the most minimal sort of Transform stream.
4776 // Every written chunk gets output as-is.
4778 module.exports = PassThrough;
4780 var Transform = require('./_stream_transform');
4783 var util = require('core-util-is');
4784 util.inherits = require('inherits');
4787 util.inherits(PassThrough, Transform);
4789 function PassThrough(options) {
4790 if (!(this instanceof PassThrough))
4791 return new PassThrough(options);
4793 Transform.call(this, options);
4796 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4800 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
4801 (function (process){
4802 // Copyright Joyent, Inc. and other Node contributors.
4804 // Permission is hereby granted, free of charge, to any person obtaining a
4805 // copy of this software and associated documentation files (the
4806 // "Software"), to deal in the Software without restriction, including
4807 // without limitation the rights to use, copy, modify, merge, publish,
4808 // distribute, sublicense, and/or sell copies of the Software, and to permit
4809 // persons to whom the Software is furnished to do so, subject to the
4810 // following conditions:
4812 // The above copyright notice and this permission notice shall be included
4813 // in all copies or substantial portions of the Software.
4815 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4816 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4817 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4818 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4819 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4820 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4821 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4823 module.exports = Readable;
4826 var isArray = require('isarray');
4831 var Buffer = require('buffer').Buffer;
4834 Readable.ReadableState = ReadableState;
4836 var EE = require('events').EventEmitter;
4839 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4840 return emitter.listeners(type).length;
4844 var Stream = require('stream');
4847 var util = require('core-util-is');
4848 util.inherits = require('inherits');
4855 var debug = require('util');
4856 if (debug && debug.debuglog) {
4857 debug = debug.debuglog('stream');
4859 debug = function () {};
4864 util.inherits(Readable, Stream);
4866 function ReadableState(options, stream) {
4867 var Duplex = require('./_stream_duplex');
4869 options = options || {};
4871 // the point at which it stops calling _read() to fill the buffer
4872 // Note:
0 is a valid value, means "don't call _read preemptively ever"
4873 var hwm = options.highWaterMark;
4874 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
4875 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
4878 this.highWaterMark = ~~this.highWaterMark;
4883 this.pipesCount =
0;
4884 this.flowing = null;
4886 this.endEmitted = false;
4887 this.reading = false;
4889 // a flag to be able to tell if the onwrite cb is called immediately,
4890 // or on a later tick. We set this to true at first, because any
4891 // actions that shouldn't happen until "later" should generally also
4892 // not happen before the first write call.
4895 // whenever we return null, then we set a flag to say
4896 // that we're awaiting a 'readable' event emission.
4897 this.needReadable = false;
4898 this.emittedReadable = false;
4899 this.readableListening = false;
4902 // object stream flag. Used to make read(n) ignore n and to
4903 // make all the buffer merging and length checks go away
4904 this.objectMode = !!options.objectMode;
4906 if (stream instanceof Duplex)
4907 this.objectMode = this.objectMode || !!options.readableObjectMode;
4909 // Crypto is kind of old and crusty. Historically, its default string
4910 // encoding is 'binary' so we have to make this configurable.
4911 // Everything else in the universe uses 'utf8', though.
4912 this.defaultEncoding = options.defaultEncoding || 'utf8';
4914 // when piping, we only care about 'readable' events that happen
4915 // after read()ing all the bytes and not getting any pushback.
4916 this.ranOut = false;
4918 // the number of writers that are awaiting a drain event in .pipe()s
4919 this.awaitDrain =
0;
4921 // if true, a maybeReadMore has been scheduled
4922 this.readingMore = false;
4924 this.decoder = null;
4925 this.encoding = null;
4926 if (options.encoding) {
4928 StringDecoder = require('string_decoder/').StringDecoder;
4929 this.decoder = new StringDecoder(options.encoding);
4930 this.encoding = options.encoding;
4934 function Readable(options) {
4935 var Duplex = require('./_stream_duplex');
4937 if (!(this instanceof Readable))
4938 return new Readable(options);
4940 this._readableState = new ReadableState(options, this);
4943 this.readable = true;
4948 // Manually shove something into the read() buffer.
4949 // This returns true if the highWaterMark has not been hit yet,
4950 // similar to how Writable.write() returns true if you should
4951 // write() some more.
4952 Readable.prototype.push = function(chunk, encoding) {
4953 var state = this._readableState;
4955 if (util.isString(chunk) && !state.objectMode) {
4956 encoding = encoding || state.defaultEncoding;
4957 if (encoding !== state.encoding) {
4958 chunk = new Buffer(chunk, encoding);
4963 return readableAddChunk(this, state, chunk, encoding, false);
4966 // Unshift should *always* be something directly out of read()
4967 Readable.prototype.unshift = function(chunk) {
4968 var state = this._readableState;
4969 return readableAddChunk(this, state, chunk, '', true);
4972 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4973 var er = chunkInvalid(state, chunk);
4975 stream.emit('error', er);
4976 } else if (util.isNullOrUndefined(chunk)) {
4977 state.reading = false;
4979 onEofChunk(stream, state);
4980 } else if (state.objectMode || chunk && chunk.length
> 0) {
4981 if (state.ended && !addToFront) {
4982 var e = new Error('stream.push() after EOF');
4983 stream.emit('error', e);
4984 } else if (state.endEmitted && addToFront) {
4985 var e = new Error('stream.unshift() after end event');
4986 stream.emit('error', e);
4988 if (state.decoder && !addToFront && !encoding)
4989 chunk = state.decoder.write(chunk);
4992 state.reading = false;
4994 // if we want the data now, just emit it.
4995 if (state.flowing && state.length ===
0 && !state.sync) {
4996 stream.emit('data', chunk);
4999 // update the buffer info.
5000 state.length += state.objectMode ?
1 : chunk.length;
5002 state.buffer.unshift(chunk);
5004 state.buffer.push(chunk);
5006 if (state.needReadable)
5007 emitReadable(stream);
5010 maybeReadMore(stream, state);
5012 } else if (!addToFront) {
5013 state.reading = false;
5016 return needMoreData(state);
5021 // if it's past the high water mark, we can push in some more.
5022 // Also, if we have no data yet, we can stand some
5023 // more bytes. This is to work around cases where hwm=
0,
5024 // such as the repl. Also, if the push() triggered a
5025 // readable event, and the user called read(largeNumber) such that
5026 // needReadable was set, then we ought to push more, so that another
5027 // 'readable' event will be triggered.
5028 function needMoreData(state) {
5029 return !state.ended &&
5030 (state.needReadable ||
5031 state.length < state.highWaterMark ||
5032 state.length ===
0);
5035 // backwards compatibility.
5036 Readable.prototype.setEncoding = function(enc) {
5038 StringDecoder = require('string_decoder/').StringDecoder;
5039 this._readableState.decoder = new StringDecoder(enc);
5040 this._readableState.encoding = enc;
5044 // Don't raise the hwm
> 128MB
5045 var MAX_HWM =
0x800000;
5046 function roundUpToNextPowerOf2(n) {
5050 // Get the next highest power of
2
5052 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5058 function howMuchToRead(n, state) {
5059 if (state.length ===
0 && state.ended)
5062 if (state.objectMode)
5063 return n ===
0 ?
0 :
1;
5065 if (isNaN(n) || util.isNull(n)) {
5066 // only flow one buffer at a time
5067 if (state.flowing && state.buffer.length)
5068 return state.buffer[
0].length;
5070 return state.length;
5076 // If we're asking for more than the target buffer level,
5077 // then raise the water mark. Bump up to the next highest
5078 // power of
2, to prevent increasing it excessively in tiny
5080 if (n
> state.highWaterMark)
5081 state.highWaterMark = roundUpToNextPowerOf2(n);
5083 // don't have that much. return null, unless we've ended.
5084 if (n
> state.length) {
5086 state.needReadable = true;
5089 return state.length;
5095 // you can override either this method, or the async _read(n) below.
5096 Readable.prototype.read = function(n) {
5098 var state = this._readableState;
5101 if (!util.isNumber(n) || n
> 0)
5102 state.emittedReadable = false;
5104 // if we're doing read(
0) to trigger a readable event, but we
5105 // already have a bunch of data in the buffer, then just trigger
5106 // the 'readable' event and move on.
5108 state.needReadable &&
5109 (state.length
>= state.highWaterMark || state.ended)) {
5110 debug('read: emitReadable', state.length, state.ended);
5111 if (state.length ===
0 && state.ended)
5118 n = howMuchToRead(n, state);
5120 // if we've ended, and we're now clear, then finish it up.
5121 if (n ===
0 && state.ended) {
5122 if (state.length ===
0)
5127 // All the actual chunk generation logic needs to be
5128 // *below* the call to _read. The reason is that in certain
5129 // synthetic stream cases, such as passthrough streams, _read
5130 // may be a completely synchronous operation which may change
5131 // the state of the read buffer, providing enough data when
5132 // before there was *not* enough.
5134 // So, the steps are:
5135 //
1. Figure out what the state of things will be after we do
5136 // a read from the buffer.
5138 //
2. If that resulting state will trigger a _read, then call _read.
5139 // Note that this may be asynchronous, or synchronous. Yes, it is
5140 // deeply ugly to write APIs this way, but that still doesn't mean
5141 // that the Readable class should behave improperly, as streams are
5142 // designed to be sync/async agnostic.
5143 // Take note if the _read call is sync or async (ie, if the read call
5144 // has returned yet), so that we know whether or not it's safe to emit
5147 //
3. Actually pull the requested chunks out of the buffer and return.
5149 // if we need a readable event, then we need to do some reading.
5150 var doRead = state.needReadable;
5151 debug('need readable', doRead);
5153 // if we currently have less than the highWaterMark, then also read some
5154 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5156 debug('length less than watermark', doRead);
5159 // however, if we've ended, then there's no point, and if we're already
5160 // reading, then it's unnecessary.
5161 if (state.ended || state.reading) {
5163 debug('reading or ended', doRead);
5168 state.reading = true;
5170 // if the length is currently zero, then we *need* a readable event.
5171 if (state.length ===
0)
5172 state.needReadable = true;
5173 // call internal read method
5174 this._read(state.highWaterMark);
5178 // If _read pushed data synchronously, then `reading` will be false,
5179 // and we need to re-evaluate how much data we can return to the user.
5180 if (doRead && !state.reading)
5181 n = howMuchToRead(nOrig, state);
5185 ret = fromList(n, state);
5189 if (util.isNull(ret)) {
5190 state.needReadable = true;
5196 // If we have nothing in the buffer, then we want to know
5197 // as soon as we *do* get something into the buffer.
5198 if (state.length ===
0 && !state.ended)
5199 state.needReadable = true;
5201 // If we tried to read() past the EOF, then emit end on the next tick.
5202 if (nOrig !== n && state.ended && state.length ===
0)
5205 if (!util.isNull(ret))
5206 this.emit('data', ret);
5211 function chunkInvalid(state, chunk) {
5213 if (!util.isBuffer(chunk) &&
5214 !util.isString(chunk) &&
5215 !util.isNullOrUndefined(chunk) &&
5216 !state.objectMode) {
5217 er = new TypeError('Invalid non-string/buffer chunk');
5223 function onEofChunk(stream, state) {
5224 if (state.decoder && !state.ended) {
5225 var chunk = state.decoder.end();
5226 if (chunk && chunk.length) {
5227 state.buffer.push(chunk);
5228 state.length += state.objectMode ?
1 : chunk.length;
5233 // emit 'readable' now to make sure it gets picked up.
5234 emitReadable(stream);
5237 // Don't emit readable right away in sync mode, because this can trigger
5238 // another read() call =
> stack overflow. This way, it might trigger
5239 // a nextTick recursion warning, but that's not so bad.
5240 function emitReadable(stream) {
5241 var state = stream._readableState;
5242 state.needReadable = false;
5243 if (!state.emittedReadable) {
5244 debug('emitReadable', state.flowing);
5245 state.emittedReadable = true;
5247 process.nextTick(function() {
5248 emitReadable_(stream);
5251 emitReadable_(stream);
5255 function emitReadable_(stream) {
5256 debug('emit readable');
5257 stream.emit('readable');
5262 // at this point, the user has presumably seen the 'readable' event,
5263 // and called read() to consume some data. that may have triggered
5264 // in turn another _read(n) call, in which case reading = true if
5265 // it's in progress.
5266 // However, if we're not ended, or reading, and the length < hwm,
5267 // then go ahead and try to read some more preemptively.
5268 function maybeReadMore(stream, state) {
5269 if (!state.readingMore) {
5270 state.readingMore = true;
5271 process.nextTick(function() {
5272 maybeReadMore_(stream, state);
5277 function maybeReadMore_(stream, state) {
5278 var len = state.length;
5279 while (!state.reading && !state.flowing && !state.ended &&
5280 state.length < state.highWaterMark) {
5281 debug('maybeReadMore read
0');
5283 if (len === state.length)
5284 // didn't get any data, stop spinning.
5289 state.readingMore = false;
5292 // abstract method. to be overridden in specific implementation classes.
5293 // call cb(er, data) where data is <= n in length.
5294 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5295 // arbitrary, and perhaps not very meaningful.
5296 Readable.prototype._read = function(n) {
5297 this.emit('error', new Error('not implemented'));
5300 Readable.prototype.pipe = function(dest, pipeOpts) {
5302 var state = this._readableState;
5304 switch (state.pipesCount) {
5309 state.pipes = [state.pipes, dest];
5312 state.pipes.push(dest);
5315 state.pipesCount +=
1;
5316 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5318 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5319 dest !== process.stdout &&
5320 dest !== process.stderr;
5322 var endFn = doEnd ? onend : cleanup;
5323 if (state.endEmitted)
5324 process.nextTick(endFn);
5326 src.once('end', endFn);
5328 dest.on('unpipe', onunpipe);
5329 function onunpipe(readable) {
5331 if (readable === src) {
5341 // when the dest drains, it reduces the awaitDrain counter
5342 // on the source. This would be more elegant with a .once()
5343 // handler in flow(), but adding and removing repeatedly is
5345 var ondrain = pipeOnDrain(src);
5346 dest.on('drain', ondrain);
5348 function cleanup() {
5350 // cleanup event handlers once the pipe is broken
5351 dest.removeListener('close', onclose);
5352 dest.removeListener('finish', onfinish);
5353 dest.removeListener('drain', ondrain);
5354 dest.removeListener('error', onerror);
5355 dest.removeListener('unpipe', onunpipe);
5356 src.removeListener('end', onend);
5357 src.removeListener('end', cleanup);
5358 src.removeListener('data', ondata);
5360 // if the reader is waiting for a drain event from this
5361 // specific writer, then it would cause it to never start
5363 // So, if this is awaiting a drain, then we just call it now.
5364 // If we don't know, then assume that we are waiting for one.
5365 if (state.awaitDrain &&
5366 (!dest._writableState || dest._writableState.needDrain))
5370 src.on('data', ondata);
5371 function ondata(chunk) {
5373 var ret = dest.write(chunk);
5374 if (false === ret) {
5375 debug('false write response, pause',
5376 src._readableState.awaitDrain);
5377 src._readableState.awaitDrain++;
5382 // if the dest has an error, then stop piping into it.
5383 // however, don't suppress the throwing behavior for this.
5384 function onerror(er) {
5385 debug('onerror', er);
5387 dest.removeListener('error', onerror);
5388 if (EE.listenerCount(dest, 'error') ===
0)
5389 dest.emit('error', er);
5391 // This is a brutally ugly hack to make sure that our error handler
5392 // is attached before any userland ones. NEVER DO THIS.
5393 if (!dest._events || !dest._events.error)
5394 dest.on('error', onerror);
5395 else if (isArray(dest._events.error))
5396 dest._events.error.unshift(onerror);
5398 dest._events.error = [onerror, dest._events.error];
5402 // Both close and finish should trigger unpipe, but only once.
5403 function onclose() {
5404 dest.removeListener('finish', onfinish);
5407 dest.once('close', onclose);
5408 function onfinish() {
5410 dest.removeListener('close', onclose);
5413 dest.once('finish', onfinish);
5420 // tell the dest that it's being piped to
5421 dest.emit('pipe', src);
5423 // start the flow if it hasn't been started already.
5424 if (!state.flowing) {
5425 debug('pipe resume');
5432 function pipeOnDrain(src) {
5434 var state = src._readableState;
5435 debug('pipeOnDrain', state.awaitDrain);
5436 if (state.awaitDrain)
5438 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5439 state.flowing = true;
5446 Readable.prototype.unpipe = function(dest) {
5447 var state = this._readableState;
5449 // if we're not piping anywhere, then do nothing.
5450 if (state.pipesCount ===
0)
5453 // just one destination. most common case.
5454 if (state.pipesCount ===
1) {
5455 // passed in one, but it's not the right one.
5456 if (dest && dest !== state.pipes)
5464 state.pipesCount =
0;
5465 state.flowing = false;
5467 dest.emit('unpipe', this);
5471 // slow case. multiple pipe destinations.
5475 var dests = state.pipes;
5476 var len = state.pipesCount;
5478 state.pipesCount =
0;
5479 state.flowing = false;
5481 for (var i =
0; i < len; i++)
5482 dests[i].emit('unpipe', this);
5486 // try to find the right one.
5487 var i = indexOf(state.pipes, dest);
5491 state.pipes.splice(i,
1);
5492 state.pipesCount -=
1;
5493 if (state.pipesCount ===
1)
5494 state.pipes = state.pipes[
0];
5496 dest.emit('unpipe', this);
5501 // set up data events if they are asked for
5502 // Ensure readable listeners eventually get something
5503 Readable.prototype.on = function(ev, fn) {
5504 var res = Stream.prototype.on.call(this, ev, fn);
5506 // If listening to data, and it has not explicitly been paused,
5507 // then call resume to start the flow of data on the next tick.
5508 if (ev === 'data' && false !== this._readableState.flowing) {
5512 if (ev === 'readable' && this.readable) {
5513 var state = this._readableState;
5514 if (!state.readableListening) {
5515 state.readableListening = true;
5516 state.emittedReadable = false;
5517 state.needReadable = true;
5518 if (!state.reading) {
5520 process.nextTick(function() {
5521 debug('readable nexttick read
0');
5524 } else if (state.length) {
5525 emitReadable(this, state);
5532 Readable.prototype.addListener = Readable.prototype.on;
5534 // pause() and resume() are remnants of the legacy readable stream API
5535 // If the user uses them, then switch into old mode.
5536 Readable.prototype.resume = function() {
5537 var state = this._readableState;
5538 if (!state.flowing) {
5540 state.flowing = true;
5541 if (!state.reading) {
5542 debug('resume read
0');
5545 resume(this, state);
5550 function resume(stream, state) {
5551 if (!state.resumeScheduled) {
5552 state.resumeScheduled = true;
5553 process.nextTick(function() {
5554 resume_(stream, state);
5559 function resume_(stream, state) {
5560 state.resumeScheduled = false;
5561 stream.emit('resume');
5563 if (state.flowing && !state.reading)
5567 Readable.prototype.pause = function() {
5568 debug('call pause flowing=%j', this._readableState.flowing);
5569 if (false !== this._readableState.flowing) {
5571 this._readableState.flowing = false;
5577 function flow(stream) {
5578 var state = stream._readableState;
5579 debug('flow', state.flowing);
5580 if (state.flowing) {
5582 var chunk = stream.read();
5583 } while (null !== chunk && state.flowing);
5587 // wrap an old-style stream as the async data source.
5588 // This is *not* part of the readable stream interface.
5589 // It is an ugly unfortunate mess of history.
5590 Readable.prototype.wrap = function(stream) {
5591 var state = this._readableState;
5595 stream.on('end', function() {
5596 debug('wrapped end');
5597 if (state.decoder && !state.ended) {
5598 var chunk = state.decoder.end();
5599 if (chunk && chunk.length)
5606 stream.on('data', function(chunk) {
5607 debug('wrapped data');
5609 chunk = state.decoder.write(chunk);
5610 if (!chunk || !state.objectMode && !chunk.length)
5613 var ret = self.push(chunk);
5620 // proxy all the other methods.
5621 // important when wrapping filters and duplexes.
5622 for (var i in stream) {
5623 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5624 this[i] = function(method) { return function() {
5625 return stream[method].apply(stream, arguments);
5630 // proxy certain important events.
5631 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5632 forEach(events, function(ev) {
5633 stream.on(ev, self.emit.bind(self, ev));
5636 // when we try to consume some more bytes, simply unpause the
5637 // underlying stream.
5638 self._read = function(n) {
5639 debug('wrapped _read', n);
5651 // exposed for testing purposes only.
5652 Readable._fromList = fromList;
5654 // Pluck off n bytes from an array of buffers.
5655 // Length is the combined lengths of all the buffers in the list.
5656 function fromList(n, state) {
5657 var list = state.buffer;
5658 var length = state.length;
5659 var stringMode = !!state.decoder;
5660 var objectMode = !!state.objectMode;
5663 // nothing in the list, definitely empty.
5664 if (list.length ===
0)
5669 else if (objectMode)
5671 else if (!n || n
>= length) {
5672 // read it all, truncate the array.
5674 ret = list.join('');
5676 ret = Buffer.concat(list, length);
5679 // read just some of it.
5680 if (n < list[
0].length) {
5681 // just take a part of the first list item.
5682 // slice is the same for buffers and strings.
5684 ret = buf.slice(
0, n);
5685 list[
0] = buf.slice(n);
5686 } else if (n === list[
0].length) {
5687 // first list is a perfect match
5691 // we have enough to cover it, but it spans past the first buffer.
5695 ret = new Buffer(n);
5698 for (var i =
0, l = list.length; i < l && c < n; i++) {
5700 var cpy = Math.min(n - c, buf.length);
5703 ret += buf.slice(
0, cpy);
5705 buf.copy(ret, c,
0, cpy);
5707 if (cpy < buf.length)
5708 list[
0] = buf.slice(cpy);
5720 function endReadable(stream) {
5721 var state = stream._readableState;
5723 // If we get here before consuming all the bytes, then that is a
5724 // bug in node. Should never happen.
5725 if (state.length
> 0)
5726 throw new Error('endReadable called on non-empty stream');
5728 if (!state.endEmitted) {
5730 process.nextTick(function() {
5731 // Check that we didn't get one last unshift.
5732 if (!state.endEmitted && state.length ===
0) {
5733 state.endEmitted = true;
5734 stream.readable = false;
5741 function forEach (xs, f) {
5742 for (var i =
0, l = xs.length; i < l; i++) {
5747 function indexOf (xs, x) {
5748 for (var i =
0, l = xs.length; i < l; i++) {
5749 if (xs[i] === x) return i;
5754 }).call(this,require('_process'))
5755 },{
"./_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){
5756 // Copyright Joyent, Inc. and other Node contributors.
5758 // Permission is hereby granted, free of charge, to any person obtaining a
5759 // copy of this software and associated documentation files (the
5760 //
"Software"), to deal in the Software without restriction, including
5761 // without limitation the rights to use, copy, modify, merge, publish,
5762 // distribute, sublicense, and/or sell copies of the Software, and to permit
5763 // persons to whom the Software is furnished to do so, subject to the
5764 // following conditions:
5766 // The above copyright notice and this permission notice shall be included
5767 // in all copies or substantial portions of the Software.
5769 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5770 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5771 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5772 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5773 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5774 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5775 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5778 // a transform stream is a readable/writable stream where you do
5779 // something with the data. Sometimes it's called a
"filter",
5780 // but that's not a great name for it, since that implies a thing where
5781 // some bits pass through, and others are simply ignored. (That would
5782 // be a valid example of a transform, of course.)
5784 // While the output is causally related to the input, it's not a
5785 // necessarily symmetric or synchronous transformation. For example,
5786 // a zlib stream might take multiple plain-text writes(), and then
5787 // emit a single compressed chunk some time in the future.
5789 // Here's how this works:
5791 // The Transform stream has all the aspects of the readable and writable
5792 // stream classes. When you write(chunk), that calls _write(chunk,cb)
5793 // internally, and returns false if there's a lot of pending writes
5794 // buffered up. When you call read(), that calls _read(n) until
5795 // there's enough pending readable data buffered up.
5797 // In a transform stream, the written data is placed in a buffer. When
5798 // _read(n) is called, it transforms the queued up data, calling the
5799 // buffered _write cb's as it consumes chunks. If consuming a single
5800 // written chunk would result in multiple output chunks, then the first
5801 // outputted bit calls the readcb, and subsequent chunks just go into
5802 // the read buffer, and will cause it to emit 'readable' if necessary.
5804 // This way, back-pressure is actually determined by the reading side,
5805 // since _read has to be called to start processing a new chunk. However,
5806 // a pathological inflate type of transform can cause excessive buffering
5807 // here. For example, imagine a stream where every byte of input is
5808 // interpreted as an integer from
0-
255, and then results in that many
5809 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
5810 //
1kb of data being output. In this case, you could write a very small
5811 // amount of input, and end up with a very large amount of output. In
5812 // such a pathological inflating mechanism, there'd be no way to tell
5813 // the system to stop doing the transform. A single
4MB write could
5814 // cause the system to run out of memory.
5816 // However, even in such a pathological case, only a single written chunk
5817 // would be consumed, and then the rest would wait (un-transformed) until
5818 // the results of the previous transformed chunk were consumed.
5820 module.exports = Transform;
5822 var Duplex = require('./_stream_duplex');
5825 var util = require('core-util-is');
5826 util.inherits = require('inherits');
5829 util.inherits(Transform, Duplex);
5832 function TransformState(options, stream) {
5833 this.afterTransform = function(er, data) {
5834 return afterTransform(stream, er, data);
5837 this.needTransform = false;
5838 this.transforming = false;
5839 this.writecb = null;
5840 this.writechunk = null;
5843 function afterTransform(stream, er, data) {
5844 var ts = stream._transformState;
5845 ts.transforming = false;
5847 var cb = ts.writecb;
5850 return stream.emit('error', new Error('no writecb in Transform class'));
5852 ts.writechunk = null;
5855 if (!util.isNullOrUndefined(data))
5861 var rs = stream._readableState;
5863 if (rs.needReadable || rs.length < rs.highWaterMark) {
5864 stream._read(rs.highWaterMark);
5869 function Transform(options) {
5870 if (!(this instanceof Transform))
5871 return new Transform(options);
5873 Duplex.call(this, options);
5875 this._transformState = new TransformState(options, this);
5877 // when the writable side finishes, then flush out anything remaining.
5880 // start out asking for a readable event once data is transformed.
5881 this._readableState.needReadable = true;
5883 // we have implemented the _read method, and done the other things
5884 // that Readable wants before the first _read call, so unset the
5886 this._readableState.sync = false;
5888 this.once('prefinish', function() {
5889 if (util.isFunction(this._flush))
5890 this._flush(function(er) {
5898 Transform.prototype.push = function(chunk, encoding) {
5899 this._transformState.needTransform = false;
5900 return Duplex.prototype.push.call(this, chunk, encoding);
5903 // This is the part where you do stuff!
5904 // override this function in implementation classes.
5905 // 'chunk' is an input chunk.
5907 // Call `push(newChunk)` to pass along transformed output
5908 // to the readable side. You may call 'push' zero or more times.
5910 // Call `cb(err)` when you are done with this chunk. If you pass
5911 // an error, then that'll put the hurt on the whole operation. If you
5912 // never call cb(), then you'll never get another chunk.
5913 Transform.prototype._transform = function(chunk, encoding, cb) {
5914 throw new Error('not implemented');
5917 Transform.prototype._write = function(chunk, encoding, cb) {
5918 var ts = this._transformState;
5920 ts.writechunk = chunk;
5921 ts.writeencoding = encoding;
5922 if (!ts.transforming) {
5923 var rs = this._readableState;
5924 if (ts.needTransform ||
5926 rs.length < rs.highWaterMark)
5927 this._read(rs.highWaterMark);
5931 // Doesn't matter what the args are here.
5932 // _transform does all the work.
5933 // That we got here means that the readable side wants more data.
5934 Transform.prototype._read = function(n) {
5935 var ts = this._transformState;
5937 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5938 ts.transforming = true;
5939 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5941 // mark that we need a transform, so that any data that comes in
5942 // will get processed, now that we've asked for it.
5943 ts.needTransform = true;
5948 function done(stream, er) {
5950 return stream.emit('error', er);
5952 // if there's nothing in the write buffer, then that means
5953 // that nothing more will ever be provided
5954 var ws = stream._writableState;
5955 var ts = stream._transformState;
5958 throw new Error('calling transform done when ws.length !=
0');
5960 if (ts.transforming)
5961 throw new Error('calling transform done when still transforming');
5963 return stream.push(null);
5966 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
5967 (function (process){
5968 // Copyright Joyent, Inc. and other Node contributors.
5970 // Permission is hereby granted, free of charge, to any person obtaining a
5971 // copy of this software and associated documentation files (the
5972 // "Software"), to deal in the Software without restriction, including
5973 // without limitation the rights to use, copy, modify, merge, publish,
5974 // distribute, sublicense, and/or sell copies of the Software, and to permit
5975 // persons to whom the Software is furnished to do so, subject to the
5976 // following conditions:
5978 // The above copyright notice and this permission notice shall be included
5979 // in all copies or substantial portions of the Software.
5981 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5982 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5983 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5984 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5985 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5986 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5987 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5989 // A bit simpler than readable streams.
5990 // Implement an async ._write(chunk, cb), and it'll handle all
5991 // the drain event emission and buffering.
5993 module.exports = Writable;
5996 var Buffer = require('buffer').Buffer;
5999 Writable.WritableState = WritableState;
6003 var util = require('core-util-is');
6004 util.inherits = require('inherits');
6007 var Stream = require('stream');
6009 util.inherits(Writable, Stream);
6011 function WriteReq(chunk, encoding, cb) {
6013 this.encoding = encoding;
6017 function WritableState(options, stream) {
6018 var Duplex = require('./_stream_duplex');
6020 options = options || {};
6022 // the point at which write() starts returning false
6023 // Note:
0 is a valid value, means that we always return false if
6024 // the entire buffer is not flushed immediately on write()
6025 var hwm = options.highWaterMark;
6026 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6027 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6029 // object stream flag to indicate whether or not this stream
6030 // contains buffers or objects.
6031 this.objectMode = !!options.objectMode;
6033 if (stream instanceof Duplex)
6034 this.objectMode = this.objectMode || !!options.writableObjectMode;
6037 this.highWaterMark = ~~this.highWaterMark;
6039 this.needDrain = false;
6040 // at the start of calling end()
6041 this.ending = false;
6042 // when end() has been called, and returned
6044 // when 'finish' is emitted
6045 this.finished = false;
6047 // should we decode strings into buffers before passing to _write?
6048 // this is here so that some node-core streams can optimize string
6049 // handling at a lower level.
6050 var noDecode = options.decodeStrings === false;
6051 this.decodeStrings = !noDecode;
6053 // Crypto is kind of old and crusty. Historically, its default string
6054 // encoding is 'binary' so we have to make this configurable.
6055 // Everything else in the universe uses 'utf8', though.
6056 this.defaultEncoding = options.defaultEncoding || 'utf8';
6058 // not an actual buffer we keep track of, but a measurement
6059 // of how much we're waiting to get pushed to some underlying
6063 // a flag to see when we're in the middle of a write.
6064 this.writing = false;
6066 // when true all writes will be buffered until .uncork() call
6069 // a flag to be able to tell if the onwrite cb is called immediately,
6070 // or on a later tick. We set this to true at first, because any
6071 // actions that shouldn't happen until "later" should generally also
6072 // not happen before the first write call.
6075 // a flag to know if we're processing previously buffered items, which
6076 // may call the _write() callback in the same tick, so that we don't
6077 // end up in an overlapped onwrite situation.
6078 this.bufferProcessing = false;
6080 // the callback that's passed to _write(chunk,cb)
6081 this.onwrite = function(er) {
6082 onwrite(stream, er);
6085 // the callback that the user supplies to write(chunk,encoding,cb)
6086 this.writecb = null;
6088 // the amount that is being written when _write is called.
6093 // number of pending user-supplied write callbacks
6094 // this must be
0 before 'finish' can be emitted
6097 // emit prefinish if the only thing we're waiting for is _write cbs
6098 // This is relevant for synchronous Transform streams
6099 this.prefinished = false;
6101 // True if the error was already emitted and should not be thrown again
6102 this.errorEmitted = false;
6105 function Writable(options) {
6106 var Duplex = require('./_stream_duplex');
6108 // Writable ctor is applied to Duplexes, though they're not
6109 // instanceof Writable, they're instanceof Readable.
6110 if (!(this instanceof Writable) && !(this instanceof Duplex))
6111 return new Writable(options);
6113 this._writableState = new WritableState(options, this);
6116 this.writable = true;
6121 // Otherwise people can pipe Writable streams, which is just wrong.
6122 Writable.prototype.pipe = function() {
6123 this.emit('error', new Error('Cannot pipe. Not readable.'));
6127 function writeAfterEnd(stream, state, cb) {
6128 var er = new Error('write after end');
6129 // TODO: defer error events consistently everywhere, not just the cb
6130 stream.emit('error', er);
6131 process.nextTick(function() {
6136 // If we get something that is not a buffer, string, null, or undefined,
6137 // and we're not in objectMode, then that's an error.
6138 // Otherwise stream chunks are all considered to be of length=
1, and the
6139 // watermarks determine how many objects to keep in the buffer, rather than
6140 // how many bytes or characters.
6141 function validChunk(stream, state, chunk, cb) {
6143 if (!util.isBuffer(chunk) &&
6144 !util.isString(chunk) &&
6145 !util.isNullOrUndefined(chunk) &&
6146 !state.objectMode) {
6147 var er = new TypeError('Invalid non-string/buffer chunk');
6148 stream.emit('error', er);
6149 process.nextTick(function() {
6157 Writable.prototype.write = function(chunk, encoding, cb) {
6158 var state = this._writableState;
6161 if (util.isFunction(encoding)) {
6166 if (util.isBuffer(chunk))
6167 encoding = 'buffer';
6169 encoding = state.defaultEncoding;
6171 if (!util.isFunction(cb))
6175 writeAfterEnd(this, state, cb);
6176 else if (validChunk(this, state, chunk, cb)) {
6178 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6184 Writable.prototype.cork = function() {
6185 var state = this._writableState;
6190 Writable.prototype.uncork = function() {
6191 var state = this._writableState;
6196 if (!state.writing &&
6199 !state.bufferProcessing &&
6200 state.buffer.length)
6201 clearBuffer(this, state);
6205 function decodeChunk(state, chunk, encoding) {
6206 if (!state.objectMode &&
6207 state.decodeStrings !== false &&
6208 util.isString(chunk)) {
6209 chunk = new Buffer(chunk, encoding);
6214 // if we're already writing something, then just put this
6215 // in the queue, and wait our turn. Otherwise, call _write
6216 // If we return false, then we need a drain event, so set that flag.
6217 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6218 chunk = decodeChunk(state, chunk, encoding);
6219 if (util.isBuffer(chunk))
6220 encoding = 'buffer';
6221 var len = state.objectMode ?
1 : chunk.length;
6223 state.length += len;
6225 var ret = state.length < state.highWaterMark;
6226 // we must ensure that previous needDrain will not be reset to false.
6228 state.needDrain = true;
6230 if (state.writing || state.corked)
6231 state.buffer.push(new WriteReq(chunk, encoding, cb));
6233 doWrite(stream, state, false, len, chunk, encoding, cb);
6238 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6239 state.writelen = len;
6241 state.writing = true;
6244 stream._writev(chunk, state.onwrite);
6246 stream._write(chunk, encoding, state.onwrite);
6250 function onwriteError(stream, state, sync, er, cb) {
6252 process.nextTick(function() {
6261 stream._writableState.errorEmitted = true;
6262 stream.emit('error', er);
6265 function onwriteStateUpdate(state) {
6266 state.writing = false;
6267 state.writecb = null;
6268 state.length -= state.writelen;
6272 function onwrite(stream, er) {
6273 var state = stream._writableState;
6274 var sync = state.sync;
6275 var cb = state.writecb;
6277 onwriteStateUpdate(state);
6280 onwriteError(stream, state, sync, er, cb);
6282 // Check if we're actually ready to finish, but don't emit yet
6283 var finished = needFinish(stream, state);
6287 !state.bufferProcessing &&
6288 state.buffer.length) {
6289 clearBuffer(stream, state);
6293 process.nextTick(function() {
6294 afterWrite(stream, state, finished, cb);
6297 afterWrite(stream, state, finished, cb);
6302 function afterWrite(stream, state, finished, cb) {
6304 onwriteDrain(stream, state);
6307 finishMaybe(stream, state);
6310 // Must force callback to be called on nextTick, so that we don't
6311 // emit 'drain' before the write() consumer gets the 'false' return
6312 // value, and has a chance to attach a 'drain' listener.
6313 function onwriteDrain(stream, state) {
6314 if (state.length ===
0 && state.needDrain) {
6315 state.needDrain = false;
6316 stream.emit('drain');
6321 // if there's something in the buffer waiting, then process it
6322 function clearBuffer(stream, state) {
6323 state.bufferProcessing = true;
6325 if (stream._writev && state.buffer.length
> 1) {
6326 // Fast case, write everything using _writev()
6328 for (var c =
0; c < state.buffer.length; c++)
6329 cbs.push(state.buffer[c].callback);
6331 // count the one we are adding, as well.
6332 // TODO(isaacs) clean this up
6334 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6335 for (var i =
0; i < cbs.length; i++) {
6344 // Slow case, write chunks one-by-one
6345 for (var c =
0; c < state.buffer.length; c++) {
6346 var entry = state.buffer[c];
6347 var chunk = entry.chunk;
6348 var encoding = entry.encoding;
6349 var cb = entry.callback;
6350 var len = state.objectMode ?
1 : chunk.length;
6352 doWrite(stream, state, false, len, chunk, encoding, cb);
6354 // if we didn't call the onwrite immediately, then
6355 // it means that we need to wait until it does.
6356 // also, that means that the chunk and cb are currently
6357 // being processed, so move the buffer counter past them.
6358 if (state.writing) {
6364 if (c < state.buffer.length)
6365 state.buffer = state.buffer.slice(c);
6367 state.buffer.length =
0;
6370 state.bufferProcessing = false;
6373 Writable.prototype._write = function(chunk, encoding, cb) {
6374 cb(new Error('not implemented'));
6378 Writable.prototype._writev = null;
6380 Writable.prototype.end = function(chunk, encoding, cb) {
6381 var state = this._writableState;
6383 if (util.isFunction(chunk)) {
6387 } else if (util.isFunction(encoding)) {
6392 if (!util.isNullOrUndefined(chunk))
6393 this.write(chunk, encoding);
6395 // .end() fully uncorks
6401 // ignore unnecessary end() calls.
6402 if (!state.ending && !state.finished)
6403 endWritable(this, state, cb);
6407 function needFinish(stream, state) {
6408 return (state.ending &&
6409 state.length ===
0 &&
6414 function prefinish(stream, state) {
6415 if (!state.prefinished) {
6416 state.prefinished = true;
6417 stream.emit('prefinish');
6421 function finishMaybe(stream, state) {
6422 var need = needFinish(stream, state);
6424 if (state.pendingcb ===
0) {
6425 prefinish(stream, state);
6426 state.finished = true;
6427 stream.emit('finish');
6429 prefinish(stream, state);
6434 function endWritable(stream, state, cb) {
6435 state.ending = true;
6436 finishMaybe(stream, state);
6439 process.nextTick(cb);
6441 stream.once('finish', cb);
6446 }).call(this,require('_process'))
6447 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6449 // Copyright Joyent, Inc. and other Node contributors.
6451 // Permission is hereby granted, free of charge, to any person obtaining a
6452 // copy of this software and associated documentation files (the
6453 //
"Software"), to deal in the Software without restriction, including
6454 // without limitation the rights to use, copy, modify, merge, publish,
6455 // distribute, sublicense, and/or sell copies of the Software, and to permit
6456 // persons to whom the Software is furnished to do so, subject to the
6457 // following conditions:
6459 // The above copyright notice and this permission notice shall be included
6460 // in all copies or substantial portions of the Software.
6462 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6463 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6464 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6465 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6466 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6467 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6468 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6470 // NOTE: These type checking functions intentionally don't use `instanceof`
6471 // because it is fragile and can be easily faked with `Object.create()`.
6472 function isArray(ar) {
6473 return Array.isArray(ar);
6475 exports.isArray = isArray;
6477 function isBoolean(arg) {
6478 return typeof arg === 'boolean';
6480 exports.isBoolean = isBoolean;
6482 function isNull(arg) {
6483 return arg === null;
6485 exports.isNull = isNull;
6487 function isNullOrUndefined(arg) {
6490 exports.isNullOrUndefined = isNullOrUndefined;
6492 function isNumber(arg) {
6493 return typeof arg === 'number';
6495 exports.isNumber = isNumber;
6497 function isString(arg) {
6498 return typeof arg === 'string';
6500 exports.isString = isString;
6502 function isSymbol(arg) {
6503 return typeof arg === 'symbol';
6505 exports.isSymbol = isSymbol;
6507 function isUndefined(arg) {
6508 return arg === void
0;
6510 exports.isUndefined = isUndefined;
6512 function isRegExp(re) {
6513 return isObject(re) && objectToString(re) === '[object RegExp]';
6515 exports.isRegExp = isRegExp;
6517 function isObject(arg) {
6518 return typeof arg === 'object' && arg !== null;
6520 exports.isObject = isObject;
6522 function isDate(d) {
6523 return isObject(d) && objectToString(d) === '[object Date]';
6525 exports.isDate = isDate;
6527 function isError(e) {
6528 return isObject(e) &&
6529 (objectToString(e) === '[object Error]' || e instanceof Error);
6531 exports.isError = isError;
6533 function isFunction(arg) {
6534 return typeof arg === 'function';
6536 exports.isFunction = isFunction;
6538 function isPrimitive(arg) {
6539 return arg === null ||
6540 typeof arg === 'boolean' ||
6541 typeof arg === 'number' ||
6542 typeof arg === 'string' ||
6543 typeof arg === 'symbol' || // ES6 symbol
6544 typeof arg === 'undefined';
6546 exports.isPrimitive = isPrimitive;
6548 function isBuffer(arg) {
6549 return Buffer.isBuffer(arg);
6551 exports.isBuffer = isBuffer;
6553 function objectToString(o) {
6554 return Object.prototype.toString.call(o);
6556 }).call(this,require(
"buffer").Buffer)
6557 },{
"buffer":
7}],
22:[function(require,module,exports){
6558 module.exports = require(
"./lib/_stream_passthrough.js")
6560 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6561 exports = module.exports = require('./lib/_stream_readable.js');
6562 exports.Stream = require('stream');
6563 exports.Readable = exports;
6564 exports.Writable = require('./lib/_stream_writable.js');
6565 exports.Duplex = require('./lib/_stream_duplex.js');
6566 exports.Transform = require('./lib/_stream_transform.js');
6567 exports.PassThrough = require('./lib/_stream_passthrough.js');
6569 },{
"./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){
6570 module.exports = require(
"./lib/_stream_transform.js")
6572 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6573 module.exports = require(
"./lib/_stream_writable.js")
6575 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6576 // Copyright Joyent, Inc. and other Node contributors.
6578 // Permission is hereby granted, free of charge, to any person obtaining a
6579 // copy of this software and associated documentation files (the
6580 //
"Software"), to deal in the Software without restriction, including
6581 // without limitation the rights to use, copy, modify, merge, publish,
6582 // distribute, sublicense, and/or sell copies of the Software, and to permit
6583 // persons to whom the Software is furnished to do so, subject to the
6584 // following conditions:
6586 // The above copyright notice and this permission notice shall be included
6587 // in all copies or substantial portions of the Software.
6589 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6590 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6591 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6592 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6593 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6594 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6595 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6597 module.exports = Stream;
6599 var EE = require('events').EventEmitter;
6600 var inherits = require('inherits');
6602 inherits(Stream, EE);
6603 Stream.Readable = require('readable-stream/readable.js');
6604 Stream.Writable = require('readable-stream/writable.js');
6605 Stream.Duplex = require('readable-stream/duplex.js');
6606 Stream.Transform = require('readable-stream/transform.js');
6607 Stream.PassThrough = require('readable-stream/passthrough.js');
6609 // Backwards-compat with node
0.4.x
6610 Stream.Stream = Stream;
6614 // old-style streams. Note that the pipe method (the only relevant
6615 // part of this class) is overridden in the Readable class.
6621 Stream.prototype.pipe = function(dest, options) {
6624 function ondata(chunk) {
6625 if (dest.writable) {
6626 if (false === dest.write(chunk) && source.pause) {
6632 source.on('data', ondata);
6634 function ondrain() {
6635 if (source.readable && source.resume) {
6640 dest.on('drain', ondrain);
6642 // If the 'end' option is not supplied, dest.end() will be called when
6643 // source gets the 'end' or 'close' events. Only dest.end() once.
6644 if (!dest._isStdio && (!options || options.end !== false)) {
6645 source.on('end', onend);
6646 source.on('close', onclose);
6649 var didOnEnd = false;
6651 if (didOnEnd) return;
6658 function onclose() {
6659 if (didOnEnd) return;
6662 if (typeof dest.destroy === 'function') dest.destroy();
6665 // don't leave dangling pipes when there are errors.
6666 function onerror(er) {
6668 if (EE.listenerCount(this, 'error') ===
0) {
6669 throw er; // Unhandled stream error in pipe.
6673 source.on('error', onerror);
6674 dest.on('error', onerror);
6676 // remove all the event listeners that were added.
6677 function cleanup() {
6678 source.removeListener('data', ondata);
6679 dest.removeListener('drain', ondrain);
6681 source.removeListener('end', onend);
6682 source.removeListener('close', onclose);
6684 source.removeListener('error', onerror);
6685 dest.removeListener('error', onerror);
6687 source.removeListener('end', cleanup);
6688 source.removeListener('close', cleanup);
6690 dest.removeListener('close', cleanup);
6693 source.on('end', cleanup);
6694 source.on('close', cleanup);
6696 dest.on('close', cleanup);
6698 dest.emit('pipe', source);
6700 // Allow for unix-like usage: A.pipe(B).pipe(C)
6704 },{
"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){
6705 // Copyright Joyent, Inc. and other Node contributors.
6707 // Permission is hereby granted, free of charge, to any person obtaining a
6708 // copy of this software and associated documentation files (the
6709 //
"Software"), to deal in the Software without restriction, including
6710 // without limitation the rights to use, copy, modify, merge, publish,
6711 // distribute, sublicense, and/or sell copies of the Software, and to permit
6712 // persons to whom the Software is furnished to do so, subject to the
6713 // following conditions:
6715 // The above copyright notice and this permission notice shall be included
6716 // in all copies or substantial portions of the Software.
6718 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6719 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6720 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6721 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6722 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6723 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6724 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6726 var Buffer = require('buffer').Buffer;
6728 var isBufferEncoding = Buffer.isEncoding
6729 || function(encoding) {
6730 switch (encoding && encoding.toLowerCase()) {
6731 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;
6732 default: return false;
6737 function assertEncoding(encoding) {
6738 if (encoding && !isBufferEncoding(encoding)) {
6739 throw new Error('Unknown encoding: ' + encoding);
6743 // StringDecoder provides an interface for efficiently splitting a series of
6744 // buffers into a series of JS strings without breaking apart multi-byte
6745 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
6747 // @TODO Handling all encodings inside a single object makes it very difficult
6748 // to reason about this code, so it should be split up in the future.
6749 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
6750 // points as used by CESU-
8.
6751 var StringDecoder = exports.StringDecoder = function(encoding) {
6752 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6753 assertEncoding(encoding);
6754 switch (this.encoding) {
6756 // CESU-
8 represents each of Surrogate Pair by
3-bytes
6757 this.surrogateSize =
3;
6761 // UTF-
16 represents each of Surrogate Pair by
2-bytes
6762 this.surrogateSize =
2;
6763 this.detectIncompleteChar = utf16DetectIncompleteChar;
6766 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
6767 this.surrogateSize =
3;
6768 this.detectIncompleteChar = base64DetectIncompleteChar;
6771 this.write = passThroughWrite;
6775 // Enough space to store all bytes of a single character. UTF-
8 needs
4
6776 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
6777 this.charBuffer = new Buffer(
6);
6778 // Number of bytes received for the current incomplete multi-byte character.
6779 this.charReceived =
0;
6780 // Number of bytes expected for the current incomplete multi-byte character.
6781 this.charLength =
0;
6785 // write decodes the given buffer and returns it as JS string that is
6786 // guaranteed to not contain any partial multi-byte characters. Any partial
6787 // character found at the end of the buffer is buffered up, and will be
6788 // returned when calling write again with the remaining bytes.
6790 // Note: Converting a Buffer containing an orphan surrogate to a String
6791 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6792 // Buffer#write) will replace incomplete surrogates with the unicode
6793 // replacement character. See https://codereview.chromium.org/
121173009/ .
6794 StringDecoder.prototype.write = function(buffer) {
6796 // if our last write ended with an incomplete multibyte character
6797 while (this.charLength) {
6798 // determine how many remaining bytes this buffer has to offer for this char
6799 var available = (buffer.length
>= this.charLength - this.charReceived) ?
6800 this.charLength - this.charReceived :
6803 // add the new bytes to the char buffer
6804 buffer.copy(this.charBuffer, this.charReceived,
0, available);
6805 this.charReceived += available;
6807 if (this.charReceived < this.charLength) {
6808 // still not enough chars in this buffer? wait for more ...
6812 // remove bytes belonging to the current character from the buffer
6813 buffer = buffer.slice(available, buffer.length);
6815 // get the character that was split
6816 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
6818 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
6819 var charCode = charStr.charCodeAt(charStr.length -
1);
6820 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
6821 this.charLength += this.surrogateSize;
6825 this.charReceived = this.charLength =
0;
6827 // if there are no more bytes in this buffer, just emit our char
6828 if (buffer.length ===
0) {
6834 // determine and set charLength / charReceived
6835 this.detectIncompleteChar(buffer);
6837 var end = buffer.length;
6838 if (this.charLength) {
6839 // buffer the incomplete character bytes we got
6840 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
6841 end -= this.charReceived;
6844 charStr += buffer.toString(this.encoding,
0, end);
6846 var end = charStr.length -
1;
6847 var charCode = charStr.charCodeAt(end);
6848 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
6849 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
6850 var size = this.surrogateSize;
6851 this.charLength += size;
6852 this.charReceived += size;
6853 this.charBuffer.copy(this.charBuffer, size,
0, size);
6854 buffer.copy(this.charBuffer,
0,
0, size);
6855 return charStr.substring(
0, end);
6858 // or just emit the charStr
6862 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
6863 // the end of the given buffer. If so, it sets this.charLength to the byte
6864 // length that character, and sets this.charReceived to the number of bytes
6865 // that are available for this character.
6866 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6867 // determine how many bytes we have to check at the end of this buffer
6868 var i = (buffer.length
>=
3) ?
3 : buffer.length;
6870 // Figure out if one of the last i bytes of our buffer announces an
6872 for (; i
> 0; i--) {
6873 var c = buffer[buffer.length - i];
6875 // See http://en.wikipedia.org/wiki/UTF-
8#Description
6878 if (i ==
1 && c
>> 5 ==
0x06) {
6879 this.charLength =
2;
6884 if (i <=
2 && c
>> 4 ==
0x0E) {
6885 this.charLength =
3;
6890 if (i <=
3 && c
>> 3 ==
0x1E) {
6891 this.charLength =
4;
6895 this.charReceived = i;
6898 StringDecoder.prototype.end = function(buffer) {
6900 if (buffer && buffer.length)
6901 res = this.write(buffer);
6903 if (this.charReceived) {
6904 var cr = this.charReceived;
6905 var buf = this.charBuffer;
6906 var enc = this.encoding;
6907 res += buf.slice(
0, cr).toString(enc);
6913 function passThroughWrite(buffer) {
6914 return buffer.toString(this.encoding);
6917 function utf16DetectIncompleteChar(buffer) {
6918 this.charReceived = buffer.length %
2;
6919 this.charLength = this.charReceived ?
2 :
0;
6922 function base64DetectIncompleteChar(buffer) {
6923 this.charReceived = buffer.length %
3;
6924 this.charLength = this.charReceived ?
3 :
0;
6927 },{
"buffer":
7}],
28:[function(require,module,exports){
6928 module.exports = function isBuffer(arg) {
6929 return arg && typeof arg === 'object'
6930 && typeof arg.copy === 'function'
6931 && typeof arg.fill === 'function'
6932 && typeof arg.readUInt8 === 'function';
6934 },{}],
29:[function(require,module,exports){
6935 (function (process,global){
6936 // Copyright Joyent, Inc. and other Node contributors.
6938 // Permission is hereby granted, free of charge, to any person obtaining a
6939 // copy of this software and associated documentation files (the
6940 //
"Software"), to deal in the Software without restriction, including
6941 // without limitation the rights to use, copy, modify, merge, publish,
6942 // distribute, sublicense, and/or sell copies of the Software, and to permit
6943 // persons to whom the Software is furnished to do so, subject to the
6944 // following conditions:
6946 // The above copyright notice and this permission notice shall be included
6947 // in all copies or substantial portions of the Software.
6949 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6950 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6951 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6952 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6953 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6954 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6955 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6957 var formatRegExp = /%[sdj%]/g;
6958 exports.format = function(f) {
6961 for (var i =
0; i < arguments.length; i++) {
6962 objects.push(inspect(arguments[i]));
6964 return objects.join(' ');
6968 var args = arguments;
6969 var len = args.length;
6970 var str = String(f).replace(formatRegExp, function(x) {
6971 if (x === '%%') return '%';
6972 if (i
>= len) return x;
6974 case '%s': return String(args[i++]);
6975 case '%d': return Number(args[i++]);
6978 return JSON.stringify(args[i++]);
6980 return '[Circular]';
6986 for (var x = args[i]; i < len; x = args[++i]) {
6987 if (isNull(x) || !isObject(x)) {
6990 str += ' ' + inspect(x);
6997 // Mark that a method should not be used.
6998 // Returns a modified function which warns once by default.
6999 // If --no-deprecation is set, then it is a no-op.
7000 exports.deprecate = function(fn, msg) {
7001 // Allow for deprecating things in the process of starting up.
7002 if (isUndefined(global.process)) {
7004 return exports.deprecate(fn, msg).apply(this, arguments);
7008 if (process.noDeprecation === true) {
7013 function deprecated() {
7015 if (process.throwDeprecation) {
7016 throw new Error(msg);
7017 } else if (process.traceDeprecation) {
7024 return fn.apply(this, arguments);
7033 exports.debuglog = function(set) {
7034 if (isUndefined(debugEnviron))
7035 debugEnviron = process.env.NODE_DEBUG || '';
7036 set = set.toUpperCase();
7038 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7039 var pid = process.pid;
7040 debugs[set] = function() {
7041 var msg = exports.format.apply(exports, arguments);
7042 console.error('%s %d: %s', set, pid, msg);
7045 debugs[set] = function() {};
7053 * Echos the value of a value. Trys to print the value out
7054 * in the best way possible given the different types.
7056 * @param {Object} obj The object to print out.
7057 * @param {Object} opts Optional options object that alters the output.
7059 /* legacy: obj, showHidden, depth, colors*/
7060 function inspect(obj, opts) {
7064 stylize: stylizeNoColor
7067 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7068 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7069 if (isBoolean(opts)) {
7071 ctx.showHidden = opts;
7073 // got an "options" object
7074 exports._extend(ctx, opts);
7076 // set default options
7077 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7078 if (isUndefined(ctx.depth)) ctx.depth =
2;
7079 if (isUndefined(ctx.colors)) ctx.colors = false;
7080 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7081 if (ctx.colors) ctx.stylize = stylizeWithColor;
7082 return formatValue(ctx, obj, ctx.depth);
7084 exports.inspect = inspect;
7087 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7091 'underline' : [
4,
24],
7092 'inverse' : [
7,
27],
7099 'magenta' : [
35,
39],
7104 // Don't use 'blue' not visible on cmd.exe
7108 'boolean': 'yellow',
7109 'undefined': 'grey',
7113 // "name": intentionally not styling
7118 function stylizeWithColor(str, styleType) {
7119 var style = inspect.styles[styleType];
7122 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7123 '\u001b[' + inspect.colors[style][
1] + 'm';
7130 function stylizeNoColor(str, styleType) {
7135 function arrayToHash(array) {
7138 array.forEach(function(val, idx) {
7146 function formatValue(ctx, value, recurseTimes) {
7147 // Provide a hook for user-specified inspect functions.
7148 // Check that value is an object with an inspect function on it
7149 if (ctx.customInspect &&
7151 isFunction(value.inspect) &&
7152 // Filter out the util module, it's inspect function is special
7153 value.inspect !== exports.inspect &&
7154 // Also filter out any prototype objects using the circular check.
7155 !(value.constructor && value.constructor.prototype === value)) {
7156 var ret = value.inspect(recurseTimes, ctx);
7157 if (!isString(ret)) {
7158 ret = formatValue(ctx, ret, recurseTimes);
7163 // Primitive types cannot have properties
7164 var primitive = formatPrimitive(ctx, value);
7169 // Look up the keys of the object.
7170 var keys = Object.keys(value);
7171 var visibleKeys = arrayToHash(keys);
7173 if (ctx.showHidden) {
7174 keys = Object.getOwnPropertyNames(value);
7177 // IE doesn't make error fields non-enumerable
7178 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7180 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7181 return formatError(value);
7184 // Some type of object without properties can be shortcutted.
7185 if (keys.length ===
0) {
7186 if (isFunction(value)) {
7187 var name = value.name ? ': ' + value.name : '';
7188 return ctx.stylize('[Function' + name + ']', 'special');
7190 if (isRegExp(value)) {
7191 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7193 if (isDate(value)) {
7194 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7196 if (isError(value)) {
7197 return formatError(value);
7201 var base = '', array = false, braces = ['{', '}'];
7203 // Make Array say that they are Array
7204 if (isArray(value)) {
7206 braces = ['[', ']'];
7209 // Make functions say that they are functions
7210 if (isFunction(value)) {
7211 var n = value.name ? ': ' + value.name : '';
7212 base = ' [Function' + n + ']';
7215 // Make RegExps say that they are RegExps
7216 if (isRegExp(value)) {
7217 base = ' ' + RegExp.prototype.toString.call(value);
7220 // Make dates with properties first say the date
7221 if (isDate(value)) {
7222 base = ' ' + Date.prototype.toUTCString.call(value);
7225 // Make error with message first say the error
7226 if (isError(value)) {
7227 base = ' ' + formatError(value);
7230 if (keys.length ===
0 && (!array || value.length ==
0)) {
7231 return braces[
0] + base + braces[
1];
7234 if (recurseTimes <
0) {
7235 if (isRegExp(value)) {
7236 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7238 return ctx.stylize('[Object]', 'special');
7242 ctx.seen.push(value);
7246 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7248 output = keys.map(function(key) {
7249 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7255 return reduceToSingleString(output, base, braces);
7259 function formatPrimitive(ctx, value) {
7260 if (isUndefined(value))
7261 return ctx.stylize('undefined', 'undefined');
7262 if (isString(value)) {
7263 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7264 .replace(/'/g, "\\'")
7265 .replace(/\\"/g, '"') + '\'';
7266 return ctx.stylize(simple, 'string');
7268 if (isNumber(value))
7269 return ctx.stylize('' + value, 'number');
7270 if (isBoolean(value))
7271 return ctx.stylize('' + value, 'boolean');
7272 // For some reason typeof null is "object", so special case here.
7274 return ctx.stylize('null', 'null');
7278 function formatError(value) {
7279 return '[' + Error.prototype.toString.call(value) + ']';
7283 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7285 for (var i =
0, l = value.length; i < l; ++i) {
7286 if (hasOwnProperty(value, String(i))) {
7287 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7293 keys.forEach(function(key) {
7294 if (!key.match(/^\d+$/)) {
7295 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7303 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7304 var name, str, desc;
7305 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7308 str = ctx.stylize('[Getter/Setter]', 'special');
7310 str = ctx.stylize('[Getter]', 'special');
7314 str = ctx.stylize('[Setter]', 'special');
7317 if (!hasOwnProperty(visibleKeys, key)) {
7318 name = '[' + key + ']';
7321 if (ctx.seen.indexOf(desc.value) <
0) {
7322 if (isNull(recurseTimes)) {
7323 str = formatValue(ctx, desc.value, null);
7325 str = formatValue(ctx, desc.value, recurseTimes -
1);
7327 if (str.indexOf('\n')
> -
1) {
7329 str = str.split('\n').map(function(line) {
7331 }).join('\n').substr(
2);
7333 str = '\n' + str.split('\n').map(function(line) {
7339 str = ctx.stylize('[Circular]', 'special');
7342 if (isUndefined(name)) {
7343 if (array && key.match(/^\d+$/)) {
7346 name = JSON.stringify('' + key);
7347 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7348 name = name.substr(
1, name.length -
2);
7349 name = ctx.stylize(name, 'name');
7351 name = name.replace(/'/g, "\\'")
7352 .replace(/\\"/g, '"')
7353 .replace(/(^"|"$)/g, "'");
7354 name = ctx.stylize(name, 'string');
7358 return name + ': ' + str;
7362 function reduceToSingleString(output, base, braces) {
7363 var numLinesEst =
0;
7364 var length = output.reduce(function(prev, cur) {
7366 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7367 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7372 (base === '' ? '' : base + '\n ') +
7374 output.join(',\n ') +
7379 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7383 // NOTE: These type checking functions intentionally don't use `instanceof`
7384 // because it is fragile and can be easily faked with `Object.create()`.
7385 function isArray(ar) {
7386 return Array.isArray(ar);
7388 exports.isArray = isArray;
7390 function isBoolean(arg) {
7391 return typeof arg === 'boolean';
7393 exports.isBoolean = isBoolean;
7395 function isNull(arg) {
7396 return arg === null;
7398 exports.isNull = isNull;
7400 function isNullOrUndefined(arg) {
7403 exports.isNullOrUndefined = isNullOrUndefined;
7405 function isNumber(arg) {
7406 return typeof arg === 'number';
7408 exports.isNumber = isNumber;
7410 function isString(arg) {
7411 return typeof arg === 'string';
7413 exports.isString = isString;
7415 function isSymbol(arg) {
7416 return typeof arg === 'symbol';
7418 exports.isSymbol = isSymbol;
7420 function isUndefined(arg) {
7421 return arg === void
0;
7423 exports.isUndefined = isUndefined;
7425 function isRegExp(re) {
7426 return isObject(re) && objectToString(re) === '[object RegExp]';
7428 exports.isRegExp = isRegExp;
7430 function isObject(arg) {
7431 return typeof arg === 'object' && arg !== null;
7433 exports.isObject = isObject;
7435 function isDate(d) {
7436 return isObject(d) && objectToString(d) === '[object Date]';
7438 exports.isDate = isDate;
7440 function isError(e) {
7441 return isObject(e) &&
7442 (objectToString(e) === '[object Error]' || e instanceof Error);
7444 exports.isError = isError;
7446 function isFunction(arg) {
7447 return typeof arg === 'function';
7449 exports.isFunction = isFunction;
7451 function isPrimitive(arg) {
7452 return arg === null ||
7453 typeof arg === 'boolean' ||
7454 typeof arg === 'number' ||
7455 typeof arg === 'string' ||
7456 typeof arg === 'symbol' || // ES6 symbol
7457 typeof arg === 'undefined';
7459 exports.isPrimitive = isPrimitive;
7461 exports.isBuffer = require('./support/isBuffer');
7463 function objectToString(o) {
7464 return Object.prototype.toString.call(o);
7469 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7473 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7474 'Oct', 'Nov', 'Dec'];
7477 function timestamp() {
7479 var time = [pad(d.getHours()),
7480 pad(d.getMinutes()),
7481 pad(d.getSeconds())].join(':');
7482 return [d.getDate(), months[d.getMonth()], time].join(' ');
7486 // log is just a thin wrapper to console.log that prepends a timestamp
7487 exports.log = function() {
7488 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7493 * Inherit the prototype methods from one constructor into another.
7495 * The Function.prototype.inherits from lang.js rewritten as a standalone
7496 * function (not on Function.prototype). NOTE: If this file is to be loaded
7497 * during bootstrapping this function needs to be rewritten using some native
7498 * functions as prototype setup using normal JavaScript does not work as
7499 * expected during bootstrapping (see mirror.js in r114903).
7501 * @param {function} ctor Constructor function which needs to inherit the
7503 * @param {function} superCtor Constructor function to inherit prototype from.
7505 exports.inherits = require('inherits');
7507 exports._extend = function(origin, add) {
7508 // Don't do anything if add isn't an object
7509 if (!add || !isObject(add)) return origin;
7511 var keys = Object.keys(add);
7512 var i = keys.length;
7514 origin[keys[i]] = add[keys[i]];
7519 function hasOwnProperty(obj, prop) {
7520 return Object.prototype.hasOwnProperty.call(obj, prop);
7523 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7524 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7525 // Base58 encoding/decoding
7526 // Originally written by Mike Hearn for BitcoinJ
7527 // Copyright (c)
2011 Google Inc
7528 // Ported to JavaScript by Stefan Thomas
7529 // Merged Buffer refactorings from base58-native by Stephen Pair
7530 // Copyright (c)
2013 BitPay Inc
7532 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7533 var ALPHABET_MAP = {}
7534 for(var i =
0; i < ALPHABET.length; i++) {
7535 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7539 function encode(buffer) {
7540 if (buffer.length ===
0) return ''
7542 var i, j, digits = [
0]
7543 for (i =
0; i < buffer.length; i++) {
7544 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7546 digits[
0] += buffer[i]
7549 for (j =
0; j < digits.length; ++j) {
7552 carry = (digits[j] / BASE) |
0
7557 digits.push(carry % BASE)
7559 carry = (carry / BASE) |
0
7563 // deal with leading zeros
7564 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7566 // convert digits to a string
7567 var stringOutput =
""
7568 for (var i = digits.length -
1; i
>=
0; i--) {
7569 stringOutput = stringOutput + ALPHABET[digits[i]]
7574 function decode(string) {
7575 if (string.length ===
0) return []
7577 var i, j, bytes = [
0]
7578 for (i =
0; i < string.length; i++) {
7580 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7582 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7583 bytes[
0] += ALPHABET_MAP[c]
7586 for (j =
0; j < bytes.length; ++j) {
7589 carry = bytes[j]
>> 8
7594 bytes.push(carry &
0xff)
7600 // deal with leading zeros
7601 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7603 return bytes.reverse()
7611 },{}],
31:[function(require,module,exports){
7615 var base58 = require('bs58')
7616 var createHash = require('create-hash')
7618 // SHA256(SHA256(buffer))
7619 function sha256x2 (buffer) {
7620 buffer = createHash('sha256').update(buffer).digest()
7621 return createHash('sha256').update(buffer).digest()
7624 // Encode a buffer as a base58-check encoded string
7625 function encode (payload) {
7626 var checksum = sha256x2(payload).slice(
0,
4)
7628 return base58.encode(Buffer.concat([
7634 // Decode a base58-check encoded string to a buffer
7635 function decode (string) {
7636 var buffer = new Buffer(base58.decode(string))
7638 var payload = buffer.slice(
0, -
4)
7639 var checksum = buffer.slice(-
4)
7640 var newChecksum = sha256x2(payload).slice(
0,
4)
7642 for (var i =
0; i < newChecksum.length; ++i) {
7643 if (newChecksum[i] === checksum[i]) continue
7645 throw new Error('Invalid checksum')
7656 }).call(this,require("buffer").Buffer)
7657 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7660 var inherits = require('inherits')
7661 var md5 = require('./md5')
7662 var rmd160 = require('ripemd160')
7663 var sha = require('sha.js')
7665 var Transform = require('stream').Transform
7667 function HashNoConstructor(hash) {
7668 Transform.call(this)
7674 inherits(HashNoConstructor, Transform)
7676 HashNoConstructor.prototype._transform = function (data, _, next) {
7677 this.buffers.push(data)
7682 HashNoConstructor.prototype._flush = function (next) {
7683 this.push(this.digest())
7687 HashNoConstructor.prototype.update = function (data, enc) {
7688 if (typeof data === 'string') {
7689 data = new Buffer(data, enc)
7692 this.buffers.push(data)
7696 HashNoConstructor.prototype.digest = function (enc) {
7697 var buf = Buffer.concat(this.buffers)
7698 var r = this._hash(buf)
7701 return enc ? r.toString(enc) : r
7704 function Hash(hash) {
7705 Transform.call(this)
7710 inherits(Hash, Transform)
7712 Hash.prototype._transform = function (data, enc, next) {
7713 if (enc) data = new Buffer(data, enc)
7715 this._hash.update(data)
7720 Hash.prototype._flush = function (next) {
7721 this.push(this._hash.digest())
7727 Hash.prototype.update = function (data, enc) {
7728 if (typeof data === 'string') {
7729 data = new Buffer(data, enc)
7732 this._hash.update(data)
7736 Hash.prototype.digest = function (enc) {
7737 var outData = this._hash.digest()
7739 return enc ? outData.toString(enc) : outData
7742 module.exports = function createHash (alg) {
7743 if ('md5' === alg) return new HashNoConstructor(md5)
7744 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7746 return new Hash(sha(alg))
7749 }).call(this,require("buffer").Buffer)
7750 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
7754 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
7757 function toArray(buf, bigEndian) {
7758 if ((buf.length % intSize) !==
0) {
7759 var len = buf.length + (intSize - (buf.length % intSize));
7760 buf = Buffer.concat([buf, zeroBuffer], len);
7764 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7765 for (var i =
0; i < buf.length; i += intSize) {
7766 arr.push(fn.call(buf, i));
7771 function toBuffer(arr, size, bigEndian) {
7772 var buf = new Buffer(size);
7773 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7774 for (var i =
0; i < arr.length; i++) {
7775 fn.call(buf, arr[i], i *
4, true);
7780 function hash(buf, fn, hashSize, bigEndian) {
7781 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7782 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7783 return toBuffer(arr, hashSize, bigEndian);
7785 exports.hash = hash;
7786 }).call(this,require("buffer").Buffer)
7787 },{"buffer":
7}],
34:[function(require,module,exports){
7790 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7791 * Digest Algorithm, as defined in RFC
1321.
7792 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
7793 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7794 * Distributed under the BSD License
7795 * See http://pajhome.org.uk/crypt/md5 for more info.
7798 var helpers = require('./helpers');
7801 * Calculate the MD5 of an array of little-endian words, and a bit length
7803 function core_md5(x, len)
7805 /* append padding */
7806 x[len
>> 5] |=
0x80 << ((len) %
32);
7807 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
7811 var c = -
1732584194;
7814 for(var i =
0; i < x.length; i +=
16)
7821 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
7822 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
7823 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
7824 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
7825 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
7826 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
7827 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
7828 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
7829 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
7830 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
7831 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
7832 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
7833 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
7834 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
7835 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
7836 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
7838 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
7839 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
7840 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
7841 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
7842 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
7843 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
7844 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
7845 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
7846 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
7847 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
7848 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
7849 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
7850 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
7851 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
7852 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
7853 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
7855 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
7856 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
7857 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
7858 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
7859 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
7860 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
7861 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
7862 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
7863 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
7864 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
7865 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
7866 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
7867 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
7868 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
7869 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
7870 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
7872 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
7873 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
7874 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
7875 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
7876 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
7877 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
7878 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
7879 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
7880 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
7881 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
7882 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
7883 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
7884 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
7885 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
7886 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
7887 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
7889 a = safe_add(a, olda);
7890 b = safe_add(b, oldb);
7891 c = safe_add(c, oldc);
7892 d = safe_add(d, oldd);
7894 return Array(a, b, c, d);
7899 * These functions implement the four basic operations the algorithm uses.
7901 function md5_cmn(q, a, b, x, s, t)
7903 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7905 function md5_ff(a, b, c, d, x, s, t)
7907 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7909 function md5_gg(a, b, c, d, x, s, t)
7911 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7913 function md5_hh(a, b, c, d, x, s, t)
7915 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7917 function md5_ii(a, b, c, d, x, s, t)
7919 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7923 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
7924 * to work around bugs in some JS interpreters.
7926 function safe_add(x, y)
7928 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
7929 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
7930 return (msw <<
16) | (lsw &
0xFFFF);
7934 * Bitwise rotate a
32-bit number to the left.
7936 function bit_rol(num, cnt)
7938 return (num << cnt) | (num
>>> (
32 - cnt));
7941 module.exports = function md5(buf) {
7942 return helpers.hash(buf, core_md5,
16);
7944 },{"./helpers":
33}],
35:[function(require,module,exports){
7945 arguments[
4][
12][
0].apply(exports,arguments)
7946 },{"dup":
12}],
36:[function(require,module,exports){
7950 code.google.com/p/crypto-js
7951 (c)
2009-
2013 by Jeff Mott. All rights reserved.
7952 code.google.com/p/crypto-js/wiki/License
7955 (c)
2012 by Cédric Mesnil. All rights reserved.
7957 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7959 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7960 - 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.
7962 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.
7967 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
7968 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
7969 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
7970 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
7971 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
7975 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
7976 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
7977 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
7978 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
7979 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
7983 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
7984 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
7985 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
7986 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
7987 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
7991 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
7992 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
7993 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
7994 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
7995 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
7998 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
7999 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8001 function bytesToWords (bytes) {
8003 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8004 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8009 function wordsToBytes (words) {
8011 for (var b =
0; b < words.length *
32; b +=
8) {
8012 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8017 function processBlock (H, M, offset) {
8019 for (var i =
0; i <
16; i++) {
8020 var offset_i = offset + i
8021 var M_offset_i = M[offset_i]
8025 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8026 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8030 // Working variables
8031 var al, bl, cl, dl, el
8032 var ar, br, cr, dr, er
8042 for (i =
0; i <
80; i +=
1) {
8043 t = (al + M[offset + zl[i]]) |
0
8045 t += f1(bl, cl, dl) + hl[
0]
8046 } else if (i <
32) {
8047 t += f2(bl, cl, dl) + hl[
1]
8048 } else if (i <
48) {
8049 t += f3(bl, cl, dl) + hl[
2]
8050 } else if (i <
64) {
8051 t += f4(bl, cl, dl) + hl[
3]
8052 } else {// if (i
<80) {
8053 t += f5(bl, cl, dl) + hl[
4]
8064 t = (ar + M[offset + zr[i]]) |
0
8066 t += f5(br, cr, dr) + hr[
0]
8067 } else if (i <
32) {
8068 t += f4(br, cr, dr) + hr[
1]
8069 } else if (i <
48) {
8070 t += f3(br, cr, dr) + hr[
2]
8071 } else if (i <
64) {
8072 t += f2(br, cr, dr) + hr[
3]
8073 } else {// if (i
<80) {
8074 t += f1(br, cr, dr) + hr[
4]
8087 // intermediate hash value
8088 t = (H[
1] + cl + dr) |
0
8089 H[
1] = (H[
2] + dl + er) |
0
8090 H[
2] = (H[
3] + el + ar) |
0
8091 H[
3] = (H[
4] + al + br) |
0
8092 H[
4] = (H[
0] + bl + cr) |
0
8096 function f1 (x, y, z) {
8097 return ((x) ^ (y) ^ (z))
8100 function f2 (x, y, z) {
8101 return (((x) & (y)) | ((~x) & (z)))
8104 function f3 (x, y, z) {
8105 return (((x) | (~(y))) ^ (z))
8108 function f4 (x, y, z) {
8109 return (((x) & (z)) | ((y) & (~(z))))
8112 function f5 (x, y, z) {
8113 return ((x) ^ ((y) | (~(z))))
8116 function rotl (x, n) {
8117 return (x << n) | (x
>>> (
32 - n))
8120 function ripemd160 (message) {
8121 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8123 if (typeof message === 'string') {
8124 message = new Buffer(message, 'utf8')
8127 var m = bytesToWords(message)
8129 var nBitsLeft = message.length *
8
8130 var nBitsTotal = message.length *
8
8133 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8134 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8135 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8136 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8139 for (var i =
0; i < m.length; i +=
16) {
8140 processBlock(H, m, i)
8144 for (i =
0; i <
5; i++) {
8149 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8150 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8153 var digestbytes = wordsToBytes(H)
8154 return new Buffer(digestbytes)
8157 module.exports = ripemd160
8159 }).call(this,require(
"buffer").Buffer)
8160 },{
"buffer":
7}],
37:[function(require,module,exports){
8162 // prototype class for hash functions
8163 function Hash (blockSize, finalSize) {
8164 this._block = new Buffer(blockSize)
8165 this._finalSize = finalSize
8166 this._blockSize = blockSize
8171 Hash.prototype.update = function (data, enc) {
8172 if (typeof data === 'string') {
8174 data = new Buffer(data, enc)
8177 var l = this._len += data.length
8178 var s = this._s ||
0
8180 var buffer = this._block
8183 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8186 for (var i =
0; i < ch; i++) {
8187 buffer[(s % this._blockSize) + i] = data[i + f]
8193 if ((s % this._blockSize) ===
0) {
8194 this._update(buffer)
8202 Hash.prototype.digest = function (enc) {
8203 // Suppose the length of the message M, in bits, is l
8204 var l = this._len *
8
8206 // Append the bit
1 to the end of the message
8207 this._block[this._len % this._blockSize] =
0x80
8209 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8210 this._block.fill(
0, this._len % this._blockSize +
1)
8212 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8213 this._update(this._block)
8217 // to this append the block which is equal to the number l written in binary
8218 // TODO: handle case where l is
> Math.pow(
2,
29)
8219 this._block.writeInt32BE(l, this._blockSize -
4)
8221 var hash = this._update(this._block) || this._hash()
8223 return enc ? hash.toString(enc) : hash
8226 Hash.prototype._update = function () {
8227 throw new Error('_update must be implemented by subclass')
8230 module.exports = Hash
8232 }).call(this,require("buffer").Buffer)
8233 },{"buffer":
7}],
38:[function(require,module,exports){
8234 var exports = module.exports = function SHA (algorithm) {
8235 algorithm = algorithm.toLowerCase()
8237 var Algorithm = exports[algorithm]
8238 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8240 return new Algorithm()
8243 exports.sha = require('./sha')
8244 exports.sha1 = require('./sha1')
8245 exports.sha224 = require('./sha224')
8246 exports.sha256 = require('./sha256')
8247 exports.sha384 = require('./sha384')
8248 exports.sha512 = require('./sha512')
8250 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8253 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8255 * This source code is derived from sha1.js of the same repository.
8256 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8257 * operation was added.
8260 var inherits = require('inherits')
8261 var Hash = require('./hash')
8263 var W = new Array(
80)
8269 Hash.call(this,
64,
56)
8274 Sha.prototype.init = function () {
8275 this._a =
0x67452301 |
0
8276 this._b =
0xefcdab89 |
0
8277 this._c =
0x98badcfe |
0
8278 this._d =
0x10325476 |
0
8279 this._e =
0xc3d2e1f0 |
0
8285 * Bitwise rotate a
32-bit number to the left.
8287 function rol (num, cnt) {
8288 return (num << cnt) | (num
>>> (
32 - cnt))
8291 Sha.prototype._update = function (M) {
8303 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8304 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8306 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8307 function loop (w, f) {
8310 var t = rol(a,
5) + f + e + w + k
8321 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8322 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8324 while (j <
40) loop(calcW(), b ^ c ^ d)
8326 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8328 while (j <
80) loop(calcW(), b ^ c ^ d)
8330 this._a = (a + this._a) |
0
8331 this._b = (b + this._b) |
0
8332 this._c = (c + this._c) |
0
8333 this._d = (d + this._d) |
0
8334 this._e = (e + this._e) |
0
8337 Sha.prototype._hash = function () {
8338 var H = new Buffer(
20)
8340 H.writeInt32BE(this._a |
0,
0)
8341 H.writeInt32BE(this._b |
0,
4)
8342 H.writeInt32BE(this._c |
0,
8)
8343 H.writeInt32BE(this._d |
0,
12)
8344 H.writeInt32BE(this._e |
0,
16)
8349 module.exports = Sha
8352 }).call(this,require("buffer").Buffer)
8353 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8356 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8358 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8359 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8360 * Distributed under the BSD License
8361 * See http://pajhome.org.uk/crypt/md5 for details.
8364 var inherits = require('inherits')
8365 var Hash = require('./hash')
8367 var W = new Array(
80)
8373 Hash.call(this,
64,
56)
8376 inherits(Sha1, Hash)
8378 Sha1.prototype.init = function () {
8379 this._a =
0x67452301 |
0
8380 this._b =
0xefcdab89 |
0
8381 this._c =
0x98badcfe |
0
8382 this._d =
0x10325476 |
0
8383 this._e =
0xc3d2e1f0 |
0
8389 * Bitwise rotate a
32-bit number to the left.
8391 function rol (num, cnt) {
8392 return (num << cnt) | (num
>>> (
32 - cnt))
8395 Sha1.prototype._update = function (M) {
8406 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8407 function loop (w, f) {
8410 var t = rol(a,
5) + f + e + w + k
8421 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8422 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8424 while (j <
40) loop(calcW(), b ^ c ^ d)
8426 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8428 while (j <
80) loop(calcW(), b ^ c ^ d)
8430 this._a = (a + this._a) |
0
8431 this._b = (b + this._b) |
0
8432 this._c = (c + this._c) |
0
8433 this._d = (d + this._d) |
0
8434 this._e = (e + this._e) |
0
8437 Sha1.prototype._hash = function () {
8438 var H = new Buffer(
20)
8440 H.writeInt32BE(this._a |
0,
0)
8441 H.writeInt32BE(this._b |
0,
4)
8442 H.writeInt32BE(this._c |
0,
8)
8443 H.writeInt32BE(this._d |
0,
12)
8444 H.writeInt32BE(this._e |
0,
16)
8449 module.exports = Sha1
8451 }).call(this,require("buffer").Buffer)
8452 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8455 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8457 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8458 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8462 var inherits = require('inherits')
8463 var Sha256 = require('./sha256')
8464 var Hash = require('./hash')
8466 var W = new Array(
64)
8468 function Sha224 () {
8471 this._w = W // new Array(
64)
8473 Hash.call(this,
64,
56)
8476 inherits(Sha224, Sha256)
8478 Sha224.prototype.init = function () {
8479 this._a =
0xc1059ed8 |
0
8480 this._b =
0x367cd507 |
0
8481 this._c =
0x3070dd17 |
0
8482 this._d =
0xf70e5939 |
0
8483 this._e =
0xffc00b31 |
0
8484 this._f =
0x68581511 |
0
8485 this._g =
0x64f98fa7 |
0
8486 this._h =
0xbefa4fa4 |
0
8491 Sha224.prototype._hash = function () {
8492 var H = new Buffer(
28)
8494 H.writeInt32BE(this._a,
0)
8495 H.writeInt32BE(this._b,
4)
8496 H.writeInt32BE(this._c,
8)
8497 H.writeInt32BE(this._d,
12)
8498 H.writeInt32BE(this._e,
16)
8499 H.writeInt32BE(this._f,
20)
8500 H.writeInt32BE(this._g,
24)
8505 module.exports = Sha224
8507 }).call(this,require("buffer").Buffer)
8508 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8511 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8513 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8514 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8518 var inherits = require('inherits')
8519 var Hash = require('./hash')
8522 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8523 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8524 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8525 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8526 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8527 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8528 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8529 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8530 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8531 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8532 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8533 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8534 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8535 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8536 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8537 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8540 var W = new Array(
64)
8542 function Sha256 () {
8545 this._w = W // new Array(
64)
8547 Hash.call(this,
64,
56)
8550 inherits(Sha256, Hash)
8552 Sha256.prototype.init = function () {
8553 this._a =
0x6a09e667 |
0
8554 this._b =
0xbb67ae85 |
0
8555 this._c =
0x3c6ef372 |
0
8556 this._d =
0xa54ff53a |
0
8557 this._e =
0x510e527f |
0
8558 this._f =
0x9b05688c |
0
8559 this._g =
0x1f83d9ab |
0
8560 this._h =
0x5be0cd19 |
0
8566 return (X
>>> n) | (X << (
32 - n))
8573 function Ch (x, y, z) {
8574 return ((x & y) ^ ((~x) & z))
8577 function Maj (x, y, z) {
8578 return ((x & y) ^ (x & z) ^ (y & z))
8581 function Sigma0256 (x) {
8582 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8585 function Sigma1256 (x) {
8586 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8589 function Gamma0256 (x) {
8590 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8593 function Gamma1256 (x) {
8594 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8597 Sha256.prototype._update = function (M) {
8611 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8615 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8616 var T2 = Sigma0256(a) + Maj(a, b, c)
8630 while (j <
16) loop(M.readInt32BE(j *
4))
8631 while (j <
64) loop(calcW())
8633 this._a = (a + this._a) |
0
8634 this._b = (b + this._b) |
0
8635 this._c = (c + this._c) |
0
8636 this._d = (d + this._d) |
0
8637 this._e = (e + this._e) |
0
8638 this._f = (f + this._f) |
0
8639 this._g = (g + this._g) |
0
8640 this._h = (h + this._h) |
0
8643 Sha256.prototype._hash = function () {
8644 var H = new Buffer(
32)
8646 H.writeInt32BE(this._a,
0)
8647 H.writeInt32BE(this._b,
4)
8648 H.writeInt32BE(this._c,
8)
8649 H.writeInt32BE(this._d,
12)
8650 H.writeInt32BE(this._e,
16)
8651 H.writeInt32BE(this._f,
20)
8652 H.writeInt32BE(this._g,
24)
8653 H.writeInt32BE(this._h,
28)
8658 module.exports = Sha256
8660 }).call(this,require("buffer").Buffer)
8661 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8663 var inherits = require('inherits')
8664 var SHA512 = require('./sha512')
8665 var Hash = require('./hash')
8667 var W = new Array(
160)
8669 function Sha384 () {
8673 Hash.call(this,
128,
112)
8676 inherits(Sha384, SHA512)
8678 Sha384.prototype.init = function () {
8679 this._a =
0xcbbb9d5d |
0
8680 this._b =
0x629a292a |
0
8681 this._c =
0x9159015a |
0
8682 this._d =
0x152fecd8 |
0
8683 this._e =
0x67332667 |
0
8684 this._f =
0x8eb44a87 |
0
8685 this._g =
0xdb0c2e0d |
0
8686 this._h =
0x47b5481d |
0
8688 this._al =
0xc1059ed8 |
0
8689 this._bl =
0x367cd507 |
0
8690 this._cl =
0x3070dd17 |
0
8691 this._dl =
0xf70e5939 |
0
8692 this._el =
0xffc00b31 |
0
8693 this._fl =
0x68581511 |
0
8694 this._gl =
0x64f98fa7 |
0
8695 this._hl =
0xbefa4fa4 |
0
8700 Sha384.prototype._hash = function () {
8701 var H = new Buffer(
48)
8703 function writeInt64BE (h, l, offset) {
8704 H.writeInt32BE(h, offset)
8705 H.writeInt32BE(l, offset +
4)
8708 writeInt64BE(this._a, this._al,
0)
8709 writeInt64BE(this._b, this._bl,
8)
8710 writeInt64BE(this._c, this._cl,
16)
8711 writeInt64BE(this._d, this._dl,
24)
8712 writeInt64BE(this._e, this._el,
32)
8713 writeInt64BE(this._f, this._fl,
40)
8718 module.exports = Sha384
8720 }).call(this,require("buffer").Buffer)
8721 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8723 var inherits = require('inherits')
8724 var Hash = require('./hash')
8727 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
8728 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
8729 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
8730 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
8731 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
8732 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
8733 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
8734 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
8735 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
8736 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
8737 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
8738 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
8739 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
8740 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
8741 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
8742 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
8743 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
8744 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
8745 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
8746 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
8747 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
8748 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
8749 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
8750 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
8751 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
8752 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
8753 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
8754 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
8755 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
8756 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
8757 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
8758 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
8759 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
8760 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
8761 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
8762 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
8763 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
8764 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
8765 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
8766 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
8769 var W = new Array(
160)
8771 function Sha512 () {
8775 Hash.call(this,
128,
112)
8778 inherits(Sha512, Hash)
8780 Sha512.prototype.init = function () {
8781 this._a =
0x6a09e667 |
0
8782 this._b =
0xbb67ae85 |
0
8783 this._c =
0x3c6ef372 |
0
8784 this._d =
0xa54ff53a |
0
8785 this._e =
0x510e527f |
0
8786 this._f =
0x9b05688c |
0
8787 this._g =
0x1f83d9ab |
0
8788 this._h =
0x5be0cd19 |
0
8790 this._al =
0xf3bcc908 |
0
8791 this._bl =
0x84caa73b |
0
8792 this._cl =
0xfe94f82b |
0
8793 this._dl =
0x5f1d36f1 |
0
8794 this._el =
0xade682d1 |
0
8795 this._fl =
0x2b3e6c1f |
0
8796 this._gl =
0xfb41bd6b |
0
8797 this._hl =
0x137e2179 |
0
8802 function S (X, Xl, n) {
8803 return (X
>>> n) | (Xl << (
32 - n))
8806 function Ch (x, y, z) {
8807 return ((x & y) ^ ((~x) & z))
8810 function Maj (x, y, z) {
8811 return ((x & y) ^ (x & z) ^ (y & z))
8814 Sha512.prototype._update = function (M) {
8826 var al = this._al |
0
8827 var bl = this._bl |
0
8828 var cl = this._cl |
0
8829 var dl = this._dl |
0
8830 var el = this._el |
0
8831 var fl = this._fl |
0
8832 var gl = this._gl |
0
8833 var hl = this._hl |
0
8838 var x = W[j -
15 *
2]
8839 var xl = W[j -
15 *
2 +
1]
8840 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
8841 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
8844 xl = W[j -
2 *
2 +
1]
8845 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
8846 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
8848 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
8849 var Wi7 = W[j -
7 *
2]
8850 var Wi7l = W[j -
7 *
2 +
1]
8852 var Wi16 = W[j -
16 *
2]
8853 var Wi16l = W[j -
16 *
2 +
1]
8855 Wil = gamma0l + Wi7l
8856 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
8858 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
8860 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
8867 var maj = Maj(a, b, c)
8868 var majl = Maj(al, bl, cl)
8870 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
8871 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
8872 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
8873 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
8875 // t1 = h + sigma1 + ch + K[i] + W[i]
8879 var ch = Ch(e, f, g)
8880 var chl = Ch(el, fl, gl)
8882 var t1l = hl + sigma1l
8883 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
8885 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
8887 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
8889 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
8891 // t2 = sigma0 + maj
8892 var t2l = sigma0l + majl
8893 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
8902 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
8909 al = (t1l + t2l) |
0
8910 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
8917 Wi = M.readInt32BE(j *
4)
8918 Wil = M.readInt32BE(j *
4 +
4)
8928 this._al = (this._al + al) |
0
8929 this._bl = (this._bl + bl) |
0
8930 this._cl = (this._cl + cl) |
0
8931 this._dl = (this._dl + dl) |
0
8932 this._el = (this._el + el) |
0
8933 this._fl = (this._fl + fl) |
0
8934 this._gl = (this._gl + gl) |
0
8935 this._hl = (this._hl + hl) |
0
8937 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
8938 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
8939 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
8940 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
8941 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
8942 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
8943 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
8944 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
8947 Sha512.prototype._hash = function () {
8948 var H = new Buffer(
64)
8950 function writeInt64BE (h, l, offset) {
8951 H.writeInt32BE(h, offset)
8952 H.writeInt32BE(l, offset +
4)
8955 writeInt64BE(this._a, this._al,
0)
8956 writeInt64BE(this._b, this._bl,
8)
8957 writeInt64BE(this._c, this._cl,
16)
8958 writeInt64BE(this._d, this._dl,
24)
8959 writeInt64BE(this._e, this._el,
32)
8960 writeInt64BE(this._f, this._fl,
40)
8961 writeInt64BE(this._g, this._gl,
48)
8962 writeInt64BE(this._h, this._hl,
56)
8967 module.exports = Sha512
8969 }).call(this,require(
"buffer").Buffer)
8970 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
8973 var createHash = require('create-hash/browser');
8974 var inherits = require('inherits')
8976 var Transform = require('stream').Transform
8978 var ZEROS = new Buffer(
128)
8981 function Hmac(alg, key) {
8982 Transform.call(this)
8984 if (typeof key === 'string') {
8985 key = new Buffer(key)
8988 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
8993 if (key.length
> blocksize) {
8994 key = createHash(alg).update(key).digest()
8996 } else if (key.length < blocksize) {
8997 key = Buffer.concat([key, ZEROS], blocksize)
9000 var ipad = this._ipad = new Buffer(blocksize)
9001 var opad = this._opad = new Buffer(blocksize)
9003 for (var i =
0; i < blocksize; i++) {
9004 ipad[i] = key[i] ^
0x36
9005 opad[i] = key[i] ^
0x5C
9008 this._hash = createHash(alg).update(ipad)
9011 inherits(Hmac, Transform)
9013 Hmac.prototype.update = function (data, enc) {
9014 this._hash.update(data, enc)
9019 Hmac.prototype._transform = function (data, _, next) {
9020 this._hash.update(data)
9025 Hmac.prototype._flush = function (next) {
9026 this.push(this.digest())
9031 Hmac.prototype.digest = function (enc) {
9032 var h = this._hash.digest()
9034 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9037 module.exports = function createHmac(alg, key) {
9038 return new Hmac(alg, key)
9041 }).call(this,require("buffer").Buffer)
9042 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9043 arguments[
4][
12][
0].apply(exports,arguments)
9044 },{"dup":
12}],
47:[function(require,module,exports){
9045 var assert = require('assert')
9046 var BigInteger = require('bigi')
9048 var Point = require('./point')
9050 function Curve(p, a, b, Gx, Gy, n, h) {
9054 this.G = Point.fromAffine(this, Gx, Gy)
9058 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9061 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9064 Curve.prototype.pointFromX = function(isOdd, x) {
9065 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9066 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9069 if (beta.isEven() ^ !isOdd) {
9070 y = this.p.subtract(y) // -y % p
9073 return Point.fromAffine(this, x, y)
9076 Curve.prototype.isInfinity = function(Q) {
9077 if (Q === this.infinity) return true
9079 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9082 Curve.prototype.isOnCurve = function(Q) {
9083 if (this.isInfinity(Q)) return true
9091 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9092 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9093 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9095 // and check that y^
2 = x^
3 + ax + b (mod p)
9096 var lhs = y.square().mod(p)
9097 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9098 return lhs.equals(rhs)
9102 * Validate an elliptic curve point.
9104 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9106 Curve.prototype.validate = function(Q) {
9108 assert(!this.isInfinity(Q), 'Point is at infinity')
9109 assert(this.isOnCurve(Q), 'Point is not on the curve')
9111 // Check nQ = O (where Q is a scalar multiple of G)
9112 var nQ = Q.multiply(this.n)
9113 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9118 module.exports = Curve
9120 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9123 "p": "fffffffdffffffffffffffffffffffff",
9124 "a": "fffffffdfffffffffffffffffffffffc",
9125 "b": "e87579c11079f43dd824993c2cee5ed3",
9126 "n": "fffffffe0000000075a30d1b9038a115",
9128 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9129 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9132 "p": "fffffffffffffffffffffffffffffffeffffac73",
9135 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9137 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9138 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9141 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9142 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9143 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9144 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9146 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9147 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9150 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9153 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9155 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9156 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9159 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9160 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9161 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9162 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9164 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9165 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9168 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9171 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9173 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9174 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9177 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9178 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9179 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9180 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9182 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9183 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9187 },{}],
49:[function(require,module,exports){
9188 var Point = require('./point')
9189 var Curve = require('./curve')
9191 var getCurveByName = require('./names')
9196 getCurveByName: getCurveByName
9199 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9200 var BigInteger = require('bigi')
9202 var curves = require('./curves')
9203 var Curve = require('./curve')
9205 function getCurveByName(name) {
9206 var curve = curves[name]
9207 if (!curve) return null
9209 var p = new BigInteger(curve.p,
16)
9210 var a = new BigInteger(curve.a,
16)
9211 var b = new BigInteger(curve.b,
16)
9212 var n = new BigInteger(curve.n,
16)
9213 var h = new BigInteger(curve.h,
16)
9214 var Gx = new BigInteger(curve.Gx,
16)
9215 var Gy = new BigInteger(curve.Gy,
16)
9217 return new Curve(p, a, b, Gx, Gy, n, h)
9220 module.exports = getCurveByName
9222 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9224 var assert = require('assert')
9225 var BigInteger = require('bigi')
9227 var THREE = BigInteger.valueOf(
3)
9229 function Point(curve, x, y, z) {
9230 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9238 this.compressed = true
9241 Object.defineProperty(Point.prototype, 'zInv', {
9243 if (this._zInv === null) {
9244 this._zInv = this.z.modInverse(this.curve.p)
9251 Object.defineProperty(Point.prototype, 'affineX', {
9253 return this.x.multiply(this.zInv).mod(this.curve.p)
9257 Object.defineProperty(Point.prototype, 'affineY', {
9259 return this.y.multiply(this.zInv).mod(this.curve.p)
9263 Point.fromAffine = function(curve, x, y) {
9264 return new Point(curve, x, y, BigInteger.ONE)
9267 Point.prototype.equals = function(other) {
9268 if (other === this) return true
9269 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9270 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9272 // u = Y2 * Z1 - Y1 * Z2
9273 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9275 if (u.signum() !==
0) return false
9277 // v = X2 * Z1 - X1 * Z2
9278 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9280 return v.signum() ===
0
9283 Point.prototype.negate = function() {
9284 var y = this.curve.p.subtract(this.y)
9286 return new Point(this.curve, this.x, y, this.z)
9289 Point.prototype.add = function(b) {
9290 if (this.curve.isInfinity(this)) return b
9291 if (this.curve.isInfinity(b)) return this
9298 // u = Y2 * Z1 - Y1 * Z2
9299 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9300 // v = X2 * Z1 - X1 * Z2
9301 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9303 if (v.signum() ===
0) {
9304 if (u.signum() ===
0) {
9305 return this.twice() // this == b, so double
9308 return this.curve.infinity // this = -b, so infinity
9312 var v3 = v2.multiply(v)
9313 var x1v2 = x1.multiply(v2)
9314 var zu2 = u.square().multiply(this.z)
9316 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9317 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9318 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9319 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)
9320 // z3 = v^
3 * z1 * z2
9321 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9323 return new Point(this.curve, x3, y3, z3)
9326 Point.prototype.twice = function() {
9327 if (this.curve.isInfinity(this)) return this
9328 if (this.y.signum() ===
0) return this.curve.infinity
9333 var y1z1 = y1.multiply(this.z)
9334 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9335 var a = this.curve.a
9337 // w =
3 * x1^
2 + a * z1^
2
9338 var w = x1.square().multiply(THREE)
9340 if (a.signum() !==
0) {
9341 w = w.add(this.z.square().multiply(a))
9344 w = w.mod(this.curve.p)
9345 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9346 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9347 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9348 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9349 // z3 =
8 * (y1 * z1)^
3
9350 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9352 return new Point(this.curve, x3, y3, z3)
9355 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9356 // TODO: modularize the multiplication algorithm
9357 Point.prototype.multiply = function(k) {
9358 if (this.curve.isInfinity(this)) return this
9359 if (k.signum() ===
0) return this.curve.infinity
9362 var h = e.multiply(THREE)
9364 var neg = this.negate()
9367 for (var i = h.bitLength() -
2; i
> 0; --i) {
9370 var hBit = h.testBit(i)
9371 var eBit = e.testBit(i)
9374 R = R.add(hBit ? this : neg)
9381 // Compute this*j + x*k (simultaneous multiplication)
9382 Point.prototype.multiplyTwo = function(j, x, k) {
9385 if (j.bitLength()
> k.bitLength())
9386 i = j.bitLength() -
1
9388 i = k.bitLength() -
1
9390 var R = this.curve.infinity
9391 var both = this.add(x)
9396 var jBit = j.testBit(i)
9397 var kBit = k.testBit(i)
9418 Point.prototype.getEncoded = function(compressed) {
9419 if (compressed == undefined) compressed = this.compressed
9420 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9422 var x = this.affineX
9423 var y = this.affineY
9427 // Determine size of q in bytes
9428 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9432 buffer = new Buffer(
1 + byteLength)
9433 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9437 buffer = new Buffer(
1 + byteLength + byteLength)
9438 buffer.writeUInt8(
0x04,
0)
9440 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9443 x.toBuffer(byteLength).copy(buffer,
1)
9448 Point.decodeFrom = function(curve, buffer) {
9449 var type = buffer.readUInt8(
0)
9450 var compressed = (type !==
4)
9452 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9453 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9457 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9458 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9460 var isOdd = (type ===
0x03)
9461 Q = curve.pointFromX(isOdd, x)
9464 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9466 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9467 Q = Point.fromAffine(curve, x, y)
9470 Q.compressed = compressed
9474 Point.prototype.toString = function () {
9475 if (this.curve.isInfinity(this)) return '(INFINITY)'
9477 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9480 module.exports = Point
9482 }).call(this,require("buffer").Buffer)
9483 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9484 (function (process,global,Buffer){
9487 var crypto = global.crypto || global.msCrypto
9488 if(crypto && crypto.getRandomValues) {
9489 module.exports = randomBytes;
9491 module.exports = oldBrowser;
9493 function randomBytes(size, cb) {
9494 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9495 /* This will not work in older browsers.
9496 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9499 crypto.getRandomValues(bytes);
9500 if (typeof cb === 'function') {
9501 return process.nextTick(function () {
9507 function oldBrowser() {
9509 'secure random number generation not supported by this browser\n'+
9510 'use chrome, FireFox or Internet Explorer
11'
9514 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9515 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9519 function getFunctionName(fn) {
9520 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9523 function getTypeTypeName(type) {
9524 if (nativeTypes.Function(type)) {
9525 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9527 if (nativeTypes.Object(type)) return JSON.stringify(type);
9532 function getValueTypeName(value) {
9533 if (nativeTypes.Null(value)) return '';
9535 return getFunctionName(value.constructor);
9538 function tfErrorString(type, value) {
9539 var typeTypeName = getTypeTypeName(type);
9540 var valueTypeName = getValueTypeName(value);
9542 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9545 function tfPropertyErrorString(type, name, value) {
9546 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9550 Array: (function (_Array) {
9551 function Array(_x) {
9552 return _Array.apply(this, arguments);
9555 Array.toString = function () {
9556 return _Array.toString();
9560 })(function (value) {
9561 return value !== null && value !== undefined && value.constructor === Array;
9563 Boolean: function Boolean(value) {
9564 return typeof value === 'boolean';
9566 Buffer: (function (_Buffer) {
9567 function Buffer(_x2) {
9568 return _Buffer.apply(this, arguments);
9571 Buffer.toString = function () {
9572 return _Buffer.toString();
9576 })(function (value) {
9577 return Buffer.isBuffer(value);
9579 Function: function Function(value) {
9580 return typeof value === 'function';
9582 Null: function Null(value) {
9583 return value === undefined || value === null;
9585 Number: function Number(value) {
9586 return typeof value === 'number';
9588 Object: function Object(value) {
9589 return typeof value === 'object';
9591 String: function String(value) {
9592 return typeof value === 'string';
9599 function tJSON(type) {
9600 return type && type.toJSON ? type.toJSON() : type;
9603 function sJSON(type) {
9604 var json = tJSON(type);
9605 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9609 arrayOf: function arrayOf(type) {
9610 function arrayOf(value, strict) {
9612 return nativeTypes.Array(value) && value.every(function (x) {
9613 return typeforce(type, x, strict);
9619 arrayOf.toJSON = function () {
9620 return [tJSON(type)];
9626 maybe: function maybe(type) {
9627 function maybe(value, strict) {
9628 return nativeTypes.Null(value) || typeforce(type, value, strict);
9630 maybe.toJSON = function () {
9631 return '?' + sJSON(type);
9637 object: function object(type) {
9638 function object(value, strict) {
9639 typeforce(nativeTypes.Object, value, strict);
9641 var propertyName, propertyType, propertyValue;
9644 for (propertyName in type) {
9645 propertyType = type[propertyName];
9646 propertyValue = value[propertyName];
9648 typeforce(propertyType, propertyValue, strict);
9651 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9655 for (propertyName in value) {
9656 if (type[propertyName]) continue;
9658 throw new TypeError('Unexpected property "' + propertyName + '"');
9664 object.toJSON = function () {
9671 oneOf: function oneOf() {
9672 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9673 types[_key] = arguments[_key];
9676 function oneOf(value, strict) {
9677 return types.some(function (type) {
9679 return typeforce(type, value, strict);
9685 oneOf.toJSON = function () {
9686 return types.map(sJSON).join('|');
9692 quacksLike: function quacksLike(type) {
9693 function quacksLike(value, strict) {
9694 return type === getValueTypeName(value);
9696 quacksLike.toJSON = function () {
9703 tuple: function tuple() {
9704 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9705 types[_key2] = arguments[_key2];
9708 function tuple(value, strict) {
9709 return types.every(function (type, i) {
9710 return typeforce(type, value[i], strict);
9713 tuple.toJSON = function () {
9714 return '(' + types.map(sJSON).join(', ') + ')';
9720 value: function value(expected) {
9721 function value(actual) {
9722 return actual === expected;
9724 value.toJSON = function () {
9732 function compile(type) {
9733 if (nativeTypes.String(type)) {
9734 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
9736 return nativeTypes[type] || otherTypes.quacksLike(type);
9737 } else if (type && nativeTypes.Object(type)) {
9738 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
9742 for (var propertyName in type) {
9743 compiled[propertyName] = compile(type[propertyName]);
9746 return otherTypes.object(compiled);
9747 } else if (nativeTypes.Function(type)) {
9751 return otherTypes.value(type);
9754 function typeforce(_x3, _x4, _x5) {
9757 _function: while (_again) {
9763 if (nativeTypes.Function(type)) {
9764 if (type(value, strict)) return true;
9766 throw new TypeError(tfErrorString(type, value));
9770 _x3 = compile(type);
9778 // assign all types to typeforce function
9780 Object.keys(nativeTypes).forEach(function (typeName) {
9781 var nativeType = nativeTypes[typeName];
9782 nativeType.toJSON = function () {
9786 typeforce[typeName] = nativeType;
9789 for (typeName in otherTypes) {
9790 typeforce[typeName] = otherTypes[typeName];
9793 module.exports = typeforce;
9794 module.exports.compile = compile;
9795 }).call(this,require("buffer").Buffer)
9796 },{"buffer":
7}],
54:[function(require,module,exports){
9798 var assert = require('assert')
9799 var base58check = require('bs58check')
9800 var typeForce = require('typeforce')
9801 var networks = require('./networks')
9802 var scripts = require('./scripts')
9804 function findScriptTypeByVersion (version) {
9805 for (var networkName in networks) {
9806 var network = networks[networkName]
9808 if (version === network.pubKeyHash) return 'pubkeyhash'
9809 if (version === network.scriptHash) return 'scripthash'
9813 function Address (hash, version) {
9814 typeForce('Buffer', hash)
9816 assert.strictEqual(hash.length,
20, 'Invalid hash length')
9817 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
9820 this.version = version
9823 Address.fromBase58Check = function (string) {
9824 var payload = base58check.decode(string)
9825 var version = payload.readUInt8(
0)
9826 var hash = payload.slice(
1)
9828 return new Address(hash, version)
9831 Address.fromOutputScript = function (script, network) {
9832 network = network || networks.bitcoin
9834 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
9835 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
9837 assert(false, script.toASM() + ' has no matching Address')
9840 Address.prototype.toBase58Check = function () {
9841 var payload = new Buffer(
21)
9842 payload.writeUInt8(this.version,
0)
9843 this.hash.copy(payload,
1)
9845 return base58check.encode(payload)
9848 Address.prototype.toOutputScript = function () {
9849 var scriptType = findScriptTypeByVersion(this.version)
9851 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9852 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9854 assert(false, this.toString() + ' has no matching Script')
9857 Address.prototype.toString = Address.prototype.toBase58Check
9859 module.exports = Address
9861 }).call(this,require("buffer").Buffer)
9862 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
9863 var bs58check = require('bs58check')
9865 function decode () {
9866 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9868 return bs58check.decode.apply(undefined, arguments)
9871 function encode () {
9872 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9874 return bs58check.encode.apply(undefined, arguments)
9882 },{"bs58check":
31}],
56:[function(require,module,exports){
9884 var assert = require('assert')
9885 var bufferutils = require('./bufferutils')
9886 var crypto = require('./crypto')
9888 var Transaction = require('./transaction')
9892 this.prevHash = null
9893 this.merkleRoot = null
9899 Block.fromBuffer = function (buffer) {
9900 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
9903 function readSlice (n) {
9905 return buffer.slice(offset - n, offset)
9908 function readUInt32 () {
9909 var i = buffer.readUInt32LE(offset)
9914 var block = new Block()
9915 block.version = readUInt32()
9916 block.prevHash = readSlice(
32)
9917 block.merkleRoot = readSlice(
32)
9918 block.timestamp = readUInt32()
9919 block.bits = readUInt32()
9920 block.nonce = readUInt32()
9922 if (buffer.length ===
80) return block
9924 function readVarInt () {
9925 var vi = bufferutils.readVarInt(buffer, offset)
9930 // FIXME: poor performance
9931 function readTransaction () {
9932 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9934 offset += tx.toBuffer().length
9938 var nTransactions = readVarInt()
9939 block.transactions = []
9941 for (var i =
0; i < nTransactions; ++i) {
9942 var tx = readTransaction()
9943 block.transactions.push(tx)
9949 Block.fromHex = function (hex) {
9950 return Block.fromBuffer(new Buffer(hex, 'hex'))
9953 Block.prototype.getHash = function () {
9954 return crypto.hash256(this.toBuffer(true))
9957 Block.prototype.getId = function () {
9958 return bufferutils.reverse(this.getHash()).toString('hex')
9961 Block.prototype.getUTCDate = function () {
9962 var date = new Date(
0) // epoch
9963 date.setUTCSeconds(this.timestamp)
9968 Block.prototype.toBuffer = function (headersOnly) {
9969 var buffer = new Buffer(
80)
9972 function writeSlice (slice) {
9973 slice.copy(buffer, offset)
9974 offset += slice.length
9977 function writeUInt32 (i) {
9978 buffer.writeUInt32LE(i, offset)
9982 writeUInt32(this.version)
9983 writeSlice(this.prevHash)
9984 writeSlice(this.merkleRoot)
9985 writeUInt32(this.timestamp)
9986 writeUInt32(this.bits)
9987 writeUInt32(this.nonce)
9989 if (headersOnly || !this.transactions) return buffer
9991 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
9992 var txBuffers = this.transactions.map(function (tx) {
9993 return tx.toBuffer()
9996 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
9999 Block.prototype.toHex = function (headersOnly) {
10000 return this.toBuffer(headersOnly).toString('hex')
10003 module.exports = Block
10005 }).call(this,require("buffer").Buffer)
10006 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10007 (function (Buffer){
10008 var assert = require('assert')
10009 var opcodes = require('./opcodes')
10011 // https://github.com/feross/buffer/blob/master/index.js#L1127
10012 function verifuint (value, max) {
10013 assert(typeof value === 'number', 'cannot write a non-number as a number')
10014 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10015 assert(value <= max, 'value is larger than maximum value for type')
10016 assert(Math.floor(value) === value, 'value has a fractional component')
10019 function pushDataSize (i) {
10020 return i < opcodes.OP_PUSHDATA1 ?
1
10026 function readPushDataInt (buffer, offset) {
10027 var opcode = buffer.readUInt8(offset)
10031 if (opcode < opcodes.OP_PUSHDATA1) {
10036 } else if (opcode === opcodes.OP_PUSHDATA1) {
10037 if (offset +
2 > buffer.length) return null
10038 number = buffer.readUInt8(offset +
1)
10042 } else if (opcode === opcodes.OP_PUSHDATA2) {
10043 if (offset +
3 > buffer.length) return null
10044 number = buffer.readUInt16LE(offset +
1)
10049 if (offset +
5 > buffer.length) return null
10050 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10052 number = buffer.readUInt32LE(offset +
1)
10063 function readUInt64LE (buffer, offset) {
10064 var a = buffer.readUInt32LE(offset)
10065 var b = buffer.readUInt32LE(offset +
4)
10068 verifuint(b + a,
0x001fffffffffffff)
10073 function readVarInt (buffer, offset) {
10074 var t = buffer.readUInt8(offset)
10083 } else if (t <
254) {
10084 number = buffer.readUInt16LE(offset +
1)
10088 } else if (t <
255) {
10089 number = buffer.readUInt32LE(offset +
1)
10094 number = readUInt64LE(buffer, offset +
1)
10104 function writePushDataInt (buffer, number, offset) {
10105 var size = pushDataSize(number)
10109 buffer.writeUInt8(number, offset)
10112 } else if (size ===
2) {
10113 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10114 buffer.writeUInt8(number, offset +
1)
10117 } else if (size ===
3) {
10118 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10119 buffer.writeUInt16LE(number, offset +
1)
10123 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10124 buffer.writeUInt32LE(number, offset +
1)
10130 function writeUInt64LE (buffer, value, offset) {
10131 verifuint(value,
0x001fffffffffffff)
10133 buffer.writeInt32LE(value & -
1, offset)
10134 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10137 function varIntSize (i) {
10140 : i <
0x100000000 ?
5
10144 function writeVarInt (buffer, number, offset) {
10145 var size = varIntSize(number)
10149 buffer.writeUInt8(number, offset)
10152 } else if (size ===
3) {
10153 buffer.writeUInt8(
253, offset)
10154 buffer.writeUInt16LE(number, offset +
1)
10157 } else if (size ===
5) {
10158 buffer.writeUInt8(
254, offset)
10159 buffer.writeUInt32LE(number, offset +
1)
10163 buffer.writeUInt8(
255, offset)
10164 writeUInt64LE(buffer, number, offset +
1)
10170 function varIntBuffer (i) {
10171 var size = varIntSize(i)
10172 var buffer = new Buffer(size)
10173 writeVarInt(buffer, i,
0)
10178 function reverse (buffer) {
10179 var buffer2 = new Buffer(buffer)
10180 Array.prototype.reverse.call(buffer2)
10185 pushDataSize: pushDataSize,
10186 readPushDataInt: readPushDataInt,
10187 readUInt64LE: readUInt64LE,
10188 readVarInt: readVarInt,
10190 varIntBuffer: varIntBuffer,
10191 varIntSize: varIntSize,
10192 writePushDataInt: writePushDataInt,
10193 writeUInt64LE: writeUInt64LE,
10194 writeVarInt: writeVarInt
10197 }).call(this,require("buffer").Buffer)
10198 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10199 var createHash = require('create-hash')
10201 function hash160 (buffer) {
10202 return ripemd160(sha256(buffer))
10205 function hash256 (buffer) {
10206 return sha256(sha256(buffer))
10209 function ripemd160 (buffer) {
10210 return createHash('rmd160').update(buffer).digest()
10213 function sha1 (buffer) {
10214 return createHash('sha1').update(buffer).digest()
10217 function sha256 (buffer) {
10218 return createHash('sha256').update(buffer).digest()
10221 // FIXME: Name not consistent with others
10222 var createHmac = require('create-hmac')
10224 function HmacSHA256 (buffer, secret) {
10225 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10226 return createHmac('sha256', secret).update(buffer).digest()
10229 function HmacSHA512 (buffer, secret) {
10230 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10231 return createHmac('sha512', secret).update(buffer).digest()
10235 ripemd160: ripemd160,
10240 HmacSHA256: HmacSHA256,
10241 HmacSHA512: HmacSHA512
10244 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10245 (function (Buffer){
10246 var assert = require('assert')
10247 var createHmac = require('create-hmac')
10248 var typeForce = require('typeforce')
10250 var BigInteger = require('bigi')
10251 var ECSignature = require('./ecsignature')
10253 var ZERO = new Buffer([
0])
10254 var ONE = new Buffer([
1])
10256 // https://tools.ietf.org/html/rfc6979#section-
3.2
10257 function deterministicGenerateK (curve, hash, d, checkSig) {
10258 typeForce('Buffer', hash)
10259 typeForce('BigInteger', d)
10261 // FIXME: remove/uncomment for
2.0.0
10262 // typeForce('Function', checkSig)
10264 if (typeof checkSig !== 'function') {
10265 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10267 checkSig = function (k) {
10270 var e = BigInteger.fromBuffer(hash)
10272 var Q = G.multiply(k)
10274 if (curve.isInfinity(Q))
10277 var r = Q.affineX.mod(n)
10278 if (r.signum() ===
0)
10281 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10282 if (s.signum() ===
0)
10290 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10292 var x = d.toBuffer(
32)
10293 var k = new Buffer(
32)
10294 var v = new Buffer(
32)
10296 // Step A, ignored as hash already provided
10304 k = createHmac('sha256', k)
10312 v = createHmac('sha256', k).update(v).digest()
10315 k = createHmac('sha256', k)
10323 v = createHmac('sha256', k).update(v).digest()
10325 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10327 v = createHmac('sha256', k).update(v).digest()
10329 var T = BigInteger.fromBuffer(v)
10331 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10332 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10333 k = createHmac('sha256', k)
10338 v = createHmac('sha256', k).update(v).digest()
10340 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10342 v = createHmac('sha256', k).update(v).digest()
10343 T = BigInteger.fromBuffer(v)
10349 function sign (curve, hash, d) {
10352 var e = BigInteger.fromBuffer(hash)
10356 deterministicGenerateK(curve, hash, d, function (k) {
10357 var Q = G.multiply(k)
10359 if (curve.isInfinity(Q))
10362 r = Q.affineX.mod(n)
10363 if (r.signum() ===
0)
10366 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10367 if (s.signum() ===
0)
10373 var N_OVER_TWO = n.shiftRight(
1)
10375 // enforce low S values, see bip62: 'low s values in signatures'
10376 if (s.compareTo(N_OVER_TWO)
> 0) {
10380 return new ECSignature(r, s)
10383 function verifyRaw (curve, e, signature, Q) {
10387 var r = signature.r
10388 var s = signature.s
10390 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10391 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10392 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10395 var c = s.modInverse(n)
10397 //
1.4.4 Compute u1 = es^−
1 mod n
10398 // u2 = rs^−
1 mod n
10399 var u1 = e.multiply(c).mod(n)
10400 var u2 = r.multiply(c).mod(n)
10402 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10403 var R = G.multiplyTwo(u1, Q, u2)
10404 var v = R.affineX.mod(n)
10406 //
1.4.5 (cont.) Enforce R is not at infinity
10407 if (curve.isInfinity(R)) return false
10409 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10413 function verify (curve, hash, signature, Q) {
10414 //
1.4.2 H = Hash(M), already done by the user
10416 var e = BigInteger.fromBuffer(hash)
10418 return verifyRaw(curve, e, signature, Q)
10422 * Recover a public key from a signature.
10424 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10425 * Key Recovery Operation".
10427 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10429 function recoverPubKey (curve, e, signature, i) {
10430 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10435 var r = signature.r
10436 var s = signature.s
10438 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10439 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10441 // A set LSB signifies that the y-coordinate is odd
10444 // The more significant bit specifies whether we should use the
10445 // first or second candidate key.
10446 var isSecondKey = i
>> 1
10448 //
1.1 Let x = r + jn
10449 var x = isSecondKey ? r.add(n) : r
10450 var R = curve.pointFromX(isYOdd, x)
10452 //
1.4 Check that nR is at infinity
10453 var nR = R.multiply(n)
10454 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10456 // Compute -e from e
10457 var eNeg = e.negate().mod(n)
10459 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10460 // Q = r^-
1 (sR + -eG)
10461 var rInv = r.modInverse(n)
10463 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10470 * Calculate pubkey extraction parameter.
10472 * When extracting a pubkey from a signature, we have to
10473 * distinguish four different cases. Rather than putting this
10474 * burden on the verifier, Bitcoin includes a
2-bit value with the
10477 * This function simply tries all four cases and returns the value
10478 * that resulted in a successful pubkey recovery.
10480 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10481 for (var i =
0; i <
4; i++) {
10482 var Qprime = recoverPubKey(curve, e, signature, i)
10485 if (Qprime.equals(Q)) {
10490 throw new Error('Unable to find valid recovery factor')
10494 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10495 deterministicGenerateK: deterministicGenerateK,
10496 recoverPubKey: recoverPubKey,
10499 verifyRaw: verifyRaw
10502 }).call(this,require(
"buffer").Buffer)
10503 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10504 (function (Buffer){
10505 var assert = require('assert')
10506 var base58check = require('bs58check')
10507 var ecdsa = require('./ecdsa')
10508 var networks = require('./networks')
10509 var randomBytes = require('randombytes')
10510 var typeForce = require('typeforce')
10512 var BigInteger = require('bigi')
10513 var ECPubKey = require('./ecpubkey')
10515 var ecurve = require('ecurve')
10516 var secp256k1 = ecurve.getCurveByName('secp256k1')
10518 function ECKey (d, compressed) {
10519 assert(d.signum()
> 0, 'Private key must be greater than
0')
10520 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10522 var Q = ECKey.curve.G.multiply(d)
10525 this.pub = new ECPubKey(Q, compressed)
10529 ECKey.curve = secp256k1
10531 // Static constructors
10532 ECKey.fromWIF = function (string) {
10533 var payload = base58check.decode(string)
10534 var compressed = false
10536 // Ignore the version byte
10537 payload = payload.slice(
1)
10539 if (payload.length ===
33) {
10540 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10542 // Truncate the compression flag
10543 payload = payload.slice(
0, -
1)
10547 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10549 var d = BigInteger.fromBuffer(payload)
10550 return new ECKey(d, compressed)
10553 ECKey.makeRandom = function (compressed, rng) {
10554 rng = rng || randomBytes
10556 var buffer = rng(
32)
10557 typeForce('Buffer', buffer)
10558 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10560 var d = BigInteger.fromBuffer(buffer)
10561 d = d.mod(ECKey.curve.n)
10563 return new ECKey(d, compressed)
10566 // Export functions
10567 ECKey.prototype.toWIF = function (network) {
10568 network = network || networks.bitcoin
10570 var bufferLen = this.pub.compressed ?
34 :
33
10571 var buffer = new Buffer(bufferLen)
10573 buffer.writeUInt8(network.wif,
0)
10574 this.d.toBuffer(
32).copy(buffer,
1)
10576 if (this.pub.compressed) {
10577 buffer.writeUInt8(
0x01,
33)
10580 return base58check.encode(buffer)
10584 ECKey.prototype.sign = function (hash) {
10585 return ecdsa.sign(ECKey.curve, hash, this.d)
10588 module.exports = ECKey
10590 }).call(this,require(
"buffer").Buffer)
10591 },{
"./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){
10592 (function (Buffer){
10593 var crypto = require('./crypto')
10594 var ecdsa = require('./ecdsa')
10595 var typeForce = require('typeforce')
10596 var networks = require('./networks')
10598 var Address = require('./address')
10600 var ecurve = require('ecurve')
10601 var secp256k1 = ecurve.getCurveByName('secp256k1')
10603 function ECPubKey (Q, compressed) {
10604 if (compressed === undefined) {
10608 typeForce('Point', Q)
10609 typeForce('Boolean', compressed)
10611 this.compressed = compressed
10616 ECPubKey.curve = secp256k1
10618 // Static constructors
10619 ECPubKey.fromBuffer = function (buffer) {
10620 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10621 return new ECPubKey(Q, Q.compressed)
10624 ECPubKey.fromHex = function (hex) {
10625 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10629 ECPubKey.prototype.getAddress = function (network) {
10630 network = network || networks.bitcoin
10632 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10635 ECPubKey.prototype.verify = function (hash, signature) {
10636 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10639 // Export functions
10640 ECPubKey.prototype.toBuffer = function () {
10641 return this.Q.getEncoded(this.compressed)
10644 ECPubKey.prototype.toHex = function () {
10645 return this.toBuffer().toString('hex')
10648 module.exports = ECPubKey
10650 }).call(this,require(
"buffer").Buffer)
10651 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10652 (function (Buffer){
10653 var assert = require('assert')
10654 var typeForce = require('typeforce')
10656 var BigInteger = require('bigi')
10658 function ECSignature (r, s) {
10659 typeForce('BigInteger', r)
10660 typeForce('BigInteger', s)
10666 ECSignature.parseCompact = function (buffer) {
10667 assert.equal(buffer.length,
65, 'Invalid signature length')
10668 var i = buffer.readUInt8(
0) -
27
10671 assert.equal(i, i &
7, 'Invalid signature parameter')
10672 var compressed = !!(i &
4)
10674 // Recovery param only
10677 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10678 var s = BigInteger.fromBuffer(buffer.slice(
33))
10681 compressed: compressed,
10683 signature: new ECSignature(r, s)
10687 ECSignature.fromDER = function (buffer) {
10688 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10689 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10690 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10692 var rLen = buffer.readUInt8(
3)
10693 assert(rLen
> 0, 'R length is zero')
10695 var offset =
4 + rLen
10696 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10698 var sLen = buffer.readUInt8(offset +
1)
10699 assert(sLen
> 0, 'S length is zero')
10701 var rB = buffer.slice(
4, offset)
10702 var sB = buffer.slice(offset +
2)
10705 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10706 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10709 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10710 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10713 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10714 var r = BigInteger.fromDERInteger(rB)
10715 var s = BigInteger.fromDERInteger(sB)
10717 assert(r.signum()
>=
0, 'R value is negative')
10718 assert(s.signum()
>=
0, 'S value is negative')
10720 return new ECSignature(r, s)
10723 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10724 ECSignature.parseScriptSignature = function (buffer) {
10725 var hashType = buffer.readUInt8(buffer.length -
1)
10726 var hashTypeMod = hashType & ~
0x80
10728 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10731 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10736 ECSignature.prototype.toCompact = function (i, compressed) {
10743 var buffer = new Buffer(
65)
10744 buffer.writeUInt8(i,
0)
10746 this.r.toBuffer(
32).copy(buffer,
1)
10747 this.s.toBuffer(
32).copy(buffer,
33)
10752 ECSignature.prototype.toDER = function () {
10753 var rBa = this.r.toDERInteger()
10754 var sBa = this.s.toDERInteger()
10759 sequence.push(
0x02, rBa.length)
10760 sequence = sequence.concat(rBa)
10763 sequence.push(
0x02, sBa.length)
10764 sequence = sequence.concat(sBa)
10767 sequence.unshift(
0x30, sequence.length)
10769 return new Buffer(sequence)
10772 ECSignature.prototype.toScriptSignature = function (hashType) {
10773 var hashTypeMod = hashType & ~
0x80
10774 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10776 var hashTypeBuffer = new Buffer(
1)
10777 hashTypeBuffer.writeUInt8(hashType,
0)
10779 return Buffer.concat([this.toDER(), hashTypeBuffer])
10782 module.exports = ECSignature
10784 }).call(this,require(
"buffer").Buffer)
10785 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
10786 (function (Buffer){
10787 var assert = require('assert')
10788 var base58check = require('bs58check')
10789 var bcrypto = require('./crypto')
10790 var createHmac = require('create-hmac')
10791 var typeForce = require('typeforce')
10792 var networks = require('./networks')
10794 var BigInteger = require('bigi')
10795 var ECKey = require('./eckey')
10796 var ECPubKey = require('./ecpubkey')
10798 var ecurve = require('ecurve')
10799 var curve = ecurve.getCurveByName('secp256k1')
10801 function findBIP32NetworkByVersion (version) {
10802 for (var name in networks) {
10803 var network = networks[name]
10805 if (version === network.bip32.private || version === network.bip32.public) {
10810 assert(false, 'Could not find network for ' + version.toString(
16))
10813 function HDNode (K, chainCode, network) {
10814 network = network || networks.bitcoin
10816 typeForce('Buffer', chainCode)
10818 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
10819 assert(network.bip32, 'Unknown BIP32 constants for network')
10821 this.chainCode = chainCode
10824 this.parentFingerprint =
0x00000000
10825 this.network = network
10827 if (K instanceof BigInteger) {
10828 this.privKey = new ECKey(K, true)
10829 this.pubKey = this.privKey.pub
10830 } else if (K instanceof ECKey) {
10831 assert(K.pub.compressed, 'ECKey must be compressed')
10833 this.pubKey = K.pub
10834 } else if (K instanceof ECPubKey) {
10835 assert(K.compressed, 'ECPubKey must be compressed')
10838 this.pubKey = new ECPubKey(K, true)
10842 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10843 HDNode.HIGHEST_BIT =
0x80000000
10846 HDNode.fromSeedBuffer = function (seed, network) {
10847 typeForce('Buffer', seed)
10849 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
10850 assert(seed.length <=
64, 'Seed should be at most
512 bits')
10852 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10853 var IL = I.slice(
0,
32)
10854 var IR = I.slice(
32)
10856 // In case IL is
0 or
>= n, the master key is invalid
10857 // This is handled by `new ECKey` in the HDNode constructor
10858 var pIL = BigInteger.fromBuffer(IL)
10860 return new HDNode(pIL, IR, network)
10863 HDNode.fromSeedHex = function (hex, network) {
10864 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10867 HDNode.fromBase58 = function (string, network) {
10868 return HDNode.fromBuffer(base58check.decode(string), network, true)
10871 // FIXME: remove in
2.x.y
10872 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10873 if (!__ignoreDeprecation) {
10874 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
10877 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10879 //
4 byte: version bytes
10880 var version = buffer.readUInt32BE(
0)
10883 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10887 network = findBIP32NetworkByVersion(version)
10890 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
10891 var depth = buffer.readUInt8(
4)
10893 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
10894 var parentFingerprint = buffer.readUInt32BE(
5)
10896 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
10899 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10900 // This is encoded in MSB order. (
0x00000000 if master key)
10901 var index = buffer.readUInt32BE(
9)
10902 assert(depth
> 0 || index ===
0, 'Invalid index')
10904 //
32 bytes: the chain code
10905 var chainCode = buffer.slice(
13,
45)
10908 //
33 bytes: private key data (
0x00 + k)
10909 if (version === network.bip32.private) {
10910 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
10911 data = buffer.slice(
46,
78)
10912 var d = BigInteger.fromBuffer(data)
10913 hd = new HDNode(d, chainCode, network)
10915 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
10917 data = buffer.slice(
45,
78)
10918 var Q = ecurve.Point.decodeFrom(curve, data)
10919 assert.equal(Q.compressed, true, 'Invalid public key')
10921 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10922 // If not, the extended public key is invalid.
10925 hd = new HDNode(Q, chainCode, network)
10930 hd.parentFingerprint = parentFingerprint
10935 // FIXME: remove in
2.x.y
10936 HDNode.fromHex = function (hex, network) {
10937 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10940 HDNode.prototype.getIdentifier = function () {
10941 return bcrypto.hash160(this.pubKey.toBuffer())
10944 HDNode.prototype.getFingerprint = function () {
10945 return this.getIdentifier().slice(
0,
4)
10948 HDNode.prototype.getAddress = function () {
10949 return this.pubKey.getAddress(this.network)
10952 HDNode.prototype.neutered = function () {
10953 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10954 neutered.depth = this.depth
10955 neutered.index = this.index
10956 neutered.parentFingerprint = this.parentFingerprint
10961 HDNode.prototype.toBase58 = function (isPrivate) {
10962 return base58check.encode(this.toBuffer(isPrivate, true))
10965 // FIXME: remove in
2.x.y
10966 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10967 if (isPrivate === undefined) {
10968 isPrivate = !!this.privKey
10970 // FIXME: remove in
2.x.y
10972 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10975 if (!__ignoreDeprecation) {
10976 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
10980 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10981 var buffer = new Buffer(HDNode.LENGTH)
10983 //
4 bytes: version bytes
10984 buffer.writeUInt32BE(version,
0)
10987 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
10988 buffer.writeUInt8(this.depth,
4)
10990 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
10991 buffer.writeUInt32BE(this.parentFingerprint,
5)
10993 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10994 // This is encoded in Big endian. (
0x00000000 if master key)
10995 buffer.writeUInt32BE(this.index,
9)
10997 //
32 bytes: the chain code
10998 this.chainCode.copy(buffer,
13)
11000 //
33 bytes: the public key or private key data
11002 // FIXME: remove in
2.x.y
11003 assert(this.privKey, 'Missing private key')
11005 //
0x00 + k for private keys
11006 buffer.writeUInt8(
0,
45)
11007 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11009 // X9.62 encoding for public keys
11010 this.pubKey.toBuffer().copy(buffer,
45)
11016 // FIXME: remove in
2.x.y
11017 HDNode.prototype.toHex = function (isPrivate) {
11018 return this.toBuffer(isPrivate).toString('hex')
11021 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11022 HDNode.prototype.derive = function (index) {
11023 var isHardened = index
>= HDNode.HIGHEST_BIT
11024 var indexBuffer = new Buffer(
4)
11025 indexBuffer.writeUInt32BE(index,
0)
11031 assert(this.privKey, 'Could not derive hardened child key')
11033 // data =
0x00 || ser256(kpar) || ser32(index)
11034 data = Buffer.concat([
11035 this.privKey.d.toBuffer(
33),
11041 // data = serP(point(kpar)) || ser32(index)
11042 // = serP(Kpar) || ser32(index)
11043 data = Buffer.concat([
11044 this.pubKey.toBuffer(),
11049 var I = createHmac('sha512', this.chainCode).update(data).digest()
11050 var IL = I.slice(
0,
32)
11051 var IR = I.slice(
32)
11053 var pIL = BigInteger.fromBuffer(IL)
11055 // In case parse256(IL)
>= n, proceed with the next value for i
11056 if (pIL.compareTo(curve.n)
>=
0) {
11057 return this.derive(index +
1)
11060 // Private parent key -
> private child key
11062 if (this.privKey) {
11063 // ki = parse256(IL) + kpar (mod n)
11064 var ki = pIL.add(this.privKey.d).mod(curve.n)
11066 // In case ki ==
0, proceed with the next value for i
11067 if (ki.signum() ===
0) {
11068 return this.derive(index +
1)
11071 hd = new HDNode(ki, IR, this.network)
11073 // Public parent key -
> public child key
11075 // Ki = point(parse256(IL)) + Kpar
11077 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11079 // In case Ki is the point at infinity, proceed with the next value for i
11080 if (curve.isInfinity(Ki)) {
11081 return this.derive(index +
1)
11084 hd = new HDNode(Ki, IR, this.network)
11087 hd.depth = this.depth +
1
11089 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11094 HDNode.prototype.deriveHardened = function (index) {
11095 // Only derives hardened private keys by default
11096 return this.derive(index + HDNode.HIGHEST_BIT)
11099 HDNode.prototype.toString = HDNode.prototype.toBase58
11101 module.exports = HDNode
11103 }).call(this,require("buffer").Buffer)
11104 },{"./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){
11106 Address: require('./address'),
11107 base58check: require('./base58check'),
11108 Block: require('./block'),
11109 bufferutils: require('./bufferutils'),
11110 crypto: require('./crypto'),
11111 ecdsa: require('./ecdsa'),
11112 ECKey: require('./eckey'),
11113 ECPubKey: require('./ecpubkey'),
11114 ECSignature: require('./ecsignature'),
11115 Message: require('./message'),
11116 opcodes: require('./opcodes'),
11117 HDNode: require('./hdnode'),
11118 Script: require('./script'),
11119 scripts: require('./scripts'),
11120 Transaction: require('./transaction'),
11121 TransactionBuilder: require('./transaction_builder'),
11122 networks: require('./networks'),
11123 Wallet: require('./wallet')
11126 },{"./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){
11127 (function (Buffer){
11128 var bufferutils = require('./bufferutils')
11129 var crypto = require('./crypto')
11130 var ecdsa = require('./ecdsa')
11131 var networks = require('./networks')
11133 var BigInteger = require('bigi')
11134 var ECPubKey = require('./ecpubkey')
11135 var ECSignature = require('./ecsignature')
11137 var ecurve = require('ecurve')
11138 var ecparams = ecurve.getCurveByName('secp256k1')
11140 function magicHash (message, network) {
11141 var magicPrefix = new Buffer(network.magicPrefix)
11142 var messageBuffer = new Buffer(message)
11143 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11145 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11146 return crypto.hash256(buffer)
11149 function sign (privKey, message, network) {
11150 network = network || networks.bitcoin
11152 var hash = magicHash(message, network)
11153 var signature = privKey.sign(hash)
11154 var e = BigInteger.fromBuffer(hash)
11155 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11157 return signature.toCompact(i, privKey.pub.compressed)
11160 // TODO: network could be implied from address
11161 function verify (address, signature, message, network) {
11162 if (!Buffer.isBuffer(signature)) {
11163 signature = new Buffer(signature, 'base64')
11166 network = network || networks.bitcoin
11168 var hash = magicHash(message, network)
11169 var parsed = ECSignature.parseCompact(signature)
11170 var e = BigInteger.fromBuffer(hash)
11171 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11173 var pubKey = new ECPubKey(Q, parsed.compressed)
11174 return pubKey.getAddress(network).toString() === address.toString()
11178 magicHash: magicHash,
11183 }).call(this,require("buffer").Buffer)
11184 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11185 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11186 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11190 magicPrefix: '\x18Bitcoin Signed Message:\n',
11192 public:
0x0488b21e,
11193 private:
0x0488ade4
11198 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11199 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11200 estimateFee: estimateFee('bitcoin')
11203 magicPrefix: '\x18Bitcoin Signed Message:\n',
11205 public:
0x043587cf,
11206 private:
0x04358394
11211 dustThreshold:
546,
11213 estimateFee: estimateFee('testnet')
11216 magicPrefix: '\x19Litecoin Signed Message:\n',
11218 public:
0x019da462,
11219 private:
0x019d9cfe
11224 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11225 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11226 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11227 estimateFee: estimateFee('litecoin')
11230 magicPrefix: '\x19Dogecoin Signed Message:\n',
11232 public:
0x02facafd,
11233 private:
0x02fac398
11238 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11239 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11240 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11241 estimateFee: estimateFee('dogecoin')
11244 magicPrefix: '\x18Viacoin Signed Message:\n',
11246 public:
0x0488b21e,
11247 private:
0x0488ade4
11252 dustThreshold:
560,
11253 dustSoftThreshold:
100000,
11254 feePerKb:
100000, //
11255 estimateFee: estimateFee('viacoin')
11258 magicPrefix: '\x18Viacoin Signed Message:\n',
11260 public:
0x043587cf,
11261 private:
0x04358394
11266 dustThreshold:
560,
11267 dustSoftThreshold:
100000,
11269 estimateFee: estimateFee('viacointestnet')
11272 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11274 public:
0x019da462,
11275 private:
0x019d9cfe
11280 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11281 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11282 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11283 estimateFee: estimateFee('gamerscoin')
11286 magicPrefix: '\x19Jumbucks Signed Message:\n',
11288 public:
0x037a689a,
11289 private:
0x037a6460
11295 dustSoftThreshold:
10000,
11297 estimateFee: estimateFee('jumbucks')
11300 magicPrefix: '\x18Zetacoin Signed Message:\n',
11302 public:
0x0488b21e,
11303 private:
0x0488ade4
11308 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11309 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11310 estimateFee: estimateFee('zetacoin')
11314 function estimateFee (type) {
11315 return function (tx) {
11316 var network = networks[type]
11317 var baseFee = network.feePerKb
11318 var byteSize = tx.toBuffer().length
11320 var fee = baseFee * Math.ceil(byteSize /
1000)
11321 if (network.dustSoftThreshold === undefined) return fee
11323 tx.outs.forEach(function (e) {
11324 if (e.value < network.dustSoftThreshold) {
11333 module.exports = networks
11335 },{}],
67:[function(require,module,exports){
11376 OP_TOALTSTACK:
107,
11377 OP_FROMALTSTACK:
108,
11409 OP_EQUALVERIFY:
136,
11434 OP_NUMEQUALVERIFY:
157,
11435 OP_NUMNOTEQUAL:
158,
11437 OP_GREATERTHAN:
160,
11438 OP_LESSTHANOREQUAL:
161,
11439 OP_GREATERTHANOREQUAL:
162,
11451 OP_CODESEPARATOR:
171,
11453 OP_CHECKSIGVERIFY:
173,
11454 OP_CHECKMULTISIG:
174,
11455 OP_CHECKMULTISIGVERIFY:
175,
11469 // template matching params
11470 OP_PUBKEYHASH:
253,
11472 OP_INVALIDOPCODE:
255
11475 },{}],
68:[function(require,module,exports){
11476 (function (Buffer){
11477 var assert = require('assert')
11478 var bufferutils = require('./bufferutils')
11479 var crypto = require('./crypto')
11480 var typeForce = require('typeforce')
11481 var opcodes = require('./opcodes')
11483 function Script (buffer, chunks) {
11484 typeForce('Buffer', buffer)
11485 typeForce('Array', chunks)
11487 this.buffer = buffer
11488 this.chunks = chunks
11491 Script.fromASM = function (asm) {
11492 var strChunks = asm.split(' ')
11493 var chunks = strChunks.map(function (strChunk) {
11495 if (strChunk in opcodes) {
11496 return opcodes[strChunk]
11500 return new Buffer(strChunk, 'hex')
11504 return Script.fromChunks(chunks)
11507 Script.fromBuffer = function (buffer) {
11511 while (i < buffer.length) {
11512 var opcode = buffer.readUInt8(i)
11515 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11516 var d = bufferutils.readPushDataInt(buffer, i)
11518 // did reading a pushDataInt fail? return non-chunked script
11519 if (d === null) return new Script(buffer, [])
11522 // attempt to read too much data?
11523 if (i + d.number
> buffer.length) return new Script(buffer, [])
11525 var data = buffer.slice(i, i + d.number)
11532 chunks.push(opcode)
11538 return new Script(buffer, chunks)
11541 Script.fromChunks = function (chunks) {
11542 typeForce('Array', chunks)
11544 var bufferSize = chunks.reduce(function (accum, chunk) {
11546 if (Buffer.isBuffer(chunk)) {
11547 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11554 var buffer = new Buffer(bufferSize)
11557 chunks.forEach(function (chunk) {
11559 if (Buffer.isBuffer(chunk)) {
11560 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11562 chunk.copy(buffer, offset)
11563 offset += chunk.length
11567 buffer.writeUInt8(chunk, offset)
11572 assert.equal(offset, buffer.length, 'Could not decode chunks')
11573 return new Script(buffer, chunks)
11576 Script.fromHex = function (hex) {
11577 return Script.fromBuffer(new Buffer(hex, 'hex'))
11580 Script.EMPTY = Script.fromChunks([])
11582 Script.prototype.getHash = function () {
11583 return crypto.hash160(this.buffer)
11586 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11587 Script.prototype.without = function (needle) {
11588 return Script.fromChunks(this.chunks.filter(function (op) {
11589 return op !== needle
11593 var reverseOps = []
11594 for (var op in opcodes) {
11595 var code = opcodes[op]
11596 reverseOps[code] = op
11599 Script.prototype.toASM = function () {
11600 return this.chunks.map(function (chunk) {
11602 if (Buffer.isBuffer(chunk)) {
11603 return chunk.toString('hex')
11607 return reverseOps[chunk]
11612 Script.prototype.toBuffer = function () {
11616 Script.prototype.toHex = function () {
11617 return this.toBuffer().toString('hex')
11620 module.exports = Script
11622 }).call(this,require("buffer").Buffer)
11623 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11624 (function (Buffer){
11625 var assert = require('assert')
11626 var ops = require('./opcodes')
11627 var typeForce = require('typeforce')
11629 var ecurve = require('ecurve')
11630 var curve = ecurve.getCurveByName('secp256k1')
11632 var ECSignature = require('./ecsignature')
11633 var Script = require('./script')
11635 function isCanonicalPubKey (buffer) {
11636 if (!Buffer.isBuffer(buffer)) return false
11639 ecurve.Point.decodeFrom(curve, buffer)
11641 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11650 function isCanonicalSignature (buffer) {
11651 if (!Buffer.isBuffer(buffer)) return false
11654 ECSignature.parseScriptSignature(buffer)
11656 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/))) {
11666 function isPubKeyHashInput (script) {
11667 return script.chunks.length ===
2 &&
11668 isCanonicalSignature(script.chunks[
0]) &&
11669 isCanonicalPubKey(script.chunks[
1])
11672 function isPubKeyHashOutput (script) {
11673 return script.chunks.length ===
5 &&
11674 script.chunks[
0] === ops.OP_DUP &&
11675 script.chunks[
1] === ops.OP_HASH160 &&
11676 Buffer.isBuffer(script.chunks[
2]) &&
11677 script.chunks[
2].length ===
20 &&
11678 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11679 script.chunks[
4] === ops.OP_CHECKSIG
11682 function isPubKeyInput (script) {
11683 return script.chunks.length ===
1 &&
11684 isCanonicalSignature(script.chunks[
0])
11687 function isPubKeyOutput (script) {
11688 return script.chunks.length ===
2 &&
11689 isCanonicalPubKey(script.chunks[
0]) &&
11690 script.chunks[
1] === ops.OP_CHECKSIG
11693 function isScriptHashInput (script, allowIncomplete) {
11694 if (script.chunks.length <
2) return false
11696 var lastChunk = script.chunks[script.chunks.length -
1]
11697 if (!Buffer.isBuffer(lastChunk)) return false
11699 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11700 var redeemScript = Script.fromBuffer(lastChunk)
11702 // is redeemScript a valid script?
11703 if (redeemScript.chunks.length ===
0) return false
11705 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11708 function isScriptHashOutput (script) {
11709 return script.chunks.length ===
3 &&
11710 script.chunks[
0] === ops.OP_HASH160 &&
11711 Buffer.isBuffer(script.chunks[
1]) &&
11712 script.chunks[
1].length ===
20 &&
11713 script.chunks[
2] === ops.OP_EQUAL
11716 // allowIncomplete is to account for combining signatures
11717 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11718 function isMultisigInput (script, allowIncomplete) {
11719 if (script.chunks.length <
2) return false
11720 if (script.chunks[
0] !== ops.OP_0) return false
11722 if (allowIncomplete) {
11723 return script.chunks.slice(
1).every(function (chunk) {
11724 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11728 return script.chunks.slice(
1).every(isCanonicalSignature)
11731 function isMultisigOutput (script) {
11732 if (script.chunks.length <
4) return false
11733 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
11735 var mOp = script.chunks[
0]
11736 if (mOp === ops.OP_0) return false
11737 if (mOp < ops.OP_1) return false
11738 if (mOp
> ops.OP_16) return false
11740 var nOp = script.chunks[script.chunks.length -
2]
11741 if (nOp === ops.OP_0) return false
11742 if (nOp < ops.OP_1) return false
11743 if (nOp
> ops.OP_16) return false
11745 var m = mOp - (ops.OP_1 -
1)
11746 var n = nOp - (ops.OP_1 -
1)
11747 if (n < m) return false
11749 var pubKeys = script.chunks.slice(
1, -
2)
11750 if (n < pubKeys.length) return false
11752 return pubKeys.every(isCanonicalPubKey)
11755 function isNullDataOutput (script) {
11756 return script.chunks[
0] === ops.OP_RETURN
11759 function classifyOutput (script) {
11760 typeForce('Script', script)
11762 if (isPubKeyHashOutput(script)) {
11763 return 'pubkeyhash'
11764 } else if (isScriptHashOutput(script)) {
11765 return 'scripthash'
11766 } else if (isMultisigOutput(script)) {
11768 } else if (isPubKeyOutput(script)) {
11770 } else if (isNullDataOutput(script)) {
11774 return 'nonstandard'
11777 function classifyInput (script, allowIncomplete) {
11778 typeForce('Script', script)
11780 if (isPubKeyHashInput(script)) {
11781 return 'pubkeyhash'
11782 } else if (isMultisigInput(script, allowIncomplete)) {
11784 } else if (isScriptHashInput(script, allowIncomplete)) {
11785 return 'scripthash'
11786 } else if (isPubKeyInput(script)) {
11790 return 'nonstandard'
11793 // Standard Script Templates
11794 // {pubKey} OP_CHECKSIG
11795 function pubKeyOutput (pubKey) {
11796 return Script.fromChunks([
11802 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11803 function pubKeyHashOutput (hash) {
11804 typeForce('Buffer', hash)
11806 return Script.fromChunks([
11810 ops.OP_EQUALVERIFY,
11815 // OP_HASH160 {scriptHash} OP_EQUAL
11816 function scriptHashOutput (hash) {
11817 typeForce('Buffer', hash)
11819 return Script.fromChunks([
11826 // m [pubKeys ...] n OP_CHECKMULTISIG
11827 function multisigOutput (m, pubKeys) {
11828 typeForce(['ECPubKey'], pubKeys)
11830 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
11832 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11833 return pubKey.toBuffer()
11835 var n = pubKeys.length
11837 return Script.fromChunks([].concat(
11838 (ops.OP_1 -
1) + m,
11840 (ops.OP_1 -
1) + n,
11841 ops.OP_CHECKMULTISIG
11846 function pubKeyInput (signature) {
11847 typeForce('Buffer', signature)
11849 return Script.fromChunks([signature])
11852 // {signature} {pubKey}
11853 function pubKeyHashInput (signature, pubKey) {
11854 typeForce('Buffer', signature)
11856 return Script.fromChunks([signature, pubKey.toBuffer()])
11859 //
<scriptSig> {serialized scriptPubKey script}
11860 function scriptHashInput (scriptSig, scriptPubKey) {
11861 return Script.fromChunks([].concat(
11863 scriptPubKey.toBuffer()
11867 // OP_0 [signatures ...]
11868 function multisigInput (signatures, scriptPubKey) {
11869 if (scriptPubKey) {
11870 assert(isMultisigOutput(scriptPubKey))
11872 var mOp = scriptPubKey.chunks[
0]
11873 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
11874 var m = mOp - (ops.OP_1 -
1)
11875 var n = nOp - (ops.OP_1 -
1)
11877 assert(signatures.length
>= m, 'Not enough signatures provided')
11878 assert(signatures.length <= n, 'Too many signatures provided')
11881 return Script.fromChunks([].concat(ops.OP_0, signatures))
11884 function nullDataOutput (data) {
11885 return Script.fromChunks([ops.OP_RETURN, data])
11889 isCanonicalPubKey: isCanonicalPubKey,
11890 isCanonicalSignature: isCanonicalSignature,
11891 isPubKeyHashInput: isPubKeyHashInput,
11892 isPubKeyHashOutput: isPubKeyHashOutput,
11893 isPubKeyInput: isPubKeyInput,
11894 isPubKeyOutput: isPubKeyOutput,
11895 isScriptHashInput: isScriptHashInput,
11896 isScriptHashOutput: isScriptHashOutput,
11897 isMultisigInput: isMultisigInput,
11898 isMultisigOutput: isMultisigOutput,
11899 isNullDataOutput: isNullDataOutput,
11900 classifyOutput: classifyOutput,
11901 classifyInput: classifyInput,
11902 pubKeyOutput: pubKeyOutput,
11903 pubKeyHashOutput: pubKeyHashOutput,
11904 scriptHashOutput: scriptHashOutput,
11905 multisigOutput: multisigOutput,
11906 pubKeyInput: pubKeyInput,
11907 pubKeyHashInput: pubKeyHashInput,
11908 scriptHashInput: scriptHashInput,
11909 multisigInput: multisigInput,
11910 dataOutput: function (data) {
11911 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
11912 return nullDataOutput(data)
11914 nullDataOutput: nullDataOutput
11917 }).call(this,require("buffer").Buffer)
11918 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
11919 (function (Buffer){
11920 var assert = require('assert')
11921 var bufferutils = require('./bufferutils')
11922 var crypto = require('./crypto')
11923 var typeForce = require('typeforce')
11924 var opcodes = require('./opcodes')
11925 var scripts = require('./scripts')
11927 var Address = require('./address')
11928 var ECSignature = require('./ecsignature')
11929 var Script = require('./script')
11931 function Transaction () {
11938 Transaction.DEFAULT_SEQUENCE =
0xffffffff
11939 Transaction.SIGHASH_ALL =
0x01
11940 Transaction.SIGHASH_NONE =
0x02
11941 Transaction.SIGHASH_SINGLE =
0x03
11942 Transaction.SIGHASH_ANYONECANPAY =
0x80
11944 Transaction.fromBuffer = function (buffer, __disableAssert) {
11946 function readSlice (n) {
11948 return buffer.slice(offset - n, offset)
11951 function readUInt32 () {
11952 var i = buffer.readUInt32LE(offset)
11957 function readUInt64 () {
11958 var i = bufferutils.readUInt64LE(buffer, offset)
11963 function readVarInt () {
11964 var vi = bufferutils.readVarInt(buffer, offset)
11969 function readScript () {
11970 return Script.fromBuffer(readSlice(readVarInt()))
11973 function readGenerationScript () {
11974 return new Script(readSlice(readVarInt()), [])
11977 var tx = new Transaction()
11978 tx.version = readUInt32()
11980 var vinLen = readVarInt()
11981 for (var i =
0; i < vinLen; ++i) {
11982 var hash = readSlice(
32)
11984 if (Transaction.isCoinbaseHash(hash)) {
11987 index: readUInt32(),
11988 script: readGenerationScript(),
11989 sequence: readUInt32()
11994 index: readUInt32(),
11995 script: readScript(),
11996 sequence: readUInt32()
12001 var voutLen = readVarInt()
12002 for (i =
0; i < voutLen; ++i) {
12004 value: readUInt64(),
12005 script: readScript()
12009 tx.locktime = readUInt32()
12011 if (!__disableAssert) {
12012 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12018 Transaction.fromHex = function (hex) {
12019 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12022 Transaction.isCoinbaseHash = function (buffer) {
12023 return Array.prototype.every.call(buffer, function (x) {
12029 * Create a new txIn.
12031 * Can be called with any of:
12033 * - A transaction and an index
12034 * - A transaction hash and an index
12036 * Note that this method does not sign the created input.
12038 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12039 if (sequence === undefined || sequence === null) {
12040 sequence = Transaction.DEFAULT_SEQUENCE
12043 script = script || Script.EMPTY
12045 if (typeof hash === 'string') {
12046 // TxId hex is big-endian, we need little-endian
12047 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12048 } else if (hash instanceof Transaction) {
12049 hash = hash.getHash()
12052 typeForce('Buffer', hash)
12053 typeForce('Number', index)
12054 typeForce('Number', sequence)
12055 typeForce('Script', script)
12057 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12059 // Add the input and return the input's index
12060 return (this.ins.push({
12069 * Create a new txOut.
12071 * Can be called with:
12073 * - A base58 address string and a value
12074 * - An Address object and a value
12075 * - A scriptPubKey Script and a value
12077 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12078 // Attempt to get a valid address if it's a base58 address string
12079 if (typeof scriptPubKey === 'string') {
12080 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12083 // Attempt to get a valid script if it's an Address object
12084 if (scriptPubKey instanceof Address) {
12085 scriptPubKey = scriptPubKey.toOutputScript()
12088 typeForce('Script', scriptPubKey)
12089 typeForce('Number', value)
12091 // Add the output and return the output's index
12092 return (this.outs.push({
12093 script: scriptPubKey,
12098 Transaction.prototype.clone = function () {
12099 var newTx = new Transaction()
12100 newTx.version = this.version
12101 newTx.locktime = this.locktime
12103 newTx.ins = this.ins.map(function (txIn) {
12107 script: txIn.script,
12108 sequence: txIn.sequence
12112 newTx.outs = this.outs.map(function (txOut) {
12114 script: txOut.script,
12123 * Hash transaction for signing a specific input.
12125 * Bitcoin uses a different hash for each signed transaction input. This
12126 * method copies the transaction, makes the necessary changes based on the
12127 * hashType, serializes and finally hashes the result. This hash can then be
12128 * used to sign the transaction input in question.
12130 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12131 // FIXME: remove in
2.x.y
12132 if (arguments[
0] instanceof Script) {
12133 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12135 // swap the arguments (must be stored in tmp, arguments is special)
12136 var tmp = arguments[
0]
12137 inIndex = arguments[
1]
12138 prevOutScript = tmp
12141 typeForce('Number', inIndex)
12142 typeForce('Script', prevOutScript)
12143 typeForce('Number', hashType)
12145 assert(inIndex
>=
0, 'Invalid vin index')
12146 assert(inIndex < this.ins.length, 'Invalid vin index')
12148 var txTmp = this.clone()
12149 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12151 // Blank out other inputs' signatures
12152 txTmp.ins.forEach(function (txIn) {
12153 txIn.script = Script.EMPTY
12155 txTmp.ins[inIndex].script = hashScript
12157 var hashTypeModifier = hashType &
0x1f
12159 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12160 assert(false, 'SIGHASH_NONE not yet supported')
12161 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12162 assert(false, 'SIGHASH_SINGLE not yet supported')
12165 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12166 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12169 var hashTypeBuffer = new Buffer(
4)
12170 hashTypeBuffer.writeInt32LE(hashType,
0)
12172 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12173 return crypto.hash256(buffer)
12176 Transaction.prototype.getHash = function () {
12177 return crypto.hash256(this.toBuffer())
12180 Transaction.prototype.getId = function () {
12181 // TxHash is little-endian, we need big-endian
12182 return bufferutils.reverse(this.getHash()).toString('hex')
12185 Transaction.prototype.toBuffer = function () {
12186 function scriptSize (script) {
12187 var length = script.buffer.length
12189 return bufferutils.varIntSize(length) + length
12192 var buffer = new Buffer(
12194 bufferutils.varIntSize(this.ins.length) +
12195 bufferutils.varIntSize(this.outs.length) +
12196 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12197 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12201 function writeSlice (slice) {
12202 slice.copy(buffer, offset)
12203 offset += slice.length
12206 function writeUInt32 (i) {
12207 buffer.writeUInt32LE(i, offset)
12211 function writeUInt64 (i) {
12212 bufferutils.writeUInt64LE(buffer, i, offset)
12216 function writeVarInt (i) {
12217 var n = bufferutils.writeVarInt(buffer, i, offset)
12221 writeUInt32(this.version)
12222 writeVarInt(this.ins.length)
12224 this.ins.forEach(function (txIn) {
12225 writeSlice(txIn.hash)
12226 writeUInt32(txIn.index)
12227 writeVarInt(txIn.script.buffer.length)
12228 writeSlice(txIn.script.buffer)
12229 writeUInt32(txIn.sequence)
12232 writeVarInt(this.outs.length)
12233 this.outs.forEach(function (txOut) {
12234 writeUInt64(txOut.value)
12235 writeVarInt(txOut.script.buffer.length)
12236 writeSlice(txOut.script.buffer)
12239 writeUInt32(this.locktime)
12244 Transaction.prototype.toHex = function () {
12245 return this.toBuffer().toString('hex')
12248 Transaction.prototype.setInputScript = function (index, script) {
12249 typeForce('Number', index)
12250 typeForce('Script', script)
12252 this.ins[index].script = script
12255 // FIXME: remove in
2.x.y
12256 Transaction.prototype.sign = function (index, privKey, hashType) {
12257 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12259 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12260 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12262 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12263 this.setInputScript(index, scriptSig)
12266 // FIXME: remove in
2.x.y
12267 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12268 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12270 hashType = hashType || Transaction.SIGHASH_ALL
12272 var hash = this.hashForSignature(index, prevOutScript, hashType)
12273 var signature = privKey.sign(hash)
12275 return signature.toScriptSignature(hashType)
12278 // FIXME: remove in
2.x.y
12279 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12280 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12282 var parsed = ECSignature.parseScriptSignature(buffer)
12283 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12285 return pubKey.verify(hash, parsed.signature)
12288 module.exports = Transaction
12290 }).call(this,require("buffer").Buffer)
12291 },{"./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){
12292 (function (Buffer){
12293 var assert = require('assert')
12294 var ops = require('./opcodes')
12295 var scripts = require('./scripts')
12297 var ECPubKey = require('./ecpubkey')
12298 var ECSignature = require('./ecsignature')
12299 var Script = require('./script')
12300 var Transaction = require('./transaction')
12302 function extractInput (txIn) {
12304 var scriptSig = txIn.script
12306 var prevOutType = scripts.classifyInput(scriptSig, true)
12309 // Re-classify if scriptHash
12310 if (prevOutType === 'scripthash') {
12311 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12312 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12314 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12315 scriptType = scripts.classifyInput(scriptSig, true)
12317 scriptType = prevOutType
12320 // Extract hashType, pubKeys and signatures
12321 var hashType, parsed, pubKeys, signatures
12323 switch (scriptType) {
12324 case 'pubkeyhash': {
12325 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12326 hashType = parsed.hashType
12327 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12328 signatures = [parsed.signature]
12329 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12335 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12336 hashType = parsed.hashType
12337 signatures = [parsed.signature]
12339 if (redeemScript) {
12340 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12347 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12348 if (chunk === ops.OP_0) return chunk
12350 var parsed = ECSignature.parseScriptSignature(chunk)
12351 hashType = parsed.hashType
12353 return parsed.signature
12356 if (redeemScript) {
12357 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12365 hashType: hashType,
12366 prevOutScript: prevOutScript,
12367 prevOutType: prevOutType,
12369 redeemScript: redeemScript,
12370 scriptType: scriptType,
12371 signatures: signatures
12375 function TransactionBuilder () {
12376 this.prevTxMap = {}
12377 this.prevOutScripts = {}
12378 this.prevOutTypes = {}
12381 this.tx = new Transaction()
12384 TransactionBuilder.fromTransaction = function (transaction) {
12385 var txb = new TransactionBuilder()
12387 // Copy other transaction fields
12388 txb.tx.version = transaction.version
12389 txb.tx.locktime = transaction.locktime
12391 // Extract/add inputs
12392 transaction.ins.forEach(function (txIn) {
12393 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12396 // Extract/add outputs
12397 transaction.outs.forEach(function (txOut) {
12398 txb.addOutput(txOut.script, txOut.value)
12401 // Extract/add signatures
12402 txb.inputs = transaction.ins.map(function (txIn) {
12403 // TODO: remove me after testcase added
12404 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12406 // Ignore empty scripts
12407 if (txIn.script.buffer.length ===
0) return {}
12409 return extractInput(txIn)
12415 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12419 if (typeof prevTx === 'string') {
12420 prevOutHash = new Buffer(prevTx, 'hex')
12422 // TxId hex is big-endian, we want little-endian hash
12423 Array.prototype.reverse.call(prevOutHash)
12426 } else if (prevTx instanceof Transaction) {
12427 prevOutHash = prevTx.getHash()
12428 prevOutScript = prevTx.outs[index].script
12432 prevOutHash = prevTx
12436 if (prevOutScript) {
12437 var prevOutType = scripts.classifyOutput(prevOutScript)
12439 // if we can, extract pubKey information
12440 switch (prevOutType) {
12442 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12447 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12452 if (prevOutType !== 'scripthash') {
12453 input.scriptType = prevOutType
12456 input.prevOutScript = prevOutScript
12457 input.prevOutType = prevOutType
12460 assert(this.inputs.every(function (input2) {
12461 if (input2.hashType === undefined) return true
12463 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12464 }), 'No, this would invalidate signatures')
12466 var prevOut = prevOutHash.toString('hex') + ':' + index
12467 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12469 var vin = this.tx.addInput(prevOutHash, index, sequence)
12470 this.inputs[vin] = input
12471 this.prevTxMap[prevOut] = vin
12476 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12477 assert(this.inputs.every(function (input) {
12478 if (input.hashType === undefined) return true
12480 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12481 }), 'No, this would invalidate signatures')
12483 return this.tx.addOutput(scriptPubKey, value)
12486 TransactionBuilder.prototype.build = function () {
12487 return this.__build(false)
12489 TransactionBuilder.prototype.buildIncomplete = function () {
12490 return this.__build(true)
12493 var canSignTypes = {
12494 'pubkeyhash': true,
12499 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12500 if (!allowIncomplete) {
12501 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12502 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12505 var tx = this.tx.clone()
12507 // Create script signatures from signature meta-data
12508 this.inputs.forEach(function (input, index) {
12509 var scriptType = input.scriptType
12512 if (!allowIncomplete) {
12513 assert(!!scriptType, 'Transaction is not complete')
12514 assert(scriptType in canSignTypes, scriptType + ' not supported')
12515 assert(input.signatures, 'Transaction is missing signatures')
12518 if (input.signatures) {
12519 switch (scriptType) {
12520 case 'pubkeyhash': {
12521 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12522 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12527 // Array.prototype.map is sparse-compatible
12528 var msSignatures = input.signatures.map(function (signature) {
12529 return signature && signature.toScriptSignature(input.hashType)
12532 // fill in blanks with OP_0
12533 if (allowIncomplete) {
12534 for (var i =
0; i < msSignatures.length; ++i) {
12535 if (msSignatures[i]) continue
12537 msSignatures[i] = ops.OP_0
12540 // Array.prototype.filter returns non-sparse array
12541 msSignatures = msSignatures.filter(function (x) { return x })
12544 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12545 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12550 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12551 scriptSig = scripts.pubKeyInput(pkSignature)
12557 // did we build a scriptSig?
12559 // wrap as scriptHash if necessary
12560 if (input.prevOutType === 'scripthash') {
12561 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12564 tx.setInputScript(index, scriptSig)
12571 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12572 assert(index in this.inputs, 'No input at index: ' + index)
12573 hashType = hashType || Transaction.SIGHASH_ALL
12575 var input = this.inputs[index]
12576 var canSign = input.hashType &&
12577 input.prevOutScript &&
12578 input.prevOutType &&
12580 input.scriptType &&
12583 // are we almost ready to sign?
12585 // if redeemScript was provided, enforce consistency
12586 if (redeemScript) {
12587 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12590 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12594 // must be pay-to-scriptHash?
12595 if (redeemScript) {
12596 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12597 if (input.prevOutScript) {
12598 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12600 var scriptHash = input.prevOutScript.chunks[
1]
12601 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12604 var scriptType = scripts.classifyOutput(redeemScript)
12605 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12608 switch (scriptType) {
12610 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12614 case 'pubkeyhash': {
12615 var pkh1 = redeemScript.chunks[
2]
12616 var pkh2 = privKey.pub.getAddress().hash
12618 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12619 pubKeys = [privKey.pub]
12624 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12629 if (!input.prevOutScript) {
12630 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12631 input.prevOutType = 'scripthash'
12634 input.pubKeys = pubKeys
12635 input.redeemScript = redeemScript
12636 input.scriptType = scriptType
12638 // cannot be pay-to-scriptHash
12640 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12642 // can we otherwise sign this?
12643 if (input.scriptType) {
12644 assert(input.pubKeys, input.scriptType + ' not supported')
12646 // we know nothin' Jon Snow, assume pubKeyHash
12648 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12649 input.prevOutType = 'pubkeyhash'
12650 input.pubKeys = [privKey.pub]
12651 input.scriptType = input.prevOutType
12655 input.hashType = hashType
12656 input.signatures = input.signatures || []
12659 var signatureScript = input.redeemScript || input.prevOutScript
12660 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12662 // enforce signature order matches public keys
12663 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12664 // maintain a local copy of unmatched signatures
12665 var unmatched = input.signatures.slice()
12667 input.signatures = input.pubKeys.map(function (pubKey) {
12670 // check for any matching signatures
12671 unmatched.some(function (signature, i) {
12672 if (!pubKey.verify(signatureHash, signature)) return false
12675 // remove matched signature from unmatched
12676 unmatched.splice(i,
1)
12681 return match || undefined
12685 // enforce in order signing of public keys
12686 assert(input.pubKeys.some(function (pubKey, i) {
12687 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12689 assert(!input.signatures[i], 'Signature already exists')
12690 var signature = privKey.sign(signatureHash)
12691 input.signatures[i] = signature
12694 }, this), 'privateKey cannot sign for this input')
12697 module.exports = TransactionBuilder
12699 }).call(this,require(
"buffer").Buffer)
12700 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12701 (function (Buffer){
12702 var assert = require('assert')
12703 var bufferutils = require('./bufferutils')
12704 var typeForce = require('typeforce')
12705 var networks = require('./networks')
12706 var randomBytes = require('randombytes')
12708 var Address = require('./address')
12709 var HDNode = require('./hdnode')
12710 var TransactionBuilder = require('./transaction_builder')
12711 var Script = require('./script')
12713 function Wallet (seed, network) {
12714 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12716 seed = seed || randomBytes(
32)
12717 network = network || networks.bitcoin
12719 // Stored in a closure to make accidental serialization less likely
12720 var masterKey = HDNode.fromSeedBuffer(seed, network)
12722 // HD first-level child derivation method should be hardened
12723 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
12724 var accountZero = masterKey.deriveHardened(
0)
12725 var externalAccount = accountZero.derive(
0)
12726 var internalAccount = accountZero.derive(
1)
12728 this.addresses = []
12729 this.changeAddresses = []
12730 this.network = network
12733 // FIXME: remove in
2.0.0
12734 this.unspentMap = {}
12736 // FIXME: remove in
2.0.0
12738 this.newMasterKey = function (seed) {
12739 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12741 seed = seed || randomBytes(
32)
12742 masterKey = HDNode.fromSeedBuffer(seed, network)
12744 accountZero = masterKey.deriveHardened(
0)
12745 externalAccount = accountZero.derive(
0)
12746 internalAccount = accountZero.derive(
1)
12749 me.changeAddresses = []
12755 this.getMasterKey = function () {
12758 this.getAccountZero = function () {
12761 this.getExternalAccount = function () {
12762 return externalAccount
12764 this.getInternalAccount = function () {
12765 return internalAccount
12769 Wallet.prototype.createTransaction = function (to, value, options) {
12770 // FIXME: remove in
2.0.0
12771 if (typeof options !== 'object') {
12772 if (options !== undefined) {
12773 console.warn('Non options object parameters are deprecated, use options object instead')
12776 fixedFee: arguments[
2],
12777 changeAddress: arguments[
3]
12782 options = options || {}
12784 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
12786 var changeAddress = options.changeAddress
12787 var fixedFee = options.fixedFee
12788 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
12790 // filter by minConf, then pending and sort by descending value
12791 var unspents = this.unspents.filter(function (unspent) {
12792 return unspent.confirmations
>= minConf
12793 }).filter(function (unspent) {
12794 return !unspent.pending
12795 }).sort(function (o1, o2) {
12796 return o2.value - o1.value
12801 var subTotal = value
12803 var txb = new TransactionBuilder()
12804 txb.addOutput(to, value)
12806 for (var i =
0; i < unspents.length; ++i) {
12807 var unspent = unspents[i]
12808 addresses.push(unspent.address)
12810 txb.addInput(unspent.txHash, unspent.index)
12812 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12814 accum += unspent.value
12815 subTotal = value + fee
12817 if (accum
>= subTotal) {
12818 var change = accum - subTotal
12820 if (change
> this.network.dustThreshold) {
12821 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12828 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12830 return this.signWith(txb, addresses).build()
12833 // FIXME: remove in
2.0.0
12834 Wallet.prototype.processPendingTx = function (tx) {
12835 this.__processTx(tx, true)
12838 // FIXME: remove in
2.0.0
12839 Wallet.prototype.processConfirmedTx = function (tx) {
12840 this.__processTx(tx, false)
12843 // FIXME: remove in
2.0.0
12844 Wallet.prototype.__processTx = function (tx, isPending) {
12845 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
12847 var txId = tx.getId()
12848 var txHash = tx.getHash()
12850 tx.outs.forEach(function (txOut, i) {
12854 address = Address.fromOutputScript(txOut.script, this.network).toString()
12856 if (!(e.message.match(/has no matching Address/)))
12860 var myAddresses = this.addresses.concat(this.changeAddresses)
12861 if (myAddresses.indexOf(address)
> -
1) {
12862 var lookup = txId + ':' + i
12863 if (lookup in this.unspentMap) return
12865 // its unique, add it
12868 confirmations:
0, // no way to determine this without more information
12872 value: txOut.value,
12876 this.unspentMap[lookup] = unspent
12877 this.unspents.push(unspent)
12881 tx.ins.forEach(function (txIn) {
12882 // copy and convert to big-endian hex
12883 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12885 var lookup = txInId + ':' + txIn.index
12886 if (!(lookup in this.unspentMap)) return
12888 var unspent = this.unspentMap[lookup]
12891 unspent.pending = true
12892 unspent.spent = true
12894 delete this.unspentMap[lookup]
12896 this.unspents = this.unspents.filter(function (unspent2) {
12897 return unspent !== unspent2
12903 Wallet.prototype.generateAddress = function () {
12904 var k = this.addresses.length
12905 var address = this.getExternalAccount().derive(k).getAddress()
12907 this.addresses.push(address.toString())
12909 return this.getReceiveAddress()
12912 Wallet.prototype.generateChangeAddress = function () {
12913 var k = this.changeAddresses.length
12914 var address = this.getInternalAccount().derive(k).getAddress()
12916 this.changeAddresses.push(address.toString())
12918 return this.getChangeAddress()
12921 Wallet.prototype.getAddress = function () {
12922 if (this.addresses.length ===
0) {
12923 this.generateAddress()
12926 return this.addresses[this.addresses.length -
1]
12929 Wallet.prototype.getBalance = function (minConf) {
12930 minConf = minConf ||
0
12932 return this.unspents.filter(function (unspent) {
12933 return unspent.confirmations
>= minConf
12935 // FIXME: remove spent filter in
2.0.0
12936 }).filter(function (unspent) {
12937 return !unspent.spent
12938 }).reduce(function (accum, unspent) {
12939 return accum + unspent.value
12943 Wallet.prototype.getChangeAddress = function () {
12944 if (this.changeAddresses.length ===
0) {
12945 this.generateChangeAddress()
12948 return this.changeAddresses[this.changeAddresses.length -
1]
12951 Wallet.prototype.getInternalPrivateKey = function (index) {
12952 return this.getInternalAccount().derive(index).privKey
12955 Wallet.prototype.getPrivateKey = function (index) {
12956 return this.getExternalAccount().derive(index).privKey
12959 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12962 if ((index = this.addresses.indexOf(address))
> -
1) {
12963 return this.getPrivateKey(index)
12966 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
12967 return this.getInternalPrivateKey(index)
12970 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12973 Wallet.prototype.getUnspentOutputs = function (minConf) {
12974 minConf = minConf ||
0
12976 return this.unspents.filter(function (unspent) {
12977 return unspent.confirmations
>= minConf
12979 // FIXME: remove spent filter in
2.0.0
12980 }).filter(function (unspent) {
12981 return !unspent.spent
12982 }).map(function (unspent) {
12984 address: unspent.address,
12985 confirmations: unspent.confirmations,
12986 index: unspent.index,
12987 txId: unspent.txId,
12988 value: unspent.value,
12990 // FIXME: remove in
2.0.0
12991 hash: unspent.txId,
12992 pending: unspent.pending
12997 Wallet.prototype.setUnspentOutputs = function (unspents) {
12998 this.unspentMap = {}
12999 this.unspents = unspents.map(function (unspent) {
13000 // FIXME: remove unspent.hash in
2.0.0
13001 var txId = unspent.txId || unspent.hash
13002 var index = unspent.index
13004 // FIXME: remove in
2.0.0
13005 if (unspent.hash !== undefined) {
13006 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13009 // FIXME: remove in
2.0.0
13010 if (index === undefined) {
13011 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13012 index = unspent.outputIndex
13015 typeForce('String', txId)
13016 typeForce('Number', index)
13017 typeForce('Number', unspent.value)
13019 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13020 assert.doesNotThrow(function () {
13021 Address.fromBase58Check(unspent.address)
13022 }, 'Expected Base58 Address, got ' + unspent.address)
13023 assert(isFinite(index), 'Expected finite index, got ' + index)
13025 // FIXME: remove branch in
2.0.0
13026 if (unspent.confirmations !== undefined) {
13027 typeForce('Number', unspent.confirmations)
13030 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13033 address: unspent.address,
13034 confirmations: unspent.confirmations ||
0,
13038 value: unspent.value,
13040 // FIXME: remove in
2.0.0
13041 pending: unspent.pending || false
13044 // FIXME: remove in
2.0.0
13045 this.unspentMap[txId + ':' + index] = unspent
13051 Wallet.prototype.signWith = function (tx, addresses) {
13052 addresses.forEach(function (address, i) {
13053 var privKey = this.getPrivateKeyForAddress(address)
13055 tx.sign(i, privKey)
13061 function estimatePaddedFee (tx, network) {
13062 var tmpTx = tx.clone()
13063 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13065 return network.estimateFee(tmpTx)
13068 // FIXME:
1.0.0 shims, remove in
2.0.0
13069 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13070 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13072 module.exports = Wallet
13074 }).call(this,require("buffer").Buffer)
13075 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13077 <script>bitcoin.networks.shadow = {
13078 magicPrefix: '\x19ShadowCash Signed Message:\n',
13080 public:
0xEE80286A,
13081 private:
0xEE8031E8
13088 estimateFee: function() { return "unused in this app" },
13091 bitcoin.networks.shadowtn = {
13092 magicPrefix: '\x19ShadowCash Signed Message:\n',
13094 public:
0x76C0FDFB,
13095 private:
0x76C1077A
13102 estimateFee: function() { return "unused in this app" },
13105 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13109 /** @fileOverview Javascript cryptography implementation.
13111 * Crush to remove comments, shorten variable names and
13112 * generally reduce transmission size.
13114 * @author Emily Stark
13115 * @author Mike Hamburg
13116 * @author Dan Boneh
13120 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13121 /*global document, window, escape, unescape, module, require, Uint32Array */
13123 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13125 /** @namespace Symmetric ciphers. */
13128 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13131 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13134 /** @namespace Block cipher modes of operation. */
13137 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13141 * @namespace Bit array encoders and decoders.
13144 * The members of this namespace are functions which translate between
13145 * SJCL's bitArrays and other objects (usually strings). Because it
13146 * isn't always clear which direction is encoding and which is decoding,
13147 * the method names are "fromBits" and "toBits".
13151 /** @namespace Exceptions. */
13153 /** @constructor Ciphertext is corrupt. */
13154 corrupt: function(message) {
13155 this.toString = function() { return "CORRUPT: "+this.message; };
13156 this.message = message;
13159 /** @constructor Invalid parameter. */
13160 invalid: function(message) {
13161 this.toString = function() { return "INVALID: "+this.message; };
13162 this.message = message;
13165 /** @constructor Bug or missing feature in SJCL. @constructor */
13166 bug: function(message) {
13167 this.toString = function() { return "BUG: "+this.message; };
13168 this.message = message;
13171 /** @constructor Something isn't ready. */
13172 notReady: function(message) {
13173 this.toString = function() { return "NOT READY: "+this.message; };
13174 this.message = message;
13179 if(typeof module !== 'undefined' && module.exports){
13180 module.exports = sjcl;
13182 if (typeof define === "function") {
13183 define([], function () {
13191 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13193 * @author Emily Stark
13194 * @author Mike Hamburg
13195 * @author Dan Boneh
13198 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13202 * These objects are the currency accepted by SJCL's crypto functions.
13206 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13207 * but many of them can take arguments that are not a multiple of
4 bytes.
13208 * This library encodes arrays of bits (whose size need not be a multiple of
8
13209 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13210 * array of words,
32 bits at a time. Since the words are double-precision
13211 * floating point numbers, they fit some extra data. We use this (in a private,
13212 * possibly-changing manner) to encode the number of bits actually present
13213 * in the last word of the array.
13217 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13218 * to ciphers like AES which want arrays of words.
13223 * Array slices in units of bits.
13224 * @param {bitArray} a The array to slice.
13225 * @param {Number} bstart The offset to the start of the slice, in bits.
13226 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13227 * slice until the end of the array.
13228 * @return {bitArray} The requested slice.
13230 bitSlice: function (a, bstart, bend) {
13231 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13232 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13236 * Extract a number packed into a bit array.
13237 * @param {bitArray} a The array to slice.
13238 * @param {Number} bstart The offset to the start of the slice, in bits.
13239 * @param {Number} length The length of the number to extract.
13240 * @return {Number} The requested slice.
13242 extract: function(a, bstart, blength) {
13243 // FIXME: this Math.floor is not necessary at all, but for some reason
13244 // seems to suppress a bug in the Chromium JIT.
13245 var x, sh = Math.floor((-bstart-blength) &
31);
13246 if ((bstart + blength -
1 ^ bstart) & -
32) {
13247 // it crosses a boundary
13248 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13250 // within a single word
13251 x = a[bstart/
32|
0]
>>> sh;
13253 return x & ((
1<
<blength) -
1);
13257 * Concatenate two bit arrays.
13258 * @param {bitArray} a1 The first array.
13259 * @param {bitArray} a2 The second array.
13260 * @return {bitArray} The concatenation of a1 and a2.
13262 concat: function (a1, a2) {
13263 if (a1.length ===
0 || a2.length ===
0) {
13264 return a1.concat(a2);
13267 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13268 if (shift ===
32) {
13269 return a1.concat(a2);
13271 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13276 * Find the length of an array of bits.
13277 * @param {bitArray} a The array.
13278 * @return {Number} The length of a, in bits.
13280 bitLength: function (a) {
13281 var l = a.length, x;
13282 if (l ===
0) { return
0; }
13284 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13288 * Truncate an array.
13289 * @param {bitArray} a The array.
13290 * @param {Number} len The length to truncate to, in bits.
13291 * @return {bitArray} A new array, truncated to len bits.
13293 clamp: function (a, len) {
13294 if (a.length *
32 < len) { return a; }
13295 a = a.slice(
0, Math.ceil(len /
32));
13298 if (l
> 0 && len) {
13299 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13305 * Make a partial word for a bit array.
13306 * @param {Number} len The number of bits in the word.
13307 * @param {Number} x The bits.
13308 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13309 * @return {Number} The partial word.
13311 partial: function (len, x, _end) {
13312 if (len ===
32) { return x; }
13313 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13317 * Get the number of bits used by a partial word.
13318 * @param {Number} x The partial word.
13319 * @return {Number} The number of bits used by the partial word.
13321 getPartial: function (x) {
13322 return Math.round(x/
0x10000000000) ||
32;
13326 * Compare two arrays for equality in a predictable amount of time.
13327 * @param {bitArray} a The first array.
13328 * @param {bitArray} b The second array.
13329 * @return {boolean} true if a == b; false otherwise.
13331 equal: function (a, b) {
13332 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13336 for (i=
0; i
<a.length; i++) {
13342 /** Shift an array right.
13343 * @param {bitArray} a The array to shift.
13344 * @param {Number} shift The number of bits to shift.
13345 * @param {Number} [carry=
0] A byte to carry in
13346 * @param {bitArray} [out=[]] An array to prepend to the output.
13349 _shiftRight: function (a, shift, carry, out) {
13350 var i, last2=
0, shift2;
13351 if (out === undefined) { out = []; }
13353 for (; shift
>=
32; shift -=
32) {
13358 return out.concat(a);
13361 for (i=
0; i
<a.length; i++) {
13362 out.push(carry | a[i]
>>>shift);
13363 carry = a[i] << (
32-shift);
13365 last2 = a.length ? a[a.length-
1] :
0;
13366 shift2 = sjcl.bitArray.getPartial(last2);
13367 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13371 /** xor a block of
4 words together.
13374 _xor4: function(x,y) {
13375 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13378 /** byteswap a word array inplace.
13379 * (does not handle partial words)
13380 * @param {sjcl.bitArray} a word array
13381 * @return {sjcl.bitArray} byteswapped array
13383 byteswapM: function(a) {
13384 var i, v, m =
0xff00;
13385 for (i =
0; i < a.length; ++i) {
13387 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13394 //// codecString.js
13396 /** @fileOverview Bit array codec implementations.
13398 * @author Emily Stark
13399 * @author Mike Hamburg
13400 * @author Dan Boneh
13403 /** @namespace UTF-
8 strings */
13404 sjcl.codec.utf8String = {
13405 /** Convert from a bitArray to a UTF-
8 string. */
13406 fromBits: function (arr) {
13407 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13408 for (i=
0; i
<bl/
8; i++) {
13412 out += String.fromCharCode(tmp
>>> 24);
13415 return decodeURIComponent(escape(out));
13418 /** Convert from a UTF-
8 string to a bitArray. */
13419 toBits: function (str) {
13420 str = unescape(encodeURIComponent(str));
13421 var out = [], i, tmp=
0;
13422 for (i=
0; i
<str.length; i++) {
13423 tmp = tmp <<
8 | str.charCodeAt(i);
13430 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13439 /** @fileOverview Bit array codec implementations.
13441 * @author Emily Stark
13442 * @author Mike Hamburg
13443 * @author Dan Boneh
13446 /** @namespace Hexadecimal */
13448 /** Convert from a bitArray to a hex string. */
13449 fromBits: function (arr) {
13451 for (i=
0; i
<arr.length; i++) {
13452 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13454 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13456 /** Convert from a hex string to a bitArray. */
13457 toBits: function (str) {
13458 var i, out=[], len;
13459 str = str.replace(/\s|
0x/g,
"");
13461 str = str +
"00000000";
13462 for (i=
0; i
<str.length; i+=
8) {
13463 out.push(parseInt(str.substr(i,
8),
16)^
0);
13465 return sjcl.bitArray.clamp(out, len*
4);
13472 /** @fileOverview Javascript SHA-
512 implementation.
13474 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13475 * SJCL by Stefan Thomas.
13477 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13478 * Released with New BSD License
13480 * @author Emily Stark
13481 * @author Mike Hamburg
13482 * @author Dan Boneh
13483 * @author Jeff Mott
13484 * @author Stefan Thomas
13488 * Context for a SHA-
512 operation in progress.
13490 * @class Secure Hash Algorithm,
512 bits.
13492 sjcl.hash.sha512 = function (hash) {
13493 if (!this._key[
0]) { this._precompute(); }
13495 this._h = hash._h.slice(
0);
13496 this._buffer = hash._buffer.slice(
0);
13497 this._length = hash._length;
13504 * Hash a string or an array of words.
13506 * @param {bitArray|String} data the data to hash.
13507 * @return {bitArray} The hash value, an array of
16 big-endian words.
13509 sjcl.hash.sha512.hash = function (data) {
13510 return (new sjcl.hash.sha512()).update(data).finalize();
13513 sjcl.hash.sha512.prototype = {
13515 * The hash's block size, in bits.
13521 * Reset the hash state.
13524 reset:function () {
13525 this._h = this._init.slice(
0);
13532 * Input several words to the hash.
13533 * @param {bitArray|String} data the data to hash.
13536 update: function (data) {
13537 if (typeof data ===
"string") {
13538 data = sjcl.codec.utf8String.toBits(data);
13540 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13542 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13543 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13544 this._block(b.splice(
0,
32));
13550 * Complete hashing and output the hash value.
13551 * @return {bitArray} The hash value, an array of
16 big-endian words.
13553 finalize:function () {
13554 var i, b = this._buffer, h = this._h;
13556 // Round out and push the buffer
13557 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13559 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13560 for (i = b.length +
4; i &
31; i++) {
13564 // append the length
13567 b.push(Math.floor(this._length /
0x100000000));
13568 b.push(this._length |
0);
13571 this._block(b.splice(
0,
32));
13579 * The SHA-
512 initialization vector, to be precomputed.
13585 * Least significant
24 bits of SHA512 initialization values.
13587 * Javascript only has
53 bits of precision, so we compute the
40 most
13588 * significant bits and add the remaining
24 bits as constants.
13592 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13596 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13597 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13601 * The SHA-
512 hash key, to be precomputed.
13607 * Least significant
24 bits of SHA512 key values.
13611 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13612 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13613 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13614 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13615 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13616 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13617 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13618 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13619 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13620 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13624 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13625 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13626 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13627 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13628 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13629 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13630 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13631 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13632 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13633 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13634 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13635 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13636 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13637 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13638 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13639 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13640 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13641 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13642 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13643 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13647 * Function to precompute _init and _key.
13650 _precompute: function () {
13651 // XXX: This code is for precomputing the SHA256 constants, change for
13652 // SHA512 and re-enable.
13653 var i =
0, prime =
2, factor;
13655 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13656 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13658 outer: for (; i
<80; prime++) {
13659 for (factor=
2; factor*factor <= prime; factor++) {
13660 if (prime % factor ===
0) {
13667 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13668 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13670 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13671 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13677 * Perform one cycle of SHA-
512.
13678 * @param {bitArray} words one block of words.
13681 _block:function (words) {
13683 w = words.slice(
0),
13686 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
13687 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
13688 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
13689 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
13691 // Working variables
13692 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13693 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13694 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13695 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13697 for (i=
0; i
<80; i++) {
13698 // load up the input word for this round
13701 wrl = w[i *
2 +
1];
13704 var gamma0xh = w[(i-
15) *
2];
13705 var gamma0xl = w[(i-
15) *
2 +
1];
13707 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
13708 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
13711 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
13712 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
13713 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
13716 var gamma1xh = w[(i-
2) *
2];
13717 var gamma1xl = w[(i-
2) *
2 +
1];
13719 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
13720 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
13723 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
13724 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
13725 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
13728 var wr7h = w[(i-
7) *
2];
13729 var wr7l = w[(i-
7) *
2 +
1];
13731 var wr16h = w[(i-
16) *
2];
13732 var wr16l = w[(i-
16) *
2 +
1];
13734 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
13735 wrl = gamma0l + wr7l;
13736 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
13738 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
13740 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
13744 w[i*
2 +
1] = wrl |=
0;
13747 var chh = (eh & fh) ^ (~eh & gh);
13748 var chl = (el & fl) ^ (~el & gl);
13751 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13752 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13755 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
13756 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
13759 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
13760 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
13764 var krl = k[i*
2+
1];
13766 // t1 = h + sigma1 + ch + K(round) + W(round)
13767 var t1l = hl + sigma1l;
13768 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
13770 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
13772 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
13773 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
13774 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
13776 // t2 = sigma0 + maj
13777 var t2l = sigma0l + majl;
13778 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
13780 // Update working variables
13787 el = (dl + t1l) |
0;
13788 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
13795 al = (t1l + t2l) |
0;
13796 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
13799 // Intermediate hash
13800 h0l = h[
1] = (h0l + al) |
0;
13801 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
13802 h1l = h[
3] = (h1l + bl) |
0;
13803 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
13804 h2l = h[
5] = (h2l + cl) |
0;
13805 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
13806 h3l = h[
7] = (h3l + dl) |
0;
13807 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
13808 h4l = h[
9] = (h4l + el) |
0;
13809 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
13810 h5l = h[
11] = (h5l + fl) |
0;
13811 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
13812 h6l = h[
13] = (h6l + gl) |
0;
13813 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
13814 h7l = h[
15] = (h7l + hl) |
0;
13815 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
13822 /** @fileOverview HMAC implementation.
13824 * @author Emily Stark
13825 * @author Mike Hamburg
13826 * @author Dan Boneh
13829 /** HMAC with the specified hash function.
13831 * @param {bitArray} key the key for HMAC.
13832 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13834 sjcl.misc.hmac = function (key, Hash) {
13835 this._hash = Hash = Hash || sjcl.hash.sha256;
13836 var exKey = [[],[]], i,
13837 bs = Hash.prototype.blockSize /
32;
13838 this._baseHash = [new Hash(), new Hash()];
13840 if (key.length
> bs) {
13841 key = Hash.hash(key);
13844 for (i=
0; i
<bs; i++) {
13845 exKey[
0][i] = key[i]^
0x36363636;
13846 exKey[
1][i] = key[i]^
0x5C5C5C5C;
13849 this._baseHash[
0].update(exKey[
0]);
13850 this._baseHash[
1].update(exKey[
1]);
13851 this._resultHash = new Hash(this._baseHash[
0]);
13854 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13855 * @param {bitArray|String} data The data to mac.
13857 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13858 if (!this._updated) {
13860 return this.digest(data);
13862 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
13866 sjcl.misc.hmac.prototype.reset = function () {
13867 this._resultHash = new this._hash(this._baseHash[
0]);
13868 this._updated = false;
13871 sjcl.misc.hmac.prototype.update = function (data) {
13872 this._updated = true;
13873 this._resultHash.update(data);
13876 sjcl.misc.hmac.prototype.digest = function () {
13877 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
13888 /** @fileOverview Password-based key-derivation function, version
2.0.
13890 * @author Emily Stark
13891 * @author Mike Hamburg
13892 * @author Dan Boneh
13895 /** Password-Based Key-Derivation Function, version
2.0.
13897 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13899 * This is the method specified by RSA's PKCS #
5 standard.
13901 * @param {bitArray|String} password The password.
13902 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13903 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
13904 * @param {Number} [length] The length of the derived key. Defaults to the
13905 output size of the hash function.
13906 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13907 * @return {bitArray} the derived key.
13909 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13910 count = count ||
1000;
13912 if (length <
0 || count <
0) {
13913 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
13916 if (typeof password ===
"string") {
13917 password = sjcl.codec.utf8String.toBits(password);
13920 if (typeof salt ===
"string") {
13921 salt = sjcl.codec.utf8String.toBits(salt);
13924 Prff = Prff || sjcl.misc.hmac;
13926 var prf = new Prff(password),
13927 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13929 for (k =
1;
32 * out.length < (length ||
1); k++) {
13930 u = ui = prf.encrypt(b.concat(salt,[k]));
13932 for (i=
1; i
<count; i++) {
13933 ui = prf.encrypt(ui);
13934 for (j=
0; j
<ui.length; j++) {
13939 out = out.concat(u);
13942 if (length) { out = b.clamp(out, length); }
13950 /** @fileOverview Javascript SHA-
256 implementation.
13952 * An older version of this implementation is available in the public
13953 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13954 * Stanford University
2008-
2010 and BSD-licensed for liability
13957 * Special thanks to Aldo Cortesi for pointing out several bugs in
13960 * @author Emily Stark
13961 * @author Mike Hamburg
13962 * @author Dan Boneh
13966 * Context for a SHA-
256 operation in progress.
13968 * @class Secure Hash Algorithm,
256 bits.
13970 sjcl.hash.sha256 = function (hash) {
13971 if (!this._key[
0]) { this._precompute(); }
13973 this._h = hash._h.slice(
0);
13974 this._buffer = hash._buffer.slice(
0);
13975 this._length = hash._length;
13982 * Hash a string or an array of words.
13984 * @param {bitArray|String} data the data to hash.
13985 * @return {bitArray} The hash value, an array of
16 big-endian words.
13987 sjcl.hash.sha256.hash = function (data) {
13988 return (new sjcl.hash.sha256()).update(data).finalize();
13991 sjcl.hash.sha256.prototype = {
13993 * The hash's block size, in bits.
13999 * Reset the hash state.
14002 reset:function () {
14003 this._h = this._init.slice(
0);
14010 * Input several words to the hash.
14011 * @param {bitArray|String} data the data to hash.
14014 update: function (data) {
14015 if (typeof data ===
"string") {
14016 data = sjcl.codec.utf8String.toBits(data);
14018 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14020 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14021 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14022 this._block(b.splice(
0,
16));
14028 * Complete hashing and output the hash value.
14029 * @return {bitArray} The hash value, an array of
8 big-endian words.
14031 finalize:function () {
14032 var i, b = this._buffer, h = this._h;
14034 // Round out and push the buffer
14035 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14037 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14038 for (i = b.length +
2; i &
15; i++) {
14042 // append the length
14043 b.push(Math.floor(this._length /
0x100000000));
14044 b.push(this._length |
0);
14047 this._block(b.splice(
0,
16));
14055 * The SHA-
256 initialization vector, to be precomputed.
14060 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14064 * The SHA-
256 hash key, to be precomputed.
14070 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14071 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14072 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14073 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14074 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14075 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14076 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14077 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14082 * Function to precompute _init and _key.
14085 _precompute: function () {
14086 var i =
0, prime =
2, factor;
14088 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14090 outer: for (; i
<64; prime++) {
14091 for (factor=
2; factor*factor <= prime; factor++) {
14092 if (prime % factor ===
0) {
14099 this._init[i] = frac(Math.pow(prime,
1/
2));
14101 this._key[i] = frac(Math.pow(prime,
1/
3));
14107 * Perform one cycle of SHA-
256.
14108 * @param {bitArray} words one block of words.
14111 _block:function (words) {
14113 w = words.slice(
0),
14116 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14117 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14119 /* Rationale for placement of |
0 :
14120 * If a value can overflow is original
32 bits by a factor of more than a few
14121 * million (
2^
23 ish), there is a possibility that it might overflow the
14122 *
53-bit mantissa and lose precision.
14124 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14125 * propagates around the loop, and on the hash state h[]. I don't believe
14126 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14127 * (for h4 anyway), and better safe than sorry.
14129 * The clamps on h[] are necessary for the output to be correct even in the
14130 * common case and for short inputs.
14132 for (i=
0; i
<64; i++) {
14133 // load up the input word for this round
14137 a = w[(i+
1 ) &
15];
14138 b = w[(i+
14) &
15];
14139 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14140 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14141 w[i&
15] + w[(i+
9) &
15]) |
0;
14144 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14147 h7 = h6; h6 = h5; h5 = h4;
14149 h3 = h2; h2 = h1; h1 = h0;
14151 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14154 h[
0] = h[
0]+h0 |
0;
14155 h[
1] = h[
1]+h1 |
0;
14156 h[
2] = h[
2]+h2 |
0;
14157 h[
3] = h[
3]+h3 |
0;
14158 h[
4] = h[
4]+h4 |
0;
14159 h[
5] = h[
5]+h5 |
0;
14160 h[
6] = h[
6]+h6 |
0;
14161 h[
7] = h[
7]+h7 |
0;
14165 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14166 WORDLISTS["english"] = [
14167 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14168 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14169 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14170 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14171 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14172 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14173 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14174 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14175 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14176 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14177 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14178 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14179 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14180 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14181 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14182 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14183 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14184 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14185 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14186 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14187 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14188 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14189 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14190 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14191 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14192 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14193 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14194 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14195 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14196 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14197 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14198 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14199 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14200 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14201 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14202 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14203 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14204 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14205 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14206 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14207 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14208 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14209 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14210 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14211 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14212 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14213 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14214 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14215 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14216 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14217 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14218 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14219 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14220 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14221 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14222 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14223 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14224 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14225 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14226 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14227 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14228 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14229 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14230 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14231 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14232 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14233 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14234 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14235 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14236 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14237 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14238 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14239 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14240 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14241 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14242 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14243 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14244 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14245 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14246 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14247 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14248 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14249 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14250 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14251 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14252 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14253 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14254 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14255 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14256 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14257 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14258 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14259 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14260 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14261 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14262 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14263 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14264 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14265 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14266 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14267 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14268 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14269 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14270 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14271 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14272 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14273 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14274 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14275 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14276 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14277 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14278 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14279 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14280 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14281 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14282 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14283 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14284 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14285 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14286 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14287 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14288 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14289 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14290 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14291 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14292 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14293 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14294 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14295 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14296 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14297 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14298 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14299 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14300 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14301 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14302 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14303 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14304 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14305 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14306 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14307 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14308 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14309 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14310 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14311 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14312 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14313 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14314 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14315 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14316 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14317 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14318 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14319 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14320 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14321 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14322 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14323 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14324 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14325 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14326 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14327 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14328 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14329 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14330 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14331 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14332 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14333 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14334 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14335 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14336 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14337 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14338 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14339 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14340 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14341 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14342 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14343 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14344 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14345 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14346 "thank","that","theme","then","theory","there","they","thing","this","thought",
14347 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14348 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14349 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14350 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14351 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14352 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14353 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14354 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14355 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14356 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14357 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14358 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14359 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14360 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14361 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14362 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14363 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14364 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14365 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14366 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14367 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14368 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14369 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14370 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14371 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14374 * Copyright (c)
2013 Pavol Rusnak
14376 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14377 * this software and associated documentation files (the "Software"), to deal in
14378 * the Software without restriction, including without limitation the rights to
14379 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14380 * of the Software, and to permit persons to whom the Software is furnished to do
14381 * so, subject to the following conditions:
14383 * The above copyright notice and this permission notice shall be included in all
14384 * copies or substantial portions of the Software.
14386 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14387 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14388 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14389 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14390 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14391 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14395 * Javascript port from python by Ian Coleman
14397 * Requires code from sjcl
14398 * https://github.com/bitwiseshiftleft/sjcl
14401 var Mnemonic = function(language) {
14403 var PBKDF2_ROUNDS =
2048;
14409 var hmacSHA512 = function(key) {
14410 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14411 this.encrypt = function() {
14412 return hasher.encrypt.apply(hasher, arguments);
14417 wordlist = WORDLISTS[language];
14418 if (wordlist.length != RADIX) {
14419 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14424 self.generate = function(strength) {
14425 strength = strength ||
128;
14426 var r = strength %
32;
14428 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
14430 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14431 if (!hasStrongCrypto) {
14432 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14434 var buffer = new Uint8Array(strength /
8);
14435 var data = crypto.getRandomValues(buffer);
14436 return self.toMnemonic(data);
14439 self.toMnemonic = function(byteArray) {
14440 if (byteArray.length %
4 > 0) {
14441 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
14444 //h = hashlib.sha256(data).hexdigest()
14445 var data = byteArrayToWordArray(byteArray);
14446 var hash = sjcl.hash.sha256.hash(data);
14447 var h = sjcl.codec.hex.fromBits(hash);
14449 // b is a binary string, eg '
00111010101100...'
14450 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
14451 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
14453 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14454 // c = bin(int(h,
16))[
2:].zfill(
256)
14455 // d = c[:len(data) *
8 /
32]
14456 var a = byteArrayToBinaryString(byteArray);
14457 var c = zfill(hexStringToBinaryString(h),
256);
14458 var d = c.substring(
0, byteArray.length *
8 /
32);
14459 // b = line1 + line2
14463 var blen = b.length /
11;
14464 for (var i=
0; i
<blen; i++) {
14465 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
14466 result.push(wordlist[idx]);
14468 return result.join(' ');
14471 self.check = function(mnemonic) {
14472 var mnemonic = mnemonic.split(' ')
14473 if (mnemonic.length %
3 > 0) {
14476 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14478 for (var i=
0; i
<mnemonic.length; i++) {
14479 var word = mnemonic[i];
14480 var wordIndex = wordlist.indexOf(word);
14481 if (wordIndex == -
1) {
14484 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14485 idx.push(binaryIndex);
14487 var b = idx.join('');
14489 //d = b[:l /
33 *
32]
14491 var d = b.substring(
0, l /
33 *
32);
14492 var h = b.substring(l - l /
33, l);
14493 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14494 var nd = binaryStringToWordArray(d);
14495 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14496 var ndHash = sjcl.hash.sha256.hash(nd);
14497 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14498 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14499 var nh = ndBstr.substring(
0,l/
33);
14503 self.toSeed = function(mnemonic, passphrase) {
14504 passphrase = passphrase || '';
14505 mnemonic = self.normalizeString(mnemonic)
14506 passphrase = self.normalizeString(passphrase)
14507 passphrase =
"mnemonic" + passphrase;
14508 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14509 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14510 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14511 var hashHex = sjcl.codec.hex.fromBits(result);
14515 self.normalizeString = function(str) {
14516 if (typeof str.normalize ==
"function") {
14517 return str.normalize(
"NFKD");
14520 // TODO decide how to handle this in the future.
14521 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14526 function byteArrayToWordArray(data) {
14528 for (var i=
0; i
<data.length/
4; i++) {
14530 v += data[i*
4 +
0] <<
8 *
3;
14531 v += data[i*
4 +
1] <<
8 *
2;
14532 v += data[i*
4 +
2] <<
8 *
1;
14533 v += data[i*
4 +
3] <<
8 *
0;
14539 function byteArrayToBinaryString(data) {
14541 for (var i=
0; i
<data.length; i++) {
14542 bin += zfill(data[i].toString(
2),
8);
14547 function hexStringToBinaryString(hexString) {
14549 for (var i=
0; i
<hexString.length; i++) {
14550 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14552 return binaryString;
14555 function binaryStringToWordArray(binary) {
14556 var aLen = binary.length /
32;
14558 for (var i=
0; i
<aLen; i++) {
14559 var valueStr = binary.substring(
0,
32);
14560 var value = parseInt(valueStr,
2);
14562 binary = binary.slice(
32);
14567 // Pad a numeric string on the left with zero digits until the given width
14569 // Note this differs to the python implementation because it does not
14570 // handle numbers starting with a sign.
14571 function zfill(source, length) {
14572 source = source.toString();
14573 while (source.length < length) {
14574 source = '
0' + source;
14583 <script>(function() {
14585 var mnemonic = new Mnemonic("english");
14586 var bip32RootKey = null;
14587 var bip32ExtendedKey = null;
14588 var network = bitcoin.networks.bitcoin;
14589 var addressRowTemplate = $("#address-row-template");
14591 var showIndex = true;
14592 var showAddress = true;
14593 var showPrivKey = true;
14595 var phraseChangeTimeoutEvent = null;
14598 DOM.network = $(".network");
14599 DOM.phraseNetwork = $("#network-phrase");
14600 DOM.phrase = $(".phrase");
14601 DOM.passphrase = $(".passphrase");
14602 DOM.generate = $(".generate");
14603 DOM.rootKey = $(".root-key");
14604 DOM.extendedPrivKey = $(".extended-priv-key");
14605 DOM.extendedPubKey = $(".extended-pub-key");
14606 DOM.bip32tab = $("#bip32-tab");
14607 DOM.bip44tab = $("#bip44-tab");
14608 DOM.bip32panel = $("#bip32");
14609 DOM.bip44panel = $("#bip44");
14610 DOM.bip32path = $("#bip32-path");
14611 DOM.bip44path = $("#bip44-path");
14612 DOM.bip44purpose = $("#bip44 .purpose");
14613 DOM.bip44coin = $("#bip44 .coin");
14614 DOM.bip44account = $("#bip44 .account");
14615 DOM.bip44change = $("#bip44 .change");
14616 DOM.strength = $(".strength");
14617 DOM.addresses = $(".addresses");
14618 DOM.rowsToAdd = $(".rows-to-add");
14619 DOM.more = $(".more");
14620 DOM.feedback = $(".feedback");
14621 DOM.tab = $(".derivation-type a");
14622 DOM.indexToggle = $(".index-toggle");
14623 DOM.addressToggle = $(".address-toggle");
14624 DOM.privateKeyToggle = $(".private-key-toggle");
14626 var derivationPath = $(".tab-pane.active .path").val();
14630 DOM.network.on("change", networkChanged);
14631 DOM.phrase.on("input", delayedPhraseChanged);
14632 DOM.passphrase.on("input", delayedPhraseChanged);
14633 DOM.generate.on("click", generateClicked);
14634 DOM.more.on("click", showMore);
14635 DOM.bip32path.on("input", bip32Changed);
14636 DOM.bip44purpose.on("input", bip44Changed);
14637 DOM.bip44coin.on("input", bip44Changed);
14638 DOM.bip44account.on("input", bip44Changed);
14639 DOM.bip44change.on("input", bip44Changed);
14640 DOM.tab.on("click", tabClicked);
14641 DOM.indexToggle.on("click", toggleIndexes);
14642 DOM.addressToggle.on("click", toggleAddresses);
14643 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14646 hideValidationError();
14647 populateNetworkSelect();
14652 function networkChanged(e) {
14653 var network = e.target.value;
14654 networks[network].onSelect();
14655 setBip44DerivationPath();
14656 delayedPhraseChanged();
14659 function delayedPhraseChanged() {
14660 hideValidationError();
14662 if (phraseChangeTimeoutEvent != null) {
14663 clearTimeout(phraseChangeTimeoutEvent);
14665 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14668 function phraseChanged() {
14670 hideValidationError();
14671 // Get the mnemonic phrase
14672 var phrase = DOM.phrase.val();
14673 var passphrase = DOM.passphrase.val();
14674 var errorText = findPhraseErrors(phrase);
14676 showValidationError(errorText);
14679 // Get the derivation path
14680 var errorText = findDerivationPathErrors();
14682 showValidationError(errorText);
14685 // Calculate and display
14686 calcBip32Seed(phrase, passphrase, derivationPath);
14687 displayBip32Info();
14691 function generateClicked() {
14694 setTimeout(function() {
14695 var phrase = generateRandomPhrase();
14703 function tabClicked(e) {
14704 var activePath = $(e.target.getAttribute("href") + " .path");
14705 derivationPath = activePath.val();
14706 derivationChanged();
14709 function derivationChanged() {
14710 delayedPhraseChanged();
14713 function bip32Changed() {
14714 derivationPath = DOM.bip32path.val();
14715 derivationChanged();
14718 function bip44Changed() {
14719 setBip44DerivationPath();
14720 derivationPath = DOM.bip44path.val();
14721 derivationChanged();
14724 function toggleIndexes() {
14725 showIndex = !showIndex;
14726 $("td.index span").toggleClass("invisible");
14729 function toggleAddresses() {
14730 showAddress = !showAddress;
14731 $("td.address span").toggleClass("invisible");
14734 function togglePrivateKeys() {
14735 showPrivKey = !showPrivKey;
14736 $("td.privkey span").toggleClass("invisible");
14741 function generateRandomPhrase() {
14742 if (!hasStrongRandom()) {
14743 var errorText = "This browser does not support strong randomness";
14744 showValidationError(errorText);
14747 var numWords = parseInt(DOM.strength.val());
14748 // Check strength is an integer
14749 if (isNaN(numWords)) {
14750 DOM.strength.val("
12");
14753 // Check strength is a multiple of
32, if not round it down
14754 if (numWords %
3 !=
0) {
14755 numWords = Math.floor(numWords /
3) *
3;
14756 DOM.strength.val(numWords);
14758 // Check strength is at least
32
14759 if (numWords ==
0) {
14761 DOM.strength.val(numWords);
14763 var strength = numWords /
3 *
32;
14764 var words = mnemonic.generate(strength);
14765 DOM.phrase.val(words);
14769 function calcBip32Seed(phrase, passphrase, path) {
14770 var seed = mnemonic.toSeed(phrase, passphrase);
14771 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14772 bip32ExtendedKey = bip32RootKey;
14773 // Derive the key from the path
14774 var pathBits = path.split("/");
14775 for (var i=
0; i
<pathBits.length; i++) {
14776 var bit = pathBits[i];
14777 var index = parseInt(bit);
14778 if (isNaN(index)) {
14781 var hardened = bit[bit.length-
1] ==
"'";
14783 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14786 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14791 function showValidationError(errorText) {
14797 function hideValidationError() {
14803 function findPhraseErrors(phrase) {
14804 // TODO make this right
14805 // Preprocess the words
14806 phrase = mnemonic.normalizeString(phrase);
14807 var parts = phrase.split(
" ");
14809 for (var i=
0; i
<parts.length; i++) {
14810 var part = parts[i];
14811 if (part.length
> 0) {
14812 // TODO check that lowercasing is always valid to do
14813 proper.push(part.toLowerCase());
14816 // TODO some levenstein on the words
14817 var properPhrase = proper.join(' ');
14818 // Check the words are valid
14819 var isValid = mnemonic.check(properPhrase);
14821 return
"Invalid mnemonic";
14826 function findDerivationPathErrors(path) {
14831 function displayBip32Info() {
14833 var rootKey = bip32RootKey.toBase58();
14834 DOM.rootKey.val(rootKey);
14835 var extendedPrivKey = bip32ExtendedKey.toBase58();
14836 DOM.extendedPrivKey.val(extendedPrivKey);
14837 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14838 DOM.extendedPubKey.val(extendedPubKey);
14839 // Display the addresses and privkeys
14840 clearAddressesList();
14841 displayAddresses(
0,
20);
14844 function displayAddresses(start, total) {
14845 for (var i=
0; i
<total; i++) {
14846 var index = i + start;
14847 new TableRow(index);
14851 function TableRow(index) {
14857 function calculateValues() {
14858 setTimeout(function() {
14859 var key = bip32ExtendedKey.derive(index);
14860 var address = key.getAddress().toString();
14861 var privkey = key.privKey.toWIF(network);
14862 addAddressToList(index, address, privkey);
14870 function showMore() {
14871 var start = DOM.addresses.children().length;
14872 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14873 if (isNaN(rowsToAdd)) {
14875 DOM.rowsToAdd.val(
"20");
14877 if (rowsToAdd
> 200) {
14878 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
14879 msg +=
"Do you want to continue?";
14880 if (!confirm(msg)) {
14884 displayAddresses(start, rowsToAdd);
14887 function clearDisplay() {
14888 clearAddressesList();
14890 hideValidationError();
14893 function clearAddressesList() {
14894 DOM.addresses.empty();
14897 function clearKey() {
14898 DOM.rootKey.val(
"");
14899 DOM.extendedPrivKey.val(
"");
14900 DOM.extendedPubKey.val(
"");
14903 function addAddressToList(index, address, privkey) {
14904 var row = $(addressRowTemplate.html());
14906 var indexCell = row.find(
".index span");
14907 var addressCell = row.find(
".address span");
14908 var privkeyCell = row.find(
".privkey span");
14910 indexCell.text(index);
14911 addressCell.text(address);
14912 privkeyCell.text(privkey);
14915 indexCell.addClass(
"invisible");
14917 if (!showAddress) {
14918 addressCell.addClass(
"invisible");
14920 if (!showPrivKey) {
14921 privkeCell.addClass(
"invisible");
14923 DOM.addresses.append(row);
14926 function hasStrongRandom() {
14927 return 'crypto' in window && window['crypto'] !== null;
14930 function disableForms() {
14931 $(
"form").on(
"submit", function(e) {
14932 e.preventDefault();
14936 function setBip44DerivationPath() {
14937 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
14938 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
14939 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
14940 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
14942 path += purpose +
"'/";
14943 path += coin +
"'/";
14944 path += account +
"'/";
14946 DOM.bip44path.val(path);
14949 function parseIntNoNaN(val, defaultVal) {
14950 var v = parseInt(val);
14957 function showPending() {
14959 .text(
"Calculating...")
14963 function hidePending() {
14969 function populateNetworkSelect() {
14970 for (var i=
0; i
<networks.length; i++) {
14971 var network = networks[i];
14972 var option = $(
"<option>");
14973 option.attr(
"value", i);
14974 option.text(network.name);
14975 DOM.phraseNetwork.append(option);
14982 onSelect: function() {
14983 network = bitcoin.networks.bitcoin;
14984 DOM.bip44coin.val(
0);
14988 name:
"Bitcoin Testnet",
14989 onSelect: function() {
14990 network = bitcoin.networks.testnet;
14991 DOM.bip44coin.val(
1);
14996 onSelect: function() {
14997 network = bitcoin.networks.litecoin;
14998 DOM.bip44coin.val(
2);
15003 onSelect: function() {
15004 network = bitcoin.networks.dogecoin;
15005 DOM.bip44coin.val(
3);
15009 name:
"ShadowCash",
15010 onSelect: function() {
15011 network = bitcoin.networks.shadow;
15012 DOM.bip44coin.val(
35);
15016 name:
"ShadowCash Testnet",
15017 onSelect: function() {
15018 network = bitcoin.networks.shadowtn;
15019 DOM.bip44coin.val(
1);