4 <meta charset=
"utf-8" />
5 <title>BIP39 - Mnemonic Code
</title>
6 <!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">-->
9 * Bootstrap v3.2
.0 (http://getbootstrap.com)
10 * Copyright
2011-
2014 Twitter, Inc.
11 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
12 *//*! 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}}
15 <meta content=
"Mnemonic code for generating deterministic keys" name=
"description"/>
16 <meta content=
"width=device-width, initial-scale=1.0" name=
"viewport" />
17 <meta content=
"bitcoin mnemonic converter" name=
"description" />
18 <meta content=
"DC POS" name=
"author" />
24 .form-control[readonly] {
37 background-color: orange;
41 border:
2px solid #
555;
43 border-bottom-left-radius:
20px
20px;
44 border-bottom-right-radius:
20px
20px;
49 <div class=
"container">
51 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
54 <div class=
"col-md-12">
56 <form class=
"form-horizontal" role=
"form">
57 <div class=
"col-sm-2"></div>
58 <div class=
"col-sm-10">
59 <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>
60 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
62 <div class=
"form-group">
63 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
64 <div class=
"col-sm-10">
65 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
68 <div class=
"form-group">
69 <label for=
"strength" class=
"col-sm-2 control-label">Number of words
</label>
70 <div class=
"col-sm-10">
71 <div class=
"input-group">
72 <input type=
"number" class=
"strength form-control" id=
"strength" value=
"12">
73 <span class=
"input-group-btn">
74 <button class=
"btn generate">Generate Random Mnemonic
</button>
79 <div class=
"form-group">
80 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
81 <div class=
"col-sm-10">
82 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
85 <div class=
"form-group">
86 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
87 <div class=
"col-sm-10">
88 <textarea id=
"root-key" class=
"root-key form-control" readonly=
"readonly"></textarea>
98 <div class=
"col-md-12">
99 <h2>Derivation Path
</h2>
100 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
102 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a></li>
103 <li><a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a></li>
105 <div class=
"derivation-type tab-content">
106 <div id=
"bip44" class=
"tab-pane active">
107 <form class=
"form-horizontal" role=
"form">
109 <div class=
"col-sm-2"></div>
110 <div class=
"col-sm-10">
111 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
113 <div class=
"form-group">
114 <label for=
"purpose" class=
"col-sm-2 control-label">
115 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
117 <div class=
"col-sm-10">
118 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
121 <div class=
"form-group">
122 <label for=
"coin" class=
"col-sm-2 control-label">
123 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
125 <div class=
"col-sm-10">
126 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
129 <div class=
"form-group">
130 <label for=
"account" class=
"col-sm-2 control-label">
131 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
133 <div class=
"col-sm-10">
134 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
137 <div class=
"form-group">
138 <label for=
"change" class=
"col-sm-2 control-label">
139 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
141 <div class=
"col-sm-10">
142 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
145 <div class=
"form-group">
146 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
147 <div class=
"col-sm-10">
148 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
153 <div id=
"bip32" class=
"tab-pane">
154 <form class=
"form-horizontal" role=
"form">
156 <div class=
"col-sm-2"></div>
157 <div class=
"col-sm-10">
158 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
160 <div class=
"form-group">
161 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
162 <div class=
"col-sm-10">
163 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
169 <form class=
"form-horizontal" role=
"form">
170 <div class=
"form-group">
171 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
172 <div class=
"col-sm-10">
173 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
176 <div class=
"form-group">
177 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
178 <div class=
"col-sm-10">
179 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
189 <div class=
"col-md-12">
190 <h2>Derived Addresses
</h2>
191 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
192 <table class=
"table table-striped">
195 <div class=
"input-group">
197 <button class=
"index-toggle">Toggle
</button>
201 <div class=
"input-group">
203 <button class=
"address-toggle">Toggle
</button>
207 <div class=
"input-group">
208 Private Key
209 <button class=
"private-key-toggle">Toggle
</button>
213 <tbody class=
"addresses">
214 <tr><td> </td><td> </td><td> </td></tr>
215 <tr><td> </td><td> </td><td> </td></tr>
216 <tr><td> </td><td> </td><td> </td></tr>
217 <tr><td> </td><td> </td><td> </td></tr>
218 <tr><td> </td><td> </td><td> </td></tr>
223 <span>Show next
</button>
224 <input type=
"number" class=
"rows-to-add" value=
"20">
225 <button class=
"more">Show
</button>
230 <div class=
"col-md-12">
232 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
235 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
237 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
240 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
242 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
244 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
247 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
249 <h3>Private Keys
</h3>
252 <a href=
"https://brainwallet.github.io/" target=
"_blank">brainwallet.org
</a>,
253 but be careful - it can be easy to make mistakes if you
254 don't know what you're doing
262 <div class=
"col-md-12">
264 <h2>Offline Usage
</h2>
267 You can use this tool without having to be online.
270 In your browser, select file save-as, and save this page
274 Double-click that file to open it in a browser
275 on any offline computer.
278 Alternatively, download it from
279 <a href=
"https://github.com/dcpos/bip39">
280 https://github.com/dcpos/bip39
289 <div class=
"col-md-12">
291 <h2>This project is
100% open-source code
</h2>
294 <span>Get the source code at -
</span>
295 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
296 https://github.com/dcpos/bip39
303 <span>BitcoinJS -
</span>
304 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
305 https://github.com/bitcoinjs/bitcoinjs-lib
310 <span>jsBIP39 -
</span>
311 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
312 https://github.com/iancoleman/jsbip39
317 <span>asmCrypto -
</span>
318 <a href=
"https://github.com/vibornoff/asmcrypto.js" target=
"_blank">
319 https://github.com/vibornoff/asmcrypto.js
324 <span>jQuery -
</span>
325 <a href=
"https://jquery.com/" target=
"_blank">
331 <span>Twitter Bootstrap -
</span>
332 <a href=
"http://getbootstrap.com/" target=
"_blank">
333 http://getbootstrap.com/
342 <div class=
"feedback-container">
343 <div class=
"feedback">Loading...
</div>
346 <script type=
"text/template" id=
"address-row-template">
348 <td class=
"index"><span></span></td>
349 <td class=
"address"><span></span></td>
350 <td class=
"privkey"><span></span></td>
354 <!--<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>-->
356 /*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
357 !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)
358 },_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))
359 },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});
362 <!--<script src="https://maxcdn.bootstrapcdn.com/bootstrap/
3.2.0/js/bootstrap.min.js
"></script>-->
365 * Bootstrap v3.2.0 (http://getbootstrap.com)
366 * Copyright 2011-2014 Twitter, Inc.
367 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
369 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);
372 <!--<script src="/js/bitcoinjs-1-0-0.js"></script>-->
374 (function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Bitcoin=e()}})(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);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][
0].call(f.exports,function(e){var n=t[o][
1][e];return s(n?n:e)},f,f.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(_dereq_,module,exports){
375 var assert = _dereq_('assert')
377 module.exports = BigInteger
379 // JavaScript engine analysis
380 var canary =
0xdeadbeefcafe;
381 var j_lm = ((canary&
0xffffff)==
0xefcafe);
383 // (public) Constructor
384 function BigInteger(a,b,c) {
385 if (!(this instanceof BigInteger)) {
386 return new BigInteger(a, b, c);
390 if(
"number" == typeof a) this.fromNumber(a,b,c);
391 else if(b == null &&
"string" != typeof a) this.fromString(a,
256);
392 else this.fromString(a,b);
396 var proto = BigInteger.prototype;
398 // return new, unset BigInteger
399 function nbi() { return new BigInteger(null); }
404 // am: Compute w_j += (x*this_i), propagate carries,
405 // c is initial carry, returns final carry.
406 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
407 // We need to select the fastest one that works in this environment.
409 // am1: use a single mult and divide to get the high bits,
410 // max digit bits should be
26 because
411 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
412 function am1(i,x,w,j,c,n) {
414 var v = x*this[i++]+w[j]+c;
415 c = Math.floor(v/
0x4000000);
416 w[j++] = v
&0x3ffffff;
420 // am2 avoids a big mult-and-extract completely.
421 // Max digit bits should be <=
30 because we do bitwise ops
422 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
423 function am2(i,x,w,j,c,n) {
424 var xl = x&
0x7fff, xh = x
>>15;
426 var l = this[i]
&0x7fff;
427 var h = this[i++]
>>15;
429 l = xl*l+((m&
0x7fff)<
<15)+w[j]+(c&
0x3fffffff);
430 c = (l
>>>30)+(m
>>>15)+xh*h+(c
>>>30);
431 w[j++] = l
&0x3fffffff;
435 // Alternately, set max digit bits to
28 since some
436 // browsers slow down when dealing with
32-bit numbers.
437 function am3(i,x,w,j,c,n) {
438 var xl = x&
0x3fff, xh = x
>>14;
440 var l = this[i]
&0x3fff;
441 var h = this[i++]
>>14;
443 l = xl*l+((m&
0x3fff)<
<14)+w[j]+c;
444 c = (l
>>28)+(m
>>14)+xh*h;
445 w[j++] = l
&0xfffffff;
451 BigInteger.prototype.am = am1;
455 if(j_lm && (navigator.appName ==
"Microsoft Internet Explorer")) {
456 BigInteger.prototype.am = am2;
459 else if(j_lm && (navigator.appName !=
"Netscape")) {
460 BigInteger.prototype.am = am1;
463 else { // Mozilla/Netscape seems to prefer am3
464 BigInteger.prototype.am = am3;
469 BigInteger.prototype.DB = dbits;
470 BigInteger.prototype.DM = ((
1<
<dbits)-
1);
471 var DV = BigInteger.prototype.DV = (
1<
<dbits);
474 BigInteger.prototype.FV = Math.pow(
2,BI_FP);
475 BigInteger.prototype.F1 = BI_FP-dbits;
476 BigInteger.prototype.F2 =
2*dbits-BI_FP;
479 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz";
480 var BI_RC = new Array();
482 rr =
"0".charCodeAt(
0);
483 for(vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv;
484 rr =
"a".charCodeAt(
0);
485 for(vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv;
486 rr =
"A".charCodeAt(
0);
487 for(vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv;
489 function int2char(n) { return BI_RM.charAt(n); }
490 function intAt(s,i) {
491 var c = BI_RC[s.charCodeAt(i)];
492 return (c==null)?-
1:c;
495 // (protected) copy this to r
496 function bnpCopyTo(r) {
497 for(var i = this.t-
1; i
>=
0; --i) r[i] = this[i];
502 // (protected) set from integer value x, -DV <= x < DV
503 function bnpFromInt(x) {
506 if(x
> 0) this[
0] = x;
507 else if(x < -
1) this[
0] = x+DV;
511 // return bigint initialized to value
512 function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
514 // (protected) set from string and radix
515 function bnpFromString(s,b) {
520 else if(b ==
8) k =
3;
521 else if(b ==
256) k =
8; // byte array
522 else if(b ==
2) k =
1;
523 else if(b ==
32) k =
5;
524 else if(b ==
4) k =
2;
525 else { self.fromRadix(s,b); return; }
528 var i = s.length, mi = false, sh =
0;
530 var x = (k==
8)?s[i]&
0xff:intAt(s,i);
532 if(s.charAt(i) == "-") mi = true;
538 else if(sh+k
> self.DB) {
539 self[self.t-
1] |= (x&((
1<<(self.DB-sh))-
1))<
<sh;
540 self[self.t++] = (x
>>(self.DB-sh));
543 self[self.t-
1] |= x<
<sh;
545 if(sh
>= self.DB) sh -= self.DB;
547 if(k ==
8 && (s[
0]&
0x80) !=
0) {
549 if(sh
> 0) self[self.t-
1] |= ((
1<<(self.DB-sh))-
1)<
<sh;
552 if(mi) BigInteger.ZERO.subTo(self,self);
555 // (protected) clamp off excess high words
556 function bnpClamp() {
557 var c = this.s&this.DM;
558 while(this.t
> 0 && this[this.t-
1] == c) --this.t;
561 // (public) return string representation in given radix
562 function bnToString(b) {
564 if(self.s <
0) return
"-"+self.negate().toString(b);
567 else if(b ==
8) k =
3;
568 else if(b ==
2) k =
1;
569 else if(b ==
32) k =
5;
570 else if(b ==
4) k =
2;
571 else return self.toRadix(b);
572 var km = (
1<
<k)-
1, d, m = false, r =
"", i = self.t;
573 var p = self.DB-(i*self.DB)%k;
575 if(p < self.DB && (d = self[i]
>>p)
> 0) { m = true; r = int2char(d); }
578 d = (self[i]&((
1<
<p)-
1))<<(k-p);
579 d |= self[--i]
>>(p+=self.DB-k);
582 d = (self[i]
>>(p-=k))
&km;
583 if(p <=
0) { p += self.DB; --i; }
586 if(m) r += int2char(d);
593 function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
596 function bnAbs() { return (this.s
<0)?this.negate():this; }
598 // (public) return + if this
> a, - if this < a,
0 if equal
599 function bnCompareTo(a) {
604 if(r !=
0) return (this.s
<0)?-r:r;
605 while(--i
>=
0) if((r=this[i]-a[i]) !=
0) return r;
609 // returns bit length of the integer x
612 if((t=x
>>>16) !=
0) { x = t; r +=
16; }
613 if((t=x
>>8) !=
0) { x = t; r +=
8; }
614 if((t=x
>>4) !=
0) { x = t; r +=
4; }
615 if((t=x
>>2) !=
0) { x = t; r +=
2; }
616 if((t=x
>>1) !=
0) { x = t; r +=
1; }
620 // (public) return the number of bits in
"this"
621 function bnBitLength() {
622 if(this.t <=
0) return
0;
623 return this.DB*(this.t-
1)+nbits(this[this.t-
1]^(this.s&this.DM));
626 // (protected) r = this << n*DB
627 function bnpDLShiftTo(n,r) {
629 for(i = this.t-
1; i
>=
0; --i) r[i+n] = this[i];
630 for(i = n-
1; i
>=
0; --i) r[i] =
0;
635 // (protected) r = this
>> n*DB
636 function bnpDRShiftTo(n,r) {
637 for(var i = n; i < this.t; ++i) r[i-n] = this[i];
638 r.t = Math.max(this.t-n,
0);
642 // (protected) r = this << n
643 function bnpLShiftTo(n,r) {
646 var cbs = self.DB-bs;
648 var ds = Math.floor(n/self.DB), c = (self.s<
<bs)&self.DM, i;
649 for(i = self.t-
1; i
>=
0; --i) {
650 r[i+ds+
1] = (self[i]
>>cbs)|c;
651 c = (self[i]&bm)<
<bs;
653 for(i = ds-
1; i
>=
0; --i) r[i] =
0;
660 // (protected) r = this
>> n
661 function bnpRShiftTo(n,r) {
664 var ds = Math.floor(n/self.DB);
665 if(ds
>= self.t) { r.t =
0; return; }
667 var cbs = self.DB-bs;
670 for(var i = ds+
1; i < self.t; ++i) {
671 r[i-ds-
1] |= (self[i]&bm)<
<cbs;
672 r[i-ds] = self[i]
>>bs;
674 if(bs
> 0) r[self.t-ds-
1] |= (self.s&bm)<
<cbs;
679 // (protected) r = this - a
680 function bnpSubTo(a,r) {
682 var i =
0, c =
0, m = Math.min(a.t,self.t);
707 if(c < -
1) r[i++] = self.DV+c;
708 else if(c
> 0) r[i++] = c;
713 // (protected) r = this * a, r != this,a (HAC
14.12)
714 //
"this" should be the larger one if appropriate.
715 function bnpMultiplyTo(a,r) {
716 var x = this.abs(), y = a.abs();
719 while(--i
>=
0) r[i] =
0;
720 for(i =
0; i < y.t; ++i) r[i+x.t] = x.am(
0,y[i],r,i,
0,x.t);
723 if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
726 // (protected) r = this^
2, r != this (HAC
14.16)
727 function bnpSquareTo(r) {
730 while(--i
>=
0) r[i] =
0;
731 for(i =
0; i < x.t-
1; ++i) {
732 var c = x.am(i,x[i],r,
2*i,
0,
1);
733 if((r[i+x.t]+=x.am(i+
1,
2*x[i],r,
2*i+
1,c,x.t-i-
1))
>= x.DV) {
738 if(r.t
> 0) r[r.t-
1] += x.am(i,x[i],r,
2*i,
0,
1);
743 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
744 // r != q, this != m. q or r may be null.
745 function bnpDivRemTo(m,q,r) {
748 if(pm.t <=
0) return;
751 if(q != null) q.fromInt(
0);
752 if(r != null) self.copyTo(r);
755 if(r == null) r = nbi();
756 var y = nbi(), ts = self.s, ms = m.s;
757 var nsh = self.DB-nbits(pm[pm.t-
1]); // normalize modulus
758 if(nsh
> 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
759 else { pm.copyTo(y); pt.copyTo(r); }
763 var yt = y0*(
1<
<self.F1)+((ys
>1)?y[ys-
2]
>>self.F2:
0);
764 var d1 = self.FV/yt, d2 = (
1<
<self.F1)/yt, e =
1<
<self.F2;
765 var i = r.t, j = i-ys, t = (q==null)?nbi():q;
767 if(r.compareTo(t)
>=
0) {
771 BigInteger.ONE.dlShiftTo(ys,t);
772 t.subTo(y,y); // "negative" y so we can replace sub with am later
773 while(y.t < ys) y[y.t++] =
0;
775 // Estimate quotient digit
776 var qd = (r[--i]==y0)?self.DM:Math.floor(r[i]*d1+(r[i-
1]+e)*d2);
777 if((r[i]+=y.am(
0,qd,r,j,
0,ys)) < qd) { // Try it out
780 while(r[i] < --qd) r.subTo(t,r);
785 if(ts != ms) BigInteger.ZERO.subTo(q,q);
789 if(nsh
> 0) r.rShiftTo(nsh,r); // Denormalize remainder
790 if(ts <
0) BigInteger.ZERO.subTo(r,r);
793 // (public) this mod a
796 this.abs().divRemTo(a,null,r);
797 if(this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r,r);
801 // Modular reduction using
"classic" algorithm
802 function Classic(m) { this.m = m; }
803 function cConvert(x) {
804 if(x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m);
807 function cRevert(x) { return x; }
808 function cReduce(x) { x.divRemTo(this.m,null,x); }
809 function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
810 function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
812 Classic.prototype.convert = cConvert;
813 Classic.prototype.revert = cRevert;
814 Classic.prototype.reduce = cReduce;
815 Classic.prototype.mulTo = cMulTo;
816 Classic.prototype.sqrTo = cSqrTo;
818 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
822 // xy(
2-xy) = (
1+km)(
1-km)
823 // x[y(
2-xy)] =
1-k^
2m^
2
824 // x[y(
2-xy)] ==
1 (mod m^
2)
825 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
826 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
827 // JS multiply "overflows" differently from C/C++, so care is needed here.
828 function bnpInvDigit() {
829 if(this.t <
1) return
0;
831 if((x&
1) ==
0) return
0;
832 var y = x
&3; // y ==
1/x mod
2^
2
833 y = (y*(
2-(x&
0xf)*y))
&0xf; // y ==
1/x mod
2^
4
834 y = (y*(
2-(x&
0xff)*y))
&0xff; // y ==
1/x mod
2^
8
835 y = (y*(
2-(((x&
0xffff)*y)&
0xffff)))
&0xffff; // y ==
1/x mod
2^
16
836 // last step - calculate inverse mod DV directly;
837 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
838 y = (y*(
2-x*y%this.DV))%this.DV; // y ==
1/x mod
2^dbits
839 // we really want the negative inverse, and -DV < y < DV
840 return (y
>0)?this.DV-y:-y;
843 // Montgomery reduction
844 function Montgomery(m) {
846 this.mp = m.invDigit();
847 this.mpl = this.mp
&0x7fff;
848 this.mph = this.mp
>>15;
849 this.um = (
1<<(m.DB-
15))-
1;
854 function montConvert(x) {
856 x.abs().dlShiftTo(this.m.t,r);
857 r.divRemTo(this.m,null,r);
858 if(x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r,r);
863 function montRevert(x) {
870 // x = x/R mod m (HAC
14.32)
871 function montReduce(x) {
872 while(x.t <= this.mt2) // pad x so am has enough room later
874 for(var i =
0; i < this.m.t; ++i) {
875 // faster way of calculating u0 = x[i]*mp mod DV
877 var u0 = (j*this.mpl+(((j*this.mph+(x[i]
>>15)*this.mpl)&this.um)<
<15))&x.DM;
878 // use am to combine the multiply-shift-add into one call
880 x[j] += this.m.am(
0,u0,x,i,
0,this.m.t);
882 while(x[j]
>= x.DV) { x[j] -= x.DV; x[++j]++; }
885 x.drShiftTo(this.m.t,x);
886 if(x.compareTo(this.m)
>=
0) x.subTo(this.m,x);
889 // r = "x^
2/R mod m"; x != r
890 function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
892 // r = "xy/R mod m"; x,y != r
893 function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
895 Montgomery.prototype.convert = montConvert;
896 Montgomery.prototype.revert = montRevert;
897 Montgomery.prototype.reduce = montReduce;
898 Montgomery.prototype.mulTo = montMulTo;
899 Montgomery.prototype.sqrTo = montSqrTo;
901 // (protected) true iff this is even
902 function bnpIsEven() { return ((this.t
>0)?(this[
0]&
1):this.s) ==
0; }
904 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
905 function bnpExp(e,z) {
906 if(e
> 0xffffffff || e <
1) return BigInteger.ONE;
907 var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-
1;
911 if((e&(
1<
<i))
> 0) z.mulTo(r2,g,r);
912 else { var t = r; r = r2; r2 = t; }
917 // (public) this^e % m,
0 <= e <
2^
32
918 function bnModPowInt(e,m) {
920 if(e <
256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
921 return this.exp(e,z);
925 proto.copyTo = bnpCopyTo;
926 proto.fromInt = bnpFromInt;
927 proto.fromString = bnpFromString;
928 proto.clamp = bnpClamp;
929 proto.dlShiftTo = bnpDLShiftTo;
930 proto.drShiftTo = bnpDRShiftTo;
931 proto.lShiftTo = bnpLShiftTo;
932 proto.rShiftTo = bnpRShiftTo;
933 proto.subTo = bnpSubTo;
934 proto.multiplyTo = bnpMultiplyTo;
935 proto.squareTo = bnpSquareTo;
936 proto.divRemTo = bnpDivRemTo;
937 proto.invDigit = bnpInvDigit;
938 proto.isEven = bnpIsEven;
942 proto.toString = bnToString;
943 proto.negate = bnNegate;
945 proto.compareTo = bnCompareTo;
946 proto.bitLength = bnBitLength;
948 proto.modPowInt = bnModPowInt;
952 function nbi() { return new BigInteger(null); }
955 function bnClone() { var r = nbi(); this.copyTo(r); return r; }
957 // (public) return value as integer
958 function bnIntValue() {
960 if(this.t ==
1) return this[
0]-this.DV;
961 else if(this.t ==
0) return -
1;
963 else if(this.t ==
1) return this[
0];
964 else if(this.t ==
0) return
0;
965 // assumes
16 < DB <
32
966 return ((this[
1]&((
1<<(
32-this.DB))-
1))<
<this.DB)|this[
0];
969 // (public) return value as byte
970 function bnByteValue() { return (this.t==
0)?this.s:(this[
0]<
<24)
>>24; }
972 // (public) return value as short (assumes DB
>=
16)
973 function bnShortValue() { return (this.t==
0)?this.s:(this[
0]<
<16)
>>16; }
975 // (protected) return x s.t. r^x < DV
976 function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }
978 // (public)
0 if this ==
0,
1 if this
> 0
979 function bnSigNum() {
980 if(this.s <
0) return -
1;
981 else if(this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0;
985 // (protected) convert to radix string
986 function bnpToRadix(b) {
987 if(b == null) b =
10;
988 if(this.signum() ==
0 || b <
2 || b
> 36) return
"0";
989 var cs = this.chunkSize(b);
990 var a = Math.pow(b,cs);
991 var d = nbv(a), y = nbi(), z = nbi(), r =
"";
992 this.divRemTo(d,y,z);
993 while(y.signum()
> 0) {
994 r = (a+z.intValue()).toString(b).substr(
1) + r;
997 return z.intValue().toString(b) + r;
1000 // (protected) convert from radix string
1001 function bnpFromRadix(s,b) {
1004 if(b == null) b =
10;
1005 var cs = self.chunkSize(b);
1006 var d = Math.pow(b,cs), mi = false, j =
0, w =
0;
1007 for(var i =
0; i < s.length; ++i) {
1010 if(s.charAt(i) ==
"-" && self.signum() ==
0) mi = true;
1016 self.dAddOffset(w,
0);
1022 self.dMultiply(Math.pow(b,j));
1023 self.dAddOffset(w,
0);
1025 if(mi) BigInteger.ZERO.subTo(self,self);
1028 // (protected) alternate constructor
1029 function bnpFromNumber(a,b,c) {
1031 if(
"number" == typeof b) {
1032 // new BigInteger(int,int,RNG)
1033 if(a <
2) self.fromInt(
1);
1035 self.fromNumber(a,c);
1036 if(!self.testBit(a-
1)) // force MSB set
1037 self.bitwiseTo(BigInteger.ONE.shiftLeft(a-
1),op_or,self);
1038 if(self.isEven()) self.dAddOffset(
1,
0); // force odd
1039 while(!self.isProbablePrime(b)) {
1040 self.dAddOffset(
2,
0);
1041 if(self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a-
1),self);
1046 // new BigInteger(int,RNG)
1047 var x = new Array(), t = a
&7;
1048 x.length = (a
>>3)+
1;
1050 if(t
> 0) x[
0] &= ((
1<
<t)-
1); else x[
0] =
0;
1051 self.fromString(x,
256);
1055 // (public) convert to bigendian byte array
1056 function bnToByteArray() {
1058 var i = self.t, r = new Array();
1060 var p = self.DB-(i*self.DB)%
8, d, k =
0;
1062 if(p < self.DB && (d = self[i]
>>p) != (self.s&self.DM)
>>p)
1063 r[k++] = d|(self.s<<(self.DB-p));
1066 d = (self[i]&((
1<
<p)-
1))<<(
8-p);
1067 d |= self[--i]
>>(p+=self.DB-
8);
1070 d = (self[i]
>>(p-=
8))
&0xff;
1071 if(p <=
0) { p += self.DB; --i; }
1073 if((d&
0x80) !=
0) d |= -
256;
1074 if(k ===
0 && (self.s&
0x80) != (d&
0x80)) ++k;
1075 if(k
> 0 || d != self.s) r[k++] = d;
1081 function bnEquals(a) { return(this.compareTo(a)==
0); }
1082 function bnMin(a) { return(this.compareTo(a)
<0)?this:a; }
1083 function bnMax(a) { return(this.compareTo(a)
>0)?this:a; }
1085 // (protected) r = this op a (bitwise)
1086 function bnpBitwiseTo(a,op,r) {
1088 var i, f, m = Math.min(a.t,self.t);
1089 for(i =
0; i < m; ++i) r[i] = op(self[i],a[i]);
1092 for(i = m; i < self.t; ++i) r[i] = op(self[i],f);
1097 for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);
1100 r.s = op(self.s,a.s);
1104 // (public) this & a
1105 function op_and(x,y) { return x
&y; }
1106 function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
1108 // (public) this | a
1109 function op_or(x,y) { return x|y; }
1110 function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
1112 // (public) this ^ a
1113 function op_xor(x,y) { return x^y; }
1114 function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
1116 // (public) this & ~a
1117 function op_andnot(x,y) { return x&~y; }
1118 function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
1123 for(var i =
0; i < this.t; ++i) r[i] = this.DM&~this[i];
1129 // (public) this << n
1130 function bnShiftLeft(n) {
1132 if(n <
0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
1136 // (public) this
>> n
1137 function bnShiftRight(n) {
1139 if(n <
0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
1143 // return index of lowest
1-bit in x, x <
2^
31
1145 if(x ==
0) return -
1;
1147 if((x&
0xffff) ==
0) { x
>>=
16; r +=
16; }
1148 if((x&
0xff) ==
0) { x
>>=
8; r +=
8; }
1149 if((x&
0xf) ==
0) { x
>>=
4; r +=
4; }
1150 if((x&
3) ==
0) { x
>>=
2; r +=
2; }
1155 // (public) returns index of lowest
1-bit (or -
1 if none)
1156 function bnGetLowestSetBit() {
1157 for(var i =
0; i < this.t; ++i)
1158 if(this[i] !=
0) return i*this.DB+lbit(this[i]);
1159 if(this.s <
0) return this.t*this.DB;
1163 // return number of
1 bits in x
1166 while(x !=
0) { x &= x-
1; ++r; }
1170 // (public) return number of set bits
1171 function bnBitCount() {
1172 var r =
0, x = this.s&this.DM;
1173 for(var i =
0; i < this.t; ++i) r += cbit(this[i]^x);
1177 // (public) true iff nth bit is set
1178 function bnTestBit(n) {
1179 var j = Math.floor(n/this.DB);
1180 if(j
>= this.t) return(this.s!=
0);
1181 return((this[j]&(
1<<(n%this.DB)))!=
0);
1184 // (protected) this op (
1<
<n)
1185 function bnpChangeBit(n,op) {
1186 var r = BigInteger.ONE.shiftLeft(n);
1187 this.bitwiseTo(r,op,r);
1191 // (public) this | (
1<
<n)
1192 function bnSetBit(n) { return this.changeBit(n,op_or); }
1194 // (public) this & ~(
1<
<n)
1195 function bnClearBit(n) { return this.changeBit(n,op_andnot); }
1197 // (public) this ^ (
1<
<n)
1198 function bnFlipBit(n) { return this.changeBit(n,op_xor); }
1200 // (protected) r = this + a
1201 function bnpAddTo(a,r) {
1204 var i =
0, c =
0, m = Math.min(a.t,self.t);
1229 if(c
> 0) r[i++] = c;
1230 else if(c < -
1) r[i++] = self.DV+c;
1235 // (public) this + a
1236 function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
1238 // (public) this - a
1239 function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
1241 // (public) this * a
1242 function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
1245 function bnSquare() { var r = nbi(); this.squareTo(r); return r; }
1247 // (public) this / a
1248 function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
1250 // (public) this % a
1251 function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
1253 // (public) [this/a,this%a]
1254 function bnDivideAndRemainder(a) {
1255 var q = nbi(), r = nbi();
1256 this.divRemTo(a,q,r);
1257 return new Array(q,r);
1260 // (protected) this *= n, this
>=
0,
1 < n < DV
1261 function bnpDMultiply(n) {
1262 this[this.t] = this.am(
0,n-
1,this,
0,
0,this.t);
1267 // (protected) this += n << w words, this
>=
0
1268 function bnpDAddOffset(n,w) {
1270 while(this.t <= w) this[this.t++] =
0;
1272 while(this[w]
>= this.DV) {
1274 if(++w
>= this.t) this[this.t++] =
0;
1280 function NullExp() {}
1281 function nNop(x) { return x; }
1282 function nMulTo(x,y,r) { x.multiplyTo(y,r); }
1283 function nSqrTo(x,r) { x.squareTo(r); }
1285 NullExp.prototype.convert = nNop;
1286 NullExp.prototype.revert = nNop;
1287 NullExp.prototype.mulTo = nMulTo;
1288 NullExp.prototype.sqrTo = nSqrTo;
1291 function bnPow(e) { return this.exp(e,new NullExp()); }
1293 // (protected) r = lower n words of "this * a", a.t <= n
1294 // "this" should be the larger one if appropriate.
1295 function bnpMultiplyLowerTo(a,n,r) {
1296 var i = Math.min(this.t+a.t,n);
1297 r.s =
0; // assumes a,this
>=
0
1299 while(i
> 0) r[--i] =
0;
1301 for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(
0,a[i],r,i,
0,this.t);
1302 for(j = Math.min(a.t,n); i < j; ++i) this.am(
0,a[i],r,i,
0,n-i);
1306 // (protected) r =
"this * a" without lower n words, n
> 0
1307 //
"this" should be the larger one if appropriate.
1308 function bnpMultiplyUpperTo(a,n,r) {
1310 var i = r.t = this.t+a.t-n;
1311 r.s =
0; // assumes a,this
>=
0
1312 while(--i
>=
0) r[i] =
0;
1313 for(i = Math.max(n-this.t,
0); i < a.t; ++i)
1314 r[this.t+i-n] = this.am(n-i,a[i],r,
0,
0,this.t+i-n);
1319 // Barrett modular reduction
1320 function Barrett(m) {
1324 BigInteger.ONE.dlShiftTo(
2*m.t,this.r2);
1325 this.mu = this.r2.divide(m);
1329 function barrettConvert(x) {
1330 if(x.s <
0 || x.t
> 2*this.m.t) return x.mod(this.m);
1331 else if(x.compareTo(this.m) <
0) return x;
1332 else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
1335 function barrettRevert(x) { return x; }
1337 // x = x mod m (HAC
14.42)
1338 function barrettReduce(x) {
1340 x.drShiftTo(self.m.t-
1,self.r2);
1341 if(x.t
> self.m.t+
1) { x.t = self.m.t+
1; x.clamp(); }
1342 self.mu.multiplyUpperTo(self.r2,self.m.t+
1,self.q3);
1343 self.m.multiplyLowerTo(self.q3,self.m.t+
1,self.r2);
1344 while(x.compareTo(self.r2) <
0) x.dAddOffset(
1,self.m.t+
1);
1346 while(x.compareTo(self.m)
>=
0) x.subTo(self.m,x);
1349 // r = x^
2 mod m; x != r
1350 function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
1352 // r = x*y mod m; x,y != r
1353 function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
1355 Barrett.prototype.convert = barrettConvert;
1356 Barrett.prototype.revert = barrettRevert;
1357 Barrett.prototype.reduce = barrettReduce;
1358 Barrett.prototype.mulTo = barrettMulTo;
1359 Barrett.prototype.sqrTo = barrettSqrTo;
1361 // (public) this^e % m (HAC
14.85)
1362 function bnModPow(e,m) {
1363 var i = e.bitLength(), k, r = nbv(
1), z;
1364 if(i <=
0) return r;
1365 else if(i <
18) k =
1;
1366 else if(i <
48) k =
3;
1367 else if(i <
144) k =
4;
1368 else if(i <
768) k =
5;
1375 z = new Montgomery(m);
1378 var g = new Array(), n =
3, k1 = k-
1, km = (
1<
<k)-
1;
1379 g[
1] = z.convert(this);
1385 z.mulTo(g2,g[n-
2],g[n]);
1390 var j = e.t-
1, w, is1 = true, r2 = nbi(), t;
1393 if(i
>= k1) w = (e[j]
>>(i-k1))
&km;
1395 w = (e[j]&((
1<<(i+
1))-
1))<<(k1-i);
1396 if(j
> 0) w |= e[j-
1]
>>(this.DB+i-k1);
1400 while((w&
1) ==
0) { w
>>=
1; --n; }
1401 if((i -= n) <
0) { i += this.DB; --j; }
1402 if(is1) { // ret ==
1, don't bother squaring or multiplying it
1407 while(n
> 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -=
2; }
1408 if(n
> 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
1412 while(j
>=
0 && (e[j]&(
1<
<i)) ==
0) {
1413 z.sqrTo(r,r2); t = r; r = r2; r2 = t;
1414 if(--i <
0) { i = this.DB-
1; --j; }
1420 // (public) gcd(this,a) (HAC
14.54)
1422 var x = (this.s
<0)?this.negate():this.clone();
1423 var y = (a.s
<0)?a.negate():a.clone();
1424 if(x.compareTo(y) <
0) { var t = x; x = y; y = t; }
1425 var i = x.getLowestSetBit(), g = y.getLowestSetBit();
1432 while(x.signum()
> 0) {
1433 if((i = x.getLowestSetBit())
> 0) x.rShiftTo(i,x);
1434 if((i = y.getLowestSetBit())
> 0) y.rShiftTo(i,y);
1435 if(x.compareTo(y)
>=
0) {
1444 if(g
> 0) y.lShiftTo(g,y);
1448 // (protected) this % n, n <
2^
26
1449 function bnpModInt(n) {
1450 if(n <=
0) return
0;
1451 var d = this.DV%n, r = (this.s
<0)?n-
1:
0;
1453 if(d ==
0) r = this[
0]%n;
1454 else for(var i = this.t-
1; i
>=
0; --i) r = (d*r+this[i])%n;
1458 // (public)
1/this % m (HAC
14.61)
1459 function bnModInverse(m) {
1460 var ac = m.isEven();
1461 if((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO;
1462 var u = m.clone(), v = this.clone();
1463 var a = nbv(
1), b = nbv(
0), c = nbv(
0), d = nbv(
1);
1464 while(u.signum() !=
0) {
1468 if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
1471 else if(!b.isEven()) b.subTo(m,b);
1477 if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
1480 else if(!d.isEven()) d.subTo(m,d);
1483 if(u.compareTo(v)
>=
0) {
1485 if(ac) a.subTo(c,a);
1490 if(ac) c.subTo(a,c);
1494 if(v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO;
1495 if(d.compareTo(m)
>=
0) return d.subtract(m);
1496 if(d.signum() <
0) d.addTo(m,d); else return d;
1497 if(d.signum() <
0) return d.add(m); else return d;
1501 proto.chunkSize = bnpChunkSize;
1502 proto.toRadix = bnpToRadix;
1503 proto.fromRadix = bnpFromRadix;
1504 proto.fromNumber = bnpFromNumber;
1505 proto.bitwiseTo = bnpBitwiseTo;
1506 proto.changeBit = bnpChangeBit;
1507 proto.addTo = bnpAddTo;
1508 proto.dMultiply = bnpDMultiply;
1509 proto.dAddOffset = bnpDAddOffset;
1510 proto.multiplyLowerTo = bnpMultiplyLowerTo;
1511 proto.multiplyUpperTo = bnpMultiplyUpperTo;
1512 proto.modInt = bnpModInt;
1515 proto.clone = bnClone;
1516 proto.intValue = bnIntValue;
1517 proto.byteValue = bnByteValue;
1518 proto.shortValue = bnShortValue;
1519 proto.signum = bnSigNum;
1520 proto.toByteArray = bnToByteArray;
1521 proto.equals = bnEquals;
1527 proto.andNot = bnAndNot;
1529 proto.shiftLeft = bnShiftLeft;
1530 proto.shiftRight = bnShiftRight;
1531 proto.getLowestSetBit = bnGetLowestSetBit;
1532 proto.bitCount = bnBitCount;
1533 proto.testBit = bnTestBit;
1534 proto.setBit = bnSetBit;
1535 proto.clearBit = bnClearBit;
1536 proto.flipBit = bnFlipBit;
1538 proto.subtract = bnSubtract;
1539 proto.multiply = bnMultiply;
1540 proto.divide = bnDivide;
1541 proto.remainder = bnRemainder;
1542 proto.divideAndRemainder = bnDivideAndRemainder;
1543 proto.modPow = bnModPow;
1544 proto.modInverse = bnModInverse;
1548 // JSBN-specific extension
1549 proto.square = bnSquare;
1551 // BigInteger interfaces not implemented in jsbn:
1553 // BigInteger(int signum, byte[] magnitude)
1554 // double doubleValue()
1555 // float floatValue()
1558 // static BigInteger valueOf(long val)
1561 BigInteger.ZERO = nbv(
0);
1562 BigInteger.ONE = nbv(
1);
1563 BigInteger.valueOf = nbv;
1565 },{"assert":
4}],
2:[function(_dereq_,module,exports){
1567 // FIXME: Kind of a weird way to throw exceptions, consider removing
1568 var assert = _dereq_('assert')
1569 var BigInteger = _dereq_('./bigi')
1572 * Turns a byte array into a big integer.
1574 * This function will interpret a byte array as a big integer in big
1577 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1578 // BigInteger expects a DER integer conformant byte array
1579 if (byteArray[
0] &
0x80) {
1580 return new BigInteger([
0].concat(byteArray))
1583 return new BigInteger(byteArray)
1587 * Returns a byte array representation of the big integer.
1589 * This returns the absolute of the contained value in big endian
1590 * form. A value of zero results in an empty array.
1592 BigInteger.prototype.toByteArrayUnsigned = function() {
1593 var byteArray = this.toByteArray()
1594 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
1597 BigInteger.fromDERInteger = function(byteArray) {
1598 return new BigInteger(byteArray)
1602 * Converts BigInteger to a DER integer representation.
1604 * The format for this value uses the most significant bit as a sign
1605 * bit. If the most significant bit is already set and the integer is
1606 * positive, a
0x00 is prepended.
1624 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1626 BigInteger.fromBuffer = function(buffer) {
1627 // BigInteger expects a DER integer conformant byte array
1628 if (buffer[
0] &
0x80) {
1629 var byteArray = Array.prototype.slice.call(buffer)
1631 return new BigInteger([
0].concat(byteArray))
1634 return new BigInteger(buffer)
1637 BigInteger.fromHex = function(hex) {
1638 if (hex === '') return BigInteger.ZERO
1640 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
1641 assert.equal(hex.length %
2,
0, 'Incomplete hex')
1642 return new BigInteger(hex,
16)
1645 BigInteger.prototype.toBuffer = function(size) {
1646 var byteArray = this.toByteArrayUnsigned()
1649 var padding = size - byteArray.length
1650 while (zeros.length < padding) zeros.push(
0)
1652 return new Buffer(zeros.concat(byteArray))
1655 BigInteger.prototype.toHex = function(size) {
1656 return this.toBuffer(size).toString('hex')
1659 }).call(this,_dereq_(
"buffer").Buffer)
1660 },{
"./bigi":
1,
"assert":
4,
"buffer":
8}],
3:[function(_dereq_,module,exports){
1661 var BigInteger = _dereq_('./bigi')
1664 _dereq_('./convert')
1666 module.exports = BigInteger
1667 },{
"./bigi":
1,
"./convert":
2}],
4:[function(_dereq_,module,exports){
1668 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
1670 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
1672 // Originally from narwhal.js (http://narwhaljs.org)
1673 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
1675 // Permission is hereby granted, free of charge, to any person obtaining a copy
1676 // of this software and associated documentation files (the 'Software'), to
1677 // deal in the Software without restriction, including without limitation the
1678 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1679 // sell copies of the Software, and to permit persons to whom the Software is
1680 // furnished to do so, subject to the following conditions:
1682 // The above copyright notice and this permission notice shall be included in
1683 // all copies or substantial portions of the Software.
1685 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1686 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1687 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1688 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
1689 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
1690 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1692 // when used in node, this will actually load the util module we depend on
1693 // versus loading the builtin util module as happens otherwise
1694 // this is a bug in node module loading as far as I am concerned
1695 var util = _dereq_('util/');
1697 var pSlice = Array.prototype.slice;
1698 var hasOwn = Object.prototype.hasOwnProperty;
1700 //
1. The assert module provides functions that throw
1701 // AssertionError's when particular conditions are not met. The
1702 // assert module must conform to the following interface.
1704 var assert = module.exports = ok;
1706 //
2. The AssertionError is defined in assert.
1707 // new assert.AssertionError({ message: message,
1709 // expected: expected })
1711 assert.AssertionError = function AssertionError(options) {
1712 this.name = 'AssertionError';
1713 this.actual = options.actual;
1714 this.expected = options.expected;
1715 this.operator = options.operator;
1716 if (options.message) {
1717 this.message = options.message;
1718 this.generatedMessage = false;
1720 this.message = getMessage(this);
1721 this.generatedMessage = true;
1723 var stackStartFunction = options.stackStartFunction || fail;
1725 if (Error.captureStackTrace) {
1726 Error.captureStackTrace(this, stackStartFunction);
1729 // non v8 browsers so we can have a stacktrace
1730 var err = new Error();
1732 var out = err.stack;
1734 // try to strip useless frames
1735 var fn_name = stackStartFunction.name;
1736 var idx = out.indexOf('\n' + fn_name);
1738 // once we have located the function frame
1739 // we need to strip out everything before it (and its line)
1740 var next_line = out.indexOf('\n', idx +
1);
1741 out = out.substring(next_line +
1);
1749 // assert.AssertionError instanceof Error
1750 util.inherits(assert.AssertionError, Error);
1752 function replacer(key, value) {
1753 if (util.isUndefined(value)) {
1756 if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {
1757 return value.toString();
1759 if (util.isFunction(value) || util.isRegExp(value)) {
1760 return value.toString();
1765 function truncate(s, n) {
1766 if (util.isString(s)) {
1767 return s.length < n ? s : s.slice(
0, n);
1773 function getMessage(self) {
1774 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
1775 self.operator + ' ' +
1776 truncate(JSON.stringify(self.expected, replacer),
128);
1779 // At present only the three keys mentioned above are used and
1780 // understood by the spec. Implementations or sub modules can pass
1781 // other keys to the AssertionError's constructor - they will be
1784 //
3. All of the following functions must throw an AssertionError
1785 // when a corresponding condition is not met, with a message that
1786 // may be undefined if not provided. All assertion methods provide
1787 // both the actual and expected values to the assertion error for
1788 // display purposes.
1790 function fail(actual, expected, message, operator, stackStartFunction) {
1791 throw new assert.AssertionError({
1796 stackStartFunction: stackStartFunction
1800 // EXTENSION! allows for well behaved errors defined elsewhere.
1803 //
4. Pure assertion tests whether a value is truthy, as determined
1805 // assert.ok(guard, message_opt);
1806 // This statement is equivalent to assert.equal(true, !!guard,
1807 // message_opt);. To test strictly for the value true, use
1808 // assert.strictEqual(true, guard, message_opt);.
1810 function ok(value, message) {
1811 if (!value) fail(value, true, message, '==', assert.ok);
1815 //
5. The equality assertion tests shallow, coercive equality with
1817 // assert.equal(actual, expected, message_opt);
1819 assert.equal = function equal(actual, expected, message) {
1820 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
1823 //
6. The non-equality assertion tests for whether two objects are not equal
1824 // with != assert.notEqual(actual, expected, message_opt);
1826 assert.notEqual = function notEqual(actual, expected, message) {
1827 if (actual == expected) {
1828 fail(actual, expected, message, '!=', assert.notEqual);
1832 //
7. The equivalence assertion tests a deep equality relation.
1833 // assert.deepEqual(actual, expected, message_opt);
1835 assert.deepEqual = function deepEqual(actual, expected, message) {
1836 if (!_deepEqual(actual, expected)) {
1837 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
1841 function _deepEqual(actual, expected) {
1842 //
7.1. All identical values are equivalent, as determined by ===.
1843 if (actual === expected) {
1846 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
1847 if (actual.length != expected.length) return false;
1849 for (var i =
0; i < actual.length; i++) {
1850 if (actual[i] !== expected[i]) return false;
1855 //
7.2. If the expected value is a Date object, the actual value is
1856 // equivalent if it is also a Date object that refers to the same time.
1857 } else if (util.isDate(actual) && util.isDate(expected)) {
1858 return actual.getTime() === expected.getTime();
1860 //
7.3 If the expected value is a RegExp object, the actual value is
1861 // equivalent if it is also a RegExp object with the same source and
1862 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
1863 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
1864 return actual.source === expected.source &&
1865 actual.global === expected.global &&
1866 actual.multiline === expected.multiline &&
1867 actual.lastIndex === expected.lastIndex &&
1868 actual.ignoreCase === expected.ignoreCase;
1870 //
7.4. Other pairs that do not both pass typeof value == 'object',
1871 // equivalence is determined by ==.
1872 } else if (!util.isObject(actual) && !util.isObject(expected)) {
1873 return actual == expected;
1875 //
7.5 For all other Object pairs, including Array objects, equivalence is
1876 // determined by having the same number of owned properties (as verified
1877 // with Object.prototype.hasOwnProperty.call), the same set of keys
1878 // (although not necessarily the same order), equivalent values for every
1879 // corresponding key, and an identical 'prototype' property. Note: this
1880 // accounts for both named and indexed properties on Arrays.
1882 return objEquiv(actual, expected);
1886 function isArguments(object) {
1887 return Object.prototype.toString.call(object) == '[object Arguments]';
1890 function objEquiv(a, b) {
1891 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
1893 // an identical 'prototype' property.
1894 if (a.prototype !== b.prototype) return false;
1895 //~~~I've managed to break Object.keys through screwy arguments passing.
1896 // Converting to array solves the problem.
1897 if (isArguments(a)) {
1898 if (!isArguments(b)) {
1903 return _deepEqual(a, b);
1906 var ka = objectKeys(a),
1909 } catch (e) {//happens when one is a string literal and the other isn't
1912 // having the same number of owned properties (keys incorporates
1914 if (ka.length != kb.length)
1916 //the same set of keys (although not necessarily the same order),
1920 for (i = ka.length -
1; i
>=
0; i--) {
1924 //equivalent values for every corresponding key, and
1925 //~~~possibly expensive deep test
1926 for (i = ka.length -
1; i
>=
0; i--) {
1928 if (!_deepEqual(a[key], b[key])) return false;
1933 //
8. The non-equivalence assertion tests for any deep inequality.
1934 // assert.notDeepEqual(actual, expected, message_opt);
1936 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
1937 if (_deepEqual(actual, expected)) {
1938 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
1942 //
9. The strict equality assertion tests strict equality, as determined by ===.
1943 // assert.strictEqual(actual, expected, message_opt);
1945 assert.strictEqual = function strictEqual(actual, expected, message) {
1946 if (actual !== expected) {
1947 fail(actual, expected, message, '===', assert.strictEqual);
1951 //
10. The strict non-equality assertion tests for strict inequality, as
1952 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
1954 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
1955 if (actual === expected) {
1956 fail(actual, expected, message, '!==', assert.notStrictEqual);
1960 function expectedException(actual, expected) {
1961 if (!actual || !expected) {
1965 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
1966 return expected.test(actual);
1967 } else if (actual instanceof expected) {
1969 } else if (expected.call({}, actual) === true) {
1976 function _throws(shouldThrow, block, expected, message) {
1979 if (util.isString(expected)) {
1990 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
1991 (message ? ' ' + message : '.');
1993 if (shouldThrow && !actual) {
1994 fail(actual, expected, 'Missing expected exception' + message);
1997 if (!shouldThrow && expectedException(actual, expected)) {
1998 fail(actual, expected, 'Got unwanted exception' + message);
2001 if ((shouldThrow && actual && expected &&
2002 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2007 //
11. Expected to throw an error:
2008 // assert.throws(block, Error_opt, message_opt);
2010 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2011 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2014 // EXTENSION! This is annoying to write outside this module.
2015 assert.doesNotThrow = function(block, /*optional*/message) {
2016 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2019 assert.ifError = function(err) { if (err) {throw err;}};
2021 var objectKeys = Object.keys || function (obj) {
2023 for (var key in obj) {
2024 if (hasOwn.call(obj, key)) keys.push(key);
2029 },{"util/":
6}],
5:[function(_dereq_,module,exports){
2030 module.exports = function isBuffer(arg) {
2031 return arg && typeof arg === 'object'
2032 && typeof arg.copy === 'function'
2033 && typeof arg.fill === 'function'
2034 && typeof arg.readUInt8 === 'function';
2036 },{}],
6:[function(_dereq_,module,exports){
2037 (function (process,global){
2038 // Copyright Joyent, Inc. and other Node contributors.
2040 // Permission is hereby granted, free of charge, to any person obtaining a
2041 // copy of this software and associated documentation files (the
2042 // "Software"), to deal in the Software without restriction, including
2043 // without limitation the rights to use, copy, modify, merge, publish,
2044 // distribute, sublicense, and/or sell copies of the Software, and to permit
2045 // persons to whom the Software is furnished to do so, subject to the
2046 // following conditions:
2048 // The above copyright notice and this permission notice shall be included
2049 // in all copies or substantial portions of the Software.
2051 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2052 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2053 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2054 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2055 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2056 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2057 // USE OR OTHER DEALINGS IN THE SOFTWARE.
2059 var formatRegExp = /%[sdj%]/g;
2060 exports.format = function(f) {
2063 for (var i =
0; i < arguments.length; i++) {
2064 objects.push(inspect(arguments[i]));
2066 return objects.join(' ');
2070 var args = arguments;
2071 var len = args.length;
2072 var str = String(f).replace(formatRegExp, function(x) {
2073 if (x === '%%') return '%';
2074 if (i
>= len) return x;
2076 case '%s': return String(args[i++]);
2077 case '%d': return Number(args[i++]);
2080 return JSON.stringify(args[i++]);
2082 return '[Circular]';
2088 for (var x = args[i]; i < len; x = args[++i]) {
2089 if (isNull(x) || !isObject(x)) {
2092 str += ' ' + inspect(x);
2099 // Mark that a method should not be used.
2100 // Returns a modified function which warns once by default.
2101 // If --no-deprecation is set, then it is a no-op.
2102 exports.deprecate = function(fn, msg) {
2103 // Allow for deprecating things in the process of starting up.
2104 if (isUndefined(global.process)) {
2106 return exports.deprecate(fn, msg).apply(this, arguments);
2110 if (process.noDeprecation === true) {
2115 function deprecated() {
2117 if (process.throwDeprecation) {
2118 throw new Error(msg);
2119 } else if (process.traceDeprecation) {
2126 return fn.apply(this, arguments);
2135 exports.debuglog = function(set) {
2136 if (isUndefined(debugEnviron))
2137 debugEnviron = process.env.NODE_DEBUG || '';
2138 set = set.toUpperCase();
2140 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
2141 var pid = process.pid;
2142 debugs[set] = function() {
2143 var msg = exports.format.apply(exports, arguments);
2144 console.error('%s %d: %s', set, pid, msg);
2147 debugs[set] = function() {};
2155 * Echos the value of a value. Trys to print the value out
2156 * in the best way possible given the different types.
2158 * @param {Object} obj The object to print out.
2159 * @param {Object} opts Optional options object that alters the output.
2161 /* legacy: obj, showHidden, depth, colors*/
2162 function inspect(obj, opts) {
2166 stylize: stylizeNoColor
2169 if (arguments.length
>=
3) ctx.depth = arguments[
2];
2170 if (arguments.length
>=
4) ctx.colors = arguments[
3];
2171 if (isBoolean(opts)) {
2173 ctx.showHidden = opts;
2175 // got an "options" object
2176 exports._extend(ctx, opts);
2178 // set default options
2179 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
2180 if (isUndefined(ctx.depth)) ctx.depth =
2;
2181 if (isUndefined(ctx.colors)) ctx.colors = false;
2182 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
2183 if (ctx.colors) ctx.stylize = stylizeWithColor;
2184 return formatValue(ctx, obj, ctx.depth);
2186 exports.inspect = inspect;
2189 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
2193 'underline' : [
4,
24],
2194 'inverse' : [
7,
27],
2201 'magenta' : [
35,
39],
2206 // Don't use 'blue' not visible on cmd.exe
2210 'boolean': 'yellow',
2211 'undefined': 'grey',
2215 // "name": intentionally not styling
2220 function stylizeWithColor(str, styleType) {
2221 var style = inspect.styles[styleType];
2224 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
2225 '\u001b[' + inspect.colors[style][
1] + 'm';
2232 function stylizeNoColor(str, styleType) {
2237 function arrayToHash(array) {
2240 array.forEach(function(val, idx) {
2248 function formatValue(ctx, value, recurseTimes) {
2249 // Provide a hook for user-specified inspect functions.
2250 // Check that value is an object with an inspect function on it
2251 if (ctx.customInspect &&
2253 isFunction(value.inspect) &&
2254 // Filter out the util module, it's inspect function is special
2255 value.inspect !== exports.inspect &&
2256 // Also filter out any prototype objects using the circular check.
2257 !(value.constructor && value.constructor.prototype === value)) {
2258 var ret = value.inspect(recurseTimes, ctx);
2259 if (!isString(ret)) {
2260 ret = formatValue(ctx, ret, recurseTimes);
2265 // Primitive types cannot have properties
2266 var primitive = formatPrimitive(ctx, value);
2271 // Look up the keys of the object.
2272 var keys = Object.keys(value);
2273 var visibleKeys = arrayToHash(keys);
2275 if (ctx.showHidden) {
2276 keys = Object.getOwnPropertyNames(value);
2279 // IE doesn't make error fields non-enumerable
2280 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
2282 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
2283 return formatError(value);
2286 // Some type of object without properties can be shortcutted.
2287 if (keys.length ===
0) {
2288 if (isFunction(value)) {
2289 var name = value.name ? ': ' + value.name : '';
2290 return ctx.stylize('[Function' + name + ']', 'special');
2292 if (isRegExp(value)) {
2293 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
2295 if (isDate(value)) {
2296 return ctx.stylize(Date.prototype.toString.call(value), 'date');
2298 if (isError(value)) {
2299 return formatError(value);
2303 var base = '', array = false, braces = ['{', '}'];
2305 // Make Array say that they are Array
2306 if (isArray(value)) {
2308 braces = ['[', ']'];
2311 // Make functions say that they are functions
2312 if (isFunction(value)) {
2313 var n = value.name ? ': ' + value.name : '';
2314 base = ' [Function' + n + ']';
2317 // Make RegExps say that they are RegExps
2318 if (isRegExp(value)) {
2319 base = ' ' + RegExp.prototype.toString.call(value);
2322 // Make dates with properties first say the date
2323 if (isDate(value)) {
2324 base = ' ' + Date.prototype.toUTCString.call(value);
2327 // Make error with message first say the error
2328 if (isError(value)) {
2329 base = ' ' + formatError(value);
2332 if (keys.length ===
0 && (!array || value.length ==
0)) {
2333 return braces[
0] + base + braces[
1];
2336 if (recurseTimes <
0) {
2337 if (isRegExp(value)) {
2338 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
2340 return ctx.stylize('[Object]', 'special');
2344 ctx.seen.push(value);
2348 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
2350 output = keys.map(function(key) {
2351 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
2357 return reduceToSingleString(output, base, braces);
2361 function formatPrimitive(ctx, value) {
2362 if (isUndefined(value))
2363 return ctx.stylize('undefined', 'undefined');
2364 if (isString(value)) {
2365 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
2366 .replace(/'/g, "\\'")
2367 .replace(/\\"/g, '"') + '\'';
2368 return ctx.stylize(simple, 'string');
2370 if (isNumber(value))
2371 return ctx.stylize('' + value, 'number');
2372 if (isBoolean(value))
2373 return ctx.stylize('' + value, 'boolean');
2374 // For some reason typeof null is "object", so special case here.
2376 return ctx.stylize('null', 'null');
2380 function formatError(value) {
2381 return '[' + Error.prototype.toString.call(value) + ']';
2385 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
2387 for (var i =
0, l = value.length; i < l; ++i) {
2388 if (hasOwnProperty(value, String(i))) {
2389 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
2395 keys.forEach(function(key) {
2396 if (!key.match(/^\d+$/)) {
2397 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
2405 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
2406 var name, str, desc;
2407 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
2410 str = ctx.stylize('[Getter/Setter]', 'special');
2412 str = ctx.stylize('[Getter]', 'special');
2416 str = ctx.stylize('[Setter]', 'special');
2419 if (!hasOwnProperty(visibleKeys, key)) {
2420 name = '[' + key + ']';
2423 if (ctx.seen.indexOf(desc.value) <
0) {
2424 if (isNull(recurseTimes)) {
2425 str = formatValue(ctx, desc.value, null);
2427 str = formatValue(ctx, desc.value, recurseTimes -
1);
2429 if (str.indexOf('\n')
> -
1) {
2431 str = str.split('\n').map(function(line) {
2433 }).join('\n').substr(
2);
2435 str = '\n' + str.split('\n').map(function(line) {
2441 str = ctx.stylize('[Circular]', 'special');
2444 if (isUndefined(name)) {
2445 if (array && key.match(/^\d+$/)) {
2448 name = JSON.stringify('' + key);
2449 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
2450 name = name.substr(
1, name.length -
2);
2451 name = ctx.stylize(name, 'name');
2453 name = name.replace(/'/g, "\\'")
2454 .replace(/\\"/g, '"')
2455 .replace(/(^"|"$)/g, "'");
2456 name = ctx.stylize(name, 'string');
2460 return name + ': ' + str;
2464 function reduceToSingleString(output, base, braces) {
2465 var numLinesEst =
0;
2466 var length = output.reduce(function(prev, cur) {
2468 if (cur.indexOf('\n')
>=
0) numLinesEst++;
2469 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
2474 (base === '' ? '' : base + '\n ') +
2476 output.join(',\n ') +
2481 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
2485 // NOTE: These type checking functions intentionally don't use `instanceof`
2486 // because it is fragile and can be easily faked with `Object.create()`.
2487 function isArray(ar) {
2488 return Array.isArray(ar);
2490 exports.isArray = isArray;
2492 function isBoolean(arg) {
2493 return typeof arg === 'boolean';
2495 exports.isBoolean = isBoolean;
2497 function isNull(arg) {
2498 return arg === null;
2500 exports.isNull = isNull;
2502 function isNullOrUndefined(arg) {
2505 exports.isNullOrUndefined = isNullOrUndefined;
2507 function isNumber(arg) {
2508 return typeof arg === 'number';
2510 exports.isNumber = isNumber;
2512 function isString(arg) {
2513 return typeof arg === 'string';
2515 exports.isString = isString;
2517 function isSymbol(arg) {
2518 return typeof arg === 'symbol';
2520 exports.isSymbol = isSymbol;
2522 function isUndefined(arg) {
2523 return arg === void
0;
2525 exports.isUndefined = isUndefined;
2527 function isRegExp(re) {
2528 return isObject(re) && objectToString(re) === '[object RegExp]';
2530 exports.isRegExp = isRegExp;
2532 function isObject(arg) {
2533 return typeof arg === 'object' && arg !== null;
2535 exports.isObject = isObject;
2537 function isDate(d) {
2538 return isObject(d) && objectToString(d) === '[object Date]';
2540 exports.isDate = isDate;
2542 function isError(e) {
2543 return isObject(e) &&
2544 (objectToString(e) === '[object Error]' || e instanceof Error);
2546 exports.isError = isError;
2548 function isFunction(arg) {
2549 return typeof arg === 'function';
2551 exports.isFunction = isFunction;
2553 function isPrimitive(arg) {
2554 return arg === null ||
2555 typeof arg === 'boolean' ||
2556 typeof arg === 'number' ||
2557 typeof arg === 'string' ||
2558 typeof arg === 'symbol' || // ES6 symbol
2559 typeof arg === 'undefined';
2561 exports.isPrimitive = isPrimitive;
2563 exports.isBuffer = _dereq_('./support/isBuffer');
2565 function objectToString(o) {
2566 return Object.prototype.toString.call(o);
2571 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
2575 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
2576 'Oct', 'Nov', 'Dec'];
2579 function timestamp() {
2581 var time = [pad(d.getHours()),
2582 pad(d.getMinutes()),
2583 pad(d.getSeconds())].join(':');
2584 return [d.getDate(), months[d.getMonth()], time].join(' ');
2588 // log is just a thin wrapper to console.log that prepends a timestamp
2589 exports.log = function() {
2590 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
2595 * Inherit the prototype methods from one constructor into another.
2597 * The Function.prototype.inherits from lang.js rewritten as a standalone
2598 * function (not on Function.prototype). NOTE: If this file is to be loaded
2599 * during bootstrapping this function needs to be rewritten using some native
2600 * functions as prototype setup using normal JavaScript does not work as
2601 * expected during bootstrapping (see mirror.js in r114903).
2603 * @param {function} ctor Constructor function which needs to inherit the
2605 * @param {function} superCtor Constructor function to inherit prototype from.
2607 exports.inherits = _dereq_('inherits');
2609 exports._extend = function(origin, add) {
2610 // Don't do anything if add isn't an object
2611 if (!add || !isObject(add)) return origin;
2613 var keys = Object.keys(add);
2614 var i = keys.length;
2616 origin[keys[i]] = add[keys[i]];
2621 function hasOwnProperty(obj, prop) {
2622 return Object.prototype.hasOwnProperty.call(obj, prop);
2625 }).call(this,_dereq_(
"FWaASH"),typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
2626 },{
"./support/isBuffer":
5,
"FWaASH":
12,
"inherits":
11}],
7:[function(_dereq_,module,exports){
2628 },{}],
8:[function(_dereq_,module,exports){
2630 * The buffer module from node.js, for the browser.
2632 * at author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2636 var base64 = _dereq_('base64-js')
2637 var ieee754 = _dereq_('ieee754')
2639 exports.Buffer = Buffer
2640 exports.SlowBuffer = Buffer
2641 exports.INSPECT_MAX_BYTES =
50
2642 Buffer.poolSize =
8192
2645 * If `Buffer._useTypedArrays`:
2646 * === true Use Uint8Array implementation (fastest)
2647 * === false Use Object implementation (compatible down to IE6)
2649 Buffer._useTypedArrays = (function () {
2650 // Detect if browser supports Typed Arrays. Supported browsers are IE
10+, Firefox
4+,
2651 // Chrome
7+, Safari
5.1+, Opera
11.6+, iOS
4.2+. If the browser does not support adding
2652 // properties to `Uint8Array` instances, then that's the same as no `Uint8Array` support
2653 // because we need to be able to add all the node Buffer API methods. This is an issue
2654 // in Firefox
4-
29. Now fixed: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438
2656 var buf = new ArrayBuffer(
0)
2657 var arr = new Uint8Array(buf)
2658 arr.foo = function () { return
42 }
2659 return
42 === arr.foo() &&
2660 typeof arr.subarray === 'function' // Chrome
9-
10 lack `subarray`
2670 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2671 * with function properties for all the node `Buffer` API functions. We use
2672 * `Uint8Array` so that square bracket notation works as expected -- it returns
2675 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2678 function Buffer (subject, encoding, noZero) {
2679 if (!(this instanceof Buffer))
2680 return new Buffer(subject, encoding, noZero)
2682 var type = typeof subject
2684 if (encoding === 'base64' && type === 'string') {
2685 subject = base64clean(subject)
2690 if (type === 'number')
2691 length = coerce(subject)
2692 else if (type === 'string')
2693 length = Buffer.byteLength(subject, encoding)
2694 else if (type === 'object')
2695 length = coerce(subject.length) // assume that object is array-like
2697 throw new Error('First argument needs to be a number, array or string.')
2700 if (Buffer._useTypedArrays) {
2701 // Preferred: Return an augmented `Uint8Array` instance for best performance
2702 buf = Buffer._augment(new Uint8Array(length))
2704 // Fallback: Return THIS instance of Buffer (created by `new`)
2707 buf._isBuffer = true
2711 if (Buffer._useTypedArrays && typeof subject.byteLength === 'number') {
2712 // Speed optimization -- use set if we're copying from a typed array
2714 } else if (isArrayish(subject)) {
2715 // Treat array-ish objects as a byte array
2716 if (Buffer.isBuffer(subject)) {
2717 for (i =
0; i < length; i++)
2718 buf[i] = subject.readUInt8(i)
2720 for (i =
0; i < length; i++)
2721 buf[i] = ((subject[i] %
256) +
256) %
256
2723 } else if (type === 'string') {
2724 buf.write(subject,
0, encoding)
2725 } else if (type === 'number' && !Buffer._useTypedArrays && !noZero) {
2726 for (i =
0; i < length; i++) {
2737 Buffer.isEncoding = function (encoding) {
2738 switch (String(encoding).toLowerCase()) {
2756 Buffer.isBuffer = function (b) {
2757 return !!(b !== null && b !== undefined && b._isBuffer)
2760 Buffer.byteLength = function (str, encoding) {
2762 str = str.toString()
2763 switch (encoding || 'utf8') {
2765 ret = str.length /
2
2769 ret = utf8ToBytes(str).length
2777 ret = base64ToBytes(str).length
2783 ret = str.length *
2
2786 throw new Error('Unknown encoding')
2791 Buffer.concat = function (list, totalLength) {
2792 assert(isArray(list), 'Usage: Buffer.concat(list[, length])')
2794 if (list.length ===
0) {
2795 return new Buffer(
0)
2796 } else if (list.length ===
1) {
2801 if (totalLength === undefined) {
2803 for (i =
0; i < list.length; i++) {
2804 totalLength += list[i].length
2808 var buf = new Buffer(totalLength)
2810 for (i =
0; i < list.length; i++) {
2818 Buffer.compare = function (a, b) {
2819 assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers')
2822 for (var i =
0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
2836 // BUFFER INSTANCE METHODS
2837 // =======================
2839 function hexWrite (buf, string, offset, length) {
2840 offset = Number(offset) ||
0
2841 var remaining = buf.length - offset
2845 length = Number(length)
2846 if (length
> remaining) {
2851 // must be an even number of digits
2852 var strLen = string.length
2853 assert(strLen %
2 ===
0, 'Invalid hex string')
2855 if (length
> strLen /
2) {
2858 for (var i =
0; i < length; i++) {
2859 var byte = parseInt(string.substr(i *
2,
2),
16)
2860 assert(!isNaN(byte), 'Invalid hex string')
2861 buf[offset + i] = byte
2866 function utf8Write (buf, string, offset, length) {
2867 var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length)
2871 function asciiWrite (buf, string, offset, length) {
2872 var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length)
2876 function binaryWrite (buf, string, offset, length) {
2877 return asciiWrite(buf, string, offset, length)
2880 function base64Write (buf, string, offset, length) {
2881 var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length)
2885 function utf16leWrite (buf, string, offset, length) {
2886 var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length)
2890 Buffer.prototype.write = function (string, offset, length, encoding) {
2891 // Support both (string, offset, length, encoding)
2892 // and the legacy (string, encoding, offset, length)
2893 if (isFinite(offset)) {
2894 if (!isFinite(length)) {
2905 offset = Number(offset) ||
0
2906 var remaining = this.length - offset
2910 length = Number(length)
2911 if (length
> remaining) {
2915 encoding = String(encoding || 'utf8').toLowerCase()
2920 ret = hexWrite(this, string, offset, length)
2924 ret = utf8Write(this, string, offset, length)
2927 ret = asciiWrite(this, string, offset, length)
2930 ret = binaryWrite(this, string, offset, length)
2933 ret = base64Write(this, string, offset, length)
2939 ret = utf16leWrite(this, string, offset, length)
2942 throw new Error('Unknown encoding')
2947 Buffer.prototype.toString = function (encoding, start, end) {
2950 encoding = String(encoding || 'utf8').toLowerCase()
2951 start = Number(start) ||
0
2952 end = (end === undefined) ? self.length : Number(end)
2954 // Fastpath empty strings
2961 ret = hexSlice(self, start, end)
2965 ret = utf8Slice(self, start, end)
2968 ret = asciiSlice(self, start, end)
2971 ret = binarySlice(self, start, end)
2974 ret = base64Slice(self, start, end)
2980 ret = utf16leSlice(self, start, end)
2983 throw new Error('Unknown encoding')
2988 Buffer.prototype.toJSON = function () {
2991 data: Array.prototype.slice.call(this._arr || this,
0)
2995 Buffer.prototype.equals = function (b) {
2996 assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
2997 return Buffer.compare(this, b) ===
0
3000 Buffer.prototype.compare = function (b) {
3001 assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
3002 return Buffer.compare(this, b)
3005 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3006 Buffer.prototype.copy = function (target, target_start, start, end) {
3009 if (!start) start =
0
3010 if (!end && end !==
0) end = this.length
3011 if (!target_start) target_start =
0
3013 // Copy
0 bytes; we're done
3014 if (end === start) return
3015 if (target.length ===
0 || source.length ===
0) return
3017 // Fatal error conditions
3018 assert(end
>= start, 'sourceEnd < sourceStart')
3019 assert(target_start
>=
0 && target_start < target.length,
3020 'targetStart out of bounds')
3021 assert(start
>=
0 && start < source.length, 'sourceStart out of bounds')
3022 assert(end
>=
0 && end <= source.length, 'sourceEnd out of bounds')
3025 if (end
> this.length)
3027 if (target.length - target_start < end - start)
3028 end = target.length - target_start + start
3030 var len = end - start
3032 if (len <
100 || !Buffer._useTypedArrays) {
3033 for (var i =
0; i < len; i++) {
3034 target[i + target_start] = this[i + start]
3037 target._set(this.subarray(start, start + len), target_start)
3041 function base64Slice (buf, start, end) {
3042 if (start ===
0 && end === buf.length) {
3043 return base64.fromByteArray(buf)
3045 return base64.fromByteArray(buf.slice(start, end))
3049 function utf8Slice (buf, start, end) {
3052 end = Math.min(buf.length, end)
3054 for (var i = start; i < end; i++) {
3055 if (buf[i] <=
0x7F) {
3056 res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])
3059 tmp += '%' + buf[i].toString(
16)
3063 return res + decodeUtf8Char(tmp)
3066 function asciiSlice (buf, start, end) {
3068 end = Math.min(buf.length, end)
3070 for (var i = start; i < end; i++) {
3071 ret += String.fromCharCode(buf[i])
3076 function binarySlice (buf, start, end) {
3077 return asciiSlice(buf, start, end)
3080 function hexSlice (buf, start, end) {
3081 var len = buf.length
3083 if (!start || start <
0) start =
0
3084 if (!end || end <
0 || end
> len) end = len
3087 for (var i = start; i < end; i++) {
3088 out += toHex(buf[i])
3093 function utf16leSlice (buf, start, end) {
3094 var bytes = buf.slice(start, end)
3096 for (var i =
0; i < bytes.length; i +=
2) {
3097 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3102 Buffer.prototype.slice = function (start, end) {
3103 var len = this.length
3104 start = clamp(start, len,
0)
3105 end = clamp(end, len, len)
3107 if (Buffer._useTypedArrays) {
3108 return Buffer._augment(this.subarray(start, end))
3110 var sliceLen = end - start
3111 var newBuf = new Buffer(sliceLen, undefined, true)
3112 for (var i =
0; i < sliceLen; i++) {
3113 newBuf[i] = this[i + start]
3119 // `get` will be removed in Node
0.13+
3120 Buffer.prototype.get = function (offset) {
3121 console.log('.get() is deprecated. Access using array indexes instead.')
3122 return this.readUInt8(offset)
3125 // `set` will be removed in Node
0.13+
3126 Buffer.prototype.set = function (v, offset) {
3127 console.log('.set() is deprecated. Access using array indexes instead.')
3128 return this.writeUInt8(v, offset)
3131 Buffer.prototype.readUInt8 = function (offset, noAssert) {
3133 assert(offset !== undefined && offset !== null, 'missing offset')
3134 assert(offset < this.length, 'Trying to read beyond buffer length')
3137 if (offset
>= this.length)
3143 function readUInt16 (buf, offset, littleEndian, noAssert) {
3145 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3146 assert(offset !== undefined && offset !== null, 'missing offset')
3147 assert(offset +
1 < buf.length, 'Trying to read beyond buffer length')
3150 var len = buf.length
3157 if (offset +
1 < len)
3158 val |= buf[offset +
1] <<
8
3160 val = buf[offset] <<
8
3161 if (offset +
1 < len)
3162 val |= buf[offset +
1]
3167 Buffer.prototype.readUInt16LE = function (offset, noAssert) {
3168 return readUInt16(this, offset, true, noAssert)
3171 Buffer.prototype.readUInt16BE = function (offset, noAssert) {
3172 return readUInt16(this, offset, false, noAssert)
3175 function readUInt32 (buf, offset, littleEndian, noAssert) {
3177 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3178 assert(offset !== undefined && offset !== null, 'missing offset')
3179 assert(offset +
3 < buf.length, 'Trying to read beyond buffer length')
3182 var len = buf.length
3188 if (offset +
2 < len)
3189 val = buf[offset +
2] <<
16
3190 if (offset +
1 < len)
3191 val |= buf[offset +
1] <<
8
3193 if (offset +
3 < len)
3194 val = val + (buf[offset +
3] <<
24 >>> 0)
3196 if (offset +
1 < len)
3197 val = buf[offset +
1] <<
16
3198 if (offset +
2 < len)
3199 val |= buf[offset +
2] <<
8
3200 if (offset +
3 < len)
3201 val |= buf[offset +
3]
3202 val = val + (buf[offset] <<
24 >>> 0)
3207 Buffer.prototype.readUInt32LE = function (offset, noAssert) {
3208 return readUInt32(this, offset, true, noAssert)
3211 Buffer.prototype.readUInt32BE = function (offset, noAssert) {
3212 return readUInt32(this, offset, false, noAssert)
3215 Buffer.prototype.readInt8 = function (offset, noAssert) {
3217 assert(offset !== undefined && offset !== null,
3219 assert(offset < this.length, 'Trying to read beyond buffer length')
3222 if (offset
>= this.length)
3225 var neg = this[offset] &
0x80
3227 return (
0xff - this[offset] +
1) * -
1
3232 function readInt16 (buf, offset, littleEndian, noAssert) {
3234 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3235 assert(offset !== undefined && offset !== null, 'missing offset')
3236 assert(offset +
1 < buf.length, 'Trying to read beyond buffer length')
3239 var len = buf.length
3243 var val = readUInt16(buf, offset, littleEndian, true)
3244 var neg = val &
0x8000
3246 return (
0xffff - val +
1) * -
1
3251 Buffer.prototype.readInt16LE = function (offset, noAssert) {
3252 return readInt16(this, offset, true, noAssert)
3255 Buffer.prototype.readInt16BE = function (offset, noAssert) {
3256 return readInt16(this, offset, false, noAssert)
3259 function readInt32 (buf, offset, littleEndian, noAssert) {
3261 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3262 assert(offset !== undefined && offset !== null, 'missing offset')
3263 assert(offset +
3 < buf.length, 'Trying to read beyond buffer length')
3266 var len = buf.length
3270 var val = readUInt32(buf, offset, littleEndian, true)
3271 var neg = val &
0x80000000
3273 return (
0xffffffff - val +
1) * -
1
3278 Buffer.prototype.readInt32LE = function (offset, noAssert) {
3279 return readInt32(this, offset, true, noAssert)
3282 Buffer.prototype.readInt32BE = function (offset, noAssert) {
3283 return readInt32(this, offset, false, noAssert)
3286 function readFloat (buf, offset, littleEndian, noAssert) {
3288 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3289 assert(offset +
3 < buf.length, 'Trying to read beyond buffer length')
3292 return ieee754.read(buf, offset, littleEndian,
23,
4)
3295 Buffer.prototype.readFloatLE = function (offset, noAssert) {
3296 return readFloat(this, offset, true, noAssert)
3299 Buffer.prototype.readFloatBE = function (offset, noAssert) {
3300 return readFloat(this, offset, false, noAssert)
3303 function readDouble (buf, offset, littleEndian, noAssert) {
3305 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3306 assert(offset +
7 < buf.length, 'Trying to read beyond buffer length')
3309 return ieee754.read(buf, offset, littleEndian,
52,
8)
3312 Buffer.prototype.readDoubleLE = function (offset, noAssert) {
3313 return readDouble(this, offset, true, noAssert)
3316 Buffer.prototype.readDoubleBE = function (offset, noAssert) {
3317 return readDouble(this, offset, false, noAssert)
3320 Buffer.prototype.writeUInt8 = function (value, offset, noAssert) {
3322 assert(value !== undefined && value !== null, 'missing value')
3323 assert(offset !== undefined && offset !== null, 'missing offset')
3324 assert(offset < this.length, 'trying to write beyond buffer length')
3325 verifuint(value,
0xff)
3328 if (offset
>= this.length) return
3330 this[offset] = value
3334 function writeUInt16 (buf, value, offset, littleEndian, noAssert) {
3336 assert(value !== undefined && value !== null, 'missing value')
3337 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3338 assert(offset !== undefined && offset !== null, 'missing offset')
3339 assert(offset +
1 < buf.length, 'trying to write beyond buffer length')
3340 verifuint(value,
0xffff)
3343 var len = buf.length
3347 for (var i =
0, j = Math.min(len - offset,
2); i < j; i++) {
3349 (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3350 (littleEndian ? i :
1 - i) *
8
3355 Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) {
3356 return writeUInt16(this, value, offset, true, noAssert)
3359 Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) {
3360 return writeUInt16(this, value, offset, false, noAssert)
3363 function writeUInt32 (buf, value, offset, littleEndian, noAssert) {
3365 assert(value !== undefined && value !== null, 'missing value')
3366 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3367 assert(offset !== undefined && offset !== null, 'missing offset')
3368 assert(offset +
3 < buf.length, 'trying to write beyond buffer length')
3369 verifuint(value,
0xffffffff)
3372 var len = buf.length
3376 for (var i =
0, j = Math.min(len - offset,
4); i < j; i++) {
3378 (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3383 Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) {
3384 return writeUInt32(this, value, offset, true, noAssert)
3387 Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) {
3388 return writeUInt32(this, value, offset, false, noAssert)
3391 Buffer.prototype.writeInt8 = function (value, offset, noAssert) {
3393 assert(value !== undefined && value !== null, 'missing value')
3394 assert(offset !== undefined && offset !== null, 'missing offset')
3395 assert(offset < this.length, 'Trying to write beyond buffer length')
3396 verifsint(value,
0x7f, -
0x80)
3399 if (offset
>= this.length)
3403 this.writeUInt8(value, offset, noAssert)
3405 this.writeUInt8(
0xff + value +
1, offset, noAssert)
3409 function writeInt16 (buf, value, offset, littleEndian, noAssert) {
3411 assert(value !== undefined && value !== null, 'missing value')
3412 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3413 assert(offset !== undefined && offset !== null, 'missing offset')
3414 assert(offset +
1 < buf.length, 'Trying to write beyond buffer length')
3415 verifsint(value,
0x7fff, -
0x8000)
3418 var len = buf.length
3423 writeUInt16(buf, value, offset, littleEndian, noAssert)
3425 writeUInt16(buf,
0xffff + value +
1, offset, littleEndian, noAssert)
3429 Buffer.prototype.writeInt16LE = function (value, offset, noAssert) {
3430 return writeInt16(this, value, offset, true, noAssert)
3433 Buffer.prototype.writeInt16BE = function (value, offset, noAssert) {
3434 return writeInt16(this, value, offset, false, noAssert)
3437 function writeInt32 (buf, value, offset, littleEndian, noAssert) {
3439 assert(value !== undefined && value !== null, 'missing value')
3440 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3441 assert(offset !== undefined && offset !== null, 'missing offset')
3442 assert(offset +
3 < buf.length, 'Trying to write beyond buffer length')
3443 verifsint(value,
0x7fffffff, -
0x80000000)
3446 var len = buf.length
3451 writeUInt32(buf, value, offset, littleEndian, noAssert)
3453 writeUInt32(buf,
0xffffffff + value +
1, offset, littleEndian, noAssert)
3457 Buffer.prototype.writeInt32LE = function (value, offset, noAssert) {
3458 return writeInt32(this, value, offset, true, noAssert)
3461 Buffer.prototype.writeInt32BE = function (value, offset, noAssert) {
3462 return writeInt32(this, value, offset, false, noAssert)
3465 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3467 assert(value !== undefined && value !== null, 'missing value')
3468 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3469 assert(offset !== undefined && offset !== null, 'missing offset')
3470 assert(offset +
3 < buf.length, 'Trying to write beyond buffer length')
3471 verifIEEE754(value,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3474 var len = buf.length
3478 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3482 Buffer.prototype.writeFloatLE = function (value, offset, noAssert) {
3483 return writeFloat(this, value, offset, true, noAssert)
3486 Buffer.prototype.writeFloatBE = function (value, offset, noAssert) {
3487 return writeFloat(this, value, offset, false, noAssert)
3490 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3492 assert(value !== undefined && value !== null, 'missing value')
3493 assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
3494 assert(offset !== undefined && offset !== null, 'missing offset')
3495 assert(offset +
7 < buf.length,
3496 'Trying to write beyond buffer length')
3497 verifIEEE754(value,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3500 var len = buf.length
3504 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3508 Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) {
3509 return writeDouble(this, value, offset, true, noAssert)
3512 Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) {
3513 return writeDouble(this, value, offset, false, noAssert)
3516 // fill(value, start=
0, end=buffer.length)
3517 Buffer.prototype.fill = function (value, start, end) {
3518 if (!value) value =
0
3519 if (!start) start =
0
3520 if (!end) end = this.length
3522 assert(end
>= start, 'end < start')
3524 // Fill
0 bytes; we're done
3525 if (end === start) return
3526 if (this.length ===
0) return
3528 assert(start
>=
0 && start < this.length, 'start out of bounds')
3529 assert(end
>=
0 && end <= this.length, 'end out of bounds')
3532 if (typeof value === 'number') {
3533 for (i = start; i < end; i++) {
3537 var bytes = utf8ToBytes(value.toString())
3538 var len = bytes.length
3539 for (i = start; i < end; i++) {
3540 this[i] = bytes[i % len]
3547 Buffer.prototype.inspect = function () {
3549 var len = this.length
3550 for (var i =
0; i < len; i++) {
3551 out[i] = toHex(this[i])
3552 if (i === exports.INSPECT_MAX_BYTES) {
3557 return '
<Buffer ' + out.join(' ') + '
>'
3561 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3562 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
3564 Buffer.prototype.toArrayBuffer = function () {
3565 if (typeof Uint8Array !== 'undefined') {
3566 if (Buffer._useTypedArrays) {
3567 return (new Buffer(this)).buffer
3569 var buf = new Uint8Array(this.length)
3570 for (var i =
0, len = buf.length; i < len; i +=
1) {
3576 throw new Error('Buffer.toArrayBuffer not supported in this browser')
3583 var BP = Buffer.prototype
3586 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3588 Buffer._augment = function (arr) {
3589 arr._isBuffer = true
3591 // save reference to original Uint8Array get/set methods before overwriting
3595 // deprecated, will be removed in node
0.13+
3599 arr.write = BP.write
3600 arr.toString = BP.toString
3601 arr.toLocaleString = BP.toString
3602 arr.toJSON = BP.toJSON
3603 arr.equals = BP.equals
3604 arr.compare = BP.compare
3606 arr.slice = BP.slice
3607 arr.readUInt8 = BP.readUInt8
3608 arr.readUInt16LE = BP.readUInt16LE
3609 arr.readUInt16BE = BP.readUInt16BE
3610 arr.readUInt32LE = BP.readUInt32LE
3611 arr.readUInt32BE = BP.readUInt32BE
3612 arr.readInt8 = BP.readInt8
3613 arr.readInt16LE = BP.readInt16LE
3614 arr.readInt16BE = BP.readInt16BE
3615 arr.readInt32LE = BP.readInt32LE
3616 arr.readInt32BE = BP.readInt32BE
3617 arr.readFloatLE = BP.readFloatLE
3618 arr.readFloatBE = BP.readFloatBE
3619 arr.readDoubleLE = BP.readDoubleLE
3620 arr.readDoubleBE = BP.readDoubleBE
3621 arr.writeUInt8 = BP.writeUInt8
3622 arr.writeUInt16LE = BP.writeUInt16LE
3623 arr.writeUInt16BE = BP.writeUInt16BE
3624 arr.writeUInt32LE = BP.writeUInt32LE
3625 arr.writeUInt32BE = BP.writeUInt32BE
3626 arr.writeInt8 = BP.writeInt8
3627 arr.writeInt16LE = BP.writeInt16LE
3628 arr.writeInt16BE = BP.writeInt16BE
3629 arr.writeInt32LE = BP.writeInt32LE
3630 arr.writeInt32BE = BP.writeInt32BE
3631 arr.writeFloatLE = BP.writeFloatLE
3632 arr.writeFloatBE = BP.writeFloatBE
3633 arr.writeDoubleLE = BP.writeDoubleLE
3634 arr.writeDoubleBE = BP.writeDoubleBE
3636 arr.inspect = BP.inspect
3637 arr.toArrayBuffer = BP.toArrayBuffer
3642 var INVALID_BASE64_RE = /[^+\/
0-
9A-z]/g
3644 function base64clean (str) {
3645 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3646 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3647 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3648 while (str.length %
4 !==
0) {
3654 function stringtrim (str) {
3655 if (str.trim) return str.trim()
3656 return str.replace(/^\s+|\s+$/g, '')
3659 // slice(start, end)
3660 function clamp (index, len, defaultValue) {
3661 if (typeof index !== 'number') return defaultValue
3662 index = ~~index; // Coerce to integer.
3663 if (index
>= len) return len
3664 if (index
>=
0) return index
3666 if (index
>=
0) return index
3670 function coerce (length) {
3671 // Coerce length to a number (possibly NaN), round up
3672 // in case it's fractional (e.g.
123.456) then do a
3673 // double negate to coerce a NaN to
0. Easy, right?
3674 length = ~~Math.ceil(+length)
3675 return length <
0 ?
0 : length
3678 function isArray (subject) {
3679 return (Array.isArray || function (subject) {
3680 return Object.prototype.toString.call(subject) === '[object Array]'
3684 function isArrayish (subject) {
3685 return isArray(subject) || Buffer.isBuffer(subject) ||
3686 subject && typeof subject === 'object' &&
3687 typeof subject.length === 'number'
3690 function toHex (n) {
3691 if (n <
16) return '
0' + n.toString(
16)
3692 return n.toString(
16)
3695 function utf8ToBytes (str) {
3697 for (var i =
0; i < str.length; i++) {
3698 var b = str.charCodeAt(i)
3703 if (b
>=
0xD800 && b <=
0xDFFF) i++
3704 var h = encodeURIComponent(str.slice(start, i+
1)).substr(
1).split('%')
3705 for (var j =
0; j < h.length; j++) {
3706 byteArray.push(parseInt(h[j],
16))
3713 function asciiToBytes (str) {
3715 for (var i =
0; i < str.length; i++) {
3716 // Node's code seems to be doing this and not &
0x7F..
3717 byteArray.push(str.charCodeAt(i) &
0xFF)
3722 function utf16leToBytes (str) {
3725 for (var i =
0; i < str.length; i++) {
3726 c = str.charCodeAt(i)
3736 function base64ToBytes (str) {
3737 return base64.toByteArray(str)
3740 function blitBuffer (src, dst, offset, length) {
3741 for (var i =
0; i < length; i++) {
3742 if ((i + offset
>= dst.length) || (i
>= src.length))
3744 dst[i + offset] = src[i]
3749 function decodeUtf8Char (str) {
3751 return decodeURIComponent(str)
3753 return String.fromCharCode(
0xFFFD) // UTF
8 invalid char
3758 * We have to make sure that the value is a valid integer. This means that it
3759 * is non-negative. It has no fractional component and that it does not
3760 * exceed the maximum allowed value.
3762 function verifuint (value, max) {
3763 assert(typeof value === 'number', 'cannot write a non-number as a number')
3764 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
3765 assert(value <= max, 'value is larger than maximum value for type')
3766 assert(Math.floor(value) === value, 'value has a fractional component')
3769 function verifsint (value, max, min) {
3770 assert(typeof value === 'number', 'cannot write a non-number as a number')
3771 assert(value <= max, 'value larger than maximum allowed value')
3772 assert(value
>= min, 'value smaller than minimum allowed value')
3773 assert(Math.floor(value) === value, 'value has a fractional component')
3776 function verifIEEE754 (value, max, min) {
3777 assert(typeof value === 'number', 'cannot write a non-number as a number')
3778 assert(value <= max, 'value larger than maximum allowed value')
3779 assert(value
>= min, 'value smaller than minimum allowed value')
3782 function assert (test, message) {
3783 if (!test) throw new Error(message || 'Failed assertion')
3786 },{"base64-js":
9,"ieee754":
10}],
9:[function(_dereq_,module,exports){
3787 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3789 ;(function (exports) {
3792 var Arr = (typeof Uint8Array !== 'undefined')
3796 var PLUS = '+'.charCodeAt(
0)
3797 var SLASH = '/'.charCodeAt(
0)
3798 var NUMBER = '
0'.charCodeAt(
0)
3799 var LOWER = 'a'.charCodeAt(
0)
3800 var UPPER = 'A'.charCodeAt(
0)
3802 function decode (elt) {
3803 var code = elt.charCodeAt(
0)
3809 return -
1 //no match
3810 if (code < NUMBER +
10)
3811 return code - NUMBER +
26 +
26
3812 if (code < UPPER +
26)
3814 if (code < LOWER +
26)
3815 return code - LOWER +
26
3818 function b64ToByteArray (b64) {
3819 var i, j, l, tmp, placeHolders, arr
3821 if (b64.length %
4 > 0) {
3822 throw new Error('Invalid string. Length must be a multiple of
4')
3825 // the number of equal signs (place holders)
3826 // if there are two placeholders, than the two characters before it
3827 // represent one byte
3828 // if there is only one, then the three characters before it represent
2 bytes
3829 // this is just a cheap hack to not do indexOf twice
3830 var len = b64.length
3831 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
3833 // base64 is
4/
3 + up to two characters of the original data
3834 arr = new Arr(b64.length *
3 /
4 - placeHolders)
3836 // if there are placeholders, only get up to the last complete
4 chars
3837 l = placeHolders
> 0 ? b64.length -
4 : b64.length
3845 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
3846 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
3847 push((tmp &
0xFF0000)
>> 16)
3848 push((tmp &
0xFF00)
>> 8)
3852 if (placeHolders ===
2) {
3853 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
3855 } else if (placeHolders ===
1) {
3856 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
3857 push((tmp
>> 8) &
0xFF)
3864 function uint8ToBase64 (uint8) {
3866 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
3870 function encode (num) {
3871 return lookup.charAt(num)
3874 function tripletToBase64 (num) {
3875 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
3878 // go through the array every three bytes, we'll deal with trailing stuff later
3879 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
3880 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
3881 output += tripletToBase64(temp)
3884 // pad the end with zeros, but make sure to not forget the extra bytes
3885 switch (extraBytes) {
3887 temp = uint8[uint8.length -
1]
3888 output += encode(temp
>> 2)
3889 output += encode((temp <<
4) &
0x3F)
3893 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
3894 output += encode(temp
>> 10)
3895 output += encode((temp
>> 4) &
0x3F)
3896 output += encode((temp <<
2) &
0x3F)
3904 exports.toByteArray = b64ToByteArray
3905 exports.fromByteArray = uint8ToBase64
3906 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
3908 },{}],
10:[function(_dereq_,module,exports){
3909 exports.read = function(buffer, offset, isLE, mLen, nBytes) {
3911 eLen = nBytes *
8 - mLen -
1,
3912 eMax = (
1 << eLen) -
1,
3915 i = isLE ? (nBytes -
1) :
0,
3917 s = buffer[offset + i];
3921 e = s & ((
1 << (-nBits)) -
1);
3924 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8){};
3926 m = e & ((
1 << (-nBits)) -
1);
3929 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8){};
3933 } else if (e === eMax) {
3934 return m ? NaN : ((s ? -
1 :
1) * Infinity);
3936 m = m + Math.pow(
2, mLen);
3939 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen);
3942 exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
3944 eLen = nBytes *
8 - mLen -
1,
3945 eMax = (
1 << eLen) -
1,
3947 rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0),
3948 i = isLE ?
0 : (nBytes -
1),
3950 s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0;
3952 value = Math.abs(value);
3954 if (isNaN(value) || value === Infinity) {
3955 m = isNaN(value) ?
1 :
0;
3958 e = Math.floor(Math.log(value) / Math.LN2);
3959 if (value * (c = Math.pow(
2, -e)) <
1) {
3963 if (e + eBias
>=
1) {
3966 value += rt * Math.pow(
2,
1 - eBias);
3968 if (value * c
>=
2) {
3973 if (e + eBias
>= eMax) {
3976 } else if (e + eBias
>=
1) {
3977 m = (value * c -
1) * Math.pow(
2, mLen);
3980 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen);
3985 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8){};
3987 e = (e << mLen) | m;
3989 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8){};
3991 buffer[offset + i - d] |= s *
128;
3994 },{}],
11:[function(_dereq_,module,exports){
3995 if (typeof Object.create === 'function') {
3996 // implementation from standard node.js 'util' module
3997 module.exports = function inherits(ctor, superCtor) {
3998 ctor.super_ = superCtor
3999 ctor.prototype = Object.create(superCtor.prototype, {
4009 // old school shim for old browsers
4010 module.exports = function inherits(ctor, superCtor) {
4011 ctor.super_ = superCtor
4012 var TempCtor = function () {}
4013 TempCtor.prototype = superCtor.prototype
4014 ctor.prototype = new TempCtor()
4015 ctor.prototype.constructor = ctor
4019 },{}],
12:[function(_dereq_,module,exports){
4020 // shim for using process in browser
4022 var process = module.exports = {};
4024 process.nextTick = (function () {
4025 var canSetImmediate = typeof window !== 'undefined'
4026 && window.setImmediate;
4027 var canPost = typeof window !== 'undefined'
4028 && window.postMessage && window.addEventListener
4031 if (canSetImmediate) {
4032 return function (f) { return window.setImmediate(f) };
4037 window.addEventListener('message', function (ev) {
4038 var source = ev.source;
4039 if ((source === window || source === null) && ev.data === 'process-tick') {
4040 ev.stopPropagation();
4041 if (queue.length
> 0) {
4042 var fn = queue.shift();
4048 return function nextTick(fn) {
4050 window.postMessage('process-tick', '*');
4054 return function nextTick(fn) {
4059 process.title = 'browser';
4060 process.browser = true;
4067 process.addListener = noop;
4068 process.once = noop;
4070 process.removeListener = noop;
4071 process.removeAllListeners = noop;
4072 process.emit = noop;
4074 process.binding = function (name) {
4075 throw new Error('process.binding is not supported');
4079 process.cwd = function () { return '/' };
4080 process.chdir = function (dir) {
4081 throw new Error('process.chdir is not supported');
4084 },{}],
13:[function(_dereq_,module,exports){
4085 module.exports=_dereq_(
5)
4086 },{}],
14:[function(_dereq_,module,exports){
4087 module.exports=_dereq_(
6)
4088 },{
"./support/isBuffer":
13,
"FWaASH":
12,
"inherits":
11}],
15:[function(_dereq_,module,exports){
4090 // Base58 encoding/decoding
4091 // Originally written by Mike Hearn for BitcoinJ
4092 // Copyright (c)
2011 Google Inc
4093 // Ported to JavaScript by Stefan Thomas
4094 // Merged Buffer refactorings from base58-native by Stephen Pair
4095 // Copyright (c)
2013 BitPay Inc
4097 var assert = _dereq_('assert')
4098 var BigInteger = _dereq_('bigi')
4100 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
4101 var ALPHABET_BUF = new Buffer(ALPHABET, 'ascii')
4102 var ALPHABET_MAP = {}
4103 for(var i =
0; i < ALPHABET.length; i++) {
4104 ALPHABET_MAP[ALPHABET.charAt(i)] = BigInteger.valueOf(i)
4106 var BASE = new BigInteger('
58')
4108 function encode(buffer) {
4109 var bi = BigInteger.fromBuffer(buffer)
4110 var result = new Buffer(buffer.length <<
1)
4112 var i = result.length -
1
4113 while (bi.signum()
> 0) {
4114 var remainder = bi.mod(BASE)
4115 bi = bi.divide(BASE)
4117 result[i] = ALPHABET_BUF[remainder.intValue()]
4121 // deal with leading zeros
4123 while (buffer[j] ===
0) {
4124 result[i] = ALPHABET_BUF[
0]
4129 return result.slice(i +
1, result.length).toString('ascii')
4132 function decode(string) {
4133 if (string.length ===
0) return new Buffer(
0)
4135 var num = BigInteger.ZERO
4137 for (var i =
0; i < string.length; i++) {
4138 num = num.multiply(BASE)
4140 var figure = ALPHABET_MAP[string.charAt(i)]
4141 assert.notEqual(figure, undefined, 'Non-base58 character')
4143 num = num.add(figure)
4146 // deal with leading zeros
4148 while ((j < string.length) && (string[j] === ALPHABET[
0])) {
4152 var buffer = num.toBuffer()
4153 var leadingZeros = new Buffer(j)
4154 leadingZeros.fill(
0)
4156 return Buffer.concat([leadingZeros, buffer])
4164 }).call(this,_dereq_(
"buffer").Buffer)
4165 },{
"assert":
4,
"bigi":
3,
"buffer":
8}],
16:[function(_dereq_,module,exports){
4167 var createHash = _dereq_('sha.js')
4169 var md5 = toConstructor(_dereq_('./md5'))
4170 var rmd160 = toConstructor(_dereq_('ripemd160'))
4172 function toConstructor (fn) {
4173 return function () {
4176 update: function (data, enc) {
4177 if(!Buffer.isBuffer(data)) data = new Buffer(data, enc)
4181 digest: function (enc) {
4182 var buf = Buffer.concat(buffers)
4185 return enc ? r.toString(enc) : r
4192 module.exports = function (alg) {
4193 if('md5' === alg) return new md5()
4194 if('rmd160' === alg) return new rmd160()
4195 return createHash(alg)
4198 }).call(this,_dereq_(
"buffer").Buffer)
4199 },{
"./md5":
20,
"buffer":
8,
"ripemd160":
21,
"sha.js":
23}],
17:[function(_dereq_,module,exports){
4201 var createHash = _dereq_('./create-hash')
4204 var zeroBuffer = new Buffer(blocksize); zeroBuffer.fill(
0)
4206 module.exports = Hmac
4208 function Hmac (alg, key) {
4209 if(!(this instanceof Hmac)) return new Hmac(alg, key)
4213 key = this._key = !Buffer.isBuffer(key) ? new Buffer(key) : key
4215 if(key.length
> blocksize) {
4216 key = createHash(alg).update(key).digest()
4217 } else if(key.length < blocksize) {
4218 key = Buffer.concat([key, zeroBuffer], blocksize)
4221 var ipad = this._ipad = new Buffer(blocksize)
4222 var opad = this._opad = new Buffer(blocksize)
4224 for(var i =
0; i < blocksize; i++) {
4225 ipad[i] = key[i] ^
0x36
4226 opad[i] = key[i] ^
0x5C
4229 this._hash = createHash(alg).update(ipad)
4232 Hmac.prototype.update = function (data, enc) {
4233 this._hash.update(data, enc)
4237 Hmac.prototype.digest = function (enc) {
4238 var h = this._hash.digest()
4239 return createHash(this._alg).update(this._opad).update(h).digest(enc)
4243 }).call(this,_dereq_("buffer").Buffer)
4244 },{"./create-hash":
16,"buffer":
8}],
18:[function(_dereq_,module,exports){
4247 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
4250 function toArray(buf, bigEndian) {
4251 if ((buf.length % intSize) !==
0) {
4252 var len = buf.length + (intSize - (buf.length % intSize));
4253 buf = Buffer.concat([buf, zeroBuffer], len);
4257 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
4258 for (var i =
0; i < buf.length; i += intSize) {
4259 arr.push(fn.call(buf, i));
4264 function toBuffer(arr, size, bigEndian) {
4265 var buf = new Buffer(size);
4266 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
4267 for (var i =
0; i < arr.length; i++) {
4268 fn.call(buf, arr[i], i *
4, true);
4273 function hash(buf, fn, hashSize, bigEndian) {
4274 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
4275 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
4276 return toBuffer(arr, hashSize, bigEndian);
4279 module.exports = { hash: hash };
4281 }).call(this,_dereq_("buffer").Buffer)
4282 },{"buffer":
8}],
19:[function(_dereq_,module,exports){
4284 var rng = _dereq_('./rng')
4287 var m = [].slice.call(arguments).join(' ')
4290 'we accept pull requests',
4291 'http://github.com/dominictarr/crypto-browserify'
4295 exports.createHash = _dereq_('./create-hash')
4297 exports.createHmac = _dereq_('./create-hmac')
4299 exports.randomBytes = function(size, callback) {
4300 if (callback && callback.call) {
4302 callback.call(this, undefined, new Buffer(rng(size)))
4303 } catch (err) { callback(err) }
4305 return new Buffer(rng(size))
4309 function each(a, f) {
4314 exports.getHashes = function () {
4315 return ['sha1', 'sha256', 'md5', 'rmd160']
4319 var p = _dereq_('./pbkdf2')(exports.createHmac)
4320 exports.pbkdf2 = p.pbkdf2
4321 exports.pbkdf2Sync = p.pbkdf2Sync
4324 // the least I can do is make error messages for the rest of the node.js/crypto api.
4325 each(['createCredentials'
4329 , 'createDecipheriv'
4332 , 'createDiffieHellman'
4333 ], function (name) {
4334 exports[name] = function () {
4335 error('sorry,', name, 'is not implemented yet')
4339 }).call(this,_dereq_("buffer").Buffer)
4340 },{"./create-hash":
16,"./create-hmac":
17,"./pbkdf2":
27,"./rng":
28,"buffer":
8}],
20:[function(_dereq_,module,exports){
4342 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
4343 * Digest Algorithm, as defined in RFC
1321.
4344 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
4345 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
4346 * Distributed under the BSD License
4347 * See http://pajhome.org.uk/crypt/md5 for more info.
4350 var helpers = _dereq_('./helpers');
4353 * Calculate the MD5 of an array of little-endian words, and a bit length
4355 function core_md5(x, len)
4357 /* append padding */
4358 x[len
>> 5] |=
0x80 << ((len) %
32);
4359 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
4363 var c = -
1732584194;
4366 for(var i =
0; i < x.length; i +=
16)
4373 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
4374 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
4375 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
4376 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
4377 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
4378 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
4379 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
4380 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
4381 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
4382 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
4383 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
4384 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
4385 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
4386 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
4387 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
4388 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
4390 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
4391 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
4392 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
4393 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
4394 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
4395 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
4396 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
4397 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
4398 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
4399 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
4400 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
4401 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
4402 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
4403 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
4404 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
4405 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
4407 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
4408 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
4409 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
4410 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
4411 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
4412 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
4413 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
4414 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
4415 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
4416 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
4417 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
4418 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
4419 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
4420 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
4421 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
4422 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
4424 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
4425 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
4426 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
4427 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
4428 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
4429 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
4430 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
4431 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
4432 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
4433 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
4434 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
4435 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
4436 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
4437 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
4438 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
4439 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
4441 a = safe_add(a, olda);
4442 b = safe_add(b, oldb);
4443 c = safe_add(c, oldc);
4444 d = safe_add(d, oldd);
4446 return Array(a, b, c, d);
4451 * These functions implement the four basic operations the algorithm uses.
4453 function md5_cmn(q, a, b, x, s, t)
4455 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
4457 function md5_ff(a, b, c, d, x, s, t)
4459 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
4461 function md5_gg(a, b, c, d, x, s, t)
4463 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
4465 function md5_hh(a, b, c, d, x, s, t)
4467 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
4469 function md5_ii(a, b, c, d, x, s, t)
4471 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
4475 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
4476 * to work around bugs in some JS interpreters.
4478 function safe_add(x, y)
4480 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
4481 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
4482 return (msw <<
16) | (lsw &
0xFFFF);
4486 * Bitwise rotate a
32-bit number to the left.
4488 function bit_rol(num, cnt)
4490 return (num << cnt) | (num
>>> (
32 - cnt));
4493 module.exports = function md5(buf) {
4494 return helpers.hash(buf, core_md5,
16);
4497 },{"./helpers":
18}],
21:[function(_dereq_,module,exports){
4500 module.exports = ripemd160
4506 code.google.com/p/crypto-js
4507 (c)
2009-
2013 by Jeff Mott. All rights reserved.
4508 code.google.com/p/crypto-js/wiki/License
4511 (c)
2012 by Cédric Mesnil. All rights reserved.
4513 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4515 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
4516 - 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.
4518 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.
4523 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
4524 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
4525 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
4526 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
4527 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13];
4529 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
4530 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
4531 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
4532 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
4533 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11];
4535 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
4536 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
4537 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
4538 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
4539 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6 ];
4541 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
4542 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
4543 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
4544 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
4545 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11 ];
4547 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E];
4548 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000];
4550 var bytesToWords = function (bytes) {
4552 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
4553 words[b
>>> 5] |= bytes[i] << (
24 - b %
32);
4558 var wordsToBytes = function (words) {
4560 for (var b =
0; b < words.length *
32; b +=
8) {
4561 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF);
4566 var processBlock = function (H, M, offset) {
4569 for (var i =
0; i <
16; i++) {
4570 var offset_i = offset + i;
4571 var M_offset_i = M[offset_i];
4575 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
4576 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
4580 // Working variables
4581 var al, bl, cl, dl, el;
4582 var ar, br, cr, dr, er;
4591 for (var i =
0; i <
80; i +=
1) {
4592 t = (al + M[offset+zl[i]])|
0;
4594 t += f1(bl,cl,dl) + hl[
0];
4596 t += f2(bl,cl,dl) + hl[
1];
4598 t += f3(bl,cl,dl) + hl[
2];
4600 t += f4(bl,cl,dl) + hl[
3];
4601 } else {// if (i
<80) {
4602 t += f5(bl,cl,dl) + hl[
4];
4613 t = (ar + M[offset+zr[i]])|
0;
4615 t += f5(br,cr,dr) + hr[
0];
4617 t += f4(br,cr,dr) + hr[
1];
4619 t += f3(br,cr,dr) + hr[
2];
4621 t += f2(br,cr,dr) + hr[
3];
4622 } else {// if (i
<80) {
4623 t += f1(br,cr,dr) + hr[
4];
4634 // Intermediate hash value
4635 t = (H[
1] + cl + dr)|
0;
4636 H[
1] = (H[
2] + dl + er)|
0;
4637 H[
2] = (H[
3] + el + ar)|
0;
4638 H[
3] = (H[
4] + al + br)|
0;
4639 H[
4] = (H[
0] + bl + cr)|
0;
4643 function f1(x, y, z) {
4644 return ((x) ^ (y) ^ (z));
4647 function f2(x, y, z) {
4648 return (((x)&(y)) | ((~x)&(z)));
4651 function f3(x, y, z) {
4652 return (((x) | (~(y))) ^ (z));
4655 function f4(x, y, z) {
4656 return (((x) & (z)) | ((y)&(~(z))));
4659 function f5(x, y, z) {
4660 return ((x) ^ ((y) |(~(z))));
4663 function rotl(x,n) {
4664 return (x<
<n) | (x
>>>(
32-n));
4667 function ripemd160(message) {
4668 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0];
4670 if (typeof message == 'string')
4671 message = new Buffer(message, 'utf8');
4673 var m = bytesToWords(message);
4675 var nBitsLeft = message.length *
8;
4676 var nBitsTotal = message.length *
8;
4679 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32);
4680 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
4681 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
4682 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
4685 for (var i=
0 ; i
<m.length; i +=
16) {
4686 processBlock(H, m, i);
4690 for (var i =
0; i <
5; i++) {
4695 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
4696 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00);
4699 var digestbytes = wordsToBytes(H);
4700 return new Buffer(digestbytes);
4705 }).call(this,_dereq_(
"buffer").Buffer)
4706 },{
"buffer":
8}],
22:[function(_dereq_,module,exports){
4707 var u = _dereq_('./util')
4709 var fill = u.zeroFill
4711 module.exports = function (Buffer) {
4713 //prototype class for hash functions
4714 function Hash (blockSize, finalSize) {
4715 this._block = new Buffer(blockSize) //new Uint32Array(blockSize/
4)
4716 this._finalSize = finalSize
4717 this._blockSize = blockSize
4722 Hash.prototype.init = function () {
4727 function lengthOf(data, enc) {
4728 if(enc == null) return data.byteLength || data.length
4729 if(enc == 'ascii' || enc == 'binary') return data.length
4730 if(enc == 'hex') return data.length/
2
4731 if(enc == 'base64') return data.length/
3
4734 Hash.prototype.update = function (data, enc) {
4735 var bl = this._blockSize
4737 //I'd rather do this with a streaming encoder, like the opposite of
4738 //http://nodejs.org/api/string_decoder.html
4740 if(!enc && 'string' === typeof data)
4747 if(enc === 'base64' || enc === 'utf8')
4748 data = new Buffer(data, enc), enc = null
4750 length = lengthOf(data, enc)
4752 length = data.byteLength || data.length
4754 var l = this._len += length
4755 var s = this._s = (this._s ||
0)
4757 var buffer = this._block
4759 var t = Math.min(length, f + bl)
4760 write(buffer, data, enc, s%bl, f, t)
4765 this._update(buffer)
4773 Hash.prototype.digest = function (enc) {
4774 var bl = this._blockSize
4775 var fl = this._finalSize
4776 var len = this._len*
8
4780 var bits = len % (bl*
8)
4782 //add end marker, so that appending
0's creats a different hash.
4783 x[this._len % bl] =
0x80
4784 fill(this._block, this._len % bl +
1)
4787 this._update(this._block)
4788 u.zeroFill(this._block,
0)
4791 //TODO: handle case where the bit length is
> Math.pow(
2,
29)
4792 x.writeInt32BE(len, fl +
4) //big endian
4794 var hash = this._update(this._block) || this._hash()
4795 if(enc == null) return hash
4796 return hash.toString(enc)
4799 Hash.prototype._update = function () {
4800 throw new Error('_update must be implemented by subclass')
4806 },{"./util":
26}],
23:[function(_dereq_,module,exports){
4807 var exports = module.exports = function (alg) {
4808 var Alg = exports[alg]
4809 if(!Alg) throw new Error(alg + ' is not supported (we accept pull requests)')
4813 var Buffer = _dereq_('buffer').Buffer
4814 var Hash = _dereq_('./hash')(Buffer)
4817 exports.sha1 = _dereq_('./sha1')(Buffer, Hash)
4818 exports.sha256 = _dereq_('./sha256')(Buffer, Hash)
4820 },{"./hash":
22,"./sha1":
24,"./sha256":
25,"buffer":
8}],
24:[function(_dereq_,module,exports){
4822 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
4824 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
4825 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
4826 * Distributed under the BSD License
4827 * See http://pajhome.org.uk/crypt/md5 for details.
4829 module.exports = function (Buffer, Hash) {
4831 var inherits = _dereq_('util').inherits
4833 inherits(Sha1, Hash)
4844 var W = new Int32Array(
80)
4850 return POOL.pop().init()
4852 if(!(this instanceof Sha1)) return new Sha1()
4854 Hash.call(this,
16*
4,
14*
4)
4860 Sha1.prototype.init = function () {
4861 this._a =
0x67452301
4862 this._b =
0xefcdab89
4863 this._c =
0x98badcfe
4864 this._d =
0x10325476
4865 this._e =
0xc3d2e1f0
4867 Hash.prototype.init.call(this)
4871 Sha1.prototype._POOL = POOL
4873 // assume that array is a Uint32Array with length=
16,
4874 // and that if it is the last block, it already has the length and the
1 bit appended.
4877 var isDV = new Buffer(
1) instanceof DataView
4878 function readInt32BE (X, i) {
4880 ? X.getInt32(i, false)
4884 Sha1.prototype._update = function (array) {
4888 var a, b, c, d, e, _a, _b, _c, _d, _e
4898 for(var j =
0; j <
80; j++) {
4901 //? X.getInt32(j*
4, false)
4902 //? readInt32BE(X, j*
4) //*/ X.readInt32BE(j*
4) //*/
4903 ? X.readInt32BE(j*
4)
4904 : rol(w[j -
3] ^ w[j -
8] ^ w[j -
14] ^ w[j -
16],
1)
4908 add(rol(a,
5), sha1_ft(j, b, c, d)),
4909 add(add(e, W), sha1_kt(j))
4919 this._a = add(a, _a)
4920 this._b = add(b, _b)
4921 this._c = add(c, _c)
4922 this._d = add(d, _d)
4923 this._e = add(e, _e)
4926 Sha1.prototype._hash = function () {
4927 if(POOL.length <
100) POOL.push(this)
4928 var H = new Buffer(
20)
4929 //console.log(this._a|
0, this._b|
0, this._c|
0, this._d|
0, this._e|
0)
4930 H.writeInt32BE(this._a|
0, A)
4931 H.writeInt32BE(this._b|
0, B)
4932 H.writeInt32BE(this._c|
0, C)
4933 H.writeInt32BE(this._d|
0, D)
4934 H.writeInt32BE(this._e|
0, E)
4939 * Perform the appropriate triplet combination function for the current
4942 function sha1_ft(t, b, c, d) {
4943 if(t <
20) return (b & c) | ((~b) & d);
4944 if(t <
40) return b ^ c ^ d;
4945 if(t <
60) return (b & c) | (b & d) | (c & d);
4950 * Determine the appropriate additive constant for the current iteration
4952 function sha1_kt(t) {
4953 return (t <
20) ?
1518500249 : (t <
40) ?
1859775393 :
4954 (t <
60) ? -
1894007588 : -
899497514;
4958 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
4959 * to work around bugs in some JS interpreters.
4960 * //dominictarr: this is
10 years old, so maybe this can be dropped?)
4963 function add(x, y) {
4965 //lets see how this goes on testling.
4966 // var lsw = (x &
0xFFFF) + (y &
0xFFFF);
4967 // var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
4968 // return (msw <<
16) | (lsw &
0xFFFF);
4972 * Bitwise rotate a
32-bit number to the left.
4974 function rol(num, cnt) {
4975 return (num << cnt) | (num
>>> (
32 - cnt));
4981 },{"util":
14}],
25:[function(_dereq_,module,exports){
4984 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
4986 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
4987 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
4991 var inherits = _dereq_('util').inherits
4994 var u = _dereq_('./util')
4996 module.exports = function (Buffer, Hash) {
4999 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
5000 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
5001 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
5002 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
5003 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
5004 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
5005 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
5006 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
5007 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
5008 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
5009 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
5010 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
5011 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
5012 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
5013 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
5014 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
5017 inherits(Sha256, Hash)
5018 var W = new Array(
64)
5021 // Closure compiler warning - this code lacks side effects - thus commented out
5022 // if(POOL.length) {
5023 // return POOL.shift().init()
5025 //this._data = new Buffer(
32)
5029 this._w = W //new Array(
64)
5031 Hash.call(this,
16*
4,
14*
4)
5034 Sha256.prototype.init = function () {
5036 this._a =
0x6a09e667|
0
5037 this._b =
0xbb67ae85|
0
5038 this._c =
0x3c6ef372|
0
5039 this._d =
0xa54ff53a|
0
5040 this._e =
0x510e527f|
0
5041 this._f =
0x9b05688c|
0
5042 this._g =
0x1f83d9ab|
0
5043 this._h =
0x5be0cd19|
0
5045 this._len = this._s =
0
5050 var safe_add = function(x, y) {
5051 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
5052 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
5053 return (msw <<
16) | (lsw &
0xFFFF);
5057 return (X
>>> n) | (X << (
32 - n));
5064 function Ch (x, y, z) {
5065 return ((x & y) ^ ((~x) & z));
5068 function Maj (x, y, z) {
5069 return ((x & y) ^ (x & z) ^ (y & z));
5072 function Sigma0256 (x) {
5073 return (S(x,
2) ^ S(x,
13) ^ S(x,
22));
5076 function Sigma1256 (x) {
5077 return (S(x,
6) ^ S(x,
11) ^ S(x,
25));
5080 function Gamma0256 (x) {
5081 return (S(x,
7) ^ S(x,
18) ^ R(x,
3));
5084 function Gamma1256 (x) {
5085 return (S(x,
17) ^ S(x,
19) ^ R(x,
10));
5088 Sha256.prototype._update = function(m) {
5091 var a, b, c, d, e, f, g, h
5103 for (var j =
0; j <
64; j++) {
5104 var w = W[j] = j <
16
5105 ? M.readInt32BE(j *
4)
5106 : Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16]
5108 T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
5110 T2 = Sigma0256(a) + Maj(a, b, c);
5111 h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2;
5114 this._a = (a + this._a) |
0
5115 this._b = (b + this._b) |
0
5116 this._c = (c + this._c) |
0
5117 this._d = (d + this._d) |
0
5118 this._e = (e + this._e) |
0
5119 this._f = (f + this._f) |
0
5120 this._g = (g + this._g) |
0
5121 this._h = (h + this._h) |
0
5125 Sha256.prototype._hash = function () {
5126 if(POOL.length <
10)
5129 var H = new Buffer(
32)
5131 H.writeInt32BE(this._a,
0)
5132 H.writeInt32BE(this._b,
4)
5133 H.writeInt32BE(this._c,
8)
5134 H.writeInt32BE(this._d,
12)
5135 H.writeInt32BE(this._e,
16)
5136 H.writeInt32BE(this._f,
20)
5137 H.writeInt32BE(this._g,
24)
5138 H.writeInt32BE(this._h,
28)
5147 },{"./util":
26,"util":
14}],
26:[function(_dereq_,module,exports){
5148 exports.write = write
5149 exports.zeroFill = zeroFill
5151 exports.toString = toString
5153 function write (buffer, string, enc, start, from, to, LE) {
5155 if(enc === 'ascii' || enc === 'binary') {
5156 for( var i =
0; i < l; i++) {
5157 buffer[start + i] = string.charCodeAt(i + from)
5160 else if(enc == null) {
5161 for( var i =
0; i < l; i++) {
5162 buffer[start + i] = string[i + from]
5165 else if(enc === 'hex') {
5166 for(var i =
0; i < l; i++) {
5168 buffer[start + i] = parseInt(string[j*
2] + string[(j*
2)+
1],
16)
5171 else if(enc === 'base64') {
5172 throw new Error('base64 encoding not yet supported')
5175 throw new Error(enc +' encoding not yet supported')
5178 //always fill to the end!
5179 function zeroFill(buf, from) {
5180 for(var i = from; i < buf.length; i++)
5185 },{}],
27:[function(_dereq_,module,exports){
5187 // JavaScript PBKDF2 Implementation
5188 // Based on http://git.io/qsv2zw
5189 // Licensed under LGPL v3
5190 // Copyright (c)
2013 jduncanator
5193 var zeroBuffer = new Buffer(blocksize); zeroBuffer.fill(
0)
5195 module.exports = function (createHmac, exports) {
5196 exports = exports || {}
5198 exports.pbkdf2 = function(password, salt, iterations, keylen, cb) {
5199 if('function' !== typeof cb)
5200 throw new Error('No callback provided to pbkdf2');
5201 setTimeout(function () {
5202 cb(null, exports.pbkdf2Sync(password, salt, iterations, keylen))
5206 exports.pbkdf2Sync = function(key, salt, iterations, keylen) {
5207 if('number' !== typeof iterations)
5208 throw new TypeError('Iterations not a number')
5210 throw new TypeError('Bad iterations')
5211 if('number' !== typeof keylen)
5212 throw new TypeError('Key length not a number')
5214 throw new TypeError('Bad key length')
5216 //stretch key to the correct length that hmac wants it,
5217 //otherwise this will happen every time hmac is called
5218 //twice per iteration.
5219 var key = !Buffer.isBuffer(key) ? new Buffer(key) : key
5221 if(key.length
> blocksize) {
5222 key = createHash(alg).update(key).digest()
5223 } else if(key.length < blocksize) {
5224 key = Buffer.concat([key, zeroBuffer], blocksize)
5228 var cplen, p =
0, i =
1, itmp = new Buffer(
4), digtmp;
5229 var out = new Buffer(keylen);
5237 /* We are unlikely to ever use more than
256 blocks (
5120 bits!)
5238 * but just in case...
5240 itmp[
0] = (i
>> 24) &
0xff;
5241 itmp[
1] = (i
>> 16) &
0xff;
5242 itmp[
2] = (i
>> 8) &
0xff;
5245 HMAC = createHmac('sha1', key);
5248 digtmp = HMAC.digest();
5249 digtmp.copy(out, p,
0, cplen);
5251 for(var j =
1; j < iterations; j++) {
5252 HMAC = createHmac('sha1', key);
5253 HMAC.update(digtmp);
5254 digtmp = HMAC.digest();
5255 for(var k =
0; k < cplen; k++) {
5256 out[k] ^= digtmp[k];
5270 }).call(this,_dereq_(
"buffer").Buffer)
5271 },{
"buffer":
8}],
28:[function(_dereq_,module,exports){
5273 // Original code adapted from Robert Kieffer.
5274 // details at https://github.com/broofa/node-uuid
5280 var mathRNG, whatwgRNG;
5282 // NOTE: Math.random() does not guarantee
"cryptographic quality"
5283 mathRNG = function(size) {
5284 var bytes = new Buffer(size);
5287 for (var i =
0, r; i < size; i++) {
5288 if ((i &
0x03) ==
0) r = Math.random() *
0x100000000;
5289 bytes[i] = r
>>> ((i &
0x03) <<
3) &
0xff;
5295 if (_global.crypto && crypto.getRandomValues) {
5296 whatwgRNG = function(size) {
5297 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
5298 crypto.getRandomValues(bytes);
5303 module.exports = whatwgRNG || mathRNG;
5307 }).call(this,_dereq_("buffer").Buffer)
5308 },{"buffer":
8}],
29:[function(_dereq_,module,exports){
5309 ;(function (root, factory, undef) {
5310 if (typeof exports === "object") {
5312 module.exports = exports = factory(_dereq_("./core"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./evpkdf"), _dereq_("./cipher-core"));
5314 else if (typeof define === "function" && define.amd) {
5316 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
5320 factory(root.CryptoJS);
5322 }(this, function (CryptoJS) {
5328 var BlockCipher = C_lib.BlockCipher;
5329 var C_algo = C.algo;
5338 var INV_SUB_MIX_0 = [];
5339 var INV_SUB_MIX_1 = [];
5340 var INV_SUB_MIX_2 = [];
5341 var INV_SUB_MIX_3 = [];
5343 // Compute lookup tables
5345 // Compute double table
5347 for (var i =
0; i <
256; i++) {
5351 d[i] = (i <<
1) ^
0x11b;
5358 for (var i =
0; i <
256; i++) {
5360 var sx = xi ^ (xi <<
1) ^ (xi <<
2) ^ (xi <<
3) ^ (xi <<
4);
5361 sx = (sx
>>> 8) ^ (sx &
0xff) ^
0x63;
5365 // Compute multiplication
5370 // Compute sub bytes, mix columns tables
5371 var t = (d[sx] *
0x101) ^ (sx *
0x1010100);
5372 SUB_MIX_0[x] = (t <<
24) | (t
>>> 8);
5373 SUB_MIX_1[x] = (t <<
16) | (t
>>> 16);
5374 SUB_MIX_2[x] = (t <<
8) | (t
>>> 24);
5377 // Compute inv sub bytes, inv mix columns tables
5378 var t = (x8 *
0x1010101) ^ (x4 *
0x10001) ^ (x2 *
0x101) ^ (x *
0x1010100);
5379 INV_SUB_MIX_0[sx] = (t <<
24) | (t
>>> 8);
5380 INV_SUB_MIX_1[sx] = (t <<
16) | (t
>>> 16);
5381 INV_SUB_MIX_2[sx] = (t <<
8) | (t
>>> 24);
5382 INV_SUB_MIX_3[sx] = t;
5384 // Compute next counter
5388 x = x2 ^ d[d[d[x8 ^ x2]]];
5394 // Precomputed Rcon lookup
5395 var RCON = [
0x00,
0x01,
0x02,
0x04,
0x08,
0x10,
0x20,
0x40,
0x80,
0x1b,
0x36];
5398 * AES block cipher algorithm.
5400 var AES = C_algo.AES = BlockCipher.extend({
5401 _doReset: function () {
5403 var key = this._key;
5404 var keyWords = key.words;
5405 var keySize = key.sigBytes /
4;
5407 // Compute number of rounds
5408 var nRounds = this._nRounds = keySize +
6
5410 // Compute number of key schedule rows
5411 var ksRows = (nRounds +
1) *
4;
5413 // Compute key schedule
5414 var keySchedule = this._keySchedule = [];
5415 for (var ksRow =
0; ksRow < ksRows; ksRow++) {
5416 if (ksRow < keySize) {
5417 keySchedule[ksRow] = keyWords[ksRow];
5419 var t = keySchedule[ksRow -
1];
5421 if (!(ksRow % keySize)) {
5423 t = (t <<
8) | (t
>>> 24);
5426 t = (SBOX[t
>>> 24] <<
24) | (SBOX[(t
>>> 16) &
0xff] <<
16) | (SBOX[(t
>>> 8) &
0xff] <<
8) | SBOX[t &
0xff];
5429 t ^= RCON[(ksRow / keySize) |
0] <<
24;
5430 } else if (keySize
> 6 && ksRow % keySize ==
4) {
5432 t = (SBOX[t
>>> 24] <<
24) | (SBOX[(t
>>> 16) &
0xff] <<
16) | (SBOX[(t
>>> 8) &
0xff] <<
8) | SBOX[t &
0xff];
5435 keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
5439 // Compute inv key schedule
5440 var invKeySchedule = this._invKeySchedule = [];
5441 for (var invKsRow =
0; invKsRow < ksRows; invKsRow++) {
5442 var ksRow = ksRows - invKsRow;
5445 var t = keySchedule[ksRow];
5447 var t = keySchedule[ksRow -
4];
5450 if (invKsRow <
4 || ksRow <=
4) {
5451 invKeySchedule[invKsRow] = t;
5453 invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t
>>> 24]] ^ INV_SUB_MIX_1[SBOX[(t
>>> 16) &
0xff]] ^
5454 INV_SUB_MIX_2[SBOX[(t
>>> 8) &
0xff]] ^ INV_SUB_MIX_3[SBOX[t &
0xff]];
5459 encryptBlock: function (M, offset) {
5460 this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
5463 decryptBlock: function (M, offset) {
5464 // Swap
2nd and
4th rows
5465 var t = M[offset +
1];
5466 M[offset +
1] = M[offset +
3];
5469 this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
5471 // Inv swap
2nd and
4th rows
5472 var t = M[offset +
1];
5473 M[offset +
1] = M[offset +
3];
5477 _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
5479 var nRounds = this._nRounds;
5481 // Get input, add round key
5482 var s0 = M[offset] ^ keySchedule[
0];
5483 var s1 = M[offset +
1] ^ keySchedule[
1];
5484 var s2 = M[offset +
2] ^ keySchedule[
2];
5485 var s3 = M[offset +
3] ^ keySchedule[
3];
5487 // Key schedule row counter
5491 for (var round =
1; round < nRounds; round++) {
5492 // Shift rows, sub bytes, mix columns, add round key
5493 var t0 = SUB_MIX_0[s0
>>> 24] ^ SUB_MIX_1[(s1
>>> 16) &
0xff] ^ SUB_MIX_2[(s2
>>> 8) &
0xff] ^ SUB_MIX_3[s3 &
0xff] ^ keySchedule[ksRow++];
5494 var t1 = SUB_MIX_0[s1
>>> 24] ^ SUB_MIX_1[(s2
>>> 16) &
0xff] ^ SUB_MIX_2[(s3
>>> 8) &
0xff] ^ SUB_MIX_3[s0 &
0xff] ^ keySchedule[ksRow++];
5495 var t2 = SUB_MIX_0[s2
>>> 24] ^ SUB_MIX_1[(s3
>>> 16) &
0xff] ^ SUB_MIX_2[(s0
>>> 8) &
0xff] ^ SUB_MIX_3[s1 &
0xff] ^ keySchedule[ksRow++];
5496 var t3 = SUB_MIX_0[s3
>>> 24] ^ SUB_MIX_1[(s0
>>> 16) &
0xff] ^ SUB_MIX_2[(s1
>>> 8) &
0xff] ^ SUB_MIX_3[s2 &
0xff] ^ keySchedule[ksRow++];
5505 // Shift rows, sub bytes, add round key
5506 var t0 = ((SBOX[s0
>>> 24] <<
24) | (SBOX[(s1
>>> 16) &
0xff] <<
16) | (SBOX[(s2
>>> 8) &
0xff] <<
8) | SBOX[s3 &
0xff]) ^ keySchedule[ksRow++];
5507 var t1 = ((SBOX[s1
>>> 24] <<
24) | (SBOX[(s2
>>> 16) &
0xff] <<
16) | (SBOX[(s3
>>> 8) &
0xff] <<
8) | SBOX[s0 &
0xff]) ^ keySchedule[ksRow++];
5508 var t2 = ((SBOX[s2
>>> 24] <<
24) | (SBOX[(s3
>>> 16) &
0xff] <<
16) | (SBOX[(s0
>>> 8) &
0xff] <<
8) | SBOX[s1 &
0xff]) ^ keySchedule[ksRow++];
5509 var t3 = ((SBOX[s3
>>> 24] <<
24) | (SBOX[(s0
>>> 16) &
0xff] <<
16) | (SBOX[(s1
>>> 8) &
0xff] <<
8) | SBOX[s2 &
0xff]) ^ keySchedule[ksRow++];
5522 * Shortcut functions to the cipher's object interface.
5526 * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
5527 * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);
5529 C.AES = BlockCipher._createHelper(AES);
5533 return CryptoJS.AES;
5536 },{
"./cipher-core":
30,
"./core":
31,
"./enc-base64":
32,
"./evpkdf":
34,
"./md5":
39}],
30:[function(_dereq_,module,exports){
5537 ;(function (root, factory) {
5538 if (typeof exports ===
"object") {
5540 module.exports = exports = factory(_dereq_(
"./core"));
5542 else if (typeof define ===
"function" && define.amd) {
5544 define([
"./core"], factory);
5548 factory(root.CryptoJS);
5550 }(this, function (CryptoJS) {
5553 * Cipher core components.
5555 CryptoJS.lib.Cipher || (function (undefined) {
5559 var Base = C_lib.Base;
5560 var WordArray = C_lib.WordArray;
5561 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
5563 var Utf8 = C_enc.Utf8;
5564 var Base64 = C_enc.Base64;
5565 var C_algo = C.algo;
5566 var EvpKDF = C_algo.EvpKDF;
5569 * Abstract base cipher template.
5571 * @property {number} keySize This cipher's key size. Default:
4 (
128 bits)
5572 * @property {number} ivSize This cipher's IV size. Default:
4 (
128 bits)
5573 * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.
5574 * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.
5576 var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
5578 * Configuration options.
5580 * @property {WordArray} iv The IV to use for this operation.
5585 * Creates this cipher in encryption mode.
5587 * @param {WordArray} key The key.
5588 * @param {Object} cfg (Optional) The configuration options to use for this operation.
5590 * @return {Cipher} A cipher instance.
5596 * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });
5598 createEncryptor: function (key, cfg) {
5599 return this.create(this._ENC_XFORM_MODE, key, cfg);
5603 * Creates this cipher in decryption mode.
5605 * @param {WordArray} key The key.
5606 * @param {Object} cfg (Optional) The configuration options to use for this operation.
5608 * @return {Cipher} A cipher instance.
5614 * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });
5616 createDecryptor: function (key, cfg) {
5617 return this.create(this._DEC_XFORM_MODE, key, cfg);
5621 * Initializes a newly created cipher.
5623 * @param {number} xformMode Either the encryption or decryption transormation mode constant.
5624 * @param {WordArray} key The key.
5625 * @param {Object} cfg (Optional) The configuration options to use for this operation.
5629 * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });
5631 init: function (xformMode, key, cfg) {
5632 // Apply config defaults
5633 this.cfg = this.cfg.extend(cfg);
5635 // Store transform mode and key
5636 this._xformMode = xformMode;
5639 // Set initial values
5644 * Resets this cipher to its initial state.
5650 reset: function () {
5651 // Reset data buffer
5652 BufferedBlockAlgorithm.reset.call(this);
5654 // Perform concrete-cipher logic
5659 * Adds data to be encrypted or decrypted.
5661 * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.
5663 * @return {WordArray} The data after processing.
5667 * var encrypted = cipher.process('data');
5668 * var encrypted = cipher.process(wordArray);
5670 process: function (dataUpdate) {
5672 this._append(dataUpdate);
5674 // Process available blocks
5675 return this._process();
5679 * Finalizes the encryption or decryption process.
5680 * Note that the finalize operation is effectively a destructive, read-once operation.
5682 * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.
5684 * @return {WordArray} The data after final processing.
5688 * var encrypted = cipher.finalize();
5689 * var encrypted = cipher.finalize('data');
5690 * var encrypted = cipher.finalize(wordArray);
5692 finalize: function (dataUpdate) {
5693 // Final data update
5695 this._append(dataUpdate);
5698 // Perform concrete-cipher logic
5699 var finalProcessedData = this._doFinalize();
5701 return finalProcessedData;
5713 * Creates shortcut functions to a cipher's object interface.
5715 * @param {Cipher} cipher The cipher to create a helper for.
5717 * @return {Object} An object with encrypt and decrypt shortcut functions.
5723 * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);
5725 _createHelper: (function () {
5726 function selectCipherStrategy(key) {
5727 if (typeof key == 'string') {
5728 return PasswordBasedCipher;
5730 return SerializableCipher;
5734 return function (cipher) {
5736 encrypt: function (message, key, cfg) {
5737 return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);
5740 decrypt: function (ciphertext, key, cfg) {
5741 return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);
5749 * Abstract base stream cipher template.
5751 * @property {number} blockSize The number of
32-bit words this cipher operates on. Default:
1 (
32 bits)
5753 var StreamCipher = C_lib.StreamCipher = Cipher.extend({
5754 _doFinalize: function () {
5755 // Process partial blocks
5756 var finalProcessedBlocks = this._process(!!'flush');
5758 return finalProcessedBlocks;
5767 var C_mode = C.mode = {};
5770 * Abstract base block cipher mode template.
5772 var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
5774 * Creates this mode for encryption.
5776 * @param {Cipher} cipher A block cipher instance.
5777 * @param {Array} iv The IV words.
5783 * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);
5785 createEncryptor: function (cipher, iv) {
5786 return this.Encryptor.create(cipher, iv);
5790 * Creates this mode for decryption.
5792 * @param {Cipher} cipher A block cipher instance.
5793 * @param {Array} iv The IV words.
5799 * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);
5801 createDecryptor: function (cipher, iv) {
5802 return this.Decryptor.create(cipher, iv);
5806 * Initializes a newly created mode.
5808 * @param {Cipher} cipher A block cipher instance.
5809 * @param {Array} iv The IV words.
5813 * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);
5815 init: function (cipher, iv) {
5816 this._cipher = cipher;
5822 * Cipher Block Chaining mode.
5824 var CBC = C_mode.CBC = (function () {
5826 * Abstract base CBC mode.
5828 var CBC = BlockCipherMode.extend();
5833 CBC.Encryptor = CBC.extend({
5835 * Processes the data block at offset.
5837 * @param {Array} words The data words to operate on.
5838 * @param {number} offset The offset where the block starts.
5842 * mode.processBlock(data.words, offset);
5844 processBlock: function (words, offset) {
5846 var cipher = this._cipher;
5847 var blockSize = cipher.blockSize;
5850 xorBlock.call(this, words, offset, blockSize);
5851 cipher.encryptBlock(words, offset);
5853 // Remember this block to use with next block
5854 this._prevBlock = words.slice(offset, offset + blockSize);
5861 CBC.Decryptor = CBC.extend({
5863 * Processes the data block at offset.
5865 * @param {Array} words The data words to operate on.
5866 * @param {number} offset The offset where the block starts.
5870 * mode.processBlock(data.words, offset);
5872 processBlock: function (words, offset) {
5874 var cipher = this._cipher;
5875 var blockSize = cipher.blockSize;
5877 // Remember this block to use with next block
5878 var thisBlock = words.slice(offset, offset + blockSize);
5881 cipher.decryptBlock(words, offset);
5882 xorBlock.call(this, words, offset, blockSize);
5884 // This block becomes the previous block
5885 this._prevBlock = thisBlock;
5889 function xorBlock(words, offset, blockSize) {
5893 // Choose mixing block
5897 // Remove IV for subsequent blocks
5898 this._iv = undefined;
5900 var block = this._prevBlock;
5904 for (var i =
0; i < blockSize; i++) {
5905 words[offset + i] ^= block[i];
5913 * Padding namespace.
5915 var C_pad = C.pad = {};
5918 * PKCS #
5/
7 padding strategy.
5920 var Pkcs7 = C_pad.Pkcs7 = {
5922 * Pads data using the algorithm defined in PKCS #
5/
7.
5924 * @param {WordArray} data The data to pad.
5925 * @param {number} blockSize The multiple that the data should be padded to.
5931 * CryptoJS.pad.Pkcs7.pad(wordArray,
4);
5933 pad: function (data, blockSize) {
5935 var blockSizeBytes = blockSize *
4;
5937 // Count padding bytes
5938 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
5940 // Create padding word
5941 var paddingWord = (nPaddingBytes <<
24) | (nPaddingBytes <<
16) | (nPaddingBytes <<
8) | nPaddingBytes;
5944 var paddingWords = [];
5945 for (var i =
0; i < nPaddingBytes; i +=
4) {
5946 paddingWords.push(paddingWord);
5948 var padding = WordArray.create(paddingWords, nPaddingBytes);
5951 data.concat(padding);
5955 * Unpads data that had been padded using the algorithm defined in PKCS #
5/
7.
5957 * @param {WordArray} data The data to unpad.
5963 * CryptoJS.pad.Pkcs7.unpad(wordArray);
5965 unpad: function (data) {
5966 // Get number of padding bytes from last byte
5967 var nPaddingBytes = data.words[(data.sigBytes -
1)
>>> 2] &
0xff;
5970 data.sigBytes -= nPaddingBytes;
5975 * Abstract base block cipher template.
5977 * @property {number} blockSize The number of
32-bit words this cipher operates on. Default:
4 (
128 bits)
5979 var BlockCipher = C_lib.BlockCipher = Cipher.extend({
5981 * Configuration options.
5983 * @property {Mode} mode The block mode to use. Default: CBC
5984 * @property {Padding} padding The padding strategy to use. Default: Pkcs7
5986 cfg: Cipher.cfg.extend({
5991 reset: function () {
5993 Cipher.reset.call(this);
5998 var mode = cfg.mode;
6001 if (this._xformMode == this._ENC_XFORM_MODE) {
6002 var modeCreator = mode.createEncryptor;
6003 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
6004 var modeCreator = mode.createDecryptor;
6006 // Keep at least one block in the buffer for unpadding
6007 this._minBufferSize =
1;
6009 this._mode = modeCreator.call(mode, this, iv && iv.words);
6012 _doProcessBlock: function (words, offset) {
6013 this._mode.processBlock(words, offset);
6016 _doFinalize: function () {
6018 var padding = this.cfg.padding;
6021 if (this._xformMode == this._ENC_XFORM_MODE) {
6023 padding.pad(this._data, this.blockSize);
6025 // Process final blocks
6026 var finalProcessedBlocks = this._process(!!'flush');
6027 } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
6028 // Process final blocks
6029 var finalProcessedBlocks = this._process(!!'flush');
6032 padding.unpad(finalProcessedBlocks);
6035 return finalProcessedBlocks;
6042 * A collection of cipher parameters.
6044 * @property {WordArray} ciphertext The raw ciphertext.
6045 * @property {WordArray} key The key to this ciphertext.
6046 * @property {WordArray} iv The IV used in the ciphering operation.
6047 * @property {WordArray} salt The salt used with a key derivation function.
6048 * @property {Cipher} algorithm The cipher algorithm.
6049 * @property {Mode} mode The block mode used in the ciphering operation.
6050 * @property {Padding} padding The padding scheme used in the ciphering operation.
6051 * @property {number} blockSize The block size of the cipher.
6052 * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.
6054 var CipherParams = C_lib.CipherParams = Base.extend({
6056 * Initializes a newly created cipher params object.
6058 * @param {Object} cipherParams An object with any of the possible cipher parameters.
6062 * var cipherParams = CryptoJS.lib.CipherParams.create({
6063 * ciphertext: ciphertextWordArray,
6064 * key: keyWordArray,
6066 * salt: saltWordArray,
6067 * algorithm: CryptoJS.algo.AES,
6068 * mode: CryptoJS.mode.CBC,
6069 * padding: CryptoJS.pad.PKCS7,
6071 * formatter: CryptoJS.format.OpenSSL
6074 init: function (cipherParams) {
6075 this.mixIn(cipherParams);
6079 * Converts this cipher params object to a string.
6081 * @param {Format} formatter (Optional) The formatting strategy to use.
6083 * @return {string} The stringified cipher params.
6085 * @throws Error If neither the formatter nor the default formatter is set.
6089 * var string = cipherParams + '';
6090 * var string = cipherParams.toString();
6091 * var string = cipherParams.toString(CryptoJS.format.OpenSSL);
6093 toString: function (formatter) {
6094 return (formatter || this.formatter).stringify(this);
6101 var C_format = C.format = {};
6104 * OpenSSL formatting strategy.
6106 var OpenSSLFormatter = C_format.OpenSSL = {
6108 * Converts a cipher params object to an OpenSSL-compatible string.
6110 * @param {CipherParams} cipherParams The cipher params object.
6112 * @return {string} The OpenSSL-compatible string.
6118 * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);
6120 stringify: function (cipherParams) {
6122 var ciphertext = cipherParams.ciphertext;
6123 var salt = cipherParams.salt;
6127 var wordArray = WordArray.create([
0x53616c74,
0x65645f5f]).concat(salt).concat(ciphertext);
6129 var wordArray = ciphertext;
6132 return wordArray.toString(Base64);
6136 * Converts an OpenSSL-compatible string to a cipher params object.
6138 * @param {string} openSSLStr The OpenSSL-compatible string.
6140 * @return {CipherParams} The cipher params object.
6146 * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);
6148 parse: function (openSSLStr) {
6150 var ciphertext = Base64.parse(openSSLStr);
6153 var ciphertextWords = ciphertext.words;
6156 if (ciphertextWords[
0] ==
0x53616c74 && ciphertextWords[
1] ==
0x65645f5f) {
6158 var salt = WordArray.create(ciphertextWords.slice(
2,
4));
6160 // Remove salt from ciphertext
6161 ciphertextWords.splice(
0,
4);
6162 ciphertext.sigBytes -=
16;
6165 return CipherParams.create({ ciphertext: ciphertext, salt: salt });
6170 * A cipher wrapper that returns ciphertext as a serializable cipher params object.
6172 var SerializableCipher = C_lib.SerializableCipher = Base.extend({
6174 * Configuration options.
6176 * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL
6179 format: OpenSSLFormatter
6183 * Encrypts a message.
6185 * @param {Cipher} cipher The cipher algorithm to use.
6186 * @param {WordArray|string} message The message to encrypt.
6187 * @param {WordArray} key The key.
6188 * @param {Object} cfg (Optional) The configuration options to use for this operation.
6190 * @return {CipherParams} A cipher params object.
6196 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);
6197 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });
6198 * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });
6200 encrypt: function (cipher, message, key, cfg) {
6201 // Apply config defaults
6202 cfg = this.cfg.extend(cfg);
6205 var encryptor = cipher.createEncryptor(key, cfg);
6206 var ciphertext = encryptor.finalize(message);
6209 var cipherCfg = encryptor.cfg;
6211 // Create and return serializable cipher params
6212 return CipherParams.create({
6213 ciphertext: ciphertext,
6217 mode: cipherCfg.mode,
6218 padding: cipherCfg.padding,
6219 blockSize: cipher.blockSize,
6220 formatter: cfg.format
6225 * Decrypts serialized ciphertext.
6227 * @param {Cipher} cipher The cipher algorithm to use.
6228 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
6229 * @param {WordArray} key The key.
6230 * @param {Object} cfg (Optional) The configuration options to use for this operation.
6232 * @return {WordArray} The plaintext.
6238 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });
6239 * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });
6241 decrypt: function (cipher, ciphertext, key, cfg) {
6242 // Apply config defaults
6243 cfg = this.cfg.extend(cfg);
6245 // Convert string to CipherParams
6246 ciphertext = this._parse(ciphertext, cfg.format);
6249 var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);
6255 * Converts serialized ciphertext to CipherParams,
6256 * else assumed CipherParams already and returns ciphertext unchanged.
6258 * @param {CipherParams|string} ciphertext The ciphertext.
6259 * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.
6261 * @return {CipherParams} The unserialized ciphertext.
6267 * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);
6269 _parse: function (ciphertext, format) {
6270 if (typeof ciphertext == 'string') {
6271 return format.parse(ciphertext, this);
6279 * Key derivation function namespace.
6281 var C_kdf = C.kdf = {};
6284 * OpenSSL key derivation function.
6286 var OpenSSLKdf = C_kdf.OpenSSL = {
6288 * Derives a key and IV from a password.
6290 * @param {string} password The password to derive from.
6291 * @param {number} keySize The size in words of the key to generate.
6292 * @param {number} ivSize The size in words of the IV to generate.
6293 * @param {WordArray|string} salt (Optional) A
64-bit salt to use. If omitted, a salt will be generated randomly.
6295 * @return {CipherParams} A cipher params object with the key, IV, and salt.
6301 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password',
256/
32,
128/
32);
6302 * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password',
256/
32,
128/
32, 'saltsalt');
6304 execute: function (password, keySize, ivSize, salt) {
6305 // Generate random salt
6307 salt = WordArray.random(
64/
8);
6310 // Derive key and IV
6311 var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
6313 // Separate key and IV
6314 var iv = WordArray.create(key.words.slice(keySize), ivSize *
4);
6315 key.sigBytes = keySize *
4;
6318 return CipherParams.create({ key: key, iv: iv, salt: salt });
6323 * A serializable cipher wrapper that derives the key from a password,
6324 * and returns ciphertext as a serializable cipher params object.
6326 var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
6328 * Configuration options.
6330 * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL
6332 cfg: SerializableCipher.cfg.extend({
6337 * Encrypts a message using a password.
6339 * @param {Cipher} cipher The cipher algorithm to use.
6340 * @param {WordArray|string} message The message to encrypt.
6341 * @param {string} password The password.
6342 * @param {Object} cfg (Optional) The configuration options to use for this operation.
6344 * @return {CipherParams} A cipher params object.
6350 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');
6351 * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });
6353 encrypt: function (cipher, message, password, cfg) {
6354 // Apply config defaults
6355 cfg = this.cfg.extend(cfg);
6357 // Derive key and other params
6358 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);
6361 cfg.iv = derivedParams.iv;
6364 var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
6366 // Mix in derived params
6367 ciphertext.mixIn(derivedParams);
6373 * Decrypts serialized ciphertext using a password.
6375 * @param {Cipher} cipher The cipher algorithm to use.
6376 * @param {CipherParams|string} ciphertext The ciphertext to decrypt.
6377 * @param {string} password The password.
6378 * @param {Object} cfg (Optional) The configuration options to use for this operation.
6380 * @return {WordArray} The plaintext.
6386 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });
6387 * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });
6389 decrypt: function (cipher, ciphertext, password, cfg) {
6390 // Apply config defaults
6391 cfg = this.cfg.extend(cfg);
6393 // Convert string to CipherParams
6394 ciphertext = this._parse(ciphertext, cfg.format);
6396 // Derive key and other params
6397 var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);
6400 cfg.iv = derivedParams.iv;
6403 var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);
6412 },{
"./core":
31}],
31:[function(_dereq_,module,exports){
6413 ;(function (root, factory) {
6414 if (typeof exports ===
"object") {
6416 module.exports = exports = factory();
6418 else if (typeof define ===
"function" && define.amd) {
6420 define([], factory);
6424 root.CryptoJS = factory();
6426 }(this, function () {
6429 * CryptoJS core components.
6431 var CryptoJS = CryptoJS || (function (Math, undefined) {
6433 * CryptoJS namespace.
6438 * Library namespace.
6440 var C_lib = C.lib = {};
6443 * Base object for prototypal inheritance.
6445 var Base = C_lib.Base = (function () {
6450 * Creates a new object that inherits from this object.
6452 * @param {Object} overrides Properties to copy into the new object.
6454 * @return {Object} The new object.
6460 * var MyType = CryptoJS.lib.Base.extend({
6463 * method: function () {
6467 extend: function (overrides) {
6470 var subtype = new F();
6474 subtype.mixIn(overrides);
6477 // Create default initializer
6478 if (!subtype.hasOwnProperty('init')) {
6479 subtype.init = function () {
6480 subtype.$super.init.apply(this, arguments);
6484 // Initializer's prototype is the subtype object
6485 subtype.init.prototype = subtype;
6487 // Reference supertype
6488 subtype.$super = this;
6494 * Extends this object and runs the init method.
6495 * Arguments to create() will be passed to init().
6497 * @return {Object} The new object.
6503 * var instance = MyType.create();
6505 create: function () {
6506 var instance = this.extend();
6507 instance.init.apply(instance, arguments);
6513 * Initializes a newly created object.
6514 * Override this method to add some logic when your objects are created.
6518 * var MyType = CryptoJS.lib.Base.extend({
6519 * init: function () {
6528 * Copies properties into this object.
6530 * @param {Object} properties The properties to mix in.
6538 mixIn: function (properties) {
6539 for (var propertyName in properties) {
6540 if (properties.hasOwnProperty(propertyName)) {
6541 this[propertyName] = properties[propertyName];
6545 // IE won't copy toString using the loop above
6546 if (properties.hasOwnProperty('toString')) {
6547 this.toString = properties.toString;
6552 * Creates a copy of this object.
6554 * @return {Object} The clone.
6558 * var clone = instance.clone();
6560 clone: function () {
6561 return this.init.prototype.extend(this);
6567 * An array of
32-bit words.
6569 * @property {Array} words The array of
32-bit words.
6570 * @property {number} sigBytes The number of significant bytes in this word array.
6572 var WordArray = C_lib.WordArray = Base.extend({
6574 * Initializes a newly created word array.
6576 * @param {Array} words (Optional) An array of
32-bit words.
6577 * @param {number} sigBytes (Optional) The number of significant bytes in the words.
6581 * var wordArray = CryptoJS.lib.WordArray.create();
6582 * var wordArray = CryptoJS.lib.WordArray.create([
0x00010203,
0x04050607]);
6583 * var wordArray = CryptoJS.lib.WordArray.create([
0x00010203,
0x04050607],
6);
6585 init: function (words, sigBytes) {
6586 words = this.words = words || [];
6588 if (sigBytes != undefined) {
6589 this.sigBytes = sigBytes;
6591 this.sigBytes = words.length *
4;
6596 * Converts this word array to a string.
6598 * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
6600 * @return {string} The stringified word array.
6604 * var string = wordArray + '';
6605 * var string = wordArray.toString();
6606 * var string = wordArray.toString(CryptoJS.enc.Utf8);
6608 toString: function (encoder) {
6609 return (encoder || Hex).stringify(this);
6613 * Concatenates a word array to this word array.
6615 * @param {WordArray} wordArray The word array to append.
6617 * @return {WordArray} This word array.
6621 * wordArray1.concat(wordArray2);
6623 concat: function (wordArray) {
6625 var thisWords = this.words;
6626 var thatWords = wordArray.words;
6627 var thisSigBytes = this.sigBytes;
6628 var thatSigBytes = wordArray.sigBytes;
6630 // Clamp excess bits
6634 if (thisSigBytes %
4) {
6635 // Copy one byte at a time
6636 for (var i =
0; i < thatSigBytes; i++) {
6637 var thatByte = (thatWords[i
>>> 2]
>>> (
24 - (i %
4) *
8)) &
0xff;
6638 thisWords[(thisSigBytes + i)
>>> 2] |= thatByte << (
24 - ((thisSigBytes + i) %
4) *
8);
6640 } else if (thatWords.length
> 0xffff) {
6641 // Copy one word at a time
6642 for (var i =
0; i < thatSigBytes; i +=
4) {
6643 thisWords[(thisSigBytes + i)
>>> 2] = thatWords[i
>>> 2];
6646 // Copy all words at once
6647 thisWords.push.apply(thisWords, thatWords);
6649 this.sigBytes += thatSigBytes;
6656 * Removes insignificant bits.
6660 * wordArray.clamp();
6662 clamp: function () {
6664 var words = this.words;
6665 var sigBytes = this.sigBytes;
6668 words[sigBytes
>>> 2] &=
0xffffffff << (
32 - (sigBytes %
4) *
8);
6669 words.length = Math.ceil(sigBytes /
4);
6673 * Creates a copy of this word array.
6675 * @return {WordArray} The clone.
6679 * var clone = wordArray.clone();
6681 clone: function () {
6682 var clone = Base.clone.call(this);
6683 clone.words = this.words.slice(
0);
6689 * Creates a word array filled with random bytes.
6691 * @param {number} nBytes The number of random bytes to generate.
6693 * @return {WordArray} The random word array.
6699 * var wordArray = CryptoJS.lib.WordArray.random(
16);
6701 random: function (nBytes) {
6703 for (var i =
0; i < nBytes; i +=
4) {
6704 words.push((Math.random() *
0x100000000) |
0);
6707 return new WordArray.init(words, nBytes);
6712 * Encoder namespace.
6714 var C_enc = C.enc = {};
6717 * Hex encoding strategy.
6719 var Hex = C_enc.Hex = {
6721 * Converts a word array to a hex string.
6723 * @param {WordArray} wordArray The word array.
6725 * @return {string} The hex string.
6731 * var hexString = CryptoJS.enc.Hex.stringify(wordArray);
6733 stringify: function (wordArray) {
6735 var words = wordArray.words;
6736 var sigBytes = wordArray.sigBytes;
6740 for (var i =
0; i < sigBytes; i++) {
6741 var bite = (words[i
>>> 2]
>>> (
24 - (i %
4) *
8)) &
0xff;
6742 hexChars.push((bite
>>> 4).toString(
16));
6743 hexChars.push((bite &
0x0f).toString(
16));
6746 return hexChars.join('');
6750 * Converts a hex string to a word array.
6752 * @param {string} hexStr The hex string.
6754 * @return {WordArray} The word array.
6760 * var wordArray = CryptoJS.enc.Hex.parse(hexString);
6762 parse: function (hexStr) {
6764 var hexStrLength = hexStr.length;
6768 for (var i =
0; i < hexStrLength; i +=
2) {
6769 words[i
>>> 3] |= parseInt(hexStr.substr(i,
2),
16) << (
24 - (i %
8) *
4);
6772 return new WordArray.init(words, hexStrLength /
2);
6777 * Latin1 encoding strategy.
6779 var Latin1 = C_enc.Latin1 = {
6781 * Converts a word array to a Latin1 string.
6783 * @param {WordArray} wordArray The word array.
6785 * @return {string} The Latin1 string.
6791 * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
6793 stringify: function (wordArray) {
6795 var words = wordArray.words;
6796 var sigBytes = wordArray.sigBytes;
6799 var latin1Chars = [];
6800 for (var i =
0; i < sigBytes; i++) {
6801 var bite = (words[i
>>> 2]
>>> (
24 - (i %
4) *
8)) &
0xff;
6802 latin1Chars.push(String.fromCharCode(bite));
6805 return latin1Chars.join('');
6809 * Converts a Latin1 string to a word array.
6811 * @param {string} latin1Str The Latin1 string.
6813 * @return {WordArray} The word array.
6819 * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
6821 parse: function (latin1Str) {
6823 var latin1StrLength = latin1Str.length;
6827 for (var i =
0; i < latin1StrLength; i++) {
6828 words[i
>>> 2] |= (latin1Str.charCodeAt(i) &
0xff) << (
24 - (i %
4) *
8);
6831 return new WordArray.init(words, latin1StrLength);
6836 * UTF-
8 encoding strategy.
6838 var Utf8 = C_enc.Utf8 = {
6840 * Converts a word array to a UTF-
8 string.
6842 * @param {WordArray} wordArray The word array.
6844 * @return {string} The UTF-
8 string.
6850 * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
6852 stringify: function (wordArray) {
6854 return decodeURIComponent(escape(Latin1.stringify(wordArray)));
6856 throw new Error('Malformed UTF-
8 data');
6861 * Converts a UTF-
8 string to a word array.
6863 * @param {string} utf8Str The UTF-
8 string.
6865 * @return {WordArray} The word array.
6871 * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
6873 parse: function (utf8Str) {
6874 return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
6879 * Abstract buffered block algorithm template.
6881 * The property blockSize must be implemented in a concrete subtype.
6883 * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default:
0
6885 var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
6887 * Resets this block algorithm's data buffer to its initial state.
6891 * bufferedBlockAlgorithm.reset();
6893 reset: function () {
6895 this._data = new WordArray.init();
6896 this._nDataBytes =
0;
6900 * Adds new data to this block algorithm's buffer.
6902 * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-
8.
6906 * bufferedBlockAlgorithm._append('data');
6907 * bufferedBlockAlgorithm._append(wordArray);
6909 _append: function (data) {
6910 // Convert string to WordArray, else assume WordArray already
6911 if (typeof data == 'string') {
6912 data = Utf8.parse(data);
6916 this._data.concat(data);
6917 this._nDataBytes += data.sigBytes;
6921 * Processes available data blocks.
6923 * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
6925 * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
6927 * @return {WordArray} The processed data.
6931 * var processedData = bufferedBlockAlgorithm._process();
6932 * var processedData = bufferedBlockAlgorithm._process(!!'flush');
6934 _process: function (doFlush) {
6936 var data = this._data;
6937 var dataWords = data.words;
6938 var dataSigBytes = data.sigBytes;
6939 var blockSize = this.blockSize;
6940 var blockSizeBytes = blockSize *
4;
6942 // Count blocks ready
6943 var nBlocksReady = dataSigBytes / blockSizeBytes;
6945 // Round up to include partial blocks
6946 nBlocksReady = Math.ceil(nBlocksReady);
6948 // Round down to include only full blocks,
6949 // less the number of blocks that must remain in the buffer
6950 nBlocksReady = Math.max((nBlocksReady |
0) - this._minBufferSize,
0);
6953 // Count words ready
6954 var nWordsReady = nBlocksReady * blockSize;
6956 // Count bytes ready
6957 var nBytesReady = Math.min(nWordsReady *
4, dataSigBytes);
6961 for (var offset =
0; offset < nWordsReady; offset += blockSize) {
6962 // Perform concrete-algorithm logic
6963 this._doProcessBlock(dataWords, offset);
6966 // Remove processed words
6967 var processedWords = dataWords.splice(
0, nWordsReady);
6968 data.sigBytes -= nBytesReady;
6971 // Return processed words
6972 return new WordArray.init(processedWords, nBytesReady);
6976 * Creates a copy of this object.
6978 * @return {Object} The clone.
6982 * var clone = bufferedBlockAlgorithm.clone();
6984 clone: function () {
6985 var clone = Base.clone.call(this);
6986 clone._data = this._data.clone();
6995 * Abstract hasher template.
6997 * @property {number} blockSize The number of
32-bit words this hasher operates on. Default:
16 (
512 bits)
6999 var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
7001 * Configuration options.
7006 * Initializes a newly created hasher.
7008 * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
7012 * var hasher = CryptoJS.algo.SHA256.create();
7014 init: function (cfg) {
7015 // Apply config defaults
7016 this.cfg = this.cfg.extend(cfg);
7018 // Set initial values
7023 * Resets this hasher to its initial state.
7029 reset: function () {
7030 // Reset data buffer
7031 BufferedBlockAlgorithm.reset.call(this);
7033 // Perform concrete-hasher logic
7038 * Updates this hasher with a message.
7040 * @param {WordArray|string} messageUpdate The message to append.
7042 * @return {Hasher} This hasher.
7046 * hasher.update('message');
7047 * hasher.update(wordArray);
7049 update: function (messageUpdate) {
7051 this._append(messageUpdate);
7061 * Finalizes the hash computation.
7062 * Note that the finalize operation is effectively a destructive, read-once operation.
7064 * @param {WordArray|string} messageUpdate (Optional) A final message update.
7066 * @return {WordArray} The hash.
7070 * var hash = hasher.finalize();
7071 * var hash = hasher.finalize('message');
7072 * var hash = hasher.finalize(wordArray);
7074 finalize: function (messageUpdate) {
7075 // Final message update
7076 if (messageUpdate) {
7077 this._append(messageUpdate);
7080 // Perform concrete-hasher logic
7081 var hash = this._doFinalize();
7089 * Creates a shortcut function to a hasher's object interface.
7091 * @param {Hasher} hasher The hasher to create a helper for.
7093 * @return {Function} The shortcut function.
7099 * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
7101 _createHelper: function (hasher) {
7102 return function (message, cfg) {
7103 return new hasher.init(cfg).finalize(message);
7108 * Creates a shortcut function to the HMAC's object interface.
7110 * @param {Hasher} hasher The hasher to use in this HMAC helper.
7112 * @return {Function} The shortcut function.
7118 * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
7120 _createHmacHelper: function (hasher) {
7121 return function (message, key) {
7122 return new C_algo.HMAC.init(hasher, key).finalize(message);
7128 * Algorithm namespace.
7130 var C_algo = C.algo = {};
7139 },{}],
32:[function(_dereq_,module,exports){
7140 ;(function (root, factory) {
7141 if (typeof exports ===
"object") {
7143 module.exports = exports = factory(_dereq_(
"./core"));
7145 else if (typeof define ===
"function" && define.amd) {
7147 define([
"./core"], factory);
7151 factory(root.CryptoJS);
7153 }(this, function (CryptoJS) {
7159 var WordArray = C_lib.WordArray;
7163 * Base64 encoding strategy.
7165 var Base64 = C_enc.Base64 = {
7167 * Converts a word array to a Base64 string.
7169 * @param {WordArray} wordArray The word array.
7171 * @return {string} The Base64 string.
7177 * var base64String = CryptoJS.enc.Base64.stringify(wordArray);
7179 stringify: function (wordArray) {
7181 var words = wordArray.words;
7182 var sigBytes = wordArray.sigBytes;
7183 var map = this._map;
7185 // Clamp excess bits
7189 var base64Chars = [];
7190 for (var i =
0; i < sigBytes; i +=
3) {
7191 var byte1 = (words[i
>>> 2]
>>> (
24 - (i %
4) *
8)) &
0xff;
7192 var byte2 = (words[(i +
1)
>>> 2]
>>> (
24 - ((i +
1) %
4) *
8)) &
0xff;
7193 var byte3 = (words[(i +
2)
>>> 2]
>>> (
24 - ((i +
2) %
4) *
8)) &
0xff;
7195 var triplet = (byte1 <<
16) | (byte2 <<
8) | byte3;
7197 for (var j =
0; (j <
4) && (i + j *
0.75 < sigBytes); j++) {
7198 base64Chars.push(map.charAt((triplet
>>> (
6 * (
3 - j))) &
0x3f));
7203 var paddingChar = map.charAt(
64);
7205 while (base64Chars.length %
4) {
7206 base64Chars.push(paddingChar);
7210 return base64Chars.join('');
7214 * Converts a Base64 string to a word array.
7216 * @param {string} base64Str The Base64 string.
7218 * @return {WordArray} The word array.
7224 * var wordArray = CryptoJS.enc.Base64.parse(base64String);
7226 parse: function (base64Str) {
7228 var base64StrLength = base64Str.length;
7229 var map = this._map;
7232 var paddingChar = map.charAt(
64);
7234 var paddingIndex = base64Str.indexOf(paddingChar);
7235 if (paddingIndex != -
1) {
7236 base64StrLength = paddingIndex;
7243 for (var i =
0; i < base64StrLength; i++) {
7245 var bits1 = map.indexOf(base64Str.charAt(i -
1)) << ((i %
4) *
2);
7246 var bits2 = map.indexOf(base64Str.charAt(i))
>>> (
6 - (i %
4) *
2);
7247 words[nBytes
>>> 2] |= (bits1 | bits2) << (
24 - (nBytes %
4) *
8);
7252 return WordArray.create(words, nBytes);
7255 _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
7260 return CryptoJS.enc.Base64;
7263 },{
"./core":
31}],
33:[function(_dereq_,module,exports){
7264 ;(function (root, factory) {
7265 if (typeof exports ===
"object") {
7267 module.exports = exports = factory(_dereq_(
"./core"));
7269 else if (typeof define ===
"function" && define.amd) {
7271 define([
"./core"], factory);
7275 factory(root.CryptoJS);
7277 }(this, function (CryptoJS) {
7283 var WordArray = C_lib.WordArray;
7287 * UTF-
16 BE encoding strategy.
7289 var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
7291 * Converts a word array to a UTF-
16 BE string.
7293 * @param {WordArray} wordArray The word array.
7295 * @return {string} The UTF-
16 BE string.
7301 * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
7303 stringify: function (wordArray) {
7305 var words = wordArray.words;
7306 var sigBytes = wordArray.sigBytes;
7309 var utf16Chars = [];
7310 for (var i =
0; i < sigBytes; i +=
2) {
7311 var codePoint = (words[i
>>> 2]
>>> (
16 - (i %
4) *
8)) &
0xffff;
7312 utf16Chars.push(String.fromCharCode(codePoint));
7315 return utf16Chars.join('');
7319 * Converts a UTF-
16 BE string to a word array.
7321 * @param {string} utf16Str The UTF-
16 BE string.
7323 * @return {WordArray} The word array.
7329 * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
7331 parse: function (utf16Str) {
7333 var utf16StrLength = utf16Str.length;
7337 for (var i =
0; i < utf16StrLength; i++) {
7338 words[i
>>> 1] |= utf16Str.charCodeAt(i) << (
16 - (i %
2) *
16);
7341 return WordArray.create(words, utf16StrLength *
2);
7346 * UTF-
16 LE encoding strategy.
7350 * Converts a word array to a UTF-
16 LE string.
7352 * @param {WordArray} wordArray The word array.
7354 * @return {string} The UTF-
16 LE string.
7360 * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
7362 stringify: function (wordArray) {
7364 var words = wordArray.words;
7365 var sigBytes = wordArray.sigBytes;
7368 var utf16Chars = [];
7369 for (var i =
0; i < sigBytes; i +=
2) {
7370 var codePoint = swapEndian((words[i
>>> 2]
>>> (
16 - (i %
4) *
8)) &
0xffff);
7371 utf16Chars.push(String.fromCharCode(codePoint));
7374 return utf16Chars.join('');
7378 * Converts a UTF-
16 LE string to a word array.
7380 * @param {string} utf16Str The UTF-
16 LE string.
7382 * @return {WordArray} The word array.
7388 * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
7390 parse: function (utf16Str) {
7392 var utf16StrLength = utf16Str.length;
7396 for (var i =
0; i < utf16StrLength; i++) {
7397 words[i
>>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (
16 - (i %
2) *
16));
7400 return WordArray.create(words, utf16StrLength *
2);
7404 function swapEndian(word) {
7405 return ((word <<
8) &
0xff00ff00) | ((word
>>> 8) &
0x00ff00ff);
7410 return CryptoJS.enc.Utf16;
7413 },{
"./core":
31}],
34:[function(_dereq_,module,exports){
7414 ;(function (root, factory, undef) {
7415 if (typeof exports ===
"object") {
7417 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./sha1"), _dereq_(
"./hmac"));
7419 else if (typeof define ===
"function" && define.amd) {
7421 define([
"./core",
"./sha1",
"./hmac"], factory);
7425 factory(root.CryptoJS);
7427 }(this, function (CryptoJS) {
7433 var Base = C_lib.Base;
7434 var WordArray = C_lib.WordArray;
7435 var C_algo = C.algo;
7436 var MD5 = C_algo.MD5;
7439 * This key derivation function is meant to conform with EVP_BytesToKey.
7440 * www.openssl.org/docs/crypto/EVP_BytesToKey.html
7442 var EvpKDF = C_algo.EvpKDF = Base.extend({
7444 * Configuration options.
7446 * @property {number} keySize The key size in words to generate. Default:
4 (
128 bits)
7447 * @property {Hasher} hasher The hash algorithm to use. Default: MD5
7448 * @property {number} iterations The number of iterations to perform. Default:
1
7457 * Initializes a newly created key derivation function.
7459 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
7463 * var kdf = CryptoJS.algo.EvpKDF.create();
7464 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize:
8 });
7465 * var kdf = CryptoJS.algo.EvpKDF.create({ keySize:
8, iterations:
1000 });
7467 init: function (cfg) {
7468 this.cfg = this.cfg.extend(cfg);
7472 * Derives a key from a password.
7474 * @param {WordArray|string} password The password.
7475 * @param {WordArray|string} salt A salt.
7477 * @return {WordArray} The derived key.
7481 * var key = kdf.compute(password, salt);
7483 compute: function (password, salt) {
7488 var hasher = cfg.hasher.create();
7491 var derivedKey = WordArray.create();
7494 var derivedKeyWords = derivedKey.words;
7495 var keySize = cfg.keySize;
7496 var iterations = cfg.iterations;
7499 while (derivedKeyWords.length < keySize) {
7501 hasher.update(block);
7503 var block = hasher.update(password).finalize(salt);
7507 for (var i =
1; i < iterations; i++) {
7508 block = hasher.finalize(block);
7512 derivedKey.concat(block);
7514 derivedKey.sigBytes = keySize *
4;
7521 * Derives a key from a password.
7523 * @param {WordArray|string} password The password.
7524 * @param {WordArray|string} salt A salt.
7525 * @param {Object} cfg (Optional) The configuration options to use for this computation.
7527 * @return {WordArray} The derived key.
7533 * var key = CryptoJS.EvpKDF(password, salt);
7534 * var key = CryptoJS.EvpKDF(password, salt, { keySize:
8 });
7535 * var key = CryptoJS.EvpKDF(password, salt, { keySize:
8, iterations:
1000 });
7537 C.EvpKDF = function (password, salt, cfg) {
7538 return EvpKDF.create(cfg).compute(password, salt);
7543 return CryptoJS.EvpKDF;
7546 },{
"./core":
31,
"./hmac":
36,
"./sha1":
55}],
35:[function(_dereq_,module,exports){
7547 ;(function (root, factory, undef) {
7548 if (typeof exports ===
"object") {
7550 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
7552 else if (typeof define ===
"function" && define.amd) {
7554 define([
"./core",
"./cipher-core"], factory);
7558 factory(root.CryptoJS);
7560 }(this, function (CryptoJS) {
7562 (function (undefined) {
7566 var CipherParams = C_lib.CipherParams;
7568 var Hex = C_enc.Hex;
7569 var C_format = C.format;
7571 var HexFormatter = C_format.Hex = {
7573 * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.
7575 * @param {CipherParams} cipherParams The cipher params object.
7577 * @return {string} The hexadecimally encoded string.
7583 * var hexString = CryptoJS.format.Hex.stringify(cipherParams);
7585 stringify: function (cipherParams) {
7586 return cipherParams.ciphertext.toString(Hex);
7590 * Converts a hexadecimally encoded ciphertext string to a cipher params object.
7592 * @param {string} input The hexadecimally encoded string.
7594 * @return {CipherParams} The cipher params object.
7600 * var cipherParams = CryptoJS.format.Hex.parse(hexString);
7602 parse: function (input) {
7603 var ciphertext = Hex.parse(input);
7604 return CipherParams.create({ ciphertext: ciphertext });
7610 return CryptoJS.format.Hex;
7613 },{
"./cipher-core":
30,
"./core":
31}],
36:[function(_dereq_,module,exports){
7614 ;(function (root, factory) {
7615 if (typeof exports ===
"object") {
7617 module.exports = exports = factory(_dereq_(
"./core"));
7619 else if (typeof define ===
"function" && define.amd) {
7621 define([
"./core"], factory);
7625 factory(root.CryptoJS);
7627 }(this, function (CryptoJS) {
7633 var Base = C_lib.Base;
7635 var Utf8 = C_enc.Utf8;
7636 var C_algo = C.algo;
7641 var HMAC = C_algo.HMAC = Base.extend({
7643 * Initializes a newly created HMAC.
7645 * @param {Hasher} hasher The hash algorithm to use.
7646 * @param {WordArray|string} key The secret key.
7650 * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
7652 init: function (hasher, key) {
7654 hasher = this._hasher = new hasher.init();
7656 // Convert string to WordArray, else assume WordArray already
7657 if (typeof key == 'string') {
7658 key = Utf8.parse(key);
7662 var hasherBlockSize = hasher.blockSize;
7663 var hasherBlockSizeBytes = hasherBlockSize *
4;
7665 // Allow arbitrary length keys
7666 if (key.sigBytes
> hasherBlockSizeBytes) {
7667 key = hasher.finalize(key);
7670 // Clamp excess bits
7673 // Clone key for inner and outer pads
7674 var oKey = this._oKey = key.clone();
7675 var iKey = this._iKey = key.clone();
7678 var oKeyWords = oKey.words;
7679 var iKeyWords = iKey.words;
7681 // XOR keys with pad constants
7682 for (var i =
0; i < hasherBlockSize; i++) {
7683 oKeyWords[i] ^=
0x5c5c5c5c;
7684 iKeyWords[i] ^=
0x36363636;
7686 oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
7688 // Set initial values
7693 * Resets this HMAC to its initial state.
7697 * hmacHasher.reset();
7699 reset: function () {
7701 var hasher = this._hasher;
7705 hasher.update(this._iKey);
7709 * Updates this HMAC with a message.
7711 * @param {WordArray|string} messageUpdate The message to append.
7713 * @return {HMAC} This HMAC instance.
7717 * hmacHasher.update('message');
7718 * hmacHasher.update(wordArray);
7720 update: function (messageUpdate) {
7721 this._hasher.update(messageUpdate);
7728 * Finalizes the HMAC computation.
7729 * Note that the finalize operation is effectively a destructive, read-once operation.
7731 * @param {WordArray|string} messageUpdate (Optional) A final message update.
7733 * @return {WordArray} The HMAC.
7737 * var hmac = hmacHasher.finalize();
7738 * var hmac = hmacHasher.finalize('message');
7739 * var hmac = hmacHasher.finalize(wordArray);
7741 finalize: function (messageUpdate) {
7743 var hasher = this._hasher;
7746 var innerHash = hasher.finalize(messageUpdate);
7748 var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));
7757 },{"./core":
31}],
37:[function(_dereq_,module,exports){
7758 ;(function (root, factory, undef) {
7759 if (typeof exports === "object") {
7761 module.exports = exports = factory(_dereq_("./core"), _dereq_("./x64-core"), _dereq_("./lib-typedarrays"), _dereq_("./enc-utf16"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./sha1"), _dereq_("./sha256"), _dereq_("./sha224"), _dereq_("./sha512"), _dereq_("./sha384"), _dereq_("./sha3"), _dereq_("./ripemd160"), _dereq_("./hmac"), _dereq_("./pbkdf2"), _dereq_("./evpkdf"), _dereq_("./cipher-core"), _dereq_("./mode-cfb"), _dereq_("./mode-ctr"), _dereq_("./mode-ctr-gladman"), _dereq_("./mode-ofb"), _dereq_("./mode-ecb"), _dereq_("./pad-ansix923"), _dereq_("./pad-iso10126"), _dereq_("./pad-iso97971"), _dereq_("./pad-zeropadding"), _dereq_("./pad-nopadding"), _dereq_("./format-hex"), _dereq_("./aes"), _dereq_("./tripledes"), _dereq_("./rc4"), _dereq_("./rabbit"), _dereq_("./rabbit-legacy"));
7763 else if (typeof define === "function" && define.amd) {
7765 define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory);
7769 factory(root.CryptoJS);
7771 }(this, function (CryptoJS) {
7776 },{"./aes":
29,"./cipher-core":
30,"./core":
31,"./enc-base64":
32,"./enc-utf16":
33,"./evpkdf":
34,"./format-hex":
35,"./hmac":
36,"./lib-typedarrays":
38,"./md5":
39,"./mode-cfb":
40,"./mode-ctr":
42,"./mode-ctr-gladman":
41,"./mode-ecb":
43,"./mode-ofb":
44,"./pad-ansix923":
45,"./pad-iso10126":
46,"./pad-iso97971":
47,"./pad-nopadding":
48,"./pad-zeropadding":
49,"./pbkdf2":
50,"./rabbit":
52,"./rabbit-legacy":
51,"./rc4":
53,"./ripemd160":
54,"./sha1":
55,"./sha224":
56,"./sha256":
57,"./sha3":
58,"./sha384":
59,"./sha512":
60,"./tripledes":
61,"./x64-core":
62}],
38:[function(_dereq_,module,exports){
7777 ;(function (root, factory) {
7778 if (typeof exports === "object") {
7780 module.exports = exports = factory(_dereq_("./core"));
7782 else if (typeof define === "function" && define.amd) {
7784 define(["./core"], factory);
7788 factory(root.CryptoJS);
7790 }(this, function (CryptoJS) {
7793 // Check if typed arrays are supported
7794 if (typeof ArrayBuffer != 'function') {
7801 var WordArray = C_lib.WordArray;
7803 // Reference original init
7804 var superInit = WordArray.init;
7806 // Augment WordArray.init to handle typed arrays
7807 var subInit = WordArray.init = function (typedArray) {
7808 // Convert buffers to uint8
7809 if (typedArray instanceof ArrayBuffer) {
7810 typedArray = new Uint8Array(typedArray);
7813 // Convert other array views to uint8
7815 typedArray instanceof Int8Array ||
7816 typedArray instanceof Uint8ClampedArray ||
7817 typedArray instanceof Int16Array ||
7818 typedArray instanceof Uint16Array ||
7819 typedArray instanceof Int32Array ||
7820 typedArray instanceof Uint32Array ||
7821 typedArray instanceof Float32Array ||
7822 typedArray instanceof Float64Array
7824 typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);
7827 // Handle Uint8Array
7828 if (typedArray instanceof Uint8Array) {
7830 var typedArrayByteLength = typedArray.byteLength;
7834 for (var i =
0; i < typedArrayByteLength; i++) {
7835 words[i
>>> 2] |= typedArray[i] << (
24 - (i %
4) *
8);
7838 // Initialize this word array
7839 superInit.call(this, words, typedArrayByteLength);
7841 // Else call normal init
7842 superInit.apply(this, arguments);
7846 subInit.prototype = WordArray;
7850 return CryptoJS.lib.WordArray;
7853 },{
"./core":
31}],
39:[function(_dereq_,module,exports){
7854 ;(function (root, factory) {
7855 if (typeof exports ===
"object") {
7857 module.exports = exports = factory(_dereq_(
"./core"));
7859 else if (typeof define ===
"function" && define.amd) {
7861 define([
"./core"], factory);
7865 factory(root.CryptoJS);
7867 }(this, function (CryptoJS) {
7873 var WordArray = C_lib.WordArray;
7874 var Hasher = C_lib.Hasher;
7875 var C_algo = C.algo;
7880 // Compute constants
7882 for (var i =
0; i <
64; i++) {
7883 T[i] = (Math.abs(Math.sin(i +
1)) *
0x100000000) |
0;
7888 * MD5 hash algorithm.
7890 var MD5 = C_algo.MD5 = Hasher.extend({
7891 _doReset: function () {
7892 this._hash = new WordArray.init([
7893 0x67452301,
0xefcdab89,
7894 0x98badcfe,
0x10325476
7898 _doProcessBlock: function (M, offset) {
7900 for (var i =
0; i <
16; i++) {
7902 var offset_i = offset + i;
7903 var M_offset_i = M[offset_i];
7906 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
7907 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
7912 var H = this._hash.words;
7914 var M_offset_0 = M[offset +
0];
7915 var M_offset_1 = M[offset +
1];
7916 var M_offset_2 = M[offset +
2];
7917 var M_offset_3 = M[offset +
3];
7918 var M_offset_4 = M[offset +
4];
7919 var M_offset_5 = M[offset +
5];
7920 var M_offset_6 = M[offset +
6];
7921 var M_offset_7 = M[offset +
7];
7922 var M_offset_8 = M[offset +
8];
7923 var M_offset_9 = M[offset +
9];
7924 var M_offset_10 = M[offset +
10];
7925 var M_offset_11 = M[offset +
11];
7926 var M_offset_12 = M[offset +
12];
7927 var M_offset_13 = M[offset +
13];
7928 var M_offset_14 = M[offset +
14];
7929 var M_offset_15 = M[offset +
15];
7931 // Working varialbes
7938 a = FF(a, b, c, d, M_offset_0,
7, T[
0]);
7939 d = FF(d, a, b, c, M_offset_1,
12, T[
1]);
7940 c = FF(c, d, a, b, M_offset_2,
17, T[
2]);
7941 b = FF(b, c, d, a, M_offset_3,
22, T[
3]);
7942 a = FF(a, b, c, d, M_offset_4,
7, T[
4]);
7943 d = FF(d, a, b, c, M_offset_5,
12, T[
5]);
7944 c = FF(c, d, a, b, M_offset_6,
17, T[
6]);
7945 b = FF(b, c, d, a, M_offset_7,
22, T[
7]);
7946 a = FF(a, b, c, d, M_offset_8,
7, T[
8]);
7947 d = FF(d, a, b, c, M_offset_9,
12, T[
9]);
7948 c = FF(c, d, a, b, M_offset_10,
17, T[
10]);
7949 b = FF(b, c, d, a, M_offset_11,
22, T[
11]);
7950 a = FF(a, b, c, d, M_offset_12,
7, T[
12]);
7951 d = FF(d, a, b, c, M_offset_13,
12, T[
13]);
7952 c = FF(c, d, a, b, M_offset_14,
17, T[
14]);
7953 b = FF(b, c, d, a, M_offset_15,
22, T[
15]);
7955 a = GG(a, b, c, d, M_offset_1,
5, T[
16]);
7956 d = GG(d, a, b, c, M_offset_6,
9, T[
17]);
7957 c = GG(c, d, a, b, M_offset_11,
14, T[
18]);
7958 b = GG(b, c, d, a, M_offset_0,
20, T[
19]);
7959 a = GG(a, b, c, d, M_offset_5,
5, T[
20]);
7960 d = GG(d, a, b, c, M_offset_10,
9, T[
21]);
7961 c = GG(c, d, a, b, M_offset_15,
14, T[
22]);
7962 b = GG(b, c, d, a, M_offset_4,
20, T[
23]);
7963 a = GG(a, b, c, d, M_offset_9,
5, T[
24]);
7964 d = GG(d, a, b, c, M_offset_14,
9, T[
25]);
7965 c = GG(c, d, a, b, M_offset_3,
14, T[
26]);
7966 b = GG(b, c, d, a, M_offset_8,
20, T[
27]);
7967 a = GG(a, b, c, d, M_offset_13,
5, T[
28]);
7968 d = GG(d, a, b, c, M_offset_2,
9, T[
29]);
7969 c = GG(c, d, a, b, M_offset_7,
14, T[
30]);
7970 b = GG(b, c, d, a, M_offset_12,
20, T[
31]);
7972 a = HH(a, b, c, d, M_offset_5,
4, T[
32]);
7973 d = HH(d, a, b, c, M_offset_8,
11, T[
33]);
7974 c = HH(c, d, a, b, M_offset_11,
16, T[
34]);
7975 b = HH(b, c, d, a, M_offset_14,
23, T[
35]);
7976 a = HH(a, b, c, d, M_offset_1,
4, T[
36]);
7977 d = HH(d, a, b, c, M_offset_4,
11, T[
37]);
7978 c = HH(c, d, a, b, M_offset_7,
16, T[
38]);
7979 b = HH(b, c, d, a, M_offset_10,
23, T[
39]);
7980 a = HH(a, b, c, d, M_offset_13,
4, T[
40]);
7981 d = HH(d, a, b, c, M_offset_0,
11, T[
41]);
7982 c = HH(c, d, a, b, M_offset_3,
16, T[
42]);
7983 b = HH(b, c, d, a, M_offset_6,
23, T[
43]);
7984 a = HH(a, b, c, d, M_offset_9,
4, T[
44]);
7985 d = HH(d, a, b, c, M_offset_12,
11, T[
45]);
7986 c = HH(c, d, a, b, M_offset_15,
16, T[
46]);
7987 b = HH(b, c, d, a, M_offset_2,
23, T[
47]);
7989 a = II(a, b, c, d, M_offset_0,
6, T[
48]);
7990 d = II(d, a, b, c, M_offset_7,
10, T[
49]);
7991 c = II(c, d, a, b, M_offset_14,
15, T[
50]);
7992 b = II(b, c, d, a, M_offset_5,
21, T[
51]);
7993 a = II(a, b, c, d, M_offset_12,
6, T[
52]);
7994 d = II(d, a, b, c, M_offset_3,
10, T[
53]);
7995 c = II(c, d, a, b, M_offset_10,
15, T[
54]);
7996 b = II(b, c, d, a, M_offset_1,
21, T[
55]);
7997 a = II(a, b, c, d, M_offset_8,
6, T[
56]);
7998 d = II(d, a, b, c, M_offset_15,
10, T[
57]);
7999 c = II(c, d, a, b, M_offset_6,
15, T[
58]);
8000 b = II(b, c, d, a, M_offset_13,
21, T[
59]);
8001 a = II(a, b, c, d, M_offset_4,
6, T[
60]);
8002 d = II(d, a, b, c, M_offset_11,
10, T[
61]);
8003 c = II(c, d, a, b, M_offset_2,
15, T[
62]);
8004 b = II(b, c, d, a, M_offset_9,
21, T[
63]);
8006 // Intermediate hash value
8007 H[
0] = (H[
0] + a) |
0;
8008 H[
1] = (H[
1] + b) |
0;
8009 H[
2] = (H[
2] + c) |
0;
8010 H[
3] = (H[
3] + d) |
0;
8013 _doFinalize: function () {
8015 var data = this._data;
8016 var dataWords = data.words;
8018 var nBitsTotal = this._nDataBytes *
8;
8019 var nBitsLeft = data.sigBytes *
8;
8022 dataWords[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32);
8024 var nBitsTotalH = Math.floor(nBitsTotal /
0x100000000);
8025 var nBitsTotalL = nBitsTotal;
8026 dataWords[(((nBitsLeft +
64)
>>> 9) <<
4) +
15] = (
8027 (((nBitsTotalH <<
8) | (nBitsTotalH
>>> 24)) &
0x00ff00ff) |
8028 (((nBitsTotalH <<
24) | (nBitsTotalH
>>> 8)) &
0xff00ff00)
8030 dataWords[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8031 (((nBitsTotalL <<
8) | (nBitsTotalL
>>> 24)) &
0x00ff00ff) |
8032 (((nBitsTotalL <<
24) | (nBitsTotalL
>>> 8)) &
0xff00ff00)
8035 data.sigBytes = (dataWords.length +
1) *
4;
8037 // Hash final blocks
8041 var hash = this._hash;
8045 for (var i =
0; i <
4; i++) {
8049 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8050 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00);
8053 // Return final computed hash
8057 clone: function () {
8058 var clone = Hasher.clone.call(this);
8059 clone._hash = this._hash.clone();
8065 function FF(a, b, c, d, x, s, t) {
8066 var n = a + ((b & c) | (~b & d)) + x + t;
8067 return ((n << s) | (n
>>> (
32 - s))) + b;
8070 function GG(a, b, c, d, x, s, t) {
8071 var n = a + ((b & d) | (c & ~d)) + x + t;
8072 return ((n << s) | (n
>>> (
32 - s))) + b;
8075 function HH(a, b, c, d, x, s, t) {
8076 var n = a + (b ^ c ^ d) + x + t;
8077 return ((n << s) | (n
>>> (
32 - s))) + b;
8080 function II(a, b, c, d, x, s, t) {
8081 var n = a + (c ^ (b | ~d)) + x + t;
8082 return ((n << s) | (n
>>> (
32 - s))) + b;
8086 * Shortcut function to the hasher's object interface.
8088 * @param {WordArray|string} message The message to hash.
8090 * @return {WordArray} The hash.
8096 * var hash = CryptoJS.MD5('message');
8097 * var hash = CryptoJS.MD5(wordArray);
8099 C.MD5 = Hasher._createHelper(MD5);
8102 * Shortcut function to the HMAC's object interface.
8104 * @param {WordArray|string} message The message to hash.
8105 * @param {WordArray|string} key The secret key.
8107 * @return {WordArray} The HMAC.
8113 * var hmac = CryptoJS.HmacMD5(message, key);
8115 C.HmacMD5 = Hasher._createHmacHelper(MD5);
8119 return CryptoJS.MD5;
8122 },{"./core":
31}],
40:[function(_dereq_,module,exports){
8123 ;(function (root, factory, undef) {
8124 if (typeof exports === "object") {
8126 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
8128 else if (typeof define === "function" && define.amd) {
8130 define(["./core", "./cipher-core"], factory);
8134 factory(root.CryptoJS);
8136 }(this, function (CryptoJS) {
8139 * Cipher Feedback block mode.
8141 CryptoJS.mode.CFB = (function () {
8142 var CFB = CryptoJS.lib.BlockCipherMode.extend();
8144 CFB.Encryptor = CFB.extend({
8145 processBlock: function (words, offset) {
8147 var cipher = this._cipher;
8148 var blockSize = cipher.blockSize;
8150 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
8152 // Remember this block to use with next block
8153 this._prevBlock = words.slice(offset, offset + blockSize);
8157 CFB.Decryptor = CFB.extend({
8158 processBlock: function (words, offset) {
8160 var cipher = this._cipher;
8161 var blockSize = cipher.blockSize;
8163 // Remember this block to use with next block
8164 var thisBlock = words.slice(offset, offset + blockSize);
8166 generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
8168 // This block becomes the previous block
8169 this._prevBlock = thisBlock;
8173 function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
8177 // Generate keystream
8179 var keystream = iv.slice(
0);
8181 // Remove IV for subsequent blocks
8182 this._iv = undefined;
8184 var keystream = this._prevBlock;
8186 cipher.encryptBlock(keystream,
0);
8189 for (var i =
0; i < blockSize; i++) {
8190 words[offset + i] ^= keystream[i];
8198 return CryptoJS.mode.CFB;
8201 },{"./cipher-core":
30,"./core":
31}],
41:[function(_dereq_,module,exports){
8202 ;(function (root, factory, undef) {
8203 if (typeof exports === "object") {
8205 module.exports = exports = factory(_dereq_("./core"), _dereq_("./cipher-core"));
8207 else if (typeof define === "function" && define.amd) {
8209 define(["./core", "./cipher-core"], factory);
8213 factory(root.CryptoJS);
8215 }(this, function (CryptoJS) {
8218 * Counter block mode compatible with Dr Brian Gladman fileenc.c
8219 * derived from CryptoJS.mode.CTR
8220 * Jan Hruby jhruby.web@gmail.com
8222 CryptoJS.mode.CTRGladman = (function () {
8223 var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();
8225 function incWord(word)
8227 if (((word
>> 24) &
0xff) ===
0xff) { //overflow
8228 var b1 = (word
>> 16)
&0xff;
8229 var b2 = (word
>> 8)
&0xff;
8230 var b3 = word &
0xff;
8232 if (b1 ===
0xff) // overflow b1
8264 word += (
0x01 <<
24);
8269 function incCounter(counter)
8271 if ((counter[
0] = incWord(counter[
0])) ===
0)
8273 // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j <
8
8274 counter[
1] = incWord(counter[
1]);
8279 var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
8280 processBlock: function (words, offset) {
8282 var cipher = this._cipher
8283 var blockSize = cipher.blockSize;
8285 var counter = this._counter;
8287 // Generate keystream
8289 counter = this._counter = iv.slice(
0);
8291 // Remove IV for subsequent blocks
8292 this._iv = undefined;
8295 incCounter(counter);
8297 var keystream = counter.slice(
0);
8298 cipher.encryptBlock(keystream,
0);
8301 for (var i =
0; i < blockSize; i++) {
8302 words[offset + i] ^= keystream[i];
8307 CTRGladman.Decryptor = Encryptor;
8315 return CryptoJS.mode.CTRGladman;
8318 },{
"./cipher-core":
30,
"./core":
31}],
42:[function(_dereq_,module,exports){
8319 ;(function (root, factory, undef) {
8320 if (typeof exports ===
"object") {
8322 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8324 else if (typeof define ===
"function" && define.amd) {
8326 define([
"./core",
"./cipher-core"], factory);
8330 factory(root.CryptoJS);
8332 }(this, function (CryptoJS) {
8335 * Counter block mode.
8337 CryptoJS.mode.CTR = (function () {
8338 var CTR = CryptoJS.lib.BlockCipherMode.extend();
8340 var Encryptor = CTR.Encryptor = CTR.extend({
8341 processBlock: function (words, offset) {
8343 var cipher = this._cipher
8344 var blockSize = cipher.blockSize;
8346 var counter = this._counter;
8348 // Generate keystream
8350 counter = this._counter = iv.slice(
0);
8352 // Remove IV for subsequent blocks
8353 this._iv = undefined;
8355 var keystream = counter.slice(
0);
8356 cipher.encryptBlock(keystream,
0);
8358 // Increment counter
8359 counter[blockSize -
1] = (counter[blockSize -
1] +
1) |
0
8362 for (var i =
0; i < blockSize; i++) {
8363 words[offset + i] ^= keystream[i];
8368 CTR.Decryptor = Encryptor;
8374 return CryptoJS.mode.CTR;
8377 },{
"./cipher-core":
30,
"./core":
31}],
43:[function(_dereq_,module,exports){
8378 ;(function (root, factory, undef) {
8379 if (typeof exports ===
"object") {
8381 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8383 else if (typeof define ===
"function" && define.amd) {
8385 define([
"./core",
"./cipher-core"], factory);
8389 factory(root.CryptoJS);
8391 }(this, function (CryptoJS) {
8394 * Electronic Codebook block mode.
8396 CryptoJS.mode.ECB = (function () {
8397 var ECB = CryptoJS.lib.BlockCipherMode.extend();
8399 ECB.Encryptor = ECB.extend({
8400 processBlock: function (words, offset) {
8401 this._cipher.encryptBlock(words, offset);
8405 ECB.Decryptor = ECB.extend({
8406 processBlock: function (words, offset) {
8407 this._cipher.decryptBlock(words, offset);
8415 return CryptoJS.mode.ECB;
8418 },{
"./cipher-core":
30,
"./core":
31}],
44:[function(_dereq_,module,exports){
8419 ;(function (root, factory, undef) {
8420 if (typeof exports ===
"object") {
8422 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8424 else if (typeof define ===
"function" && define.amd) {
8426 define([
"./core",
"./cipher-core"], factory);
8430 factory(root.CryptoJS);
8432 }(this, function (CryptoJS) {
8435 * Output Feedback block mode.
8437 CryptoJS.mode.OFB = (function () {
8438 var OFB = CryptoJS.lib.BlockCipherMode.extend();
8440 var Encryptor = OFB.Encryptor = OFB.extend({
8441 processBlock: function (words, offset) {
8443 var cipher = this._cipher
8444 var blockSize = cipher.blockSize;
8446 var keystream = this._keystream;
8448 // Generate keystream
8450 keystream = this._keystream = iv.slice(
0);
8452 // Remove IV for subsequent blocks
8453 this._iv = undefined;
8455 cipher.encryptBlock(keystream,
0);
8458 for (var i =
0; i < blockSize; i++) {
8459 words[offset + i] ^= keystream[i];
8464 OFB.Decryptor = Encryptor;
8470 return CryptoJS.mode.OFB;
8473 },{
"./cipher-core":
30,
"./core":
31}],
45:[function(_dereq_,module,exports){
8474 ;(function (root, factory, undef) {
8475 if (typeof exports ===
"object") {
8477 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8479 else if (typeof define ===
"function" && define.amd) {
8481 define([
"./core",
"./cipher-core"], factory);
8485 factory(root.CryptoJS);
8487 }(this, function (CryptoJS) {
8490 * ANSI X
.923 padding strategy.
8492 CryptoJS.pad.AnsiX923 = {
8493 pad: function (data, blockSize) {
8495 var dataSigBytes = data.sigBytes;
8496 var blockSizeBytes = blockSize *
4;
8498 // Count padding bytes
8499 var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;
8501 // Compute last byte position
8502 var lastBytePos = dataSigBytes + nPaddingBytes -
1;
8506 data.words[lastBytePos
>>> 2] |= nPaddingBytes << (
24 - (lastBytePos %
4) *
8);
8507 data.sigBytes += nPaddingBytes;
8510 unpad: function (data) {
8511 // Get number of padding bytes from last byte
8512 var nPaddingBytes = data.words[(data.sigBytes -
1)
>>> 2] &
0xff;
8515 data.sigBytes -= nPaddingBytes;
8520 return CryptoJS.pad.Ansix923;
8523 },{
"./cipher-core":
30,
"./core":
31}],
46:[function(_dereq_,module,exports){
8524 ;(function (root, factory, undef) {
8525 if (typeof exports ===
"object") {
8527 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8529 else if (typeof define ===
"function" && define.amd) {
8531 define([
"./core",
"./cipher-core"], factory);
8535 factory(root.CryptoJS);
8537 }(this, function (CryptoJS) {
8540 * ISO
10126 padding strategy.
8542 CryptoJS.pad.Iso10126 = {
8543 pad: function (data, blockSize) {
8545 var blockSizeBytes = blockSize *
4;
8547 // Count padding bytes
8548 var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
8551 data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes -
1)).
8552 concat(CryptoJS.lib.WordArray.create([nPaddingBytes <<
24],
1));
8555 unpad: function (data) {
8556 // Get number of padding bytes from last byte
8557 var nPaddingBytes = data.words[(data.sigBytes -
1)
>>> 2] &
0xff;
8560 data.sigBytes -= nPaddingBytes;
8565 return CryptoJS.pad.Iso10126;
8568 },{
"./cipher-core":
30,
"./core":
31}],
47:[function(_dereq_,module,exports){
8569 ;(function (root, factory, undef) {
8570 if (typeof exports ===
"object") {
8572 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8574 else if (typeof define ===
"function" && define.amd) {
8576 define([
"./core",
"./cipher-core"], factory);
8580 factory(root.CryptoJS);
8582 }(this, function (CryptoJS) {
8585 * ISO/IEC
9797-
1 Padding Method
2.
8587 CryptoJS.pad.Iso97971 = {
8588 pad: function (data, blockSize) {
8590 data.concat(CryptoJS.lib.WordArray.create([
0x80000000],
1));
8592 // Zero pad the rest
8593 CryptoJS.pad.ZeroPadding.pad(data, blockSize);
8596 unpad: function (data) {
8597 // Remove zero padding
8598 CryptoJS.pad.ZeroPadding.unpad(data);
8600 // Remove one more byte -- the
0x80 byte
8606 return CryptoJS.pad.Iso97971;
8609 },{
"./cipher-core":
30,
"./core":
31}],
48:[function(_dereq_,module,exports){
8610 ;(function (root, factory, undef) {
8611 if (typeof exports ===
"object") {
8613 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8615 else if (typeof define ===
"function" && define.amd) {
8617 define([
"./core",
"./cipher-core"], factory);
8621 factory(root.CryptoJS);
8623 }(this, function (CryptoJS) {
8626 * A noop padding strategy.
8628 CryptoJS.pad.NoPadding = {
8632 unpad: function () {
8637 return CryptoJS.pad.NoPadding;
8640 },{
"./cipher-core":
30,
"./core":
31}],
49:[function(_dereq_,module,exports){
8641 ;(function (root, factory, undef) {
8642 if (typeof exports ===
"object") {
8644 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./cipher-core"));
8646 else if (typeof define ===
"function" && define.amd) {
8648 define([
"./core",
"./cipher-core"], factory);
8652 factory(root.CryptoJS);
8654 }(this, function (CryptoJS) {
8657 * Zero padding strategy.
8659 CryptoJS.pad.ZeroPadding = {
8660 pad: function (data, blockSize) {
8662 var blockSizeBytes = blockSize *
4;
8666 data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
8669 unpad: function (data) {
8671 var dataWords = data.words;
8674 var i = data.sigBytes -
1;
8675 while (!((dataWords[i
>>> 2]
>>> (
24 - (i %
4) *
8)) &
0xff)) {
8678 data.sigBytes = i +
1;
8683 return CryptoJS.pad.ZeroPadding;
8686 },{"./cipher-core":
30,"./core":
31}],
50:[function(_dereq_,module,exports){
8687 ;(function (root, factory, undef) {
8688 if (typeof exports === "object") {
8690 module.exports = exports = factory(_dereq_("./core"), _dereq_("./sha1"), _dereq_("./hmac"));
8692 else if (typeof define === "function" && define.amd) {
8694 define(["./core", "./sha1", "./hmac"], factory);
8698 factory(root.CryptoJS);
8700 }(this, function (CryptoJS) {
8706 var Base = C_lib.Base;
8707 var WordArray = C_lib.WordArray;
8708 var C_algo = C.algo;
8709 var SHA1 = C_algo.SHA1;
8710 var HMAC = C_algo.HMAC;
8713 * Password-Based Key Derivation Function
2 algorithm.
8715 var PBKDF2 = C_algo.PBKDF2 = Base.extend({
8717 * Configuration options.
8719 * @property {number} keySize The key size in words to generate. Default:
4 (
128 bits)
8720 * @property {Hasher} hasher The hasher to use. Default: SHA1
8721 * @property {number} iterations The number of iterations to perform. Default:
1
8730 * Initializes a newly created key derivation function.
8732 * @param {Object} cfg (Optional) The configuration options to use for the derivation.
8736 * var kdf = CryptoJS.algo.PBKDF2.create();
8737 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize:
8 });
8738 * var kdf = CryptoJS.algo.PBKDF2.create({ keySize:
8, iterations:
1000 });
8740 init: function (cfg) {
8741 this.cfg = this.cfg.extend(cfg);
8745 * Computes the Password-Based Key Derivation Function
2.
8747 * @param {WordArray|string} password The password.
8748 * @param {WordArray|string} salt A salt.
8750 * @return {WordArray} The derived key.
8754 * var key = kdf.compute(password, salt);
8756 compute: function (password, salt) {
8761 var hmac = HMAC.create(cfg.hasher, password);
8764 var derivedKey = WordArray.create();
8765 var blockIndex = WordArray.create([
0x00000001]);
8768 var derivedKeyWords = derivedKey.words;
8769 var blockIndexWords = blockIndex.words;
8770 var keySize = cfg.keySize;
8771 var iterations = cfg.iterations;
8774 while (derivedKeyWords.length < keySize) {
8775 var block = hmac.update(salt).finalize(blockIndex);
8779 var blockWords = block.words;
8780 var blockWordsLength = blockWords.length;
8783 var intermediate = block;
8784 for (var i =
1; i < iterations; i++) {
8785 intermediate = hmac.finalize(intermediate);
8789 var intermediateWords = intermediate.words;
8791 // XOR intermediate with block
8792 for (var j =
0; j < blockWordsLength; j++) {
8793 blockWords[j] ^= intermediateWords[j];
8797 derivedKey.concat(block);
8798 blockIndexWords[
0]++;
8800 derivedKey.sigBytes = keySize *
4;
8807 * Computes the Password-Based Key Derivation Function
2.
8809 * @param {WordArray|string} password The password.
8810 * @param {WordArray|string} salt A salt.
8811 * @param {Object} cfg (Optional) The configuration options to use for this computation.
8813 * @return {WordArray} The derived key.
8819 * var key = CryptoJS.PBKDF2(password, salt);
8820 * var key = CryptoJS.PBKDF2(password, salt, { keySize:
8 });
8821 * var key = CryptoJS.PBKDF2(password, salt, { keySize:
8, iterations:
1000 });
8823 C.PBKDF2 = function (password, salt, cfg) {
8824 return PBKDF2.create(cfg).compute(password, salt);
8829 return CryptoJS.PBKDF2;
8832 },{"./core":
31,"./hmac":
36,"./sha1":
55}],
51:[function(_dereq_,module,exports){
8833 ;(function (root, factory, undef) {
8834 if (typeof exports === "object") {
8836 module.exports = exports = factory(_dereq_("./core"), _dereq_("./enc-base64"), _dereq_("./md5"), _dereq_("./evpkdf"), _dereq_("./cipher-core"));
8838 else if (typeof define === "function" && define.amd) {
8840 define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
8844 factory(root.CryptoJS);
8846 }(this, function (CryptoJS) {
8852 var StreamCipher = C_lib.StreamCipher;
8853 var C_algo = C.algo;
8861 * Rabbit stream cipher algorithm.
8863 * This is a legacy version that neglected to convert the key to little-endian.
8864 * This error doesn't affect the cipher's security,
8865 * but it does affect its compatibility with other implementations.
8867 var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
8868 _doReset: function () {
8870 var K = this._key.words;
8871 var iv = this.cfg.iv;
8873 // Generate initial state values
8875 K[
0], (K[
3] <<
16) | (K[
2]
>>> 16),
8876 K[
1], (K[
0] <<
16) | (K[
3]
>>> 16),
8877 K[
2], (K[
1] <<
16) | (K[
0]
>>> 16),
8878 K[
3], (K[
2] <<
16) | (K[
1]
>>> 16)
8881 // Generate initial counter values
8883 (K[
2] <<
16) | (K[
2]
>>> 16), (K[
0] &
0xffff0000) | (K[
1] &
0x0000ffff),
8884 (K[
3] <<
16) | (K[
3]
>>> 16), (K[
1] &
0xffff0000) | (K[
2] &
0x0000ffff),
8885 (K[
0] <<
16) | (K[
0]
>>> 16), (K[
2] &
0xffff0000) | (K[
3] &
0x0000ffff),
8886 (K[
1] <<
16) | (K[
1]
>>> 16), (K[
3] &
0xffff0000) | (K[
0] &
0x0000ffff)
8892 // Iterate the system four times
8893 for (var i =
0; i <
4; i++) {
8894 nextState.call(this);
8897 // Modify the counters
8898 for (var i =
0; i <
8; i++) {
8899 C[i] ^= X[(i +
4) &
7];
8909 // Generate four subvectors
8910 var i0 = (((IV_0 <<
8) | (IV_0
>>> 24)) &
0x00ff00ff) | (((IV_0 <<
24) | (IV_0
>>> 8)) &
0xff00ff00);
8911 var i2 = (((IV_1 <<
8) | (IV_1
>>> 24)) &
0x00ff00ff) | (((IV_1 <<
24) | (IV_1
>>> 8)) &
0xff00ff00);
8912 var i1 = (i0
>>> 16) | (i2 &
0xffff0000);
8913 var i3 = (i2 <<
16) | (i0 &
0x0000ffff);
8915 // Modify counter values
8925 // Iterate the system four times
8926 for (var i =
0; i <
4; i++) {
8927 nextState.call(this);
8932 _doProcessBlock: function (M, offset) {
8936 // Iterate the system
8937 nextState.call(this);
8939 // Generate four keystream words
8940 S[
0] = X[
0] ^ (X[
5]
>>> 16) ^ (X[
3] <<
16);
8941 S[
1] = X[
2] ^ (X[
7]
>>> 16) ^ (X[
5] <<
16);
8942 S[
2] = X[
4] ^ (X[
1]
>>> 16) ^ (X[
7] <<
16);
8943 S[
3] = X[
6] ^ (X[
3]
>>> 16) ^ (X[
1] <<
16);
8945 for (var i =
0; i <
4; i++) {
8947 S[i] = (((S[i] <<
8) | (S[i]
>>> 24)) &
0x00ff00ff) |
8948 (((S[i] <<
24) | (S[i]
>>> 8)) &
0xff00ff00);
8951 M[offset + i] ^= S[i];
8960 function nextState() {
8965 // Save old counter values
8966 for (var i =
0; i <
8; i++) {
8970 // Calculate new counter values
8971 C[
0] = (C[
0] +
0x4d34d34d + this._b) |
0;
8972 C[
1] = (C[
1] +
0xd34d34d3 + ((C[
0]
>>> 0) < (C_[
0]
>>> 0) ?
1 :
0)) |
0;
8973 C[
2] = (C[
2] +
0x34d34d34 + ((C[
1]
>>> 0) < (C_[
1]
>>> 0) ?
1 :
0)) |
0;
8974 C[
3] = (C[
3] +
0x4d34d34d + ((C[
2]
>>> 0) < (C_[
2]
>>> 0) ?
1 :
0)) |
0;
8975 C[
4] = (C[
4] +
0xd34d34d3 + ((C[
3]
>>> 0) < (C_[
3]
>>> 0) ?
1 :
0)) |
0;
8976 C[
5] = (C[
5] +
0x34d34d34 + ((C[
4]
>>> 0) < (C_[
4]
>>> 0) ?
1 :
0)) |
0;
8977 C[
6] = (C[
6] +
0x4d34d34d + ((C[
5]
>>> 0) < (C_[
5]
>>> 0) ?
1 :
0)) |
0;
8978 C[
7] = (C[
7] +
0xd34d34d3 + ((C[
6]
>>> 0) < (C_[
6]
>>> 0) ?
1 :
0)) |
0;
8979 this._b = (C[
7]
>>> 0) < (C_[
7]
>>> 0) ?
1 :
0;
8981 // Calculate the g-values
8982 for (var i =
0; i <
8; i++) {
8983 var gx = X[i] + C[i];
8985 // Construct high and low argument for squaring
8986 var ga = gx &
0xffff;
8989 // Calculate high and low result of squaring
8990 var gh = ((((ga * ga)
>>> 17) + ga * gb)
>>> 15) + gb * gb;
8991 var gl = (((gx &
0xffff0000) * gx) |
0) + (((gx &
0x0000ffff) * gx) |
0);
8997 // Calculate new state values
8998 X[
0] = (G[
0] + ((G[
7] <<
16) | (G[
7]
>>> 16)) + ((G[
6] <<
16) | (G[
6]
>>> 16))) |
0;
8999 X[
1] = (G[
1] + ((G[
0] <<
8) | (G[
0]
>>> 24)) + G[
7]) |
0;
9000 X[
2] = (G[
2] + ((G[
1] <<
16) | (G[
1]
>>> 16)) + ((G[
0] <<
16) | (G[
0]
>>> 16))) |
0;
9001 X[
3] = (G[
3] + ((G[
2] <<
8) | (G[
2]
>>> 24)) + G[
1]) |
0;
9002 X[
4] = (G[
4] + ((G[
3] <<
16) | (G[
3]
>>> 16)) + ((G[
2] <<
16) | (G[
2]
>>> 16))) |
0;
9003 X[
5] = (G[
5] + ((G[
4] <<
8) | (G[
4]
>>> 24)) + G[
3]) |
0;
9004 X[
6] = (G[
6] + ((G[
5] <<
16) | (G[
5]
>>> 16)) + ((G[
4] <<
16) | (G[
4]
>>> 16))) |
0;
9005 X[
7] = (G[
7] + ((G[
6] <<
8) | (G[
6]
>>> 24)) + G[
5]) |
0;
9009 * Shortcut functions to the cipher's object interface.
9013 * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);
9014 * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);
9016 C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);
9020 return CryptoJS.RabbitLegacy;
9023 },{
"./cipher-core":
30,
"./core":
31,
"./enc-base64":
32,
"./evpkdf":
34,
"./md5":
39}],
52:[function(_dereq_,module,exports){
9024 ;(function (root, factory, undef) {
9025 if (typeof exports ===
"object") {
9027 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./enc-base64"), _dereq_(
"./md5"), _dereq_(
"./evpkdf"), _dereq_(
"./cipher-core"));
9029 else if (typeof define ===
"function" && define.amd) {
9031 define([
"./core",
"./enc-base64",
"./md5",
"./evpkdf",
"./cipher-core"], factory);
9035 factory(root.CryptoJS);
9037 }(this, function (CryptoJS) {
9043 var StreamCipher = C_lib.StreamCipher;
9044 var C_algo = C.algo;
9052 * Rabbit stream cipher algorithm
9054 var Rabbit = C_algo.Rabbit = StreamCipher.extend({
9055 _doReset: function () {
9057 var K = this._key.words;
9058 var iv = this.cfg.iv;
9061 for (var i =
0; i <
4; i++) {
9062 K[i] = (((K[i] <<
8) | (K[i]
>>> 24)) &
0x00ff00ff) |
9063 (((K[i] <<
24) | (K[i]
>>> 8)) &
0xff00ff00);
9066 // Generate initial state values
9068 K[
0], (K[
3] <<
16) | (K[
2]
>>> 16),
9069 K[
1], (K[
0] <<
16) | (K[
3]
>>> 16),
9070 K[
2], (K[
1] <<
16) | (K[
0]
>>> 16),
9071 K[
3], (K[
2] <<
16) | (K[
1]
>>> 16)
9074 // Generate initial counter values
9076 (K[
2] <<
16) | (K[
2]
>>> 16), (K[
0] &
0xffff0000) | (K[
1] &
0x0000ffff),
9077 (K[
3] <<
16) | (K[
3]
>>> 16), (K[
1] &
0xffff0000) | (K[
2] &
0x0000ffff),
9078 (K[
0] <<
16) | (K[
0]
>>> 16), (K[
2] &
0xffff0000) | (K[
3] &
0x0000ffff),
9079 (K[
1] <<
16) | (K[
1]
>>> 16), (K[
3] &
0xffff0000) | (K[
0] &
0x0000ffff)
9085 // Iterate the system four times
9086 for (var i =
0; i <
4; i++) {
9087 nextState.call(this);
9090 // Modify the counters
9091 for (var i =
0; i <
8; i++) {
9092 C[i] ^= X[(i +
4) &
7];
9102 // Generate four subvectors
9103 var i0 = (((IV_0 <<
8) | (IV_0
>>> 24)) &
0x00ff00ff) | (((IV_0 <<
24) | (IV_0
>>> 8)) &
0xff00ff00);
9104 var i2 = (((IV_1 <<
8) | (IV_1
>>> 24)) &
0x00ff00ff) | (((IV_1 <<
24) | (IV_1
>>> 8)) &
0xff00ff00);
9105 var i1 = (i0
>>> 16) | (i2 &
0xffff0000);
9106 var i3 = (i2 <<
16) | (i0 &
0x0000ffff);
9108 // Modify counter values
9118 // Iterate the system four times
9119 for (var i =
0; i <
4; i++) {
9120 nextState.call(this);
9125 _doProcessBlock: function (M, offset) {
9129 // Iterate the system
9130 nextState.call(this);
9132 // Generate four keystream words
9133 S[
0] = X[
0] ^ (X[
5]
>>> 16) ^ (X[
3] <<
16);
9134 S[
1] = X[
2] ^ (X[
7]
>>> 16) ^ (X[
5] <<
16);
9135 S[
2] = X[
4] ^ (X[
1]
>>> 16) ^ (X[
7] <<
16);
9136 S[
3] = X[
6] ^ (X[
3]
>>> 16) ^ (X[
1] <<
16);
9138 for (var i =
0; i <
4; i++) {
9140 S[i] = (((S[i] <<
8) | (S[i]
>>> 24)) &
0x00ff00ff) |
9141 (((S[i] <<
24) | (S[i]
>>> 8)) &
0xff00ff00);
9144 M[offset + i] ^= S[i];
9153 function nextState() {
9158 // Save old counter values
9159 for (var i =
0; i <
8; i++) {
9163 // Calculate new counter values
9164 C[
0] = (C[
0] +
0x4d34d34d + this._b) |
0;
9165 C[
1] = (C[
1] +
0xd34d34d3 + ((C[
0]
>>> 0) < (C_[
0]
>>> 0) ?
1 :
0)) |
0;
9166 C[
2] = (C[
2] +
0x34d34d34 + ((C[
1]
>>> 0) < (C_[
1]
>>> 0) ?
1 :
0)) |
0;
9167 C[
3] = (C[
3] +
0x4d34d34d + ((C[
2]
>>> 0) < (C_[
2]
>>> 0) ?
1 :
0)) |
0;
9168 C[
4] = (C[
4] +
0xd34d34d3 + ((C[
3]
>>> 0) < (C_[
3]
>>> 0) ?
1 :
0)) |
0;
9169 C[
5] = (C[
5] +
0x34d34d34 + ((C[
4]
>>> 0) < (C_[
4]
>>> 0) ?
1 :
0)) |
0;
9170 C[
6] = (C[
6] +
0x4d34d34d + ((C[
5]
>>> 0) < (C_[
5]
>>> 0) ?
1 :
0)) |
0;
9171 C[
7] = (C[
7] +
0xd34d34d3 + ((C[
6]
>>> 0) < (C_[
6]
>>> 0) ?
1 :
0)) |
0;
9172 this._b = (C[
7]
>>> 0) < (C_[
7]
>>> 0) ?
1 :
0;
9174 // Calculate the g-values
9175 for (var i =
0; i <
8; i++) {
9176 var gx = X[i] + C[i];
9178 // Construct high and low argument for squaring
9179 var ga = gx &
0xffff;
9182 // Calculate high and low result of squaring
9183 var gh = ((((ga * ga)
>>> 17) + ga * gb)
>>> 15) + gb * gb;
9184 var gl = (((gx &
0xffff0000) * gx) |
0) + (((gx &
0x0000ffff) * gx) |
0);
9190 // Calculate new state values
9191 X[
0] = (G[
0] + ((G[
7] <<
16) | (G[
7]
>>> 16)) + ((G[
6] <<
16) | (G[
6]
>>> 16))) |
0;
9192 X[
1] = (G[
1] + ((G[
0] <<
8) | (G[
0]
>>> 24)) + G[
7]) |
0;
9193 X[
2] = (G[
2] + ((G[
1] <<
16) | (G[
1]
>>> 16)) + ((G[
0] <<
16) | (G[
0]
>>> 16))) |
0;
9194 X[
3] = (G[
3] + ((G[
2] <<
8) | (G[
2]
>>> 24)) + G[
1]) |
0;
9195 X[
4] = (G[
4] + ((G[
3] <<
16) | (G[
3]
>>> 16)) + ((G[
2] <<
16) | (G[
2]
>>> 16))) |
0;
9196 X[
5] = (G[
5] + ((G[
4] <<
8) | (G[
4]
>>> 24)) + G[
3]) |
0;
9197 X[
6] = (G[
6] + ((G[
5] <<
16) | (G[
5]
>>> 16)) + ((G[
4] <<
16) | (G[
4]
>>> 16))) |
0;
9198 X[
7] = (G[
7] + ((G[
6] <<
8) | (G[
6]
>>> 24)) + G[
5]) |
0;
9202 * Shortcut functions to the cipher's object interface.
9206 * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);
9207 * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);
9209 C.Rabbit = StreamCipher._createHelper(Rabbit);
9213 return CryptoJS.Rabbit;
9216 },{
"./cipher-core":
30,
"./core":
31,
"./enc-base64":
32,
"./evpkdf":
34,
"./md5":
39}],
53:[function(_dereq_,module,exports){
9217 ;(function (root, factory, undef) {
9218 if (typeof exports ===
"object") {
9220 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./enc-base64"), _dereq_(
"./md5"), _dereq_(
"./evpkdf"), _dereq_(
"./cipher-core"));
9222 else if (typeof define ===
"function" && define.amd) {
9224 define([
"./core",
"./enc-base64",
"./md5",
"./evpkdf",
"./cipher-core"], factory);
9228 factory(root.CryptoJS);
9230 }(this, function (CryptoJS) {
9236 var StreamCipher = C_lib.StreamCipher;
9237 var C_algo = C.algo;
9240 * RC4 stream cipher algorithm.
9242 var RC4 = C_algo.RC4 = StreamCipher.extend({
9243 _doReset: function () {
9245 var key = this._key;
9246 var keyWords = key.words;
9247 var keySigBytes = key.sigBytes;
9250 var S = this._S = [];
9251 for (var i =
0; i <
256; i++) {
9256 for (var i =
0, j =
0; i <
256; i++) {
9257 var keyByteIndex = i % keySigBytes;
9258 var keyByte = (keyWords[keyByteIndex
>>> 2]
>>> (
24 - (keyByteIndex %
4) *
8)) &
0xff;
9260 j = (j + S[i] + keyByte) %
256;
9269 this._i = this._j =
0;
9272 _doProcessBlock: function (M, offset) {
9273 M[offset] ^= generateKeystreamWord.call(this);
9281 function generateKeystreamWord() {
9287 // Generate keystream word
9288 var keystreamWord =
0;
9289 for (var n =
0; n <
4; n++) {
9291 j = (j + S[i]) %
256;
9298 keystreamWord |= S[(S[i] + S[j]) %
256] << (
24 - n *
8);
9305 return keystreamWord;
9309 * Shortcut functions to the cipher's object interface.
9313 * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
9314 * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);
9316 C.RC4 = StreamCipher._createHelper(RC4);
9319 * Modified RC4 stream cipher algorithm.
9321 var RC4Drop = C_algo.RC4Drop = RC4.extend({
9323 * Configuration options.
9325 * @property {number} drop The number of keystream words to drop. Default
192
9327 cfg: RC4.cfg.extend({
9331 _doReset: function () {
9332 RC4._doReset.call(this);
9335 for (var i = this.cfg.drop; i
> 0; i--) {
9336 generateKeystreamWord.call(this);
9342 * Shortcut functions to the cipher's object interface.
9346 * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);
9347 * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);
9349 C.RC4Drop = StreamCipher._createHelper(RC4Drop);
9353 return CryptoJS.RC4;
9356 },{
"./cipher-core":
30,
"./core":
31,
"./enc-base64":
32,
"./evpkdf":
34,
"./md5":
39}],
54:[function(_dereq_,module,exports){
9357 ;(function (root, factory) {
9358 if (typeof exports ===
"object") {
9360 module.exports = exports = factory(_dereq_(
"./core"));
9362 else if (typeof define ===
"function" && define.amd) {
9364 define([
"./core"], factory);
9368 factory(root.CryptoJS);
9370 }(this, function (CryptoJS) {
9373 (c)
2012 by Cédric Mesnil. All rights reserved.
9375 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
9377 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
9378 - 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.
9380 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.
9387 var WordArray = C_lib.WordArray;
9388 var Hasher = C_lib.Hasher;
9389 var C_algo = C.algo;
9392 var _zl = WordArray.create([
9393 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
9394 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
9395 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
9396 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
9397 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13]);
9398 var _zr = WordArray.create([
9399 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
9400 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
9401 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
9402 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
9403 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11]);
9404 var _sl = WordArray.create([
9405 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
9406 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
9407 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
9408 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
9409 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6 ]);
9410 var _sr = WordArray.create([
9411 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
9412 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
9413 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
9414 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
9415 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11 ]);
9417 var _hl = WordArray.create([
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]);
9418 var _hr = WordArray.create([
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]);
9421 * RIPEMD160 hash algorithm.
9423 var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
9424 _doReset: function () {
9425 this._hash = WordArray.create([
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]);
9428 _doProcessBlock: function (M, offset) {
9431 for (var i =
0; i <
16; i++) {
9433 var offset_i = offset + i;
9434 var M_offset_i = M[offset_i];
9438 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
9439 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
9443 var H = this._hash.words;
9451 // Working variables
9452 var al, bl, cl, dl, el;
9453 var ar, br, cr, dr, er;
9462 for (var i =
0; i <
80; i +=
1) {
9463 t = (al + M[offset+zl[i]])|
0;
9465 t += f1(bl,cl,dl) + hl[
0];
9467 t += f2(bl,cl,dl) + hl[
1];
9469 t += f3(bl,cl,dl) + hl[
2];
9471 t += f4(bl,cl,dl) + hl[
3];
9472 } else {// if (i
<80) {
9473 t += f5(bl,cl,dl) + hl[
4];
9484 t = (ar + M[offset+zr[i]])|
0;
9486 t += f5(br,cr,dr) + hr[
0];
9488 t += f4(br,cr,dr) + hr[
1];
9490 t += f3(br,cr,dr) + hr[
2];
9492 t += f2(br,cr,dr) + hr[
3];
9493 } else {// if (i
<80) {
9494 t += f1(br,cr,dr) + hr[
4];
9505 // Intermediate hash value
9506 t = (H[
1] + cl + dr)|
0;
9507 H[
1] = (H[
2] + dl + er)|
0;
9508 H[
2] = (H[
3] + el + ar)|
0;
9509 H[
3] = (H[
4] + al + br)|
0;
9510 H[
4] = (H[
0] + bl + cr)|
0;
9514 _doFinalize: function () {
9516 var data = this._data;
9517 var dataWords = data.words;
9519 var nBitsTotal = this._nDataBytes *
8;
9520 var nBitsLeft = data.sigBytes *
8;
9523 dataWords[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32);
9524 dataWords[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
9525 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
9526 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
9528 data.sigBytes = (dataWords.length +
1) *
4;
9530 // Hash final blocks
9534 var hash = this._hash;
9538 for (var i =
0; i <
5; i++) {
9543 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
9544 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00);
9547 // Return final computed hash
9551 clone: function () {
9552 var clone = Hasher.clone.call(this);
9553 clone._hash = this._hash.clone();
9560 function f1(x, y, z) {
9561 return ((x) ^ (y) ^ (z));
9565 function f2(x, y, z) {
9566 return (((x)&(y)) | ((~x)&(z)));
9569 function f3(x, y, z) {
9570 return (((x) | (~(y))) ^ (z));
9573 function f4(x, y, z) {
9574 return (((x) & (z)) | ((y)&(~(z))));
9577 function f5(x, y, z) {
9578 return ((x) ^ ((y) |(~(z))));
9582 function rotl(x,n) {
9583 return (x<
<n) | (x
>>>(
32-n));
9588 * Shortcut function to the hasher's object interface.
9590 * @param {WordArray|string} message The message to hash.
9592 * @return {WordArray} The hash.
9598 * var hash = CryptoJS.RIPEMD160('message');
9599 * var hash = CryptoJS.RIPEMD160(wordArray);
9601 C.RIPEMD160 = Hasher._createHelper(RIPEMD160);
9604 * Shortcut function to the HMAC's object interface.
9606 * @param {WordArray|string} message The message to hash.
9607 * @param {WordArray|string} key The secret key.
9609 * @return {WordArray} The HMAC.
9615 * var hmac = CryptoJS.HmacRIPEMD160(message, key);
9617 C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);
9621 return CryptoJS.RIPEMD160;
9624 },{"./core":
31}],
55:[function(_dereq_,module,exports){
9625 ;(function (root, factory) {
9626 if (typeof exports === "object") {
9628 module.exports = exports = factory(_dereq_("./core"));
9630 else if (typeof define === "function" && define.amd) {
9632 define(["./core"], factory);
9636 factory(root.CryptoJS);
9638 }(this, function (CryptoJS) {
9644 var WordArray = C_lib.WordArray;
9645 var Hasher = C_lib.Hasher;
9646 var C_algo = C.algo;
9652 * SHA-
1 hash algorithm.
9654 var SHA1 = C_algo.SHA1 = Hasher.extend({
9655 _doReset: function () {
9656 this._hash = new WordArray.init([
9657 0x67452301,
0xefcdab89,
9658 0x98badcfe,
0x10325476,
9663 _doProcessBlock: function (M, offset) {
9665 var H = this._hash.words;
9667 // Working variables
9675 for (var i =
0; i <
80; i++) {
9677 W[i] = M[offset + i] |
0;
9679 var n = W[i -
3] ^ W[i -
8] ^ W[i -
14] ^ W[i -
16];
9680 W[i] = (n <<
1) | (n
>>> 31);
9683 var t = ((a <<
5) | (a
>>> 27)) + e + W[i];
9685 t += ((b & c) | (~b & d)) +
0x5a827999;
9686 } else if (i <
40) {
9687 t += (b ^ c ^ d) +
0x6ed9eba1;
9688 } else if (i <
60) {
9689 t += ((b & c) | (b & d) | (c & d)) -
0x70e44324;
9690 } else /* if (i <
80) */ {
9691 t += (b ^ c ^ d) -
0x359d3e2a;
9696 c = (b <<
30) | (b
>>> 2);
9701 // Intermediate hash value
9702 H[
0] = (H[
0] + a) |
0;
9703 H[
1] = (H[
1] + b) |
0;
9704 H[
2] = (H[
2] + c) |
0;
9705 H[
3] = (H[
3] + d) |
0;
9706 H[
4] = (H[
4] + e) |
0;
9709 _doFinalize: function () {
9711 var data = this._data;
9712 var dataWords = data.words;
9714 var nBitsTotal = this._nDataBytes *
8;
9715 var nBitsLeft = data.sigBytes *
8;
9718 dataWords[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32);
9719 dataWords[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = Math.floor(nBitsTotal /
0x100000000);
9720 dataWords[(((nBitsLeft +
64)
>>> 9) <<
4) +
15] = nBitsTotal;
9721 data.sigBytes = dataWords.length *
4;
9723 // Hash final blocks
9726 // Return final computed hash
9730 clone: function () {
9731 var clone = Hasher.clone.call(this);
9732 clone._hash = this._hash.clone();
9739 * Shortcut function to the hasher's object interface.
9741 * @param {WordArray|string} message The message to hash.
9743 * @return {WordArray} The hash.
9749 * var hash = CryptoJS.SHA1('message');
9750 * var hash = CryptoJS.SHA1(wordArray);
9752 C.SHA1 = Hasher._createHelper(SHA1);
9755 * Shortcut function to the HMAC's object interface.
9757 * @param {WordArray|string} message The message to hash.
9758 * @param {WordArray|string} key The secret key.
9760 * @return {WordArray} The HMAC.
9766 * var hmac = CryptoJS.HmacSHA1(message, key);
9768 C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
9772 return CryptoJS.SHA1;
9775 },{
"./core":
31}],
56:[function(_dereq_,module,exports){
9776 ;(function (root, factory, undef) {
9777 if (typeof exports ===
"object") {
9779 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./sha256"));
9781 else if (typeof define ===
"function" && define.amd) {
9783 define([
"./core",
"./sha256"], factory);
9787 factory(root.CryptoJS);
9789 }(this, function (CryptoJS) {
9795 var WordArray = C_lib.WordArray;
9796 var C_algo = C.algo;
9797 var SHA256 = C_algo.SHA256;
9800 * SHA-
224 hash algorithm.
9802 var SHA224 = C_algo.SHA224 = SHA256.extend({
9803 _doReset: function () {
9804 this._hash = new WordArray.init([
9805 0xc1059ed8,
0x367cd507,
0x3070dd17,
0xf70e5939,
9806 0xffc00b31,
0x68581511,
0x64f98fa7,
0xbefa4fa4
9810 _doFinalize: function () {
9811 var hash = SHA256._doFinalize.call(this);
9820 * Shortcut function to the hasher's object interface.
9822 * @param {WordArray|string} message The message to hash.
9824 * @return {WordArray} The hash.
9830 * var hash = CryptoJS.SHA224('message');
9831 * var hash = CryptoJS.SHA224(wordArray);
9833 C.SHA224 = SHA256._createHelper(SHA224);
9836 * Shortcut function to the HMAC's object interface.
9838 * @param {WordArray|string} message The message to hash.
9839 * @param {WordArray|string} key The secret key.
9841 * @return {WordArray} The HMAC.
9847 * var hmac = CryptoJS.HmacSHA224(message, key);
9849 C.HmacSHA224 = SHA256._createHmacHelper(SHA224);
9853 return CryptoJS.SHA224;
9856 },{
"./core":
31,
"./sha256":
57}],
57:[function(_dereq_,module,exports){
9857 ;(function (root, factory) {
9858 if (typeof exports ===
"object") {
9860 module.exports = exports = factory(_dereq_(
"./core"));
9862 else if (typeof define ===
"function" && define.amd) {
9864 define([
"./core"], factory);
9868 factory(root.CryptoJS);
9870 }(this, function (CryptoJS) {
9876 var WordArray = C_lib.WordArray;
9877 var Hasher = C_lib.Hasher;
9878 var C_algo = C.algo;
9880 // Initialization and round constants tables
9884 // Compute constants
9886 function isPrime(n) {
9887 var sqrtN = Math.sqrt(n);
9888 for (var factor =
2; factor <= sqrtN; factor++) {
9889 if (!(n % factor)) {
9897 function getFractionalBits(n) {
9898 return ((n - (n |
0)) *
0x100000000) |
0;
9903 while (nPrime <
64) {
9906 H[nPrime] = getFractionalBits(Math.pow(n,
1 /
2));
9908 K[nPrime] = getFractionalBits(Math.pow(n,
1 /
3));
9921 * SHA-
256 hash algorithm.
9923 var SHA256 = C_algo.SHA256 = Hasher.extend({
9924 _doReset: function () {
9925 this._hash = new WordArray.init(H.slice(
0));
9928 _doProcessBlock: function (M, offset) {
9930 var H = this._hash.words;
9932 // Working variables
9943 for (var i =
0; i <
64; i++) {
9945 W[i] = M[offset + i] |
0;
9947 var gamma0x = W[i -
15];
9948 var gamma0 = ((gamma0x <<
25) | (gamma0x
>>> 7)) ^
9949 ((gamma0x <<
14) | (gamma0x
>>> 18)) ^
9952 var gamma1x = W[i -
2];
9953 var gamma1 = ((gamma1x <<
15) | (gamma1x
>>> 17)) ^
9954 ((gamma1x <<
13) | (gamma1x
>>> 19)) ^
9957 W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16];
9960 var ch = (e & f) ^ (~e & g);
9961 var maj = (a & b) ^ (a & c) ^ (b & c);
9963 var sigma0 = ((a <<
30) | (a
>>> 2)) ^ ((a <<
19) | (a
>>> 13)) ^ ((a <<
10) | (a
>>> 22));
9964 var sigma1 = ((e <<
26) | (e
>>> 6)) ^ ((e <<
21) | (e
>>> 11)) ^ ((e <<
7) | (e
>>> 25));
9966 var t1 = h + sigma1 + ch + K[i] + W[i];
9967 var t2 = sigma0 + maj;
9979 // Intermediate hash value
9980 H[
0] = (H[
0] + a) |
0;
9981 H[
1] = (H[
1] + b) |
0;
9982 H[
2] = (H[
2] + c) |
0;
9983 H[
3] = (H[
3] + d) |
0;
9984 H[
4] = (H[
4] + e) |
0;
9985 H[
5] = (H[
5] + f) |
0;
9986 H[
6] = (H[
6] + g) |
0;
9987 H[
7] = (H[
7] + h) |
0;
9990 _doFinalize: function () {
9992 var data = this._data;
9993 var dataWords = data.words;
9995 var nBitsTotal = this._nDataBytes *
8;
9996 var nBitsLeft = data.sigBytes *
8;
9999 dataWords[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32);
10000 dataWords[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = Math.floor(nBitsTotal /
0x100000000);
10001 dataWords[(((nBitsLeft +
64)
>>> 9) <<
4) +
15] = nBitsTotal;
10002 data.sigBytes = dataWords.length *
4;
10004 // Hash final blocks
10007 // Return final computed hash
10011 clone: function () {
10012 var clone = Hasher.clone.call(this);
10013 clone._hash = this._hash.clone();
10020 * Shortcut function to the hasher's object interface.
10022 * @param {WordArray|string} message The message to hash.
10024 * @return {WordArray} The hash.
10030 * var hash = CryptoJS.SHA256('message');
10031 * var hash = CryptoJS.SHA256(wordArray);
10033 C.SHA256 = Hasher._createHelper(SHA256);
10036 * Shortcut function to the HMAC's object interface.
10038 * @param {WordArray|string} message The message to hash.
10039 * @param {WordArray|string} key The secret key.
10041 * @return {WordArray} The HMAC.
10047 * var hmac = CryptoJS.HmacSHA256(message, key);
10049 C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
10053 return CryptoJS.SHA256;
10056 },{
"./core":
31}],
58:[function(_dereq_,module,exports){
10057 ;(function (root, factory, undef) {
10058 if (typeof exports ===
"object") {
10060 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./x64-core"));
10062 else if (typeof define ===
"function" && define.amd) {
10064 define([
"./core",
"./x64-core"], factory);
10067 // Global (browser)
10068 factory(root.CryptoJS);
10070 }(this, function (CryptoJS) {
10076 var WordArray = C_lib.WordArray;
10077 var Hasher = C_lib.Hasher;
10079 var X64Word = C_x64.Word;
10080 var C_algo = C.algo;
10082 // Constants tables
10083 var RHO_OFFSETS = [];
10084 var PI_INDEXES = [];
10085 var ROUND_CONSTANTS = [];
10087 // Compute Constants
10089 // Compute rho offset constants
10091 for (var t =
0; t <
24; t++) {
10092 RHO_OFFSETS[x +
5 * y] = ((t +
1) * (t +
2) /
2) %
64;
10095 var newY = (
2 * x +
3 * y) %
5;
10100 // Compute pi index constants
10101 for (var x =
0; x <
5; x++) {
10102 for (var y =
0; y <
5; y++) {
10103 PI_INDEXES[x +
5 * y] = y + ((
2 * x +
3 * y) %
5) *
5;
10107 // Compute round constants
10109 for (var i =
0; i <
24; i++) {
10110 var roundConstantMsw =
0;
10111 var roundConstantLsw =
0;
10113 for (var j =
0; j <
7; j++) {
10115 var bitPosition = (
1 << j) -
1;
10116 if (bitPosition <
32) {
10117 roundConstantLsw ^=
1 << bitPosition;
10118 } else /* if (bitPosition
>=
32) */ {
10119 roundConstantMsw ^=
1 << (bitPosition -
32);
10123 // Compute next LFSR
10125 // Primitive polynomial over GF(
2): x^
8 + x^
6 + x^
5 + x^
4 +
1
10126 LFSR = (LFSR <<
1) ^
0x71;
10132 ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
10136 // Reusable objects for temporary values
10139 for (var i =
0; i <
25; i++) {
10140 T[i] = X64Word.create();
10145 * SHA-
3 hash algorithm.
10147 var SHA3 = C_algo.SHA3 = Hasher.extend({
10149 * Configuration options.
10151 * @property {number} outputLength
10152 * The desired number of bits in the output hash.
10153 * Only values permitted are:
224,
256,
384,
512.
10156 cfg: Hasher.cfg.extend({
10160 _doReset: function () {
10161 var state = this._state = []
10162 for (var i =
0; i <
25; i++) {
10163 state[i] = new X64Word.init();
10166 this.blockSize = (
1600 -
2 * this.cfg.outputLength) /
32;
10169 _doProcessBlock: function (M, offset) {
10171 var state = this._state;
10172 var nBlockSizeLanes = this.blockSize /
2;
10175 for (var i =
0; i < nBlockSizeLanes; i++) {
10177 var M2i = M[offset +
2 * i];
10178 var M2i1 = M[offset +
2 * i +
1];
10182 (((M2i <<
8) | (M2i
>>> 24)) &
0x00ff00ff) |
10183 (((M2i <<
24) | (M2i
>>> 8)) &
0xff00ff00)
10186 (((M2i1 <<
8) | (M2i1
>>> 24)) &
0x00ff00ff) |
10187 (((M2i1 <<
24) | (M2i1
>>> 8)) &
0xff00ff00)
10190 // Absorb message into state
10191 var lane = state[i];
10197 for (var round =
0; round <
24; round++) {
10199 for (var x =
0; x <
5; x++) {
10200 // Mix column lanes
10201 var tMsw =
0, tLsw =
0;
10202 for (var y =
0; y <
5; y++) {
10203 var lane = state[x +
5 * y];
10208 // Temporary values
10213 for (var x =
0; x <
5; x++) {
10215 var Tx4 = T[(x +
4) %
5];
10216 var Tx1 = T[(x +
1) %
5];
10217 var Tx1Msw = Tx1.high;
10218 var Tx1Lsw = Tx1.low;
10220 // Mix surrounding columns
10221 var tMsw = Tx4.high ^ ((Tx1Msw <<
1) | (Tx1Lsw
>>> 31));
10222 var tLsw = Tx4.low ^ ((Tx1Lsw <<
1) | (Tx1Msw
>>> 31));
10223 for (var y =
0; y <
5; y++) {
10224 var lane = state[x +
5 * y];
10231 for (var laneIndex =
1; laneIndex <
25; laneIndex++) {
10233 var lane = state[laneIndex];
10234 var laneMsw = lane.high;
10235 var laneLsw = lane.low;
10236 var rhoOffset = RHO_OFFSETS[laneIndex];
10239 if (rhoOffset <
32) {
10240 var tMsw = (laneMsw << rhoOffset) | (laneLsw
>>> (
32 - rhoOffset));
10241 var tLsw = (laneLsw << rhoOffset) | (laneMsw
>>> (
32 - rhoOffset));
10242 } else /* if (rhoOffset
>=
32) */ {
10243 var tMsw = (laneLsw << (rhoOffset -
32)) | (laneMsw
>>> (
64 - rhoOffset));
10244 var tLsw = (laneMsw << (rhoOffset -
32)) | (laneLsw
>>> (
64 - rhoOffset));
10248 var TPiLane = T[PI_INDEXES[laneIndex]];
10249 TPiLane.high = tMsw;
10250 TPiLane.low = tLsw;
10253 // Rho pi at x = y =
0
10255 var state0 = state[
0];
10256 T0.high = state0.high;
10257 T0.low = state0.low;
10260 for (var x =
0; x <
5; x++) {
10261 for (var y =
0; y <
5; y++) {
10263 var laneIndex = x +
5 * y;
10264 var lane = state[laneIndex];
10265 var TLane = T[laneIndex];
10266 var Tx1Lane = T[((x +
1) %
5) +
5 * y];
10267 var Tx2Lane = T[((x +
2) %
5) +
5 * y];
10270 lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
10271 lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);
10276 var lane = state[
0];
10277 var roundConstant = ROUND_CONSTANTS[round];
10278 lane.high ^= roundConstant.high;
10279 lane.low ^= roundConstant.low;;
10283 _doFinalize: function () {
10285 var data = this._data;
10286 var dataWords = data.words;
10287 var nBitsTotal = this._nDataBytes *
8;
10288 var nBitsLeft = data.sigBytes *
8;
10289 var blockSizeBits = this.blockSize *
32;
10292 dataWords[nBitsLeft
>>> 5] |=
0x1 << (
24 - nBitsLeft %
32);
10293 dataWords[((Math.ceil((nBitsLeft +
1) / blockSizeBits) * blockSizeBits)
>>> 5) -
1] |=
0x80;
10294 data.sigBytes = dataWords.length *
4;
10296 // Hash final blocks
10300 var state = this._state;
10301 var outputLengthBytes = this.cfg.outputLength /
8;
10302 var outputLengthLanes = outputLengthBytes /
8;
10305 var hashWords = [];
10306 for (var i =
0; i < outputLengthLanes; i++) {
10308 var lane = state[i];
10309 var laneMsw = lane.high;
10310 var laneLsw = lane.low;
10314 (((laneMsw <<
8) | (laneMsw
>>> 24)) &
0x00ff00ff) |
10315 (((laneMsw <<
24) | (laneMsw
>>> 8)) &
0xff00ff00)
10318 (((laneLsw <<
8) | (laneLsw
>>> 24)) &
0x00ff00ff) |
10319 (((laneLsw <<
24) | (laneLsw
>>> 8)) &
0xff00ff00)
10322 // Squeeze state to retrieve hash
10323 hashWords.push(laneLsw);
10324 hashWords.push(laneMsw);
10327 // Return final computed hash
10328 return new WordArray.init(hashWords, outputLengthBytes);
10331 clone: function () {
10332 var clone = Hasher.clone.call(this);
10334 var state = clone._state = this._state.slice(
0);
10335 for (var i =
0; i <
25; i++) {
10336 state[i] = state[i].clone();
10344 * Shortcut function to the hasher's object interface.
10346 * @param {WordArray|string} message The message to hash.
10348 * @return {WordArray} The hash.
10354 * var hash = CryptoJS.SHA3('message');
10355 * var hash = CryptoJS.SHA3(wordArray);
10357 C.SHA3 = Hasher._createHelper(SHA3);
10360 * Shortcut function to the HMAC's object interface.
10362 * @param {WordArray|string} message The message to hash.
10363 * @param {WordArray|string} key The secret key.
10365 * @return {WordArray} The HMAC.
10371 * var hmac = CryptoJS.HmacSHA3(message, key);
10373 C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
10377 return CryptoJS.SHA3;
10380 },{
"./core":
31,
"./x64-core":
62}],
59:[function(_dereq_,module,exports){
10381 ;(function (root, factory, undef) {
10382 if (typeof exports ===
"object") {
10384 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./x64-core"), _dereq_(
"./sha512"));
10386 else if (typeof define ===
"function" && define.amd) {
10388 define([
"./core",
"./x64-core",
"./sha512"], factory);
10391 // Global (browser)
10392 factory(root.CryptoJS);
10394 }(this, function (CryptoJS) {
10400 var X64Word = C_x64.Word;
10401 var X64WordArray = C_x64.WordArray;
10402 var C_algo = C.algo;
10403 var SHA512 = C_algo.SHA512;
10406 * SHA-
384 hash algorithm.
10408 var SHA384 = C_algo.SHA384 = SHA512.extend({
10409 _doReset: function () {
10410 this._hash = new X64WordArray.init([
10411 new X64Word.init(
0xcbbb9d5d,
0xc1059ed8), new X64Word.init(
0x629a292a,
0x367cd507),
10412 new X64Word.init(
0x9159015a,
0x3070dd17), new X64Word.init(
0x152fecd8,
0xf70e5939),
10413 new X64Word.init(
0x67332667,
0xffc00b31), new X64Word.init(
0x8eb44a87,
0x68581511),
10414 new X64Word.init(
0xdb0c2e0d,
0x64f98fa7), new X64Word.init(
0x47b5481d,
0xbefa4fa4)
10418 _doFinalize: function () {
10419 var hash = SHA512._doFinalize.call(this);
10421 hash.sigBytes -=
16;
10428 * Shortcut function to the hasher's object interface.
10430 * @param {WordArray|string} message The message to hash.
10432 * @return {WordArray} The hash.
10438 * var hash = CryptoJS.SHA384('message');
10439 * var hash = CryptoJS.SHA384(wordArray);
10441 C.SHA384 = SHA512._createHelper(SHA384);
10444 * Shortcut function to the HMAC's object interface.
10446 * @param {WordArray|string} message The message to hash.
10447 * @param {WordArray|string} key The secret key.
10449 * @return {WordArray} The HMAC.
10455 * var hmac = CryptoJS.HmacSHA384(message, key);
10457 C.HmacSHA384 = SHA512._createHmacHelper(SHA384);
10461 return CryptoJS.SHA384;
10464 },{
"./core":
31,
"./sha512":
60,
"./x64-core":
62}],
60:[function(_dereq_,module,exports){
10465 ;(function (root, factory, undef) {
10466 if (typeof exports ===
"object") {
10468 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./x64-core"));
10470 else if (typeof define ===
"function" && define.amd) {
10472 define([
"./core",
"./x64-core"], factory);
10475 // Global (browser)
10476 factory(root.CryptoJS);
10478 }(this, function (CryptoJS) {
10484 var Hasher = C_lib.Hasher;
10486 var X64Word = C_x64.Word;
10487 var X64WordArray = C_x64.WordArray;
10488 var C_algo = C.algo;
10490 function X64Word_create() {
10491 return X64Word.create.apply(X64Word, arguments);
10496 X64Word_create(
0x428a2f98,
0xd728ae22), X64Word_create(
0x71374491,
0x23ef65cd),
10497 X64Word_create(
0xb5c0fbcf,
0xec4d3b2f), X64Word_create(
0xe9b5dba5,
0x8189dbbc),
10498 X64Word_create(
0x3956c25b,
0xf348b538), X64Word_create(
0x59f111f1,
0xb605d019),
10499 X64Word_create(
0x923f82a4,
0xaf194f9b), X64Word_create(
0xab1c5ed5,
0xda6d8118),
10500 X64Word_create(
0xd807aa98,
0xa3030242), X64Word_create(
0x12835b01,
0x45706fbe),
10501 X64Word_create(
0x243185be,
0x4ee4b28c), X64Word_create(
0x550c7dc3,
0xd5ffb4e2),
10502 X64Word_create(
0x72be5d74,
0xf27b896f), X64Word_create(
0x80deb1fe,
0x3b1696b1),
10503 X64Word_create(
0x9bdc06a7,
0x25c71235), X64Word_create(
0xc19bf174,
0xcf692694),
10504 X64Word_create(
0xe49b69c1,
0x9ef14ad2), X64Word_create(
0xefbe4786,
0x384f25e3),
10505 X64Word_create(
0x0fc19dc6,
0x8b8cd5b5), X64Word_create(
0x240ca1cc,
0x77ac9c65),
10506 X64Word_create(
0x2de92c6f,
0x592b0275), X64Word_create(
0x4a7484aa,
0x6ea6e483),
10507 X64Word_create(
0x5cb0a9dc,
0xbd41fbd4), X64Word_create(
0x76f988da,
0x831153b5),
10508 X64Word_create(
0x983e5152,
0xee66dfab), X64Word_create(
0xa831c66d,
0x2db43210),
10509 X64Word_create(
0xb00327c8,
0x98fb213f), X64Word_create(
0xbf597fc7,
0xbeef0ee4),
10510 X64Word_create(
0xc6e00bf3,
0x3da88fc2), X64Word_create(
0xd5a79147,
0x930aa725),
10511 X64Word_create(
0x06ca6351,
0xe003826f), X64Word_create(
0x14292967,
0x0a0e6e70),
10512 X64Word_create(
0x27b70a85,
0x46d22ffc), X64Word_create(
0x2e1b2138,
0x5c26c926),
10513 X64Word_create(
0x4d2c6dfc,
0x5ac42aed), X64Word_create(
0x53380d13,
0x9d95b3df),
10514 X64Word_create(
0x650a7354,
0x8baf63de), X64Word_create(
0x766a0abb,
0x3c77b2a8),
10515 X64Word_create(
0x81c2c92e,
0x47edaee6), X64Word_create(
0x92722c85,
0x1482353b),
10516 X64Word_create(
0xa2bfe8a1,
0x4cf10364), X64Word_create(
0xa81a664b,
0xbc423001),
10517 X64Word_create(
0xc24b8b70,
0xd0f89791), X64Word_create(
0xc76c51a3,
0x0654be30),
10518 X64Word_create(
0xd192e819,
0xd6ef5218), X64Word_create(
0xd6990624,
0x5565a910),
10519 X64Word_create(
0xf40e3585,
0x5771202a), X64Word_create(
0x106aa070,
0x32bbd1b8),
10520 X64Word_create(
0x19a4c116,
0xb8d2d0c8), X64Word_create(
0x1e376c08,
0x5141ab53),
10521 X64Word_create(
0x2748774c,
0xdf8eeb99), X64Word_create(
0x34b0bcb5,
0xe19b48a8),
10522 X64Word_create(
0x391c0cb3,
0xc5c95a63), X64Word_create(
0x4ed8aa4a,
0xe3418acb),
10523 X64Word_create(
0x5b9cca4f,
0x7763e373), X64Word_create(
0x682e6ff3,
0xd6b2b8a3),
10524 X64Word_create(
0x748f82ee,
0x5defb2fc), X64Word_create(
0x78a5636f,
0x43172f60),
10525 X64Word_create(
0x84c87814,
0xa1f0ab72), X64Word_create(
0x8cc70208,
0x1a6439ec),
10526 X64Word_create(
0x90befffa,
0x23631e28), X64Word_create(
0xa4506ceb,
0xde82bde9),
10527 X64Word_create(
0xbef9a3f7,
0xb2c67915), X64Word_create(
0xc67178f2,
0xe372532b),
10528 X64Word_create(
0xca273ece,
0xea26619c), X64Word_create(
0xd186b8c7,
0x21c0c207),
10529 X64Word_create(
0xeada7dd6,
0xcde0eb1e), X64Word_create(
0xf57d4f7f,
0xee6ed178),
10530 X64Word_create(
0x06f067aa,
0x72176fba), X64Word_create(
0x0a637dc5,
0xa2c898a6),
10531 X64Word_create(
0x113f9804,
0xbef90dae), X64Word_create(
0x1b710b35,
0x131c471b),
10532 X64Word_create(
0x28db77f5,
0x23047d84), X64Word_create(
0x32caab7b,
0x40c72493),
10533 X64Word_create(
0x3c9ebe0a,
0x15c9bebc), X64Word_create(
0x431d67c4,
0x9c100d4c),
10534 X64Word_create(
0x4cc5d4be,
0xcb3e42b6), X64Word_create(
0x597f299c,
0xfc657e2a),
10535 X64Word_create(
0x5fcb6fab,
0x3ad6faec), X64Word_create(
0x6c44198c,
0x4a475817)
10538 // Reusable objects
10541 for (var i =
0; i <
80; i++) {
10542 W[i] = X64Word_create();
10547 * SHA-
512 hash algorithm.
10549 var SHA512 = C_algo.SHA512 = Hasher.extend({
10550 _doReset: function () {
10551 this._hash = new X64WordArray.init([
10552 new X64Word.init(
0x6a09e667,
0xf3bcc908), new X64Word.init(
0xbb67ae85,
0x84caa73b),
10553 new X64Word.init(
0x3c6ef372,
0xfe94f82b), new X64Word.init(
0xa54ff53a,
0x5f1d36f1),
10554 new X64Word.init(
0x510e527f,
0xade682d1), new X64Word.init(
0x9b05688c,
0x2b3e6c1f),
10555 new X64Word.init(
0x1f83d9ab,
0xfb41bd6b), new X64Word.init(
0x5be0cd19,
0x137e2179)
10559 _doProcessBlock: function (M, offset) {
10561 var H = this._hash.words;
10589 // Working variables
10608 for (var i =
0; i <
80; i++) {
10614 var Wih = Wi.high = M[offset + i *
2] |
0;
10615 var Wil = Wi.low = M[offset + i *
2 +
1] |
0;
10618 var gamma0x = W[i -
15];
10619 var gamma0xh = gamma0x.high;
10620 var gamma0xl = gamma0x.low;
10621 var gamma0h = ((gamma0xh
>>> 1) | (gamma0xl <<
31)) ^ ((gamma0xh
>>> 8) | (gamma0xl <<
24)) ^ (gamma0xh
>>> 7);
10622 var gamma0l = ((gamma0xl
>>> 1) | (gamma0xh <<
31)) ^ ((gamma0xl
>>> 8) | (gamma0xh <<
24)) ^ ((gamma0xl
>>> 7) | (gamma0xh <<
25));
10625 var gamma1x = W[i -
2];
10626 var gamma1xh = gamma1x.high;
10627 var gamma1xl = gamma1x.low;
10628 var gamma1h = ((gamma1xh
>>> 19) | (gamma1xl <<
13)) ^ ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^ (gamma1xh
>>> 6);
10629 var gamma1l = ((gamma1xl
>>> 19) | (gamma1xh <<
13)) ^ ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^ ((gamma1xl
>>> 6) | (gamma1xh <<
26));
10631 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
10632 var Wi7 = W[i -
7];
10633 var Wi7h = Wi7.high;
10634 var Wi7l = Wi7.low;
10636 var Wi16 = W[i -
16];
10637 var Wi16h = Wi16.high;
10638 var Wi16l = Wi16.low;
10640 var Wil = gamma0l + Wi7l;
10641 var Wih = gamma0h + Wi7h + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
10642 var Wil = Wil + gamma1l;
10643 var Wih = Wih + gamma1h + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
10644 var Wil = Wil + Wi16l;
10645 var Wih = Wih + Wi16h + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0);
10651 var chh = (eh & fh) ^ (~eh & gh);
10652 var chl = (el & fl) ^ (~el & gl);
10653 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
10654 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
10656 var sigma0h = ((ah
>>> 28) | (al <<
4)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
10657 var sigma0l = ((al
>>> 28) | (ah <<
4)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
10658 var sigma1h = ((eh
>>> 14) | (el <<
18)) ^ ((eh
>>> 18) | (el <<
14)) ^ ((eh <<
23) | (el
>>> 9));
10659 var sigma1l = ((el
>>> 14) | (eh <<
18)) ^ ((el
>>> 18) | (eh <<
14)) ^ ((el <<
23) | (eh
>>> 9));
10661 // t1 = h + sigma1 + ch + K[i] + W[i]
10666 var t1l = hl + sigma1l;
10667 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
10668 var t1l = t1l + chl;
10669 var t1h = t1h + chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
10670 var t1l = t1l + Kil;
10671 var t1h = t1h + Kih + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0);
10672 var t1l = t1l + Wil;
10673 var t1h = t1h + Wih + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0);
10675 // t2 = sigma0 + maj
10676 var t2l = sigma0l + majl;
10677 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
10679 // Update working variables
10686 el = (dl + t1l) |
0;
10687 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
10694 al = (t1l + t2l) |
0;
10695 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
10698 // Intermediate hash value
10699 H0l = H0.low = (H0l + al);
10700 H0.high = (H0h + ah + ((H0l
>>> 0) < (al
>>> 0) ?
1 :
0));
10701 H1l = H1.low = (H1l + bl);
10702 H1.high = (H1h + bh + ((H1l
>>> 0) < (bl
>>> 0) ?
1 :
0));
10703 H2l = H2.low = (H2l + cl);
10704 H2.high = (H2h + ch + ((H2l
>>> 0) < (cl
>>> 0) ?
1 :
0));
10705 H3l = H3.low = (H3l + dl);
10706 H3.high = (H3h + dh + ((H3l
>>> 0) < (dl
>>> 0) ?
1 :
0));
10707 H4l = H4.low = (H4l + el);
10708 H4.high = (H4h + eh + ((H4l
>>> 0) < (el
>>> 0) ?
1 :
0));
10709 H5l = H5.low = (H5l + fl);
10710 H5.high = (H5h + fh + ((H5l
>>> 0) < (fl
>>> 0) ?
1 :
0));
10711 H6l = H6.low = (H6l + gl);
10712 H6.high = (H6h + gh + ((H6l
>>> 0) < (gl
>>> 0) ?
1 :
0));
10713 H7l = H7.low = (H7l + hl);
10714 H7.high = (H7h + hh + ((H7l
>>> 0) < (hl
>>> 0) ?
1 :
0));
10717 _doFinalize: function () {
10719 var data = this._data;
10720 var dataWords = data.words;
10722 var nBitsTotal = this._nDataBytes *
8;
10723 var nBitsLeft = data.sigBytes *
8;
10726 dataWords[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32);
10727 dataWords[(((nBitsLeft +
128)
>>> 10) <<
5) +
30] = Math.floor(nBitsTotal /
0x100000000);
10728 dataWords[(((nBitsLeft +
128)
>>> 10) <<
5) +
31] = nBitsTotal;
10729 data.sigBytes = dataWords.length *
4;
10731 // Hash final blocks
10734 // Convert hash to
32-bit word array before returning
10735 var hash = this._hash.toX32();
10737 // Return final computed hash
10741 clone: function () {
10742 var clone = Hasher.clone.call(this);
10743 clone._hash = this._hash.clone();
10752 * Shortcut function to the hasher's object interface.
10754 * @param {WordArray|string} message The message to hash.
10756 * @return {WordArray} The hash.
10762 * var hash = CryptoJS.SHA512('message');
10763 * var hash = CryptoJS.SHA512(wordArray);
10765 C.SHA512 = Hasher._createHelper(SHA512);
10768 * Shortcut function to the HMAC's object interface.
10770 * @param {WordArray|string} message The message to hash.
10771 * @param {WordArray|string} key The secret key.
10773 * @return {WordArray} The HMAC.
10779 * var hmac = CryptoJS.HmacSHA512(message, key);
10781 C.HmacSHA512 = Hasher._createHmacHelper(SHA512);
10785 return CryptoJS.SHA512;
10788 },{
"./core":
31,
"./x64-core":
62}],
61:[function(_dereq_,module,exports){
10789 ;(function (root, factory, undef) {
10790 if (typeof exports ===
"object") {
10792 module.exports = exports = factory(_dereq_(
"./core"), _dereq_(
"./enc-base64"), _dereq_(
"./md5"), _dereq_(
"./evpkdf"), _dereq_(
"./cipher-core"));
10794 else if (typeof define ===
"function" && define.amd) {
10796 define([
"./core",
"./enc-base64",
"./md5",
"./evpkdf",
"./cipher-core"], factory);
10799 // Global (browser)
10800 factory(root.CryptoJS);
10802 }(this, function (CryptoJS) {
10808 var WordArray = C_lib.WordArray;
10809 var BlockCipher = C_lib.BlockCipher;
10810 var C_algo = C.algo;
10812 // Permuted Choice
1 constants
10814 57,
49,
41,
33,
25,
17,
9,
1,
10815 58,
50,
42,
34,
26,
18,
10,
2,
10816 59,
51,
43,
35,
27,
19,
11,
3,
10817 60,
52,
44,
36,
63,
55,
47,
39,
10818 31,
23,
15,
7,
62,
54,
46,
38,
10819 30,
22,
14,
6,
61,
53,
45,
37,
10820 29,
21,
13,
5,
28,
20,
12,
4
10823 // Permuted Choice
2 constants
10825 14,
17,
11,
24,
1,
5,
10826 3,
28,
15,
6,
21,
10,
10827 23,
19,
12,
4,
26,
8,
10828 16,
7,
27,
20,
13,
2,
10829 41,
52,
31,
37,
47,
55,
10830 30,
40,
51,
45,
33,
48,
10831 44,
49,
39,
56,
34,
53,
10832 46,
42,
50,
36,
29,
32
10835 // Cumulative bit shift constants
10836 var BIT_SHIFTS = [
1,
2,
4,
6,
8,
10,
12,
14,
15,
17,
19,
21,
23,
25,
27,
28];
10838 // SBOXes and round permutation constants
10842 0x10000000:
0x8000,
10843 0x20000000:
0x808002,
10846 0x50000000:
0x808202,
10847 0x60000000:
0x800202,
10848 0x70000000:
0x800000,
10850 0x90000000:
0x800200,
10851 0xa0000000:
0x8200,
10852 0xb0000000:
0x808000,
10853 0xc0000000:
0x8002,
10854 0xd0000000:
0x800002,
10856 0xf0000000:
0x8202,
10858 0x18000000:
0x808202,
10859 0x28000000:
0x8202,
10860 0x38000000:
0x8000,
10861 0x48000000:
0x808200,
10863 0x68000000:
0x808002,
10865 0x88000000:
0x800200,
10866 0x98000000:
0x8200,
10867 0xa8000000:
0x808000,
10868 0xb8000000:
0x800202,
10869 0xc8000000:
0x800002,
10870 0xd8000000:
0x8002,
10872 0xf8000000:
0x800000,
10875 0x20000001:
0x808200,
10876 0x30000001:
0x800000,
10877 0x40000001:
0x808002,
10878 0x50000001:
0x8200,
10880 0x70000001:
0x800202,
10881 0x80000001:
0x808202,
10882 0x90000001:
0x808000,
10883 0xa0000001:
0x800002,
10884 0xb0000001:
0x8202,
10886 0xd0000001:
0x800200,
10887 0xe0000001:
0x8002,
10889 0x8000001:
0x808202,
10890 0x18000001:
0x808000,
10891 0x28000001:
0x800000,
10893 0x48000001:
0x8000,
10894 0x58000001:
0x800002,
10896 0x78000001:
0x8202,
10897 0x88000001:
0x8002,
10898 0x98000001:
0x800202,
10900 0xb8000001:
0x808200,
10901 0xc8000001:
0x800200,
10903 0xe8000001:
0x8200,
10904 0xf8000001:
0x808002
10909 0x2000000:
0x80000,
10910 0x3000000:
0x40080010,
10911 0x4000000:
0x40000010,
10912 0x5000000:
0x40084000,
10913 0x6000000:
0x40004000,
10915 0x8000000:
0x84000,
10916 0x9000000:
0x40004010,
10917 0xa000000:
0x40000000,
10918 0xb000000:
0x84010,
10919 0xc000000:
0x80010,
10922 0xf000000:
0x40080000,
10923 0x800000:
0x40004000,
10924 0x1800000:
0x84010,
10926 0x3800000:
0x40004010,
10927 0x4800000:
0x40084010,
10928 0x5800000:
0x40000000,
10929 0x6800000:
0x80000,
10930 0x7800000:
0x40080010,
10931 0x8800000:
0x80010,
10934 0xb800000:
0x40080000,
10935 0xc800000:
0x40000010,
10936 0xd800000:
0x84000,
10937 0xe800000:
0x40084000,
10940 0x11000000:
0x40080010,
10941 0x12000000:
0x40004010,
10942 0x13000000:
0x40084000,
10943 0x14000000:
0x40080000,
10945 0x16000000:
0x84010,
10946 0x17000000:
0x4000,
10947 0x18000000:
0x4010,
10948 0x19000000:
0x80000,
10949 0x1a000000:
0x80010,
10950 0x1b000000:
0x40000010,
10951 0x1c000000:
0x84000,
10952 0x1d000000:
0x40004000,
10953 0x1e000000:
0x40000000,
10954 0x1f000000:
0x40084010,
10955 0x10800000:
0x84010,
10956 0x11800000:
0x80000,
10957 0x12800000:
0x40080000,
10958 0x13800000:
0x4000,
10959 0x14800000:
0x40004000,
10960 0x15800000:
0x40084010,
10962 0x17800000:
0x40000000,
10963 0x18800000:
0x40084000,
10964 0x19800000:
0x40000010,
10965 0x1a800000:
0x40004010,
10966 0x1b800000:
0x80010,
10968 0x1d800000:
0x4010,
10969 0x1e800000:
0x40080010,
10970 0x1f800000:
0x84000
10975 0x200000:
0x4000100,
10978 0x500000:
0x4000004,
10979 0x600000:
0x4010104,
10980 0x700000:
0x4010000,
10981 0x800000:
0x4000000,
10982 0x900000:
0x4010100,
10984 0xb00000:
0x4010004,
10985 0xc00000:
0x4000104,
10989 0x80000:
0x4010100,
10990 0x180000:
0x4010004,
10992 0x380000:
0x4000100,
10993 0x480000:
0x4000004,
10999 0xa80000:
0x4010000,
11002 0xd80000:
0x4000104,
11003 0xe80000:
0x4010104,
11004 0xf80000:
0x4000000,
11005 0x1000000:
0x4010100,
11006 0x1100000:
0x10004,
11007 0x1200000:
0x10000,
11008 0x1300000:
0x4000100,
11010 0x1500000:
0x4010104,
11011 0x1600000:
0x4000004,
11013 0x1800000:
0x4000104,
11014 0x1900000:
0x4000000,
11016 0x1b00000:
0x10100,
11017 0x1c00000:
0x4010000,
11019 0x1e00000:
0x10104,
11020 0x1f00000:
0x4010004,
11021 0x1080000:
0x4000000,
11023 0x1280000:
0x4010100,
11025 0x1480000:
0x10004,
11026 0x1580000:
0x4000100,
11028 0x1780000:
0x4010004,
11029 0x1880000:
0x10000,
11030 0x1980000:
0x4010104,
11031 0x1a80000:
0x10104,
11032 0x1b80000:
0x4000004,
11033 0x1c80000:
0x4000104,
11034 0x1d80000:
0x4010000,
11040 0x10000:
0x80001040,
11042 0x30000:
0x80400000,
11045 0x60000:
0x80000040,
11047 0x80000:
0x80000000,
11050 0xb0000:
0x80001000,
11051 0xc0000:
0x80400040,
11054 0xf0000:
0x80401040,
11055 0x8000:
0x80001040,
11057 0x28000:
0x80400040,
11058 0x38000:
0x80001000,
11060 0x58000:
0x80401040,
11062 0x78000:
0x80400000,
11064 0x98000:
0x80401000,
11067 0xc8000:
0x80000000,
11070 0xf8000:
0x80000040,
11071 0x100000:
0x400040,
11072 0x110000:
0x401000,
11073 0x120000:
0x80000040,
11076 0x150000:
0x80400040,
11077 0x160000:
0x80401000,
11078 0x170000:
0x80001040,
11079 0x180000:
0x80401040,
11080 0x190000:
0x80000000,
11081 0x1a0000:
0x80400000,
11082 0x1b0000:
0x401040,
11083 0x1c0000:
0x80001000,
11084 0x1d0000:
0x400000,
11087 0x108000:
0x80400000,
11088 0x118000:
0x80401040,
11090 0x138000:
0x401000,
11091 0x148000:
0x400040,
11092 0x158000:
0x80000000,
11093 0x168000:
0x80001040,
11095 0x188000:
0x80000040,
11097 0x1a8000:
0x80001000,
11098 0x1b8000:
0x80400040,
11100 0x1d8000:
0x80401000,
11101 0x1e8000:
0x400000,
11108 0x3000:
0x20000000,
11109 0x4000:
0x20040080,
11111 0x6000:
0x21000080,
11114 0x9000:
0x20040000,
11115 0xa000:
0x20000080,
11116 0xb000:
0x21040080,
11117 0xc000:
0x21040000,
11120 0xf000:
0x21000000,
11122 0x1800:
0x21000080,
11126 0x5800:
0x20040080,
11127 0x6800:
0x21040000,
11128 0x7800:
0x20000000,
11129 0x8800:
0x20040000,
11131 0xa800:
0x21040080,
11133 0xc800:
0x20000080,
11134 0xd800:
0x21000000,
11139 0x12000:
0x20000000,
11140 0x13000:
0x21000080,
11141 0x14000:
0x1000080,
11142 0x15000:
0x21040000,
11143 0x16000:
0x20040080,
11144 0x17000:
0x1000000,
11145 0x18000:
0x21040080,
11146 0x19000:
0x21000000,
11147 0x1a000:
0x1040000,
11148 0x1b000:
0x20040000,
11150 0x1d000:
0x20000080,
11152 0x1f000:
0x1040080,
11153 0x10800:
0x21000080,
11154 0x11800:
0x1000000,
11155 0x12800:
0x1040000,
11156 0x13800:
0x20040080,
11157 0x14800:
0x20000000,
11158 0x15800:
0x1040080,
11160 0x17800:
0x21040000,
11162 0x19800:
0x21040080,
11164 0x1b800:
0x21000000,
11165 0x1c800:
0x1000080,
11167 0x1e800:
0x20040000,
11168 0x1f800:
0x20000080
11203 0x1000:
0x10002000,
11204 0x1100:
0x10200008,
11205 0x1200:
0x10202008,
11208 0x1500:
0x10000000,
11209 0x1600:
0x10000008,
11214 0x1b00:
0x10200000,
11216 0x1d00:
0x10002008,
11217 0x1e00:
0x10202000,
11222 0x1380:
0x10000008,
11223 0x1480:
0x10002000,
11225 0x1680:
0x10202008,
11226 0x1780:
0x10200000,
11227 0x1880:
0x10202000,
11228 0x1980:
0x10200008,
11233 0x1e80:
0x10000000,
11320 0x80000001:
0x8020820,
11321 0x80000002:
0x8000820,
11322 0x80000003:
0x8000000,
11323 0x80000004:
0x8020000,
11324 0x80000005:
0x20800,
11325 0x80000006:
0x20820,
11327 0x80000008:
0x8000020,
11329 0x8000000a:
0x20020,
11330 0x8000000b:
0x8020800,
11332 0x8000000d:
0x8020020,
11333 0x8000000e:
0x8000800,
11334 0x8000000f:
0x20000,
11351 0x80000010:
0x20000,
11353 0x80000012:
0x8020020,
11354 0x80000013:
0x20820,
11356 0x80000015:
0x8020000,
11357 0x80000016:
0x8000000,
11358 0x80000017:
0x8000820,
11359 0x80000018:
0x8020820,
11360 0x80000019:
0x8000020,
11361 0x8000001a:
0x8000800,
11363 0x8000001c:
0x20800,
11365 0x8000001e:
0x20020,
11366 0x8000001f:
0x8020800
11370 // Masks that select the SBOX input
11372 0xf8000001,
0x1f800000,
0x01f80000,
0x001f8000,
11373 0x0001f800,
0x00001f80,
0x000001f8,
0x8000001f
11377 * DES block cipher algorithm.
11379 var DES = C_algo.DES = BlockCipher.extend({
11380 _doReset: function () {
11382 var key = this._key;
11383 var keyWords = key.words;
11385 // Select
56 bits according to PC1
11387 for (var i =
0; i <
56; i++) {
11388 var keyBitPos = PC1[i] -
1;
11389 keyBits[i] = (keyWords[keyBitPos
>>> 5]
>>> (
31 - keyBitPos %
32)) &
1;
11392 // Assemble
16 subkeys
11393 var subKeys = this._subKeys = [];
11394 for (var nSubKey =
0; nSubKey <
16; nSubKey++) {
11396 var subKey = subKeys[nSubKey] = [];
11399 var bitShift = BIT_SHIFTS[nSubKey];
11401 // Select
48 bits according to PC2
11402 for (var i =
0; i <
24; i++) {
11403 // Select from the left
28 key bits
11404 subKey[(i /
6) |
0] |= keyBits[((PC2[i] -
1) + bitShift) %
28] << (
31 - i %
6);
11406 // Select from the right
28 key bits
11407 subKey[
4 + ((i /
6) |
0)] |= keyBits[
28 + (((PC2[i +
24] -
1) + bitShift) %
28)] << (
31 - i %
6);
11410 // Since each subkey is applied to an expanded
32-bit input,
11411 // the subkey can be broken into
8 values scaled to
32-bits,
11412 // which allows the key to be used without expansion
11413 subKey[
0] = (subKey[
0] <<
1) | (subKey[
0]
>>> 31);
11414 for (var i =
1; i <
7; i++) {
11415 subKey[i] = subKey[i]
>>> ((i -
1) *
4 +
3);
11417 subKey[
7] = (subKey[
7] <<
5) | (subKey[
7]
>>> 27);
11420 // Compute inverse subkeys
11421 var invSubKeys = this._invSubKeys = [];
11422 for (var i =
0; i <
16; i++) {
11423 invSubKeys[i] = subKeys[
15 - i];
11427 encryptBlock: function (M, offset) {
11428 this._doCryptBlock(M, offset, this._subKeys);
11431 decryptBlock: function (M, offset) {
11432 this._doCryptBlock(M, offset, this._invSubKeys);
11435 _doCryptBlock: function (M, offset, subKeys) {
11437 this._lBlock = M[offset];
11438 this._rBlock = M[offset +
1];
11440 // Initial permutation
11441 exchangeLR.call(this,
4,
0x0f0f0f0f);
11442 exchangeLR.call(this,
16,
0x0000ffff);
11443 exchangeRL.call(this,
2,
0x33333333);
11444 exchangeRL.call(this,
8,
0x00ff00ff);
11445 exchangeLR.call(this,
1,
0x55555555);
11448 for (var round =
0; round <
16; round++) {
11450 var subKey = subKeys[round];
11451 var lBlock = this._lBlock;
11452 var rBlock = this._rBlock;
11454 // Feistel function
11456 for (var i =
0; i <
8; i++) {
11457 f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i])
>>> 0];
11459 this._lBlock = rBlock;
11460 this._rBlock = lBlock ^ f;
11463 // Undo swap from last round
11464 var t = this._lBlock;
11465 this._lBlock = this._rBlock;
11468 // Final permutation
11469 exchangeLR.call(this,
1,
0x55555555);
11470 exchangeRL.call(this,
8,
0x00ff00ff);
11471 exchangeRL.call(this,
2,
0x33333333);
11472 exchangeLR.call(this,
16,
0x0000ffff);
11473 exchangeLR.call(this,
4,
0x0f0f0f0f);
11476 M[offset] = this._lBlock;
11477 M[offset +
1] = this._rBlock;
11487 // Swap bits across the left and right words
11488 function exchangeLR(offset, mask) {
11489 var t = ((this._lBlock
>>> offset) ^ this._rBlock) & mask;
11491 this._lBlock ^= t << offset;
11494 function exchangeRL(offset, mask) {
11495 var t = ((this._rBlock
>>> offset) ^ this._lBlock) & mask;
11497 this._rBlock ^= t << offset;
11501 * Shortcut functions to the cipher's object interface.
11505 * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
11506 * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);
11508 C.DES = BlockCipher._createHelper(DES);
11511 * Triple-DES block cipher algorithm.
11513 var TripleDES = C_algo.TripleDES = BlockCipher.extend({
11514 _doReset: function () {
11516 var key = this._key;
11517 var keyWords = key.words;
11519 // Create DES instances
11520 this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(
0,
2)));
11521 this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(
2,
4)));
11522 this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(
4,
6)));
11525 encryptBlock: function (M, offset) {
11526 this._des1.encryptBlock(M, offset);
11527 this._des2.decryptBlock(M, offset);
11528 this._des3.encryptBlock(M, offset);
11531 decryptBlock: function (M, offset) {
11532 this._des3.decryptBlock(M, offset);
11533 this._des2.encryptBlock(M, offset);
11534 this._des1.decryptBlock(M, offset);
11545 * Shortcut functions to the cipher's object interface.
11549 * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
11550 * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);
11552 C.TripleDES = BlockCipher._createHelper(TripleDES);
11556 return CryptoJS.TripleDES;
11559 },{"./cipher-core":
30,"./core":
31,"./enc-base64":
32,"./evpkdf":
34,"./md5":
39}],
62:[function(_dereq_,module,exports){
11560 ;(function (root, factory) {
11561 if (typeof exports === "object") {
11563 module.exports = exports = factory(_dereq_("./core"));
11565 else if (typeof define === "function" && define.amd) {
11567 define(["./core"], factory);
11570 // Global (browser)
11571 factory(root.CryptoJS);
11573 }(this, function (CryptoJS) {
11575 (function (undefined) {
11579 var Base = C_lib.Base;
11580 var X32WordArray = C_lib.WordArray;
11585 var C_x64 = C.x64 = {};
11590 var X64Word = C_x64.Word = Base.extend({
11592 * Initializes a newly created
64-bit word.
11594 * @param {number} high The high
32 bits.
11595 * @param {number} low The low
32 bits.
11599 * var x64Word = CryptoJS.x64.Word.create(
0x00010203,
0x04050607);
11601 init: function (high, low) {
11607 * Bitwise NOTs this word.
11609 * @return {X64Word} A new x64-Word object after negating.
11613 * var negated = x64Word.not();
11615 // not: function () {
11616 // var high = ~this.high;
11617 // var low = ~this.low;
11619 // return X64Word.create(high, low);
11623 * Bitwise ANDs this word with the passed word.
11625 * @param {X64Word} word The x64-Word to AND with this word.
11627 * @return {X64Word} A new x64-Word object after ANDing.
11631 * var anded = x64Word.and(anotherX64Word);
11633 // and: function (word) {
11634 // var high = this.high & word.high;
11635 // var low = this.low & word.low;
11637 // return X64Word.create(high, low);
11641 * Bitwise ORs this word with the passed word.
11643 * @param {X64Word} word The x64-Word to OR with this word.
11645 * @return {X64Word} A new x64-Word object after ORing.
11649 * var ored = x64Word.or(anotherX64Word);
11651 // or: function (word) {
11652 // var high = this.high | word.high;
11653 // var low = this.low | word.low;
11655 // return X64Word.create(high, low);
11659 * Bitwise XORs this word with the passed word.
11661 * @param {X64Word} word The x64-Word to XOR with this word.
11663 * @return {X64Word} A new x64-Word object after XORing.
11667 * var xored = x64Word.xor(anotherX64Word);
11669 // xor: function (word) {
11670 // var high = this.high ^ word.high;
11671 // var low = this.low ^ word.low;
11673 // return X64Word.create(high, low);
11677 * Shifts this word n bits to the left.
11679 * @param {number} n The number of bits to shift.
11681 * @return {X64Word} A new x64-Word object after shifting.
11685 * var shifted = x64Word.shiftL(
25);
11687 // shiftL: function (n) {
11689 // var high = (this.high << n) | (this.low
>>> (
32 - n));
11690 // var low = this.low << n;
11692 // var high = this.low << (n -
32);
11696 // return X64Word.create(high, low);
11700 * Shifts this word n bits to the right.
11702 * @param {number} n The number of bits to shift.
11704 * @return {X64Word} A new x64-Word object after shifting.
11708 * var shifted = x64Word.shiftR(
7);
11710 // shiftR: function (n) {
11712 // var low = (this.low
>>> n) | (this.high << (
32 - n));
11713 // var high = this.high
>>> n;
11715 // var low = this.high
>>> (n -
32);
11719 // return X64Word.create(high, low);
11723 * Rotates this word n bits to the left.
11725 * @param {number} n The number of bits to rotate.
11727 * @return {X64Word} A new x64-Word object after rotating.
11731 * var rotated = x64Word.rotL(
25);
11733 // rotL: function (n) {
11734 // return this.shiftL(n).or(this.shiftR(
64 - n));
11738 * Rotates this word n bits to the right.
11740 * @param {number} n The number of bits to rotate.
11742 * @return {X64Word} A new x64-Word object after rotating.
11746 * var rotated = x64Word.rotR(
7);
11748 // rotR: function (n) {
11749 // return this.shiftR(n).or(this.shiftL(
64 - n));
11753 * Adds this word with the passed word.
11755 * @param {X64Word} word The x64-Word to add with this word.
11757 * @return {X64Word} A new x64-Word object after adding.
11761 * var added = x64Word.add(anotherX64Word);
11763 // add: function (word) {
11764 // var low = (this.low + word.low) |
0;
11765 // var carry = (low
>>> 0) < (this.low
>>> 0) ?
1 :
0;
11766 // var high = (this.high + word.high + carry) |
0;
11768 // return X64Word.create(high, low);
11773 * An array of
64-bit words.
11775 * @property {Array} words The array of CryptoJS.x64.Word objects.
11776 * @property {number} sigBytes The number of significant bytes in this word array.
11778 var X64WordArray = C_x64.WordArray = Base.extend({
11780 * Initializes a newly created word array.
11782 * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
11783 * @param {number} sigBytes (Optional) The number of significant bytes in the words.
11787 * var wordArray = CryptoJS.x64.WordArray.create();
11789 * var wordArray = CryptoJS.x64.WordArray.create([
11790 * CryptoJS.x64.Word.create(
0x00010203,
0x04050607),
11791 * CryptoJS.x64.Word.create(
0x18191a1b,
0x1c1d1e1f)
11794 * var wordArray = CryptoJS.x64.WordArray.create([
11795 * CryptoJS.x64.Word.create(
0x00010203,
0x04050607),
11796 * CryptoJS.x64.Word.create(
0x18191a1b,
0x1c1d1e1f)
11799 init: function (words, sigBytes) {
11800 words = this.words = words || [];
11802 if (sigBytes != undefined) {
11803 this.sigBytes = sigBytes;
11805 this.sigBytes = words.length *
8;
11810 * Converts this
64-bit word array to a
32-bit word array.
11812 * @return {CryptoJS.lib.WordArray} This word array's data as a
32-bit word array.
11816 * var x32WordArray = x64WordArray.toX32();
11818 toX32: function () {
11820 var x64Words = this.words;
11821 var x64WordsLength = x64Words.length;
11825 for (var i =
0; i < x64WordsLength; i++) {
11826 var x64Word = x64Words[i];
11827 x32Words.push(x64Word.high);
11828 x32Words.push(x64Word.low);
11831 return X32WordArray.create(x32Words, this.sigBytes);
11835 * Creates a copy of this word array.
11837 * @return {X64WordArray} The clone.
11841 * var clone = x64WordArray.clone();
11843 clone: function () {
11844 var clone = Base.clone.call(this);
11846 // Clone
"words" array
11847 var words = clone.words = this.words.slice(
0);
11849 // Clone each X64Word object
11850 var wordsLength = words.length;
11851 for (var i =
0; i < wordsLength; i++) {
11852 words[i] = words[i].clone();
11864 },{
"./core":
31}],
63:[function(_dereq_,module,exports){
11865 var assert = _dereq_('assert')
11866 var BigInteger = _dereq_('bigi')
11868 var Point = _dereq_('./point')
11870 function Curve(p, a, b, Gx, Gy, n, h) {
11874 this.G = Point.fromAffine(this, Gx, Gy)
11878 this.infinity = new Point(this, null, null, BigInteger.ZERO)
11881 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
11884 Curve.prototype.pointFromX = function(isOdd, x) {
11885 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
11886 var beta = alpha.modPow(this.pOverFour, this.p)
11889 if (beta.isEven() ^ !isOdd) {
11890 y = this.p.subtract(y) // -y % p
11893 return Point.fromAffine(this, x, y)
11896 Curve.prototype.isInfinity = function(Q) {
11897 if (Q === this.infinity) return true
11899 return Q.z.signum() ===
0 && Q.y.signum() !==
0
11902 Curve.prototype.isOnCurve = function(Q) {
11903 if (this.isInfinity(Q)) return true
11911 // Check that xQ and yQ are integers in the interval [
0, p -
1]
11912 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
11913 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
11915 // and check that y^
2 = x^
3 + ax + b (mod p)
11916 var lhs = y.square().mod(p)
11917 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
11918 return lhs.equals(rhs)
11922 * Validate an elliptic curve point.
11924 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
11926 Curve.prototype.validate = function(Q) {
11928 assert(!this.isInfinity(Q), 'Point is at infinity')
11929 assert(this.isOnCurve(Q), 'Point is not on the curve')
11931 // Check nQ = O (where Q is a scalar multiple of G)
11932 var nQ = Q.multiply(this.n)
11933 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
11938 module.exports = Curve
11940 },{"./point":
67,"assert":
4,"bigi":
3}],
64:[function(_dereq_,module,exports){
11943 "p": "fffffffdffffffffffffffffffffffff",
11944 "a": "fffffffdfffffffffffffffffffffffc",
11945 "b": "e87579c11079f43dd824993c2cee5ed3",
11946 "n": "fffffffe0000000075a30d1b9038a115",
11948 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
11949 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
11952 "p": "fffffffffffffffffffffffffffffffeffffac73",
11955 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
11957 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
11958 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
11961 "p": "ffffffffffffffffffffffffffffffff7fffffff",
11962 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
11963 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
11964 "n": "
0100000000000000000001f4c8f927aed3ca752257",
11966 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
11967 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
11970 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
11973 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
11975 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
11976 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
11979 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
11980 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
11981 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
11982 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
11984 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
11985 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
11988 "p": "ffffffffffffffffffffffffffffffff000000000000000000000001",
11989 "a": "fffffffffffffffffffffffffffffffefffffffffffffffffffffffe",
11990 "b": "b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4",
11991 "n": "ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d",
11993 "Gx": "b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21",
11994 "Gy": "bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34"
11997 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
12000 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
12002 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
12003 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
12006 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
12007 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
12008 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
12009 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
12011 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
12012 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
12016 },{}],
65:[function(_dereq_,module,exports){
12017 var Point = _dereq_('./point')
12018 var Curve = _dereq_('./curve')
12020 var getCurveByName = _dereq_('./names')
12025 getCurveByName: getCurveByName
12028 },{"./curve":
63,"./names":
66,"./point":
67}],
66:[function(_dereq_,module,exports){
12029 var BigInteger = _dereq_('bigi')
12031 var curves = _dereq_('./curves')
12032 var Curve = _dereq_('./curve')
12034 function getCurveByName(name) {
12035 var curve = curves[name]
12036 if (!curve) return null
12038 var p = new BigInteger(curve.p,
16)
12039 var a = new BigInteger(curve.a,
16)
12040 var b = new BigInteger(curve.b,
16)
12041 var n = new BigInteger(curve.n,
16)
12042 var h = new BigInteger(curve.h,
16)
12043 var Gx = new BigInteger(curve.Gx,
16)
12044 var Gy = new BigInteger(curve.Gy,
16)
12046 return new Curve(p, a, b, Gx, Gy, n, h)
12049 module.exports = getCurveByName
12051 },{"./curve":
63,"./curves":
64,"bigi":
3}],
67:[function(_dereq_,module,exports){
12052 (function (Buffer){
12053 var assert = _dereq_('assert')
12054 var BigInteger = _dereq_('bigi')
12056 var THREE = BigInteger.valueOf(
3)
12058 function Point(curve, x, y, z) {
12059 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
12067 this.compressed = true
12070 Object.defineProperty(Point.prototype, 'zInv', {
12072 if (this._zInv === null) {
12073 this._zInv = this.z.modInverse(this.curve.p)
12080 Object.defineProperty(Point.prototype, 'affineX', {
12082 return this.x.multiply(this.zInv).mod(this.curve.p)
12086 Object.defineProperty(Point.prototype, 'affineY', {
12088 return this.y.multiply(this.zInv).mod(this.curve.p)
12092 Point.fromAffine = function(curve, x, y) {
12093 return new Point(curve, x, y, BigInteger.ONE)
12096 Point.prototype.equals = function(other) {
12097 if (other === this) return true
12098 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
12099 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
12101 // u = Y2 * Z1 - Y1 * Z2
12102 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
12104 if (u.signum() !==
0) return false
12106 // v = X2 * Z1 - X1 * Z2
12107 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
12109 return v.signum() ===
0
12112 Point.prototype.negate = function() {
12113 var y = this.curve.p.subtract(this.y)
12115 return new Point(this.curve, this.x, y, this.z)
12118 Point.prototype.add = function(b) {
12119 if (this.curve.isInfinity(this)) return b
12120 if (this.curve.isInfinity(b)) return this
12127 // u = Y2 * Z1 - Y1 * Z2
12128 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
12129 // v = X2 * Z1 - X1 * Z2
12130 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
12132 if (v.signum() ===
0) {
12133 if (u.signum() ===
0) {
12134 return this.twice() // this == b, so double
12137 return this.curve.infinity // this = -b, so infinity
12140 var v2 = v.square()
12141 var v3 = v2.multiply(v)
12142 var x1v2 = x1.multiply(v2)
12143 var zu2 = u.square().multiply(this.z)
12145 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
12146 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
12147 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
12148 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)
12149 // z3 = v^
3 * z1 * z2
12150 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
12152 return new Point(this.curve, x3, y3, z3)
12155 Point.prototype.twice = function() {
12156 if (this.curve.isInfinity(this)) return this
12157 if (this.y.signum() ===
0) return this.curve.infinity
12162 var y1z1 = y1.multiply(this.z)
12163 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
12164 var a = this.curve.a
12166 // w =
3 * x1^
2 + a * z1^
2
12167 var w = x1.square().multiply(THREE)
12169 if (a.signum() !==
0) {
12170 w = w.add(this.z.square().multiply(a))
12173 w = w.mod(this.curve.p)
12174 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
12175 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
12176 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
12177 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
12178 // z3 =
8 * (y1 * z1)^
3
12179 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
12181 return new Point(this.curve, x3, y3, z3)
12184 // Simple NAF (Non-Adjacent Form) multiplication algorithm
12185 // TODO: modularize the multiplication algorithm
12186 Point.prototype.multiply = function(k) {
12187 if (this.curve.isInfinity(this)) return this
12188 if (k.signum() ===
0) return this.curve.infinity
12191 var h = e.multiply(THREE)
12193 var neg = this.negate()
12196 for (var i = h.bitLength() -
2; i
> 0; --i) {
12199 var hBit = h.testBit(i)
12200 var eBit = e.testBit(i)
12202 if (hBit != eBit) {
12203 R = R.add(hBit ? this : neg)
12210 // Compute this*j + x*k (simultaneous multiplication)
12211 Point.prototype.multiplyTwo = function(j, x, k) {
12214 if (j.bitLength()
> k.bitLength())
12215 i = j.bitLength() -
1
12217 i = k.bitLength() -
1
12219 var R = this.curve.infinity
12220 var both = this.add(x)
12225 var jBit = j.testBit(i)
12226 var kBit = k.testBit(i)
12247 Point.prototype.getEncoded = function(compressed) {
12248 if (compressed == undefined) compressed = this.compressed
12249 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
12251 var x = this.affineX
12252 var y = this.affineY
12256 // Determine size of q in bytes
12257 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
12261 buffer = new Buffer(
1 + byteLength)
12262 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
12266 buffer = new Buffer(
1 + byteLength + byteLength)
12267 buffer.writeUInt8(
0x04,
0)
12269 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
12272 x.toBuffer(byteLength).copy(buffer,
1)
12277 Point.decodeFrom = function(curve, buffer) {
12278 var type = buffer.readUInt8(
0)
12279 var compressed = (type !==
4)
12281 var x = BigInteger.fromBuffer(buffer.slice(
1,
33))
12282 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
12286 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
12287 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
12289 var isOdd = (type ===
0x03)
12290 Q = curve.pointFromX(isOdd, x)
12293 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
12295 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
12296 Q = Point.fromAffine(curve, x, y)
12299 Q.compressed = compressed
12303 Point.prototype.toString = function () {
12304 if (this.curve.isInfinity(this)) return '(INFINITY)'
12306 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
12309 module.exports = Point
12311 }).call(this,_dereq_("buffer").Buffer)
12312 },{"assert":
4,"bigi":
3,"buffer":
8}],
68:[function(_dereq_,module,exports){
12313 (function (process,Buffer){
12314 // Closure compiler error - result of 'not' operator not being used
12315 //!function(globals){
12316 (function(globals){
12320 if (typeof define !== 'undefined' && define.amd) { //require.js / AMD
12321 define([], function() {
12322 return secureRandom
12324 } else if (typeof module !== 'undefined' && module.exports) { //CommonJS
12325 module.exports = secureRandom
12326 } else { //script / browser
12327 globals.secureRandom = secureRandom
12331 //options.type is the only valid option
12332 function secureRandom(count, options) {
12333 options = options || {type: 'Array'}
12334 //we check for process.pid to prevent browserify from tricking us
12335 if (typeof process != 'undefined' && typeof process.pid == 'number') {
12336 return nodeRandom(count, options)
12338 var crypto = window.crypto || window.msCrypto
12339 if (!crypto) throw new Error("Your browser does not support window.crypto.")
12340 return browserRandom(count, options)
12344 function nodeRandom(count, options) {
12345 var crypto = _dereq_('crypto')
12346 var buf = crypto.randomBytes(count)
12348 switch (options.type) {
12350 return [].slice.call(buf)
12354 var arr = new Uint8Array(count)
12355 for (var i =
0; i < count; ++i) { arr[i] = buf.readUInt8(i) }
12358 throw new Error(options.type + " is unsupported.")
12362 function browserRandom(count, options) {
12363 var nativeArr = new Uint8Array(count)
12364 var crypto = window.crypto || window.msCrypto
12365 crypto.getRandomValues(nativeArr)
12367 switch (options.type) {
12369 return [].slice.call(nativeArr)
12371 try { var b = new Buffer(
1) } catch(e) { throw new Error('Buffer not supported in this environment. Use Node.js or Browserify for browser support.')}
12372 return new Buffer(nativeArr)
12376 throw new Error(options.type + " is unsupported.")
12380 secureRandom.randomArray = function(byteCount) {
12381 return secureRandom(byteCount, {type: 'Array'})
12384 secureRandom.randomUint8Array = function(byteCount) {
12385 return secureRandom(byteCount, {type: 'Uint8Array'})
12388 secureRandom.randomBuffer = function(byteCount) {
12389 return secureRandom(byteCount, {type: 'Buffer'})
12395 }).call(this,_dereq_("FWaASH"),_dereq_("buffer").Buffer)
12396 },{"FWaASH":
12,"buffer":
8,"crypto":
7}],
69:[function(_dereq_,module,exports){
12397 (function (Buffer){
12398 var assert = _dereq_('assert')
12399 var base58check = _dereq_('./base58check')
12400 var networks = _dereq_('./networks')
12401 var scripts = _dereq_('./scripts')
12403 function findScriptTypeByVersion(version) {
12404 for (var networkName in networks) {
12405 var network = networks[networkName]
12407 if (version === network.pubKeyHash) return 'pubkeyhash'
12408 if (version === network.scriptHash) return 'scripthash'
12412 function Address(hash, version) {
12413 assert(Buffer.isBuffer(hash), 'Expected Buffer, got ' + hash)
12414 assert.strictEqual(hash.length,
20, 'Invalid hash length')
12415 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
12418 this.version = version
12421 // Import functions
12422 Address.fromBase58Check = function(string) {
12423 var payload = base58check.decode(string)
12424 var version = payload.readUInt8(
0)
12425 var hash = payload.slice(
1)
12427 return new Address(hash, version)
12430 Address.fromOutputScript = function(script, network) {
12431 network = network || networks.bitcoin
12433 var type = scripts.classifyOutput(script)
12435 if (type === 'pubkeyhash') return new Address(script.chunks[
2], network.pubKeyHash)
12436 if (type === 'scripthash') return new Address(script.chunks[
1], network.scriptHash)
12438 assert(false, type + ' has no matching Address')
12441 // Export functions
12442 Address.prototype.toBase58Check = function () {
12443 var payload = new Buffer(
21)
12444 payload.writeUInt8(this.version,
0)
12445 this.hash.copy(payload,
1)
12447 return base58check.encode(payload)
12450 Address.prototype.toOutputScript = function() {
12451 var scriptType = findScriptTypeByVersion(this.version)
12453 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
12454 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
12456 assert(false, this.toString() + ' has no matching Script')
12459 Address.prototype.toString = Address.prototype.toBase58Check
12461 module.exports = Address
12463 }).call(this,_dereq_("buffer").Buffer)
12464 },{"./base58check":
70,"./networks":
81,"./scripts":
84,"assert":
4,"buffer":
8}],
70:[function(_dereq_,module,exports){
12465 (function (Buffer){
12466 // https://en.bitcoin.it/wiki/Base58Check_encoding
12467 var assert = _dereq_('assert')
12468 var base58 = _dereq_('bs58')
12469 var crypto = _dereq_('./crypto')
12471 // Encode a buffer as a base58-check-encoded string
12472 function encode(payload) {
12473 var checksum = crypto.hash256(payload).slice(
0,
4)
12475 return base58.encode(Buffer.concat([
12481 // Decode a base58-check-encoded string to a buffer
12482 function decode(string) {
12483 var buffer = base58.decode(string)
12485 var payload = buffer.slice(
0, -
4)
12486 var checksum = buffer.slice(-
4)
12487 var newChecksum = crypto.hash256(payload).slice(
0,
4)
12489 assert.deepEqual(newChecksum, checksum, 'Invalid checksum')
12499 }).call(this,_dereq_("buffer").Buffer)
12500 },{"./crypto":
73,"assert":
4,"bs58":
15,"buffer":
8}],
71:[function(_dereq_,module,exports){
12501 var assert = _dereq_('assert')
12502 var opcodes = _dereq_('./opcodes')
12504 // https://github.com/feross/buffer/blob/master/index.js#L1127
12505 function verifuint(value, max) {
12506 assert(typeof value === 'number', 'cannot write a non-number as a number')
12507 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
12508 assert(value <= max, 'value is larger than maximum value for type')
12509 assert(Math.floor(value) === value, 'value has a fractional component')
12512 function pushDataSize(i) {
12513 return i < opcodes.OP_PUSHDATA1 ?
1
12519 function readPushDataInt(buffer, offset) {
12520 var opcode = buffer.readUInt8(offset)
12524 if (opcode < opcodes.OP_PUSHDATA1) {
12529 } else if (opcode === opcodes.OP_PUSHDATA1) {
12530 number = buffer.readUInt8(offset +
1)
12534 } else if (opcode === opcodes.OP_PUSHDATA2) {
12535 number = buffer.readUInt16LE(offset +
1)
12540 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
12542 number = buffer.readUInt32LE(offset +
1)
12554 function readUInt64LE(buffer, offset) {
12555 var a = buffer.readUInt32LE(offset)
12556 var b = buffer.readUInt32LE(offset +
4)
12559 verifuint(b + a,
0x001fffffffffffff)
12564 function readVarInt(buffer, offset) {
12565 var t = buffer.readUInt8(offset)
12574 } else if (t <
254) {
12575 number = buffer.readUInt16LE(offset +
1)
12579 } else if (t <
255) {
12580 number = buffer.readUInt32LE(offset +
1)
12585 number = readUInt64LE(buffer, offset +
1)
12595 function writePushDataInt(buffer, number, offset) {
12596 var size = pushDataSize(number)
12600 buffer.writeUInt8(number, offset)
12603 } else if (size ===
2) {
12604 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
12605 buffer.writeUInt8(number, offset +
1)
12608 } else if (size ===
3) {
12609 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
12610 buffer.writeUInt16LE(number, offset +
1)
12614 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
12615 buffer.writeUInt32LE(number, offset +
1)
12622 function writeUInt64LE(buffer, value, offset) {
12623 verifuint(value,
0x001fffffffffffff)
12625 buffer.writeInt32LE(value & -
1, offset)
12626 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
12629 function varIntSize(i) {
12632 : i <
0x100000000 ?
5
12636 function writeVarInt(buffer, number, offset) {
12637 var size = varIntSize(number)
12641 buffer.writeUInt8(number, offset)
12644 } else if (size ===
3) {
12645 buffer.writeUInt8(
253, offset)
12646 buffer.writeUInt16LE(number, offset +
1)
12649 } else if (size ===
5) {
12650 buffer.writeUInt8(
254, offset)
12651 buffer.writeUInt32LE(number, offset +
1)
12655 buffer.writeUInt8(
255, offset)
12656 writeUInt64LE(buffer, number, offset +
1)
12663 pushDataSize: pushDataSize,
12664 readPushDataInt: readPushDataInt,
12665 readUInt64LE: readUInt64LE,
12666 readVarInt: readVarInt,
12667 varIntSize: varIntSize,
12668 writePushDataInt: writePushDataInt,
12669 writeUInt64LE: writeUInt64LE,
12670 writeVarInt: writeVarInt
12673 },{"./opcodes":
82,"assert":
4}],
72:[function(_dereq_,module,exports){
12674 (function (Buffer){
12675 var assert = _dereq_('assert')
12676 var Crypto = _dereq_('crypto-js')
12677 var WordArray = Crypto.lib.WordArray
12679 function bufferToWordArray(buffer) {
12680 assert(Buffer.isBuffer(buffer), 'Expected Buffer, got', buffer)
12683 for (var i =
0, b =
0; i < buffer.length; i++, b +=
8) {
12684 words[b
>>> 5] |= buffer[i] << (
24 - b %
32)
12687 return new WordArray.init(words, buffer.length)
12690 function wordArrayToBuffer(wordArray) {
12691 assert(Array.isArray(wordArray.words), 'Expected WordArray, got' + wordArray)
12693 var words = wordArray.words
12694 var buffer = new Buffer(words.length *
4)
12696 words.forEach(function(value, i) {
12697 buffer.writeInt32BE(value & -
1, i *
4)
12704 bufferToWordArray: bufferToWordArray,
12705 wordArrayToBuffer: wordArrayToBuffer
12708 }).call(this,_dereq_(
"buffer").Buffer)
12709 },{
"assert":
4,
"buffer":
8,
"crypto-js":
37}],
73:[function(_dereq_,module,exports){
12710 (function (Buffer){
12711 // Crypto, crypto, where art thou crypto
12712 var assert = _dereq_('assert')
12713 var CryptoJS = _dereq_('crypto-js')
12714 var crypto = _dereq_('crypto')
12715 var convert = _dereq_('./convert')
12717 function hash160(buffer) {
12718 return ripemd160(sha256(buffer))
12721 function hash256(buffer) {
12722 return sha256(sha256(buffer))
12725 function ripemd160(buffer) {
12726 return crypto.createHash('rmd160').update(buffer).digest()
12729 function sha1(buffer) {
12730 return crypto.createHash('sha1').update(buffer).digest()
12733 function sha256(buffer) {
12734 return crypto.createHash('sha256').update(buffer).digest()
12737 // FIXME: Name not consistent with others
12738 function HmacSHA256(buffer, secret) {
12739 return crypto.createHmac('sha256', secret).update(buffer).digest()
12742 function HmacSHA512(data, secret) {
12743 assert(Buffer.isBuffer(data), 'Expected Buffer for data, got ' + data)
12744 assert(Buffer.isBuffer(secret), 'Expected Buffer for secret, got ' + secret)
12746 var dataWords = convert.bufferToWordArray(data)
12747 var secretWords = convert.bufferToWordArray(secret)
12749 var hash = CryptoJS.HmacSHA512(dataWords, secretWords)
12751 return convert.wordArrayToBuffer(hash)
12755 ripemd160: ripemd160,
12760 HmacSHA256: HmacSHA256,
12761 HmacSHA512: HmacSHA512
12764 }).call(this,_dereq_(
"buffer").Buffer)
12765 },{
"./convert":
72,
"assert":
4,
"buffer":
8,
"crypto":
19,
"crypto-js":
37}],
74:[function(_dereq_,module,exports){
12766 (function (Buffer){
12767 var assert = _dereq_('assert')
12768 var crypto = _dereq_('./crypto')
12770 var BigInteger = _dereq_('bigi')
12771 var ECSignature = _dereq_('./ecsignature')
12772 var Point = _dereq_('ecurve').Point
12774 // https://tools.ietf.org/html/rfc6979#section-
3.2
12775 function deterministicGenerateK(curve, hash, d) {
12776 assert(Buffer.isBuffer(hash), 'Hash must be a Buffer, not ' + hash)
12777 assert.equal(hash.length,
32, 'Hash must be
256 bit')
12778 assert(d instanceof BigInteger, 'Private key must be a BigInteger')
12780 var x = d.toBuffer(
32)
12781 var k = new Buffer(
32)
12782 var v = new Buffer(
32)
12791 k = crypto.HmacSHA256(Buffer.concat([v, new Buffer([
0]), x, hash]), k)
12794 v = crypto.HmacSHA256(v, k)
12797 k = crypto.HmacSHA256(Buffer.concat([v, new Buffer([
1]), x, hash]), k)
12800 v = crypto.HmacSHA256(v, k)
12802 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
12804 v = crypto.HmacSHA256(v, k)
12806 var T = BigInteger.fromBuffer(v)
12808 // Step H3, repeat until T is within the interval [
1, n -
1]
12809 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0)) {
12810 k = crypto.HmacSHA256(Buffer.concat([v, new Buffer([
0])]), k)
12811 v = crypto.HmacSHA256(v, k)
12813 T = BigInteger.fromBuffer(v)
12819 function sign(curve, hash, d) {
12820 var k = deterministicGenerateK(curve, hash, d)
12824 var Q = G.multiply(k)
12825 var e = BigInteger.fromBuffer(hash)
12827 var r = Q.affineX.mod(n)
12828 assert.notEqual(r.signum(),
0, 'Invalid R value')
12830 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
12831 assert.notEqual(s.signum(),
0, 'Invalid S value')
12833 var N_OVER_TWO = n.shiftRight(
1)
12835 // enforce low S values, see bip62: 'low s values in signatures'
12836 if (s.compareTo(N_OVER_TWO)
> 0) {
12840 return new ECSignature(r, s)
12843 function verify(curve, hash, signature, Q) {
12844 var e = BigInteger.fromBuffer(hash)
12846 return verifyRaw(curve, e, signature, Q)
12849 function verifyRaw(curve, e, signature, Q) {
12853 var r = signature.r
12854 var s = signature.s
12856 if (r.signum() ===
0 || r.compareTo(n)
>=
0) return false
12857 if (s.signum() ===
0 || s.compareTo(n)
>=
0) return false
12859 var c = s.modInverse(n)
12861 var u1 = e.multiply(c).mod(n)
12862 var u2 = r.multiply(c).mod(n)
12864 var point = G.multiplyTwo(u1, Q, u2)
12865 var v = point.affineX.mod(n)
12871 * Recover a public key from a signature.
12873 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
12874 * Key Recovery Operation".
12876 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
12878 function recoverPubKey(curve, e, signature, i) {
12879 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
12881 var r = signature.r
12882 var s = signature.s
12884 // A set LSB signifies that the y-coordinate is odd
12887 // The more significant bit specifies whether we should use the
12888 // first or second candidate key.
12889 var isSecondKey = i
>> 1
12894 //
1.1 Let x = r + jn
12895 var x = isSecondKey ? r.add(n) : r
12896 var R = curve.pointFromX(isYOdd, x)
12898 //
1.4 Check that nR is at infinity
12899 var nR = R.multiply(n)
12900 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
12902 // Compute -e from e
12903 var eNeg = e.negate().mod(n)
12905 //
1.6.1 Compute Q = r^-
1 (sR - eG)
12906 // Q = r^-
1 (sR + -eG)
12907 var rInv = r.modInverse(n)
12909 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
12916 * Calculate pubkey extraction parameter.
12918 * When extracting a pubkey from a signature, we have to
12919 * distinguish four different cases. Rather than putting this
12920 * burden on the verifier, Bitcoin includes a
2-bit value with the
12923 * This function simply tries all four cases and returns the value
12924 * that resulted in a successful pubkey recovery.
12926 function calcPubKeyRecoveryParam(curve, e, signature, Q) {
12927 for (var i =
0; i <
4; i++) {
12928 var Qprime = recoverPubKey(curve, e, signature, i)
12931 if (Qprime.equals(Q)) {
12936 throw new Error('Unable to find valid recovery factor')
12940 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
12941 deterministicGenerateK: deterministicGenerateK,
12942 recoverPubKey: recoverPubKey,
12945 verifyRaw: verifyRaw
12948 }).call(this,_dereq_(
"buffer").Buffer)
12949 },{
"./crypto":
73,
"./ecsignature":
77,
"assert":
4,
"bigi":
3,
"buffer":
8,
"ecurve":
65}],
75:[function(_dereq_,module,exports){
12950 (function (Buffer){
12951 var assert = _dereq_('assert')
12952 var base58check = _dereq_('./base58check')
12953 var ecdsa = _dereq_('./ecdsa')
12954 var networks = _dereq_('./networks')
12955 var secureRandom = _dereq_('secure-random')
12957 var BigInteger = _dereq_('bigi')
12958 var ECPubKey = _dereq_('./ecpubkey')
12960 var ecurve = _dereq_('ecurve')
12961 var curve = ecurve.getCurveByName('secp256k1')
12963 function ECKey(d, compressed) {
12964 assert(d.signum()
> 0, 'Private key must be greater than
0')
12965 assert(d.compareTo(curve.n) <
0, 'Private key must be less than the curve order')
12967 var Q = curve.G.multiply(d)
12970 this.pub = new ECPubKey(Q, compressed)
12973 // Static constructors
12974 ECKey.fromWIF = function(string) {
12975 var payload = base58check.decode(string)
12976 var compressed = false
12978 // Ignore the version byte
12979 payload = payload.slice(
1)
12981 if (payload.length ===
33) {
12982 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
12984 // Truncate the compression flag
12985 payload = payload.slice(
0, -
1)
12989 assert.equal(payload.length,
32, 'Invalid WIF payload length')
12991 var d = BigInteger.fromBuffer(payload)
12992 return new ECKey(d, compressed)
12995 ECKey.makeRandom = function(compressed, rng) {
12996 rng = rng || secureRandom.randomBuffer
12998 var buffer = rng(
32)
12999 assert(Buffer.isBuffer(buffer), 'Expected Buffer, got ' + buffer)
13001 var d = BigInteger.fromBuffer(buffer)
13004 return new ECKey(d, compressed)
13007 // Export functions
13008 ECKey.prototype.toWIF = function(network) {
13009 network = network || networks.bitcoin
13011 var bufferLen = this.pub.compressed ?
34 :
33
13012 var buffer = new Buffer(bufferLen)
13014 buffer.writeUInt8(network.wif,
0)
13015 this.d.toBuffer(
32).copy(buffer,
1)
13017 if (this.pub.compressed) {
13018 buffer.writeUInt8(
0x01,
33)
13021 return base58check.encode(buffer)
13025 ECKey.prototype.sign = function(hash) {
13026 return ecdsa.sign(curve, hash, this.d)
13029 module.exports = ECKey
13031 }).call(this,_dereq_(
"buffer").Buffer)
13032 },{
"./base58check":
70,
"./ecdsa":
74,
"./ecpubkey":
76,
"./networks":
81,
"assert":
4,
"bigi":
3,
"buffer":
8,
"ecurve":
65,
"secure-random":
68}],
76:[function(_dereq_,module,exports){
13033 (function (Buffer){
13034 var assert = _dereq_('assert')
13035 var crypto = _dereq_('./crypto')
13036 var ecdsa = _dereq_('./ecdsa')
13037 var networks = _dereq_('./networks')
13039 var Address = _dereq_('./address')
13041 var ecurve = _dereq_('ecurve')
13042 var curve = ecurve.getCurveByName('secp256k1')
13044 function ECPubKey(Q, compressed) {
13045 assert(Q instanceof ecurve.Point, 'Expected Point, got ' + Q)
13047 if (compressed == undefined) compressed = true
13048 assert.strictEqual(typeof compressed, 'boolean', 'Expected boolean, got ' + compressed)
13050 this.compressed = compressed
13054 // Static constructors
13055 ECPubKey.fromBuffer = function(buffer) {
13056 var Q = ecurve.Point.decodeFrom(curve, buffer)
13057 return new ECPubKey(Q, Q.compressed)
13060 ECPubKey.fromHex = function(hex) {
13061 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
13065 ECPubKey.prototype.getAddress = function(network) {
13066 network = network || networks.bitcoin
13068 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
13071 ECPubKey.prototype.verify = function(hash, signature) {
13072 return ecdsa.verify(curve, hash, signature, this.Q)
13075 // Export functions
13076 ECPubKey.prototype.toBuffer = function() {
13077 return this.Q.getEncoded(this.compressed)
13080 ECPubKey.prototype.toHex = function() {
13081 return this.toBuffer().toString('hex')
13084 module.exports = ECPubKey
13086 }).call(this,_dereq_(
"buffer").Buffer)
13087 },{
"./address":
69,
"./crypto":
73,
"./ecdsa":
74,
"./networks":
81,
"assert":
4,
"buffer":
8,
"ecurve":
65}],
77:[function(_dereq_,module,exports){
13088 (function (Buffer){
13089 var assert = _dereq_('assert')
13090 var BigInteger = _dereq_('bigi')
13092 function ECSignature(r, s) {
13093 assert(r instanceof BigInteger, 'Expected BigInteger, got ' + r)
13094 assert(s instanceof BigInteger, 'Expected BigInteger, got ' + s)
13099 // Import operations
13100 ECSignature.parseCompact = function(buffer) {
13101 assert.equal(buffer.length,
65, 'Invalid signature length')
13102 var i = buffer.readUInt8(
0) -
27
13105 assert.equal(i, i &
7, 'Invalid signature parameter')
13106 var compressed = !!(i &
4)
13108 // Recovery param only
13111 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
13112 var s = BigInteger.fromBuffer(buffer.slice(
33))
13115 compressed: compressed,
13117 signature: new ECSignature(r, s)
13121 ECSignature.fromDER = function(buffer) {
13122 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
13123 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
13124 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
13126 var rLen = buffer.readUInt8(
3)
13127 assert(rLen
> 0, 'R length is zero')
13129 var offset =
4 + rLen
13130 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
13132 var sLen = buffer.readUInt8(offset +
1)
13133 assert(sLen
> 0, 'S length is zero')
13135 var rB = buffer.slice(
4, offset)
13136 var sB = buffer.slice(offset +
2)
13139 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
13140 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
13143 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
13144 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
13147 assert.equal(offset, buffer.length, 'Invalid DER encoding')
13148 var r = BigInteger.fromDERInteger(rB)
13149 var s = BigInteger.fromDERInteger(sB)
13151 assert(r.signum()
>=
0, 'R value is negative')
13152 assert(s.signum()
>=
0, 'S value is negative')
13154 return new ECSignature(r, s)
13157 // FIXME:
0x00,
0x04,
0x80 are SIGHASH_* boundary constants, importing Transaction causes a circular dependency
13158 ECSignature.parseScriptSignature = function(buffer) {
13159 var hashType = buffer.readUInt8(buffer.length -
1)
13160 var hashTypeMod = hashType & ~
0x80
13162 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType')
13165 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
13170 // Export operations
13171 ECSignature.prototype.toCompact = function(i, compressed) {
13172 if (compressed) i +=
4
13175 var buffer = new Buffer(
65)
13176 buffer.writeUInt8(i,
0)
13178 this.r.toBuffer(
32).copy(buffer,
1)
13179 this.s.toBuffer(
32).copy(buffer,
33)
13184 ECSignature.prototype.toDER = function() {
13185 var rBa = this.r.toDERInteger()
13186 var sBa = this.s.toDERInteger()
13189 sequence.push(
0x02) // INTEGER
13190 sequence.push(rBa.length)
13191 sequence = sequence.concat(rBa)
13193 sequence.push(
0x02) // INTEGER
13194 sequence.push(sBa.length)
13195 sequence = sequence.concat(sBa)
13197 sequence.unshift(sequence.length)
13198 sequence.unshift(
0x30) // SEQUENCE
13200 return new Buffer(sequence)
13203 ECSignature.prototype.toScriptSignature = function(hashType) {
13204 var hashTypeBuffer = new Buffer(
1)
13205 hashTypeBuffer.writeUInt8(hashType,
0)
13207 return Buffer.concat([this.toDER(), hashTypeBuffer])
13210 module.exports = ECSignature
13212 }).call(this,_dereq_(
"buffer").Buffer)
13213 },{
"assert":
4,
"bigi":
3,
"buffer":
8}],
78:[function(_dereq_,module,exports){
13214 (function (Buffer){
13215 var assert = _dereq_('assert')
13216 var base58check = _dereq_('./base58check')
13217 var crypto = _dereq_('./crypto')
13218 var networks = _dereq_('./networks')
13220 var BigInteger = _dereq_('bigi')
13221 var ECKey = _dereq_('./eckey')
13222 var ECPubKey = _dereq_('./ecpubkey')
13224 var ecurve = _dereq_('ecurve')
13225 var curve = ecurve.getCurveByName('secp256k1')
13227 function findBIP32ParamsByVersion(version) {
13228 for (var name in networks) {
13229 var network = networks[name]
13231 for (var type in network.bip32) {
13232 if (version != network.bip32[type]) continue
13235 isPrivate: (type === 'private'),
13241 assert(false, 'Could not find version ' + version.toString(
16))
13244 function HDNode(K, chainCode, network) {
13245 network = network || networks.bitcoin
13247 assert(Buffer.isBuffer(chainCode), 'Expected Buffer, got ' + chainCode)
13248 assert(network.bip32, 'Unknown BIP32 constants for network')
13250 this.chainCode = chainCode
13253 this.network = network
13255 if (K instanceof BigInteger) {
13256 this.privKey = new ECKey(K, true)
13257 this.pubKey = this.privKey.pub
13259 this.pubKey = new ECPubKey(K, true)
13263 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
13264 HDNode.HIGHEST_BIT =
0x80000000
13267 HDNode.fromSeedBuffer = function(seed, network) {
13268 var I = crypto.HmacSHA512(seed, HDNode.MASTER_SECRET)
13269 var IL = I.slice(
0,
32)
13270 var IR = I.slice(
32)
13272 // In case IL is
0 or
>= n, the master key is invalid
13273 // This is handled by `new ECKey` in the HDNode constructor
13274 var pIL = BigInteger.fromBuffer(IL)
13276 return new HDNode(pIL, IR, network)
13279 HDNode.fromSeedHex = function(hex, network) {
13280 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
13283 HDNode.fromBase58 = function(string) {
13284 return HDNode.fromBuffer(base58check.decode(string))
13287 HDNode.fromBuffer = function(buffer) {
13288 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
13290 //
4 byte: version bytes
13291 var version = buffer.readUInt32BE(
0)
13292 var params = findBIP32ParamsByVersion(version)
13294 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
13295 var depth = buffer.readUInt8(
4)
13297 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
13298 var parentFingerprint = buffer.readUInt32BE(
5)
13300 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
13303 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
13304 // This is encoded in MSB order. (
0x00000000 if master key)
13305 var index = buffer.readUInt32BE(
9)
13306 assert(depth
> 0 || index ===
0, 'Invalid index')
13308 //
32 bytes: the chain code
13309 var chainCode = buffer.slice(
13,
45)
13312 //
33 bytes: private key data (
0x00 + k)
13313 if (params.isPrivate) {
13314 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
13315 var data = buffer.slice(
46,
78)
13316 var d = BigInteger.fromBuffer(data)
13317 hd = new HDNode(d, chainCode, params.network)
13319 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
13321 var data = buffer.slice(
45,
78)
13322 var Q = ecurve.Point.decodeFrom(curve, data)
13323 assert.equal(Q.compressed, true, 'Invalid public key')
13325 // Verify that the X coordinate in the public point corresponds to a point on the curve.
13326 // If not, the extended public key is invalid.
13329 hd = new HDNode(Q, chainCode, params.network)
13334 hd.parentFingerprint = parentFingerprint
13339 HDNode.fromHex = function(hex) {
13340 return HDNode.fromBuffer(new Buffer(hex, 'hex'))
13343 HDNode.prototype.getIdentifier = function() {
13344 return crypto.hash160(this.pubKey.toBuffer())
13347 HDNode.prototype.getFingerprint = function() {
13348 return this.getIdentifier().slice(
0,
4)
13351 HDNode.prototype.getAddress = function() {
13352 return this.pubKey.getAddress(this.network)
13355 HDNode.prototype.toBase58 = function(isPrivate) {
13356 return base58check.encode(this.toBuffer(isPrivate))
13359 HDNode.prototype.toBuffer = function(isPrivate) {
13360 if (isPrivate == undefined) isPrivate = !!this.privKey
13363 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
13364 var buffer = new Buffer(HDNode.LENGTH)
13366 //
4 bytes: version bytes
13367 buffer.writeUInt32BE(version,
0)
13370 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
13371 buffer.writeUInt8(this.depth,
4)
13373 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
13374 var fingerprint = (this.depth ===
0) ?
0x00000000 : this.parentFingerprint
13375 buffer.writeUInt32BE(fingerprint,
5)
13377 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
13378 // This is encoded in Big endian. (
0x00000000 if master key)
13379 buffer.writeUInt32BE(this.index,
9)
13381 //
32 bytes: the chain code
13382 this.chainCode.copy(buffer,
13)
13384 //
33 bytes: the public key or private key data
13386 assert(this.privKey, 'Missing private key')
13388 //
0x00 + k for private keys
13389 buffer.writeUInt8(
0,
45)
13390 this.privKey.d.toBuffer(
32).copy(buffer,
46)
13393 // X9.62 encoding for public keys
13394 this.pubKey.toBuffer().copy(buffer,
45)
13400 HDNode.prototype.toHex = function(isPrivate) {
13401 return this.toBuffer(isPrivate).toString('hex')
13404 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
13405 HDNode.prototype.derive = function(index) {
13406 var isHardened = index
>= HDNode.HIGHEST_BIT
13407 var indexBuffer = new Buffer(
4)
13408 indexBuffer.writeUInt32BE(index,
0)
13414 assert(this.privKey, 'Could not derive hardened child key')
13416 // data =
0x00 || ser256(kpar) || ser32(index)
13417 data = Buffer.concat([
13418 this.privKey.d.toBuffer(
33),
13424 // data = serP(point(kpar)) || ser32(index)
13425 // = serP(Kpar) || ser32(index)
13426 data = Buffer.concat([
13427 this.pubKey.toBuffer(),
13432 var I = crypto.HmacSHA512(data, this.chainCode)
13433 var IL = I.slice(
0,
32)
13434 var IR = I.slice(
32)
13436 var pIL = BigInteger.fromBuffer(IL)
13438 // In case parse256(IL)
>= n, proceed with the next value for i
13439 if (pIL.compareTo(curve.n)
>=
0) {
13440 return this.derive(index +
1)
13443 // Private parent key -
> private child key
13445 if (this.privKey) {
13446 // ki = parse256(IL) + kpar (mod n)
13447 var ki = pIL.add(this.privKey.d).mod(curve.n)
13449 // In case ki ==
0, proceed with the next value for i
13450 if (ki.signum() ===
0) {
13451 return this.derive(index +
1)
13454 hd = new HDNode(ki, IR, this.network)
13456 // Public parent key -
> public child key
13458 // Ki = point(parse256(IL)) + Kpar
13460 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
13462 // In case Ki is the point at infinity, proceed with the next value for i
13463 if (curve.isInfinity(Ki)) {
13464 return this.derive(index +
1)
13467 hd = new HDNode(Ki, IR, this.network)
13470 hd.depth = this.depth +
1
13472 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
13477 HDNode.prototype.deriveHardened = function(index) {
13478 // Only derives hardened private keys by default
13479 return this.derive(index + HDNode.HIGHEST_BIT)
13482 HDNode.prototype.toString = HDNode.prototype.toBase58
13484 module.exports = HDNode
13486 }).call(this,_dereq_("buffer").Buffer)
13487 },{"./base58check":
70,"./crypto":
73,"./eckey":
75,"./ecpubkey":
76,"./networks":
81,"assert":
4,"bigi":
3,"buffer":
8,"ecurve":
65}],
79:[function(_dereq_,module,exports){
13489 Address: _dereq_('./address'),
13490 base58check: _dereq_('./base58check'),
13491 bufferutils: _dereq_('./bufferutils'),
13492 convert: _dereq_('./convert'),
13493 crypto: _dereq_('./crypto'),
13494 ecdsa: _dereq_('./ecdsa'),
13495 ECKey: _dereq_('./eckey'),
13496 ECPubKey: _dereq_('./ecpubkey'),
13497 ECSignature: _dereq_('./ecsignature'),
13498 Message: _dereq_('./message'),
13499 opcodes: _dereq_('./opcodes'),
13500 HDNode: _dereq_('./hdnode'),
13501 Script: _dereq_('./script'),
13502 scripts: _dereq_('./scripts'),
13503 Transaction: _dereq_('./transaction'),
13504 networks: _dereq_('./networks'),
13505 Wallet: _dereq_('./wallet')
13508 },{"./address":
69,"./base58check":
70,"./bufferutils":
71,"./convert":
72,"./crypto":
73,"./ecdsa":
74,"./eckey":
75,"./ecpubkey":
76,"./ecsignature":
77,"./hdnode":
78,"./message":
80,"./networks":
81,"./opcodes":
82,"./script":
83,"./scripts":
84,"./transaction":
85,"./wallet":
86}],
80:[function(_dereq_,module,exports){
13509 (function (Buffer){
13510 /// Implements Bitcoin's feature for signing arbitrary messages.
13511 var Address = _dereq_('./address')
13512 var BigInteger = _dereq_('bigi')
13513 var bufferutils = _dereq_('./bufferutils')
13514 var crypto = _dereq_('./crypto')
13515 var ecdsa = _dereq_('./ecdsa')
13516 var networks = _dereq_('./networks')
13518 var Address = _dereq_('./address')
13519 var ECPubKey = _dereq_('./ecpubkey')
13520 var ECSignature = _dereq_('./ecsignature')
13522 var ecurve = _dereq_('ecurve')
13523 var ecparams = ecurve.getCurveByName('secp256k1')
13525 function magicHash(message, network) {
13526 var magicPrefix = new Buffer(network.magicPrefix)
13527 var messageBuffer = new Buffer(message)
13528 var lengthBuffer = new Buffer(bufferutils.varIntSize(messageBuffer.length))
13529 bufferutils.writeVarInt(lengthBuffer, messageBuffer.length,
0)
13531 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
13532 return crypto.hash256(buffer)
13535 function sign(privKey, message, network) {
13536 network = network || networks.bitcoin
13538 var hash = magicHash(message, network)
13539 var signature = privKey.sign(hash)
13540 var e = BigInteger.fromBuffer(hash)
13541 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
13543 return signature.toCompact(i, privKey.pub.compressed)
13546 // TODO: network could be implied from address
13547 function verify(address, signatureBuffer, message, network) {
13548 if (address instanceof Address) {
13549 address = address.toString()
13551 network = network || networks.bitcoin
13553 var hash = magicHash(message, network)
13554 var parsed = ECSignature.parseCompact(signatureBuffer)
13555 var e = BigInteger.fromBuffer(hash)
13556 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
13558 var pubKey = new ECPubKey(Q, parsed.compressed)
13559 return pubKey.getAddress(network).toString() === address
13563 magicHash: magicHash,
13568 }).call(this,_dereq_("buffer").Buffer)
13569 },{"./address":
69,"./bufferutils":
71,"./crypto":
73,"./ecdsa":
74,"./ecpubkey":
76,"./ecsignature":
77,"./networks":
81,"bigi":
3,"buffer":
8,"ecurve":
65}],
81:[function(_dereq_,module,exports){
13570 // https://en.bitcoin.it/wiki/List_of_address_prefixes
13571 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
13575 magicPrefix: '\x18Bitcoin Signed Message:\n',
13577 public:
0x0488b21e,
13578 private:
0x0488ade4
13583 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
13584 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
13585 estimateFee: estimateFee('bitcoin')
13588 magicPrefix: '\x19Dogecoin Signed Message:\n',
13590 public:
0x02facafd,
13591 private:
0x02fac398
13596 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
13597 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
13598 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
13599 estimateFee: estimateFee('dogecoin')
13602 magicPrefix: '\x19Litecoin Signed Message:\n',
13604 public:
0x019da462,
13605 private:
0x019d9cfe
13610 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
13611 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
13612 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
13613 estimateFee: estimateFee('litecoin')
13616 magicPrefix: '\x18Bitcoin Signed Message:\n',
13618 public:
0x043587cf,
13619 private:
0x04358394
13624 dustThreshold:
546,
13626 estimateFee: estimateFee('testnet')
13630 function estimateFee(type) {
13631 return function(tx) {
13632 var network = networks[type]
13633 var baseFee = network.feePerKb
13634 var byteSize = tx.toBuffer().length
13636 var fee = baseFee * Math.ceil(byteSize /
1000)
13637 if (network.dustSoftThreshold == undefined) return fee
13639 tx.outs.forEach(function(e){
13640 if (e.value < network.dustSoftThreshold) {
13649 module.exports = networks
13651 },{}],
82:[function(_dereq_,module,exports){
13692 OP_TOALTSTACK :
107,
13693 OP_FROMALTSTACK :
108,
13725 OP_EQUALVERIFY :
136,
13726 OP_RESERVED1 :
137,
13727 OP_RESERVED2 :
138,
13737 OP_0NOTEQUAL :
146,
13750 OP_NUMEQUALVERIFY :
157,
13751 OP_NUMNOTEQUAL :
158,
13753 OP_GREATERTHAN :
160,
13754 OP_LESSTHANOREQUAL :
161,
13755 OP_GREATERTHANOREQUAL :
162,
13762 OP_RIPEMD160 :
166,
13767 OP_CODESEPARATOR :
171,
13769 OP_CHECKSIGVERIFY :
173,
13770 OP_CHECKMULTISIG :
174,
13771 OP_CHECKMULTISIGVERIFY :
175,
13785 // template matching params
13786 OP_PUBKEYHASH :
253,
13788 OP_INVALIDOPCODE :
255
13791 },{}],
83:[function(_dereq_,module,exports){
13792 (function (Buffer){
13793 var assert = _dereq_('assert')
13794 var bufferutils = _dereq_('./bufferutils')
13795 var crypto = _dereq_('./crypto')
13796 var opcodes = _dereq_('./opcodes')
13798 function Script(buffer, chunks) {
13799 assert(Buffer.isBuffer(buffer), 'Expected Buffer, got ' + buffer)
13800 assert(Array.isArray(chunks), 'Expected Array, got ' + chunks)
13802 this.buffer = buffer
13803 this.chunks = chunks
13806 // Import operations
13807 Script.fromASM = function(asm) {
13808 var strChunks = asm.split(' ')
13810 var chunks = strChunks.map(function(strChunk) {
13811 if (strChunk in opcodes) {
13812 return opcodes[strChunk]
13815 return new Buffer(strChunk, 'hex')
13819 return Script.fromChunks(chunks)
13822 Script.fromBuffer = function(buffer) {
13827 while (i < buffer.length) {
13828 var opcode = buffer.readUInt8(i)
13830 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
13831 var d = bufferutils.readPushDataInt(buffer, i)
13834 var data = buffer.slice(i, i + d.number)
13840 chunks.push(opcode)
13846 return new Script(buffer, chunks)
13849 Script.fromChunks = function(chunks) {
13850 assert(Array.isArray(chunks), 'Expected Array, got ' + chunks)
13852 var bufferSize = chunks.reduce(function(accum, chunk) {
13853 if (Buffer.isBuffer(chunk)) {
13854 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
13860 var buffer = new Buffer(bufferSize)
13863 chunks.forEach(function(chunk) {
13864 if (Buffer.isBuffer(chunk)) {
13865 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
13867 chunk.copy(buffer, offset)
13868 offset += chunk.length
13871 buffer.writeUInt8(chunk, offset)
13876 assert.equal(offset, buffer.length, 'Could not decode chunks')
13877 return new Script(buffer, chunks)
13880 Script.fromHex = function(hex) {
13881 return Script.fromBuffer(new Buffer(hex, 'hex'))
13885 Script.EMPTY = Script.fromChunks([])
13888 Script.prototype.getHash = function() {
13889 return crypto.hash160(this.buffer)
13892 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
13893 Script.prototype.without = function(needle) {
13894 return Script.fromChunks(this.chunks.filter(function(op) {
13895 return op !== needle
13899 // Export operations
13900 var reverseOps = []
13901 for (var op in opcodes) {
13902 var code = opcodes[op]
13903 reverseOps[code] = op
13906 Script.prototype.toASM = function() {
13907 return this.chunks.map(function(chunk) {
13908 if (Buffer.isBuffer(chunk)) {
13909 return chunk.toString('hex')
13912 return reverseOps[chunk]
13917 Script.prototype.toBuffer = function() {
13921 Script.prototype.toHex = function() {
13922 return this.toBuffer().toString('hex')
13925 module.exports = Script
13927 }).call(this,_dereq_("buffer").Buffer)
13928 },{"./bufferutils":
71,"./crypto":
73,"./opcodes":
82,"assert":
4,"buffer":
8}],
84:[function(_dereq_,module,exports){
13929 (function (Buffer){
13930 var assert = _dereq_('assert')
13931 var opcodes = _dereq_('./opcodes')
13933 // FIXME: use ECPubKey, currently the circular dependency breaks everything.
13936 // * Remove ECPubKey.getAddress
13937 // - Minimal change, but likely unpopular
13938 // * Move all script related functionality out of Address
13939 // - Means a lot of changes to Transaction/Wallet
13940 // * Ignore it (existing solution)
13941 // * Some form of hackery with commonjs
13943 var ecurve = _dereq_('ecurve')
13944 var curve = ecurve.getCurveByName('secp256k1')
13946 var ECSignature = _dereq_('./ecsignature')
13947 var Script = _dereq_('./script')
13949 function classifyOutput(script) {
13950 assert(script instanceof Script, 'Expected Script, got ', script)
13952 if (isPubKeyHashOutput.call(script)) {
13953 return 'pubkeyhash'
13954 } else if (isScriptHashOutput.call(script)) {
13955 return 'scripthash'
13956 } else if (isMultisigOutput.call(script)) {
13958 } else if (isPubKeyOutput.call(script)) {
13960 } else if (isNulldataOutput.call(script)) {
13963 return 'nonstandard'
13967 function classifyInput(script) {
13968 assert(script instanceof Script, 'Expected Script, got ', script)
13970 if (isPubKeyHashInput.call(script)) {
13971 return 'pubkeyhash'
13972 } else if (isScriptHashInput.call(script)) {
13973 return 'scripthash'
13974 } else if (isMultisigInput.call(script)) {
13976 } else if (isPubKeyInput.call(script)) {
13979 return 'nonstandard'
13983 function isCanonicalPubKey(buffer) {
13984 if (!Buffer.isBuffer(buffer)) return false
13988 ecurve.Point.decodeFrom(curve, buffer)
13990 if (!(e.message.match(/Invalid sequence (length|tag)/))) throw e
13998 function isCanonicalSignature(buffer) {
13999 if (!Buffer.isBuffer(buffer)) return false
14002 ECSignature.parseScriptSignature(buffer)
14004 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/))) throw e
14012 function isPubKeyHashInput() {
14013 return this.chunks.length ===
2 &&
14014 isCanonicalSignature(this.chunks[
0]) &&
14015 isCanonicalPubKey(this.chunks[
1])
14018 function isPubKeyHashOutput() {
14019 return this.chunks.length ===
5 &&
14020 this.chunks[
0] === opcodes.OP_DUP &&
14021 this.chunks[
1] === opcodes.OP_HASH160 &&
14022 Buffer.isBuffer(this.chunks[
2]) &&
14023 this.chunks[
2].length ===
20 &&
14024 this.chunks[
3] === opcodes.OP_EQUALVERIFY &&
14025 this.chunks[
4] === opcodes.OP_CHECKSIG
14028 function isPubKeyInput() {
14029 return this.chunks.length ===
1 &&
14030 isCanonicalSignature(this.chunks[
0])
14033 function isPubKeyOutput() {
14034 return this.chunks.length ===
2 &&
14035 isCanonicalPubKey(this.chunks[
0]) &&
14036 this.chunks[
1] === opcodes.OP_CHECKSIG
14039 function isScriptHashInput() {
14040 if (this.chunks.length <
2) return false
14041 var lastChunk = this.chunks[this.chunks.length -
1]
14043 if (!Buffer.isBuffer(lastChunk)) return false
14045 var scriptSig = Script.fromChunks(this.chunks.slice(
0, -
1))
14046 var scriptPubKey = Script.fromBuffer(lastChunk)
14048 return classifyInput(scriptSig) === classifyOutput(scriptPubKey)
14051 function isScriptHashOutput() {
14052 return this.chunks.length ===
3 &&
14053 this.chunks[
0] === opcodes.OP_HASH160 &&
14054 Buffer.isBuffer(this.chunks[
1]) &&
14055 this.chunks[
1].length ===
20 &&
14056 this.chunks[
2] === opcodes.OP_EQUAL
14059 function isMultisigInput() {
14060 return this.chunks[
0] === opcodes.OP_0 &&
14061 this.chunks.slice(
1).every(isCanonicalSignature)
14064 function isMultisigOutput() {
14065 if (this.chunks <
4) return false
14066 if (this.chunks[this.chunks.length -
1] !== opcodes.OP_CHECKMULTISIG) return false
14068 var mOp = this.chunks[
0]
14069 if (mOp === opcodes.OP_0) return false
14070 if (mOp < opcodes.OP_1) return false
14071 if (mOp
> opcodes.OP_16) return false
14073 var nOp = this.chunks[this.chunks.length -
2]
14074 if (nOp === opcodes.OP_0) return false
14075 if (nOp < opcodes.OP_1) return false
14076 if (nOp
> opcodes.OP_16) return false
14078 var m = mOp - (opcodes.OP_1 -
1)
14079 var n = nOp - (opcodes.OP_1 -
1)
14080 if (n < m) return false
14082 var pubKeys = this.chunks.slice(
1, -
2)
14083 if (n < pubKeys.length) return false
14085 return pubKeys.every(isCanonicalPubKey)
14088 function isNulldataOutput() {
14089 return this.chunks[
0] === opcodes.OP_RETURN
14092 // Standard Script Templates
14093 // {pubKey} OP_CHECKSIG
14094 function pubKeyOutput(pubKey) {
14095 return Script.fromChunks([
14097 opcodes.OP_CHECKSIG
14101 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
14102 function pubKeyHashOutput(hash) {
14103 assert(Buffer.isBuffer(hash), 'Expected Buffer, got ' + hash)
14105 return Script.fromChunks([
14107 opcodes.OP_HASH160,
14109 opcodes.OP_EQUALVERIFY,
14110 opcodes.OP_CHECKSIG
14114 // OP_HASH160 {scriptHash} OP_EQUAL
14115 function scriptHashOutput(hash) {
14116 assert(Buffer.isBuffer(hash), 'Expected Buffer, got ' + hash)
14118 return Script.fromChunks([
14119 opcodes.OP_HASH160,
14125 // m [pubKeys ...] n OP_CHECKMULTISIG
14126 function multisigOutput(m, pubKeys) {
14127 assert(Array.isArray(pubKeys), 'Expected Array, got ' + pubKeys)
14128 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
14130 var pubKeyBuffers = pubKeys.map(function(pubKey) {
14131 return pubKey.toBuffer()
14133 var n = pubKeys.length
14135 return Script.fromChunks([].concat(
14136 (opcodes.OP_1 -
1) + m,
14138 (opcodes.OP_1 -
1) + n,
14139 opcodes.OP_CHECKMULTISIG
14144 function pubKeyInput(signature) {
14145 assert(Buffer.isBuffer(signature), 'Expected Buffer, got ' + signature)
14147 return Script.fromChunks([signature])
14150 // {signature} {pubKey}
14151 function pubKeyHashInput(signature, pubKey) {
14152 assert(Buffer.isBuffer(signature), 'Expected Buffer, got ' + signature)
14154 return Script.fromChunks([signature, pubKey.toBuffer()])
14157 //
<scriptSig> {serialized scriptPubKey script}
14158 function scriptHashInput(scriptSig, scriptPubKey) {
14159 return Script.fromChunks([].concat(
14161 scriptPubKey.toBuffer()
14165 // OP_0 [signatures ...]
14166 function multisigInput(signatures, scriptPubKey) {
14167 if (scriptPubKey) {
14168 assert(isMultisigOutput.call(scriptPubKey))
14170 var m = scriptPubKey.chunks[
0]
14171 var k = m - (opcodes.OP_1 -
1)
14172 assert(k <= signatures.length, 'Not enough signatures provided')
14175 return Script.fromChunks([].concat(opcodes.OP_0, signatures))
14179 classifyInput: classifyInput,
14180 classifyOutput: classifyOutput,
14181 multisigInput: multisigInput,
14182 multisigOutput: multisigOutput,
14183 pubKeyHashInput: pubKeyHashInput,
14184 pubKeyHashOutput: pubKeyHashOutput,
14185 pubKeyInput: pubKeyInput,
14186 pubKeyOutput: pubKeyOutput,
14187 scriptHashInput: scriptHashInput,
14188 scriptHashOutput: scriptHashOutput
14191 }).call(this,_dereq_("buffer").Buffer)
14192 },{"./ecsignature":
77,"./opcodes":
82,"./script":
83,"assert":
4,"buffer":
8,"ecurve":
65}],
85:[function(_dereq_,module,exports){
14193 (function (Buffer){
14194 var assert = _dereq_('assert')
14195 var bufferutils = _dereq_('./bufferutils')
14196 var crypto = _dereq_('./crypto')
14197 var opcodes = _dereq_('./opcodes')
14198 var scripts = _dereq_('./scripts')
14200 var Address = _dereq_('./address')
14201 var ECKey = _dereq_('./eckey')
14202 var ECSignature = _dereq_('./ecsignature')
14203 var Script = _dereq_('./script')
14205 Transaction.DEFAULT_SEQUENCE =
0xffffffff
14206 Transaction.SIGHASH_ALL =
0x01
14207 Transaction.SIGHASH_NONE =
0x02
14208 Transaction.SIGHASH_SINGLE =
0x03
14209 Transaction.SIGHASH_ANYONECANPAY =
0x80
14211 function Transaction() {
14219 * Create a new txin.
14221 * Can be called with any of:
14223 * - A transaction and an index
14224 * - A transaction hash and an index
14226 * Note that this method does not sign the created input.
14228 Transaction.prototype.addInput = function(tx, index, sequence) {
14229 if (sequence == undefined) sequence = Transaction.DEFAULT_SEQUENCE
14233 if (typeof tx === 'string') {
14234 hash = new Buffer(tx, 'hex')
14236 // TxId hex is big-endian, we need little-endian
14237 Array.prototype.reverse.call(hash)
14239 } else if (tx instanceof Transaction) {
14240 hash = tx.getHash()
14246 assert(Buffer.isBuffer(hash), 'Expected Transaction, txId or txHash, got ' + tx)
14247 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
14248 assert.equal(typeof index, 'number', 'Expected number index, got ' + index)
14250 return (this.ins.push({
14253 script: Script.EMPTY,
14259 * Create a new txout.
14261 * Can be called with:
14263 * - A base58 address string and a value
14264 * - An Address object and a value
14265 * - A scriptPubKey Script and a value
14267 Transaction.prototype.addOutput = function(scriptPubKey, value) {
14268 // Attempt to get a valid address if it's a base58 address string
14269 if (typeof scriptPubKey === 'string') {
14270 scriptPubKey = Address.fromBase58Check(scriptPubKey)
14273 // Attempt to get a valid script if it's an Address object
14274 if (scriptPubKey instanceof Address) {
14275 var address = scriptPubKey
14277 scriptPubKey = address.toOutputScript()
14280 return (this.outs.push({
14281 script: scriptPubKey,
14286 Transaction.prototype.toBuffer = function () {
14287 var txInSize = this.ins.reduce(function(a, x) {
14288 return a + (
40 + bufferutils.varIntSize(x.script.buffer.length) + x.script.buffer.length)
14291 var txOutSize = this.outs.reduce(function(a, x) {
14292 return a + (
8 + bufferutils.varIntSize(x.script.buffer.length) + x.script.buffer.length)
14295 var buffer = new Buffer(
14297 bufferutils.varIntSize(this.ins.length) +
14298 bufferutils.varIntSize(this.outs.length) +
14304 function writeSlice(slice) {
14305 slice.copy(buffer, offset)
14306 offset += slice.length
14308 function writeUInt32(i) {
14309 buffer.writeUInt32LE(i, offset)
14312 function writeUInt64(i) {
14313 bufferutils.writeUInt64LE(buffer, i, offset)
14316 function writeVarInt(i) {
14317 var n = bufferutils.writeVarInt(buffer, i, offset)
14321 writeUInt32(this.version)
14322 writeVarInt(this.ins.length)
14324 this.ins.forEach(function(txin) {
14325 writeSlice(txin.hash)
14326 writeUInt32(txin.index)
14327 writeVarInt(txin.script.buffer.length)
14328 writeSlice(txin.script.buffer)
14329 writeUInt32(txin.sequence)
14332 writeVarInt(this.outs.length)
14333 this.outs.forEach(function(txout) {
14334 writeUInt64(txout.value)
14335 writeVarInt(txout.script.buffer.length)
14336 writeSlice(txout.script.buffer)
14339 writeUInt32(this.locktime)
14344 Transaction.prototype.toHex = function() {
14345 return this.toBuffer().toString('hex')
14349 * Hash transaction for signing a specific input.
14351 * Bitcoin uses a different hash for each signed transaction input. This
14352 * method copies the transaction, makes the necessary changes based on the
14353 * hashType, serializes and finally hashes the result. This hash can then be
14354 * used to sign the transaction input in question.
14356 Transaction.prototype.hashForSignature = function(prevOutScript, inIndex, hashType) {
14357 assert(inIndex
>=
0, 'Invalid vin index')
14358 assert(inIndex < this.ins.length, 'Invalid vin index')
14359 assert(prevOutScript instanceof Script, 'Invalid Script object')
14361 var txTmp = this.clone()
14362 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
14364 // Blank out other inputs' signatures
14365 txTmp.ins.forEach(function(txin) {
14366 txin.script = Script.EMPTY
14368 txTmp.ins[inIndex].script = hashScript
14370 var hashTypeModifier = hashType &
0x1f
14371 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
14372 assert(false, 'SIGHASH_NONE not yet supported')
14374 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
14375 assert(false, 'SIGHASH_SINGLE not yet supported')
14379 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
14380 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
14383 var hashTypeBuffer = new Buffer(
4)
14384 hashTypeBuffer.writeInt32LE(hashType,
0)
14386 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
14387 return crypto.hash256(buffer)
14390 Transaction.prototype.getHash = function () {
14391 return crypto.hash256(this.toBuffer())
14394 Transaction.prototype.getId = function () {
14395 var buffer = this.getHash()
14397 // Big-endian is used for TxHash
14398 Array.prototype.reverse.call(buffer)
14400 return buffer.toString('hex')
14403 Transaction.prototype.clone = function () {
14404 var newTx = new Transaction()
14405 newTx.version = this.version
14406 newTx.locktime = this.locktime
14408 newTx.ins = this.ins.map(function(txin) {
14412 script: txin.script,
14413 sequence: txin.sequence
14417 newTx.outs = this.outs.map(function(txout) {
14419 script: txout.script,
14427 Transaction.fromBuffer = function(buffer) {
14429 function readSlice(n) {
14431 return buffer.slice(offset - n, offset)
14433 function readUInt32() {
14434 var i = buffer.readUInt32LE(offset)
14438 function readUInt64() {
14439 var i = bufferutils.readUInt64LE(buffer, offset)
14443 function readVarInt() {
14444 var vi = bufferutils.readVarInt(buffer, offset)
14449 var tx = new Transaction()
14450 tx.version = readUInt32()
14452 var vinLen = readVarInt()
14453 for (var i =
0; i < vinLen; ++i) {
14454 var hash = readSlice(
32)
14455 var vout = readUInt32()
14456 var scriptLen = readVarInt()
14457 var script = readSlice(scriptLen)
14458 var sequence = readUInt32()
14463 script: Script.fromBuffer(script),
14468 var voutLen = readVarInt()
14469 for (i =
0; i < voutLen; ++i) {
14470 var value = readUInt64()
14471 var scriptLen = readVarInt()
14472 var script = readSlice(scriptLen)
14476 script: Script.fromBuffer(script)
14480 tx.locktime = readUInt32()
14481 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
14486 Transaction.fromHex = function(hex) {
14487 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
14491 * Signs a pubKeyHash output at some index with the given key
14493 Transaction.prototype.sign = function(index, privKey, hashType) {
14494 var prevOutScript = privKey.pub.getAddress().toOutputScript()
14495 var signature = this.signInput(index, prevOutScript, privKey, hashType)
14497 // FIXME: Assumed prior TX was pay-to-pubkey-hash
14498 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
14499 this.setInputScript(index, scriptSig)
14502 Transaction.prototype.signInput = function(index, prevOutScript, privKey, hashType) {
14503 hashType = hashType || Transaction.SIGHASH_ALL
14505 var hash = this.hashForSignature(prevOutScript, index, hashType)
14506 var signature = privKey.sign(hash)
14508 return signature.toScriptSignature(hashType)
14511 Transaction.prototype.setInputScript = function(index, script) {
14512 this.ins[index].script = script
14515 // FIXME: could be validateInput(index, prevTxOut, pub)
14516 Transaction.prototype.validateInput = function(index, prevOutScript, pubKey, buffer) {
14517 var parsed = ECSignature.parseScriptSignature(buffer)
14518 var hash = this.hashForSignature(prevOutScript, index, parsed.hashType)
14520 return pubKey.verify(hash, parsed.signature)
14523 module.exports = Transaction
14525 }).call(this,_dereq_("buffer").Buffer)
14526 },{"./address":
69,"./bufferutils":
71,"./crypto":
73,"./eckey":
75,"./ecsignature":
77,"./opcodes":
82,"./script":
83,"./scripts":
84,"assert":
4,"buffer":
8}],
86:[function(_dereq_,module,exports){
14527 (function (Buffer){
14528 var assert = _dereq_('assert')
14529 var networks = _dereq_('./networks')
14530 var rng = _dereq_('secure-random')
14532 var Address = _dereq_('./address')
14533 var HDNode = _dereq_('./hdnode')
14534 var Transaction = _dereq_('./transaction')
14536 function Wallet(seed, network) {
14537 network = network || networks.bitcoin
14539 // Stored in a closure to make accidental serialization less likely
14540 var masterkey = null
14542 var accountZero = null
14543 var internalAccount = null
14544 var externalAccount = null
14547 this.addresses = []
14548 this.changeAddresses = []
14550 // Transaction output data
14553 // Make a new master key
14554 this.newMasterKey = function(seed) {
14555 seed = seed || new Buffer(rng(
32))
14556 masterkey = HDNode.fromSeedBuffer(seed, network)
14558 // HD first-level child derivation method should be hardened
14559 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
14560 accountZero = masterkey.deriveHardened(
0)
14561 externalAccount = accountZero.derive(
0)
14562 internalAccount = accountZero.derive(
1)
14565 me.changeAddresses = []
14570 this.newMasterKey(seed)
14572 this.generateAddress = function() {
14573 var key = externalAccount.derive(this.addresses.length)
14574 this.addresses.push(key.getAddress().toString())
14575 return this.addresses[this.addresses.length -
1]
14578 this.generateChangeAddress = function() {
14579 var key = internalAccount.derive(this.changeAddresses.length)
14580 this.changeAddresses.push(key.getAddress().toString())
14581 return this.changeAddresses[this.changeAddresses.length -
1]
14584 this.getBalance = function() {
14585 return this.getUnspentOutputs().reduce(function(memo, output){
14586 return memo + output.value
14590 this.getUnspentOutputs = function() {
14593 for(var key in this.outputs){
14594 var output = this.outputs[key]
14595 if(!output.to) utxo.push(outputToUnspentOutput(output))
14601 this.setUnspentOutputs = function(utxo) {
14604 utxo.forEach(function(uo){
14605 validateUnspentOutput(uo)
14606 var o = unspentOutputToOutput(uo)
14607 outputs[o.from] = o
14610 this.outputs = outputs
14613 function outputToUnspentOutput(output){
14614 var hashAndIndex = output.from.split(":")
14617 hash: hashAndIndex[
0],
14618 outputIndex: parseInt(hashAndIndex[
1]),
14619 address: output.address,
14620 value: output.value,
14621 pending: output.pending
14625 function unspentOutputToOutput(o) {
14627 var key = hash + ":" + o.outputIndex
14630 address: o.address,
14636 function validateUnspentOutput(uo) {
14639 if (isNullOrUndefined(uo.hash)) {
14640 missingField = "hash"
14643 var requiredKeys = ['outputIndex', 'address', 'value']
14644 requiredKeys.forEach(function (key) {
14645 if (isNullOrUndefined(uo[key])){
14650 if (missingField) {
14652 'Invalid unspent output: key', missingField, 'is missing.',
14653 'A valid unspent output must contain'
14655 message.push(requiredKeys.join(', '))
14656 message.push("and hash")
14657 throw new Error(message.join(' '))
14661 function isNullOrUndefined(value) {
14662 return value == undefined
14665 this.processPendingTx = function(tx){
14666 processTx(tx, true)
14669 this.processConfirmedTx = function(tx){
14670 processTx(tx, false)
14673 function processTx(tx, isPending) {
14674 var txid = tx.getId()
14676 tx.outs.forEach(function(txOut, i) {
14680 address = Address.fromOutputScript(txOut.script, network).toString()
14682 if (!(e.message.match(/has no matching Address/))) throw e
14685 if (isMyAddress(address)) {
14686 var output = txid + ':' + i
14688 me.outputs[output] = {
14690 value: txOut.value,
14697 tx.ins.forEach(function(txIn, i) {
14698 // copy and convert to big-endian hex
14699 var txinId = new Buffer(txIn.hash)
14700 Array.prototype.reverse.call(txinId)
14701 txinId = txinId.toString('hex')
14703 var output = txinId + ':' + txIn.index
14705 if (!(output in me.outputs)) return
14708 me.outputs[output].to = txid + ':' + i
14709 me.outputs[output].pending = true
14711 delete me.outputs[output]
14716 this.createTx = function(to, value, fixedFee, changeAddress) {
14717 assert(value
> network.dustThreshold, value + ' must be above dust threshold (' + network.dustThreshold + ' Satoshis)')
14719 var utxos = getCandidateOutputs(value)
14721 var subTotal = value
14724 var tx = new Transaction()
14725 tx.addOutput(to, value)
14727 for (var i =
0; i < utxos.length; ++i) {
14728 var utxo = utxos[i]
14729 addresses.push(utxo.address)
14731 var outpoint = utxo.from.split(':')
14732 tx.addInput(outpoint[
0], parseInt(outpoint[
1]))
14734 var fee = fixedFee == undefined ? estimateFeePadChangeOutput(tx) : fixedFee
14736 accum += utxo.value
14737 subTotal = value + fee
14738 if (accum
>= subTotal) {
14739 var change = accum - subTotal
14741 if (change
> network.dustThreshold) {
14742 tx.addOutput(changeAddress || getChangeAddress(), change)
14749 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
14751 this.signWith(tx, addresses)
14755 function getCandidateOutputs() {
14758 for (var key in me.outputs) {
14759 var output = me.outputs[key]
14760 if (!output.pending) unspent.push(output)
14763 var sortByValueDesc = unspent.sort(function(o1, o2){
14764 return o2.value - o1.value
14767 return sortByValueDesc
14770 function estimateFeePadChangeOutput(tx) {
14771 var tmpTx = tx.clone()
14772 tmpTx.addOutput(getChangeAddress(), network.dustSoftThreshold ||
0)
14774 return network.estimateFee(tmpTx)
14777 function getChangeAddress() {
14778 if(me.changeAddresses.length ===
0) me.generateChangeAddress();
14779 return me.changeAddresses[me.changeAddresses.length -
1]
14782 this.signWith = function(tx, addresses) {
14783 assert.equal(tx.ins.length, addresses.length, 'Number of addresses must match number of transaction inputs')
14785 addresses.forEach(function(address, i) {
14786 var key = me.getPrivateKeyForAddress(address)
14794 this.getMasterKey = function() { return masterkey }
14795 this.getAccountZero = function() { return accountZero }
14796 this.getInternalAccount = function() { return internalAccount }
14797 this.getExternalAccount = function() { return externalAccount }
14799 this.getPrivateKey = function(index) {
14800 return externalAccount.derive(index).privKey
14803 this.getInternalPrivateKey = function(index) {
14804 return internalAccount.derive(index).privKey
14807 this.getPrivateKeyForAddress = function(address) {
14809 if((index = this.addresses.indexOf(address))
> -
1) {
14810 return this.getPrivateKey(index)
14811 } else if((index = this.changeAddresses.indexOf(address))
> -
1) {
14812 return this.getInternalPrivateKey(index)
14814 throw new Error('Unknown address. Make sure the address is from the keychain and has been generated.')
14818 function isReceiveAddress(address){
14819 return me.addresses.indexOf(address)
> -
1
14822 function isChangeAddress(address){
14823 return me.changeAddresses.indexOf(address)
> -
1
14826 function isMyAddress(address) {
14827 return isReceiveAddress(address) || isChangeAddress(address)
14831 module.exports = Wallet
14833 }).call(this,_dereq_("buffer").Buffer)
14834 },{"./address":
69,"./hdnode":
78,"./networks":
81,"./transaction":
85,"assert":
4,"buffer":
8,"secure-random":
68}]},{},[
79])
14839 <!--<script src="/js/asmcrypto.js"></script>-->
14841 // INCLUDE ASMCRYPTO
14842 // https://rawgit.com/tresorit/asmcrypto.js/
598a1098504f1b2d0e615bc51dd8404afd2d338b/asmcrypto.js
14843 // Provides PBKDF2 functionality
14844 // It's faster than CryptoJS
14845 // Couldn't get SJCL working as desired
14848 (function(exports, global) {
14850 global["asmCrypto"] = exports;
14851 function string_to_bytes(str) {
14852 var i, len = str.length, arr = new Uint8Array(len);
14853 for (i =
0; i < len; i +=
1) {
14854 arr[i] = str.charCodeAt(i);
14858 function hex_to_bytes(str) {
14859 var arr = [], len = str.length, i;
14864 for (i =
0; i < len; i +=
2) {
14865 arr.push(parseInt(str.substr(i,
2),
16));
14867 return new Uint8Array(arr);
14869 function base64_to_bytes(str) {
14870 return string_to_bytes(atob(str));
14872 function bytes_to_string(arr) {
14874 for (var i =
0; i < arr.length; i++) str += String.fromCharCode(arr[i]);
14877 function bytes_to_hex(arr) {
14878 var sz = (arr.byteLength || arr.length) / arr.length, str = "";
14879 for (var i =
0; i < arr.length; i++) {
14880 var h = arr[i].toString(
16);
14881 if (h.length <
2 * sz) str += "
00000000000000".substr(
0,
2 * sz - h.length);
14886 function bytes_to_base64(arr) {
14887 return btoa(bytes_to_string(arr));
14889 function pow2_ceil(a) {
14899 function is_number(a) {
14900 return typeof a ===
"number";
14902 function is_string(a) {
14903 return typeof a ===
"string";
14905 function is_buffer(a) {
14906 return a instanceof ArrayBuffer;
14908 function is_bytes(a) {
14909 return a instanceof Uint8Array;
14911 function is_typed_array(a) {
14912 return a instanceof Int8Array || a instanceof Uint8Array || a instanceof Int16Array || a instanceof Uint16Array || a instanceof Int32Array || a instanceof Uint32Array || a instanceof Float32Array || a instanceof Float64Array;
14914 function IllegalStateError() {
14915 Error.apply(this, arguments);
14917 IllegalStateError.prototype = new Error();
14918 function IllegalArgumentError() {
14919 Error.apply(this, arguments);
14921 IllegalArgumentError.prototype = new Error();
14922 function SecurityError() {
14923 Error.apply(this, arguments);
14925 IllegalArgumentError.prototype = new Error();
14926 var _aes_tables = [
99,
124,
119,
123,
242,
107,
111,
197,
48,
1,
103,
43,
254,
215,
171,
118,
202,
130,
201,
125,
250,
89,
71,
240,
173,
212,
162,
175,
156,
164,
114,
192,
183,
253,
147,
38,
54,
63,
247,
204,
52,
165,
229,
241,
113,
216,
49,
21,
4,
199,
35,
195,
24,
150,
5,
154,
7,
18,
128,
226,
235,
39,
178,
117,
9,
131,
44,
26,
27,
110,
90,
160,
82,
59,
214,
179,
41,
227,
47,
132,
83,
209,
0,
237,
32,
252,
177,
91,
106,
203,
190,
57,
74,
76,
88,
207,
208,
239,
170,
251,
67,
77,
51,
133,
69,
249,
2,
127,
80,
60,
159,
168,
81,
163,
64,
143,
146,
157,
56,
245,
188,
182,
218,
33,
16,
255,
243,
210,
205,
12,
19,
236,
95,
151,
68,
23,
196,
167,
126,
61,
100,
93,
25,
115,
96,
129,
79,
220,
34,
42,
144,
136,
70,
238,
184,
20,
222,
94,
11,
219,
224,
50,
58,
10,
73,
6,
36,
92,
194,
211,
172,
98,
145,
149,
228,
121,
231,
200,
55,
109,
141,
213,
78,
169,
108,
86,
244,
234,
101,
122,
174,
8,
186,
120,
37,
46,
28,
166,
180,
198,
232,
221,
116,
31,
75,
189,
139,
138,
112,
62,
181,
102,
72,
3,
246,
14,
97,
53,
87,
185,
134,
193,
29,
158,
225,
248,
152,
17,
105,
217,
142,
148,
155,
30,
135,
233,
206,
85,
40,
223,
140,
161,
137,
13,
191,
230,
66,
104,
65,
153,
45,
15,
176,
84,
187,
22,
82,
9,
106,
213,
48,
54,
165,
56,
191,
64,
163,
158,
129,
243,
215,
251,
124,
227,
57,
130,
155,
47,
255,
135,
52,
142,
67,
68,
196,
222,
233,
203,
84,
123,
148,
50,
166,
194,
35,
61,
238,
76,
149,
11,
66,
250,
195,
78,
8,
46,
161,
102,
40,
217,
36,
178,
118,
91,
162,
73,
109,
139,
209,
37,
114,
248,
246,
100,
134,
104,
152,
22,
212,
164,
92,
204,
93,
101,
182,
146,
108,
112,
72,
80,
253,
237,
185,
218,
94,
21,
70,
87,
167,
141,
157,
132,
144,
216,
171,
0,
140,
188,
211,
10,
247,
228,
88,
5,
184,
179,
69,
6,
208,
44,
30,
143,
202,
63,
15,
2,
193,
175,
189,
3,
1,
19,
138,
107,
58,
145,
17,
65,
79,
103,
220,
234,
151,
242,
207,
206,
240,
180,
230,
115,
150,
172,
116,
34,
231,
173,
53,
133,
226,
249,
55,
232,
28,
117,
223,
110,
71,
241,
26,
113,
29,
41,
197,
137,
111,
183,
98,
14,
170,
24,
190,
27,
252,
86,
62,
75,
198,
210,
121,
32,
154,
219,
192,
254,
120,
205,
90,
244,
31,
221,
168,
51,
136,
7,
199,
49,
177,
18,
16,
89,
39,
128,
236,
95,
96,
81,
127,
169,
25,
181,
74,
13,
45,
229,
122,
159,
147,
201,
156,
239,
160,
224,
59,
77,
174,
42,
245,
176,
200,
235,
187,
60,
131,
83,
153,
97,
23,
43,
4,
126,
186,
119,
214,
38,
225,
105,
20,
99,
85,
33,
12,
125,
198,
248,
238,
246,
255,
214,
222,
145,
96,
2,
206,
86,
231,
181,
77,
236,
143,
31,
137,
250,
239,
178,
142,
251,
65,
179,
95,
69,
35,
83,
228,
155,
117,
225,
61,
76,
108,
126,
245,
131,
104,
81,
209,
249,
226,
171,
98,
42,
8,
149,
70,
157,
48,
55,
10,
47,
14,
36,
27,
223,
205,
78,
127,
234,
18,
29,
88,
52,
54,
220,
180,
91,
164,
118,
183,
125,
82,
221,
94,
19,
166,
185,
0,
193,
64,
227,
121,
182,
212,
141,
103,
114,
148,
152,
176,
133,
187,
197,
79,
237,
134,
154,
102,
17,
138,
233,
4,
254,
160,
120,
37,
75,
162,
93,
128,
5,
63,
33,
112,
241,
99,
119,
175,
66,
32,
229,
253,
191,
129,
24,
38,
195,
190,
53,
136,
46,
147,
85,
252,
122,
200,
186,
50,
230,
192,
25,
158,
163,
68,
84,
59,
11,
140,
199,
107,
40,
167,
188,
22,
173,
219,
100,
116,
20,
146,
12,
72,
184,
159,
189,
67,
196,
57,
49,
211,
242,
213,
139,
110,
218,
1,
177,
156,
73,
216,
172,
243,
207,
202,
244,
71,
16,
111,
240,
74,
92,
56,
87,
115,
151,
203,
161,
232,
62,
150,
97,
13,
15,
224,
124,
113,
204,
144,
6,
247,
28,
194,
106,
174,
105,
23,
153,
58,
39,
217,
235,
43,
34,
210,
169,
7,
51,
45,
60,
21,
201,
135,
170,
80,
165,
3,
89,
9,
26,
101,
215,
132,
208,
130,
41,
90,
30,
123,
168,
109,
44,
165,
132,
153,
141,
13,
189,
177,
84,
80,
3,
169,
125,
25,
98,
230,
154,
69,
157,
64,
135,
21,
235,
201,
11,
236,
103,
253,
234,
191,
247,
150,
91,
194,
28,
174,
106,
90,
65,
2,
79,
92,
244,
52,
8,
147,
115,
83,
63,
12,
82,
101,
94,
40,
161,
15,
181,
9,
54,
155,
61,
38,
105,
205,
159,
27,
158,
116,
46,
45,
178,
238,
251,
246,
77,
97,
206,
123,
62,
113,
151,
245,
104,
0,
44,
96,
31,
200,
237,
190,
70,
217,
75,
222,
212,
232,
74,
107,
42,
229,
22,
197,
215,
85,
148,
207,
16,
6,
129,
240,
68,
186,
227,
243,
254,
192,
138,
173,
188,
72,
4,
223,
193,
117,
99,
48,
26,
14,
109,
76,
20,
53,
47,
225,
162,
204,
57,
87,
242,
130,
71,
172,
231,
43,
149,
160,
152,
209,
127,
102,
126,
171,
131,
202,
41,
211,
60,
121,
226,
29,
118,
59,
86,
78,
30,
219,
10,
108,
228,
93,
110,
239,
166,
168,
164,
55,
139,
50,
67,
89,
183,
140,
100,
210,
224,
180,
250,
7,
37,
175,
142,
233,
24,
213,
136,
111,
114,
36,
241,
199,
81,
35,
124,
156,
33,
221,
220,
134,
133,
144,
66,
196,
170,
216,
5,
1,
18,
163,
95,
249,
208,
145,
88,
39,
185,
56,
19,
179,
51,
187,
112,
137,
167,
182,
34,
146,
32,
73,
255,
120,
122,
143,
248,
128,
23,
218,
49,
198,
184,
195,
176,
119,
17,
203,
252,
214,
58,
0,
9,
18,
27,
36,
45,
54,
63,
72,
65,
90,
83,
108,
101,
126,
119,
144,
153,
130,
139,
180,
189,
166,
175,
216,
209,
202,
195,
252,
245,
238,
231,
59,
50,
41,
32,
31,
22,
13,
4,
115,
122,
97,
104,
87,
94,
69,
76,
171,
162,
185,
176,
143,
134,
157,
148,
227,
234,
241,
248,
199,
206,
213,
220,
118,
127,
100,
109,
82,
91,
64,
73,
62,
55,
44,
37,
26,
19,
8,
1,
230,
239,
244,
253,
194,
203,
208,
217,
174,
167,
188,
181,
138,
131,
152,
145,
77,
68,
95,
86,
105,
96,
123,
114,
5,
12,
23,
30,
33,
40,
51,
58,
221,
212,
207,
198,
249,
240,
235,
226,
149,
156,
135,
142,
177,
184,
163,
170,
236,
229,
254,
247,
200,
193,
218,
211,
164,
173,
182,
191,
128,
137,
146,
155,
124,
117,
110,
103,
88,
81,
74,
67,
52,
61,
38,
47,
16,
25,
2,
11,
215,
222,
197,
204,
243,
250,
225,
232,
159,
150,
141,
132,
187,
178,
169,
160,
71,
78,
85,
92,
99,
106,
113,
120,
15,
6,
29,
20,
43,
34,
57,
48,
154,
147,
136,
129,
190,
183,
172,
165,
210,
219,
192,
201,
246,
255,
228,
237,
10,
3,
24,
17,
46,
39,
60,
53,
66,
75,
80,
89,
102,
111,
116,
125,
161,
168,
179,
186,
133,
140,
151,
158,
233,
224,
251,
242,
205,
196,
223,
214,
49,
56,
35,
42,
21,
28,
7,
14,
121,
112,
107,
98,
93,
84,
79,
70,
0,
11,
22,
29,
44,
39,
58,
49,
88,
83,
78,
69,
116,
127,
98,
105,
176,
187,
166,
173,
156,
151,
138,
129,
232,
227,
254,
245,
196,
207,
210,
217,
123,
112,
109,
102,
87,
92,
65,
74,
35,
40,
53,
62,
15,
4,
25,
18,
203,
192,
221,
214,
231,
236,
241,
250,
147,
152,
133,
142,
191,
180,
169,
162,
246,
253,
224,
235,
218,
209,
204,
199,
174,
165,
184,
179,
130,
137,
148,
159,
70,
77,
80,
91,
106,
97,
124,
119,
30,
21,
8,
3,
50,
57,
36,
47,
141,
134,
155,
144,
161,
170,
183,
188,
213,
222,
195,
200,
249,
242,
239,
228,
61,
54,
43,
32,
17,
26,
7,
12,
101,
110,
115,
120,
73,
66,
95,
84,
247,
252,
225,
234,
219,
208,
205,
198,
175,
164,
185,
178,
131,
136,
149,
158,
71,
76,
81,
90,
107,
96,
125,
118,
31,
20,
9,
2,
51,
56,
37,
46,
140,
135,
154,
145,
160,
171,
182,
189,
212,
223,
194,
201,
248,
243,
238,
229,
60,
55,
42,
33,
16,
27,
6,
13,
100,
111,
114,
121,
72,
67,
94,
85,
1,
10,
23,
28,
45,
38,
59,
48,
89,
82,
79,
68,
117,
126,
99,
104,
177,
186,
167,
172,
157,
150,
139,
128,
233,
226,
255,
244,
197,
206,
211,
216,
122,
113,
108,
103,
86,
93,
64,
75,
34,
41,
52,
63,
14,
5,
24,
19,
202,
193,
220,
215,
230,
237,
240,
251,
146,
153,
132,
143,
190,
181,
168,
163,
0,
13,
26,
23,
52,
57,
46,
35,
104,
101,
114,
127,
92,
81,
70,
75,
208,
221,
202,
199,
228,
233,
254,
243,
184,
181,
162,
175,
140,
129,
150,
155,
187,
182,
161,
172,
143,
130,
149,
152,
211,
222,
201,
196,
231,
234,
253,
240,
107,
102,
113,
124,
95,
82,
69,
72,
3,
14,
25,
20,
55,
58,
45,
32,
109,
96,
119,
122,
89,
84,
67,
78,
5,
8,
31,
18,
49,
60,
43,
38,
189,
176,
167,
170,
137,
132,
147,
158,
213,
216,
207,
194,
225,
236,
251,
246,
214,
219,
204,
193,
226,
239,
248,
245,
190,
179,
164,
169,
138,
135,
144,
157,
6,
11,
28,
17,
50,
63,
40,
37,
110,
99,
116,
121,
90,
87,
64,
77,
218,
215,
192,
205,
238,
227,
244,
249,
178,
191,
168,
165,
134,
139,
156,
145,
10,
7,
16,
29,
62,
51,
36,
41,
98,
111,
120,
117,
86,
91,
76,
65,
97,
108,
123,
118,
85,
88,
79,
66,
9,
4,
19,
30,
61,
48,
39,
42,
177,
188,
171,
166,
133,
136,
159,
146,
217,
212,
195,
206,
237,
224,
247,
250,
183,
186,
173,
160,
131,
142,
153,
148,
223,
210,
197,
200,
235,
230,
241,
252,
103,
106,
125,
112,
83,
94,
73,
68,
15,
2,
21,
24,
59,
54,
33,
44,
12,
1,
22,
27,
56,
53,
34,
47,
100,
105,
126,
115,
80,
93,
74,
71,
220,
209,
198,
203,
232,
229,
242,
255,
180,
185,
174,
163,
128,
141,
154,
151,
0,
14,
28,
18,
56,
54,
36,
42,
112,
126,
108,
98,
72,
70,
84,
90,
224,
238,
252,
242,
216,
214,
196,
202,
144,
158,
140,
130,
168,
166,
180,
186,
219,
213,
199,
201,
227,
237,
255,
241,
171,
165,
183,
185,
147,
157,
143,
129,
59,
53,
39,
41,
3,
13,
31,
17,
75,
69,
87,
89,
115,
125,
111,
97,
173,
163,
177,
191,
149,
155,
137,
135,
221,
211,
193,
207,
229,
235,
249,
247,
77,
67,
81,
95,
117,
123,
105,
103,
61,
51,
33,
47,
5,
11,
25,
23,
118,
120,
106,
100,
78,
64,
82,
92,
6,
8,
26,
20,
62,
48,
34,
44,
150,
152,
138,
132,
174,
160,
178,
188,
230,
232,
250,
244,
222,
208,
194,
204,
65,
79,
93,
83,
121,
119,
101,
107,
49,
63,
45,
35,
9,
7,
21,
27,
161,
175,
189,
179,
153,
151,
133,
139,
209,
223,
205,
195,
233,
231,
245,
251,
154,
148,
134,
136,
162,
172,
190,
176,
234,
228,
246,
248,
210,
220,
206,
192,
122,
116,
102,
104,
66,
76,
94,
80,
10,
4,
22,
24,
50,
60,
46,
32,
236,
226,
240,
254,
212,
218,
200,
198,
156,
146,
128,
142,
164,
170,
184,
182,
12,
2,
16,
30,
52,
58,
40,
38,
124,
114,
96,
110,
68,
74,
88,
86,
55,
57,
43,
37,
15,
1,
19,
29,
71,
73,
91,
85,
127,
113,
99,
109,
215,
217,
203,
197,
239,
225,
243,
253,
167,
169,
187,
181,
159,
145,
131,
141 ];
14927 var _aes_heap_start =
2048;
14928 function _aes_asm(stdlib, foreign, buffer) {
14929 // Closure Compiler warning - commented out
14931 var S0 =
0, S1 =
0, S2 =
0, S3 =
0, S4 =
0, S5 =
0, S6 =
0, S7 =
0, S8 =
0, S9 =
0, SA =
0, SB =
0, SC =
0, SD =
0, SE =
0, SF =
0;
14933 var R00 =
0, R01 =
0, R02 =
0, R03 =
0, R04 =
0, R05 =
0, R06 =
0, R07 =
0, R08 =
0, R09 =
0, R0A =
0, R0B =
0, R0C =
0, R0D =
0, R0E =
0, R0F =
0, R10 =
0, R11 =
0, R12 =
0, R13 =
0, R14 =
0, R15 =
0, R16 =
0, R17 =
0, R18 =
0, R19 =
0, R1A =
0, R1B =
0, R1C =
0, R1D =
0, R1E =
0, R1F =
0, R20 =
0, R21 =
0, R22 =
0, R23 =
0, R24 =
0, R25 =
0, R26 =
0, R27 =
0, R28 =
0, R29 =
0, R2A =
0, R2B =
0, R2C =
0, R2D =
0, R2E =
0, R2F =
0, R30 =
0, R31 =
0, R32 =
0, R33 =
0, R34 =
0, R35 =
0, R36 =
0, R37 =
0, R38 =
0, R39 =
0, R3A =
0, R3B =
0, R3C =
0, R3D =
0, R3E =
0, R3F =
0, R40 =
0, R41 =
0, R42 =
0, R43 =
0, R44 =
0, R45 =
0, R46 =
0, R47 =
0, R48 =
0, R49 =
0, R4A =
0, R4B =
0, R4C =
0, R4D =
0, R4E =
0, R4F =
0, R50 =
0, R51 =
0, R52 =
0, R53 =
0, R54 =
0, R55 =
0, R56 =
0, R57 =
0, R58 =
0, R59 =
0, R5A =
0, R5B =
0, R5C =
0, R5D =
0, R5E =
0, R5F =
0, R60 =
0, R61 =
0, R62 =
0, R63 =
0, R64 =
0, R65 =
0, R66 =
0, R67 =
0, R68 =
0, R69 =
0, R6A =
0, R6B =
0, R6C =
0, R6D =
0, R6E =
0, R6F =
0, R70 =
0, R71 =
0, R72 =
0, R73 =
0, R74 =
0, R75 =
0, R76 =
0, R77 =
0, R78 =
0, R79 =
0, R7A =
0, R7B =
0, R7C =
0, R7D =
0, R7E =
0, R7F =
0, R80 =
0, R81 =
0, R82 =
0, R83 =
0, R84 =
0, R85 =
0, R86 =
0, R87 =
0, R88 =
0, R89 =
0, R8A =
0, R8B =
0, R8C =
0, R8D =
0, R8E =
0, R8F =
0, R90 =
0, R91 =
0, R92 =
0, R93 =
0, R94 =
0, R95 =
0, R96 =
0, R97 =
0, R98 =
0, R99 =
0, R9A =
0, R9B =
0, R9C =
0, R9D =
0, R9E =
0, R9F =
0, RA0 =
0, RA1 =
0, RA2 =
0, RA3 =
0, RA4 =
0, RA5 =
0, RA6 =
0, RA7 =
0, RA8 =
0, RA9 =
0, RAA =
0, RAB =
0, RAC =
0, RAD =
0, RAE =
0, RAF =
0, RB0 =
0, RB1 =
0, RB2 =
0, RB3 =
0, RB4 =
0, RB5 =
0, RB6 =
0, RB7 =
0, RB8 =
0, RB9 =
0, RBA =
0, RBB =
0, RBC =
0, RBD =
0, RBE =
0, RBF =
0, RC0 =
0, RC1 =
0, RC2 =
0, RC3 =
0, RC4 =
0, RC5 =
0, RC6 =
0, RC7 =
0, RC8 =
0, RC9 =
0, RCA =
0, RCB =
0, RCC =
0, RCD =
0, RCE =
0, RCF =
0, RD0 =
0, RD1 =
0, RD2 =
0, RD3 =
0, RD4 =
0, RD5 =
0, RD6 =
0, RD7 =
0, RD8 =
0, RD9 =
0, RDA =
0, RDB =
0, RDC =
0, RDD =
0, RDE =
0, RDF =
0, RE0 =
0, RE1 =
0, RE2 =
0, RE3 =
0, RE4 =
0, RE5 =
0, RE6 =
0, RE7 =
0, RE8 =
0, RE9 =
0, REA =
0, REB =
0, REC =
0, RED =
0, REE =
0, REF =
0;
14934 var HEAP = new stdlib.Uint8Array(buffer);
14935 function _expand_key_128() {
14937 R10 = R00 ^ HEAP[sbox | R0D] ^
1;
14938 R11 = R01 ^ HEAP[sbox | R0E];
14939 R12 = R02 ^ HEAP[sbox | R0F];
14940 R13 = R03 ^ HEAP[sbox | R0C];
14953 R20 = R10 ^ HEAP[sbox | R1D] ^
2;
14954 R21 = R11 ^ HEAP[sbox | R1E];
14955 R22 = R12 ^ HEAP[sbox | R1F];
14956 R23 = R13 ^ HEAP[sbox | R1C];
14969 R30 = R20 ^ HEAP[sbox | R2D] ^
4;
14970 R31 = R21 ^ HEAP[sbox | R2E];
14971 R32 = R22 ^ HEAP[sbox | R2F];
14972 R33 = R23 ^ HEAP[sbox | R2C];
14985 R40 = R30 ^ HEAP[sbox | R3D] ^
8;
14986 R41 = R31 ^ HEAP[sbox | R3E];
14987 R42 = R32 ^ HEAP[sbox | R3F];
14988 R43 = R33 ^ HEAP[sbox | R3C];
15001 R50 = R40 ^ HEAP[sbox | R4D] ^
16;
15002 R51 = R41 ^ HEAP[sbox | R4E];
15003 R52 = R42 ^ HEAP[sbox | R4F];
15004 R53 = R43 ^ HEAP[sbox | R4C];
15017 R60 = R50 ^ HEAP[sbox | R5D] ^
32;
15018 R61 = R51 ^ HEAP[sbox | R5E];
15019 R62 = R52 ^ HEAP[sbox | R5F];
15020 R63 = R53 ^ HEAP[sbox | R5C];
15033 R70 = R60 ^ HEAP[sbox | R6D] ^
64;
15034 R71 = R61 ^ HEAP[sbox | R6E];
15035 R72 = R62 ^ HEAP[sbox | R6F];
15036 R73 = R63 ^ HEAP[sbox | R6C];
15049 R80 = R70 ^ HEAP[sbox | R7D] ^
128;
15050 R81 = R71 ^ HEAP[sbox | R7E];
15051 R82 = R72 ^ HEAP[sbox | R7F];
15052 R83 = R73 ^ HEAP[sbox | R7C];
15065 R90 = R80 ^ HEAP[sbox | R8D] ^
27;
15066 R91 = R81 ^ HEAP[sbox | R8E];
15067 R92 = R82 ^ HEAP[sbox | R8F];
15068 R93 = R83 ^ HEAP[sbox | R8C];
15081 RA0 = R90 ^ HEAP[sbox | R9D] ^
54;
15082 RA1 = R91 ^ HEAP[sbox | R9E];
15083 RA2 = R92 ^ HEAP[sbox | R9F];
15084 RA3 = R93 ^ HEAP[sbox | R9C];
15098 function _expand_key_256() {
15100 R20 = R00 ^ HEAP[sbox | R1D] ^
1;
15101 R21 = R01 ^ HEAP[sbox | R1E];
15102 R22 = R02 ^ HEAP[sbox | R1F];
15103 R23 = R03 ^ HEAP[sbox | R1C];
15116 R30 = R10 ^ HEAP[sbox | R2C];
15117 R31 = R11 ^ HEAP[sbox | R2D];
15118 R32 = R12 ^ HEAP[sbox | R2E];
15119 R33 = R13 ^ HEAP[sbox | R2F];
15132 R40 = R20 ^ HEAP[sbox | R3D] ^
2;
15133 R41 = R21 ^ HEAP[sbox | R3E];
15134 R42 = R22 ^ HEAP[sbox | R3F];
15135 R43 = R23 ^ HEAP[sbox | R3C];
15148 R50 = R30 ^ HEAP[sbox | R4C];
15149 R51 = R31 ^ HEAP[sbox | R4D];
15150 R52 = R32 ^ HEAP[sbox | R4E];
15151 R53 = R33 ^ HEAP[sbox | R4F];
15164 R60 = R40 ^ HEAP[sbox | R5D] ^
4;
15165 R61 = R41 ^ HEAP[sbox | R5E];
15166 R62 = R42 ^ HEAP[sbox | R5F];
15167 R63 = R43 ^ HEAP[sbox | R5C];
15180 R70 = R50 ^ HEAP[sbox | R6C];
15181 R71 = R51 ^ HEAP[sbox | R6D];
15182 R72 = R52 ^ HEAP[sbox | R6E];
15183 R73 = R53 ^ HEAP[sbox | R6F];
15196 R80 = R60 ^ HEAP[sbox | R7D] ^
8;
15197 R81 = R61 ^ HEAP[sbox | R7E];
15198 R82 = R62 ^ HEAP[sbox | R7F];
15199 R83 = R63 ^ HEAP[sbox | R7C];
15212 R90 = R70 ^ HEAP[sbox | R8C];
15213 R91 = R71 ^ HEAP[sbox | R8D];
15214 R92 = R72 ^ HEAP[sbox | R8E];
15215 R93 = R73 ^ HEAP[sbox | R8F];
15228 RA0 = R80 ^ HEAP[sbox | R9D] ^
16;
15229 RA1 = R81 ^ HEAP[sbox | R9E];
15230 RA2 = R82 ^ HEAP[sbox | R9F];
15231 RA3 = R83 ^ HEAP[sbox | R9C];
15244 RB0 = R90 ^ HEAP[sbox | RAC];
15245 RB1 = R91 ^ HEAP[sbox | RAD];
15246 RB2 = R92 ^ HEAP[sbox | RAE];
15247 RB3 = R93 ^ HEAP[sbox | RAF];
15260 RC0 = RA0 ^ HEAP[sbox | RBD] ^
32;
15261 RC1 = RA1 ^ HEAP[sbox | RBE];
15262 RC2 = RA2 ^ HEAP[sbox | RBF];
15263 RC3 = RA3 ^ HEAP[sbox | RBC];
15276 RD0 = RB0 ^ HEAP[sbox | RCC];
15277 RD1 = RB1 ^ HEAP[sbox | RCD];
15278 RD2 = RB2 ^ HEAP[sbox | RCE];
15279 RD3 = RB3 ^ HEAP[sbox | RCF];
15292 RE0 = RC0 ^ HEAP[sbox | RDD] ^
64;
15293 RE1 = RC1 ^ HEAP[sbox | RDE];
15294 RE2 = RC2 ^ HEAP[sbox | RDF];
15295 RE3 = RC3 ^ HEAP[sbox | RDC];
15309 function _encrypt(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF) {
15326 var t0 =
0, t1 =
0, t2 =
0, t3 =
0, t4 =
0, t5 =
0, t6 =
0, t7 =
0, t8 =
0, t9 =
0, tA =
0, tB =
0, tC =
0, tD =
0, tE =
0, tF =
0, sbox =
0, x2_sbox =
512, x3_sbox =
768;
15343 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R10;
15344 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R11;
15345 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R12;
15346 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R13;
15347 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R14;
15348 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R15;
15349 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R16;
15350 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R17;
15351 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R18;
15352 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R19;
15353 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R1A;
15354 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R1B;
15355 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R1C;
15356 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R1D;
15357 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R1E;
15358 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R1F;
15359 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R20;
15360 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R21;
15361 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R22;
15362 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R23;
15363 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R24;
15364 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R25;
15365 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R26;
15366 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R27;
15367 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R28;
15368 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R29;
15369 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R2A;
15370 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R2B;
15371 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R2C;
15372 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R2D;
15373 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R2E;
15374 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R2F;
15375 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R30;
15376 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R31;
15377 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R32;
15378 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R33;
15379 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R34;
15380 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R35;
15381 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R36;
15382 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R37;
15383 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R38;
15384 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R39;
15385 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R3A;
15386 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R3B;
15387 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R3C;
15388 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R3D;
15389 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R3E;
15390 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R3F;
15391 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R40;
15392 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R41;
15393 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R42;
15394 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R43;
15395 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R44;
15396 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R45;
15397 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R46;
15398 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R47;
15399 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R48;
15400 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R49;
15401 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R4A;
15402 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R4B;
15403 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R4C;
15404 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R4D;
15405 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R4E;
15406 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R4F;
15407 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R50;
15408 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R51;
15409 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R52;
15410 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R53;
15411 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R54;
15412 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R55;
15413 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R56;
15414 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R57;
15415 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R58;
15416 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R59;
15417 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R5A;
15418 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R5B;
15419 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R5C;
15420 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R5D;
15421 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R5E;
15422 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R5F;
15423 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R60;
15424 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R61;
15425 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R62;
15426 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R63;
15427 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R64;
15428 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R65;
15429 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R66;
15430 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R67;
15431 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R68;
15432 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R69;
15433 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R6A;
15434 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R6B;
15435 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R6C;
15436 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R6D;
15437 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R6E;
15438 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R6F;
15439 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R70;
15440 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R71;
15441 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R72;
15442 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R73;
15443 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R74;
15444 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R75;
15445 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R76;
15446 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R77;
15447 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R78;
15448 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R79;
15449 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R7A;
15450 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R7B;
15451 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R7C;
15452 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R7D;
15453 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R7E;
15454 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R7F;
15455 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ R80;
15456 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ R81;
15457 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ R82;
15458 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ R83;
15459 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ R84;
15460 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ R85;
15461 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ R86;
15462 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ R87;
15463 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ R88;
15464 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ R89;
15465 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ R8A;
15466 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ R8B;
15467 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ R8C;
15468 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ R8D;
15469 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ R8E;
15470 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ R8F;
15471 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ R90;
15472 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ R91;
15473 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ R92;
15474 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ R93;
15475 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ R94;
15476 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ R95;
15477 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ R96;
15478 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ R97;
15479 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ R98;
15480 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ R99;
15481 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ R9A;
15482 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ R9B;
15483 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ R9C;
15484 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ R9D;
15485 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ R9E;
15486 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ R9F;
15487 if ((keySize |
0) ==
16) {
15488 S0 = HEAP[sbox | t0] ^ RA0;
15489 S1 = HEAP[sbox | t5] ^ RA1;
15490 S2 = HEAP[sbox | tA] ^ RA2;
15491 S3 = HEAP[sbox | tF] ^ RA3;
15492 S4 = HEAP[sbox | t4] ^ RA4;
15493 S5 = HEAP[sbox | t9] ^ RA5;
15494 S6 = HEAP[sbox | tE] ^ RA6;
15495 S7 = HEAP[sbox | t3] ^ RA7;
15496 S8 = HEAP[sbox | t8] ^ RA8;
15497 S9 = HEAP[sbox | tD] ^ RA9;
15498 SA = HEAP[sbox | t2] ^ RAA;
15499 SB = HEAP[sbox | t7] ^ RAB;
15500 SC = HEAP[sbox | tC] ^ RAC;
15501 SD = HEAP[sbox | t1] ^ RAD;
15502 SE = HEAP[sbox | t6] ^ RAE;
15503 SF = HEAP[sbox | tB] ^ RAF;
15506 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ RA0;
15507 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ RA1;
15508 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ RA2;
15509 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ RA3;
15510 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ RA4;
15511 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ RA5;
15512 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ RA6;
15513 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ RA7;
15514 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ RA8;
15515 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ RA9;
15516 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ RAA;
15517 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ RAB;
15518 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ RAC;
15519 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ RAD;
15520 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ RAE;
15521 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ RAF;
15522 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ RB0;
15523 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ RB1;
15524 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ RB2;
15525 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ RB3;
15526 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ RB4;
15527 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ RB5;
15528 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ RB6;
15529 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ RB7;
15530 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ RB8;
15531 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ RB9;
15532 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ RBA;
15533 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ RBB;
15534 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ RBC;
15535 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ RBD;
15536 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ RBE;
15537 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ RBF;
15538 s0 = HEAP[x2_sbox | t0] ^ HEAP[x3_sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[sbox | tF] ^ RC0;
15539 s1 = HEAP[sbox | t0] ^ HEAP[x2_sbox | t5] ^ HEAP[x3_sbox | tA] ^ HEAP[sbox | tF] ^ RC1;
15540 s2 = HEAP[sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[x2_sbox | tA] ^ HEAP[x3_sbox | tF] ^ RC2;
15541 s3 = HEAP[x3_sbox | t0] ^ HEAP[sbox | t5] ^ HEAP[sbox | tA] ^ HEAP[x2_sbox | tF] ^ RC3;
15542 s4 = HEAP[x2_sbox | t4] ^ HEAP[x3_sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[sbox | t3] ^ RC4;
15543 s5 = HEAP[sbox | t4] ^ HEAP[x2_sbox | t9] ^ HEAP[x3_sbox | tE] ^ HEAP[sbox | t3] ^ RC5;
15544 s6 = HEAP[sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[x2_sbox | tE] ^ HEAP[x3_sbox | t3] ^ RC6;
15545 s7 = HEAP[x3_sbox | t4] ^ HEAP[sbox | t9] ^ HEAP[sbox | tE] ^ HEAP[x2_sbox | t3] ^ RC7;
15546 s8 = HEAP[x2_sbox | t8] ^ HEAP[x3_sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[sbox | t7] ^ RC8;
15547 s9 = HEAP[sbox | t8] ^ HEAP[x2_sbox | tD] ^ HEAP[x3_sbox | t2] ^ HEAP[sbox | t7] ^ RC9;
15548 sA = HEAP[sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[x2_sbox | t2] ^ HEAP[x3_sbox | t7] ^ RCA;
15549 sB = HEAP[x3_sbox | t8] ^ HEAP[sbox | tD] ^ HEAP[sbox | t2] ^ HEAP[x2_sbox | t7] ^ RCB;
15550 sC = HEAP[x2_sbox | tC] ^ HEAP[x3_sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[sbox | tB] ^ RCC;
15551 sD = HEAP[sbox | tC] ^ HEAP[x2_sbox | t1] ^ HEAP[x3_sbox | t6] ^ HEAP[sbox | tB] ^ RCD;
15552 sE = HEAP[sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[x2_sbox | t6] ^ HEAP[x3_sbox | tB] ^ RCE;
15553 sF = HEAP[x3_sbox | tC] ^ HEAP[sbox | t1] ^ HEAP[sbox | t6] ^ HEAP[x2_sbox | tB] ^ RCF;
15554 t0 = HEAP[x2_sbox | s0] ^ HEAP[x3_sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[sbox | sF] ^ RD0;
15555 t1 = HEAP[sbox | s0] ^ HEAP[x2_sbox | s5] ^ HEAP[x3_sbox | sA] ^ HEAP[sbox | sF] ^ RD1;
15556 t2 = HEAP[sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[x2_sbox | sA] ^ HEAP[x3_sbox | sF] ^ RD2;
15557 t3 = HEAP[x3_sbox | s0] ^ HEAP[sbox | s5] ^ HEAP[sbox | sA] ^ HEAP[x2_sbox | sF] ^ RD3;
15558 t4 = HEAP[x2_sbox | s4] ^ HEAP[x3_sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[sbox | s3] ^ RD4;
15559 t5 = HEAP[sbox | s4] ^ HEAP[x2_sbox | s9] ^ HEAP[x3_sbox | sE] ^ HEAP[sbox | s3] ^ RD5;
15560 t6 = HEAP[sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[x2_sbox | sE] ^ HEAP[x3_sbox | s3] ^ RD6;
15561 t7 = HEAP[x3_sbox | s4] ^ HEAP[sbox | s9] ^ HEAP[sbox | sE] ^ HEAP[x2_sbox | s3] ^ RD7;
15562 t8 = HEAP[x2_sbox | s8] ^ HEAP[x3_sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[sbox | s7] ^ RD8;
15563 t9 = HEAP[sbox | s8] ^ HEAP[x2_sbox | sD] ^ HEAP[x3_sbox | s2] ^ HEAP[sbox | s7] ^ RD9;
15564 tA = HEAP[sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[x2_sbox | s2] ^ HEAP[x3_sbox | s7] ^ RDA;
15565 tB = HEAP[x3_sbox | s8] ^ HEAP[sbox | sD] ^ HEAP[sbox | s2] ^ HEAP[x2_sbox | s7] ^ RDB;
15566 tC = HEAP[x2_sbox | sC] ^ HEAP[x3_sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[sbox | sB] ^ RDC;
15567 tD = HEAP[sbox | sC] ^ HEAP[x2_sbox | s1] ^ HEAP[x3_sbox | s6] ^ HEAP[sbox | sB] ^ RDD;
15568 tE = HEAP[sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[x2_sbox | s6] ^ HEAP[x3_sbox | sB] ^ RDE;
15569 tF = HEAP[x3_sbox | sC] ^ HEAP[sbox | s1] ^ HEAP[sbox | s6] ^ HEAP[x2_sbox | sB] ^ RDF;
15570 S0 = HEAP[sbox | t0] ^ RE0;
15571 S1 = HEAP[sbox | t5] ^ RE1;
15572 S2 = HEAP[sbox | tA] ^ RE2;
15573 S3 = HEAP[sbox | tF] ^ RE3;
15574 S4 = HEAP[sbox | t4] ^ RE4;
15575 S5 = HEAP[sbox | t9] ^ RE5;
15576 S6 = HEAP[sbox | tE] ^ RE6;
15577 S7 = HEAP[sbox | t3] ^ RE7;
15578 S8 = HEAP[sbox | t8] ^ RE8;
15579 S9 = HEAP[sbox | tD] ^ RE9;
15580 SA = HEAP[sbox | t2] ^ REA;
15581 SB = HEAP[sbox | t7] ^ REB;
15582 SC = HEAP[sbox | tC] ^ REC;
15583 SD = HEAP[sbox | t1] ^ RED;
15584 SE = HEAP[sbox | t6] ^ REE;
15585 SF = HEAP[sbox | tB] ^ REF;
15587 function _decrypt(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF) {
15604 var t0 =
0, t1 =
0, t2 =
0, t3 =
0, t4 =
0, t5 =
0, t6 =
0, t7 =
0, t8 =
0, t9 =
0, tA =
0, tB =
0, tC =
0, tD =
0, tE =
0, tF =
0, inv_sbox =
256, x9 =
1024, xB =
1280, xD =
1536, xE =
1792;
15605 if ((keySize |
0) ==
32) {
15606 t0 = HEAP[inv_sbox | s0 ^ RE0] ^ RD0;
15607 t1 = HEAP[inv_sbox | sD ^ RED] ^ RD1;
15608 t2 = HEAP[inv_sbox | sA ^ REA] ^ RD2;
15609 t3 = HEAP[inv_sbox | s7 ^ RE7] ^ RD3;
15610 t4 = HEAP[inv_sbox | s4 ^ RE4] ^ RD4;
15611 t5 = HEAP[inv_sbox | s1 ^ RE1] ^ RD5;
15612 t6 = HEAP[inv_sbox | sE ^ REE] ^ RD6;
15613 t7 = HEAP[inv_sbox | sB ^ REB] ^ RD7;
15614 t8 = HEAP[inv_sbox | s8 ^ RE8] ^ RD8;
15615 t9 = HEAP[inv_sbox | s5 ^ RE5] ^ RD9;
15616 tA = HEAP[inv_sbox | s2 ^ RE2] ^ RDA;
15617 tB = HEAP[inv_sbox | sF ^ REF] ^ RDB;
15618 tC = HEAP[inv_sbox | sC ^ REC] ^ RDC;
15619 tD = HEAP[inv_sbox | s9 ^ RE9] ^ RDD;
15620 tE = HEAP[inv_sbox | s6 ^ RE6] ^ RDE;
15621 tF = HEAP[inv_sbox | s3 ^ RE3] ^ RDF;
15622 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15623 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15624 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15625 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15626 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15627 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15628 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15629 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15630 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15631 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15632 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15633 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15634 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15635 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15636 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15637 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15638 t0 = HEAP[inv_sbox | s0] ^ RC0;
15639 t1 = HEAP[inv_sbox | s1] ^ RC1;
15640 t2 = HEAP[inv_sbox | s2] ^ RC2;
15641 t3 = HEAP[inv_sbox | s3] ^ RC3;
15642 t4 = HEAP[inv_sbox | s4] ^ RC4;
15643 t5 = HEAP[inv_sbox | s5] ^ RC5;
15644 t6 = HEAP[inv_sbox | s6] ^ RC6;
15645 t7 = HEAP[inv_sbox | s7] ^ RC7;
15646 t8 = HEAP[inv_sbox | s8] ^ RC8;
15647 t9 = HEAP[inv_sbox | s9] ^ RC9;
15648 tA = HEAP[inv_sbox | sA] ^ RCA;
15649 tB = HEAP[inv_sbox | sB] ^ RCB;
15650 tC = HEAP[inv_sbox | sC] ^ RCC;
15651 tD = HEAP[inv_sbox | sD] ^ RCD;
15652 tE = HEAP[inv_sbox | sE] ^ RCE;
15653 tF = HEAP[inv_sbox | sF] ^ RCF;
15654 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15655 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15656 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15657 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15658 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15659 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15660 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15661 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15662 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15663 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15664 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15665 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15666 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15667 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15668 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15669 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15670 t0 = HEAP[inv_sbox | s0] ^ RB0;
15671 t1 = HEAP[inv_sbox | s1] ^ RB1;
15672 t2 = HEAP[inv_sbox | s2] ^ RB2;
15673 t3 = HEAP[inv_sbox | s3] ^ RB3;
15674 t4 = HEAP[inv_sbox | s4] ^ RB4;
15675 t5 = HEAP[inv_sbox | s5] ^ RB5;
15676 t6 = HEAP[inv_sbox | s6] ^ RB6;
15677 t7 = HEAP[inv_sbox | s7] ^ RB7;
15678 t8 = HEAP[inv_sbox | s8] ^ RB8;
15679 t9 = HEAP[inv_sbox | s9] ^ RB9;
15680 tA = HEAP[inv_sbox | sA] ^ RBA;
15681 tB = HEAP[inv_sbox | sB] ^ RBB;
15682 tC = HEAP[inv_sbox | sC] ^ RBC;
15683 tD = HEAP[inv_sbox | sD] ^ RBD;
15684 tE = HEAP[inv_sbox | sE] ^ RBE;
15685 tF = HEAP[inv_sbox | sF] ^ RBF;
15686 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15687 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15688 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15689 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15690 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15691 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15692 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15693 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15694 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15695 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15696 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15697 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15698 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15699 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15700 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15701 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15702 t0 = HEAP[inv_sbox | s0] ^ RA0;
15703 t1 = HEAP[inv_sbox | s1] ^ RA1;
15704 t2 = HEAP[inv_sbox | s2] ^ RA2;
15705 t3 = HEAP[inv_sbox | s3] ^ RA3;
15706 t4 = HEAP[inv_sbox | s4] ^ RA4;
15707 t5 = HEAP[inv_sbox | s5] ^ RA5;
15708 t6 = HEAP[inv_sbox | s6] ^ RA6;
15709 t7 = HEAP[inv_sbox | s7] ^ RA7;
15710 t8 = HEAP[inv_sbox | s8] ^ RA8;
15711 t9 = HEAP[inv_sbox | s9] ^ RA9;
15712 tA = HEAP[inv_sbox | sA] ^ RAA;
15713 tB = HEAP[inv_sbox | sB] ^ RAB;
15714 tC = HEAP[inv_sbox | sC] ^ RAC;
15715 tD = HEAP[inv_sbox | sD] ^ RAD;
15716 tE = HEAP[inv_sbox | sE] ^ RAE;
15717 tF = HEAP[inv_sbox | sF] ^ RAF;
15718 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15719 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15720 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15721 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15722 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15723 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15724 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15725 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15726 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15727 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15728 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15729 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15730 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15731 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15732 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15733 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15734 t0 = HEAP[inv_sbox | s0] ^ R90;
15735 t1 = HEAP[inv_sbox | s1] ^ R91;
15736 t2 = HEAP[inv_sbox | s2] ^ R92;
15737 t3 = HEAP[inv_sbox | s3] ^ R93;
15738 t4 = HEAP[inv_sbox | s4] ^ R94;
15739 t5 = HEAP[inv_sbox | s5] ^ R95;
15740 t6 = HEAP[inv_sbox | s6] ^ R96;
15741 t7 = HEAP[inv_sbox | s7] ^ R97;
15742 t8 = HEAP[inv_sbox | s8] ^ R98;
15743 t9 = HEAP[inv_sbox | s9] ^ R99;
15744 tA = HEAP[inv_sbox | sA] ^ R9A;
15745 tB = HEAP[inv_sbox | sB] ^ R9B;
15746 tC = HEAP[inv_sbox | sC] ^ R9C;
15747 tD = HEAP[inv_sbox | sD] ^ R9D;
15748 tE = HEAP[inv_sbox | sE] ^ R9E;
15749 tF = HEAP[inv_sbox | sF] ^ R9F;
15751 t0 = HEAP[inv_sbox | s0 ^ RA0] ^ R90;
15752 t1 = HEAP[inv_sbox | sD ^ RAD] ^ R91;
15753 t2 = HEAP[inv_sbox | sA ^ RAA] ^ R92;
15754 t3 = HEAP[inv_sbox | s7 ^ RA7] ^ R93;
15755 t4 = HEAP[inv_sbox | s4 ^ RA4] ^ R94;
15756 t5 = HEAP[inv_sbox | s1 ^ RA1] ^ R95;
15757 t6 = HEAP[inv_sbox | sE ^ RAE] ^ R96;
15758 t7 = HEAP[inv_sbox | sB ^ RAB] ^ R97;
15759 t8 = HEAP[inv_sbox | s8 ^ RA8] ^ R98;
15760 t9 = HEAP[inv_sbox | s5 ^ RA5] ^ R99;
15761 tA = HEAP[inv_sbox | s2 ^ RA2] ^ R9A;
15762 tB = HEAP[inv_sbox | sF ^ RAF] ^ R9B;
15763 tC = HEAP[inv_sbox | sC ^ RAC] ^ R9C;
15764 tD = HEAP[inv_sbox | s9 ^ RA9] ^ R9D;
15765 tE = HEAP[inv_sbox | s6 ^ RA6] ^ R9E;
15766 tF = HEAP[inv_sbox | s3 ^ RA3] ^ R9F;
15768 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15769 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15770 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15771 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15772 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15773 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15774 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15775 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15776 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15777 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15778 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15779 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15780 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15781 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15782 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15783 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15784 t0 = HEAP[inv_sbox | s0] ^ R80;
15785 t1 = HEAP[inv_sbox | s1] ^ R81;
15786 t2 = HEAP[inv_sbox | s2] ^ R82;
15787 t3 = HEAP[inv_sbox | s3] ^ R83;
15788 t4 = HEAP[inv_sbox | s4] ^ R84;
15789 t5 = HEAP[inv_sbox | s5] ^ R85;
15790 t6 = HEAP[inv_sbox | s6] ^ R86;
15791 t7 = HEAP[inv_sbox | s7] ^ R87;
15792 t8 = HEAP[inv_sbox | s8] ^ R88;
15793 t9 = HEAP[inv_sbox | s9] ^ R89;
15794 tA = HEAP[inv_sbox | sA] ^ R8A;
15795 tB = HEAP[inv_sbox | sB] ^ R8B;
15796 tC = HEAP[inv_sbox | sC] ^ R8C;
15797 tD = HEAP[inv_sbox | sD] ^ R8D;
15798 tE = HEAP[inv_sbox | sE] ^ R8E;
15799 tF = HEAP[inv_sbox | sF] ^ R8F;
15800 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15801 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15802 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15803 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15804 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15805 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15806 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15807 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15808 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15809 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15810 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15811 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15812 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15813 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15814 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15815 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15816 t0 = HEAP[inv_sbox | s0] ^ R70;
15817 t1 = HEAP[inv_sbox | s1] ^ R71;
15818 t2 = HEAP[inv_sbox | s2] ^ R72;
15819 t3 = HEAP[inv_sbox | s3] ^ R73;
15820 t4 = HEAP[inv_sbox | s4] ^ R74;
15821 t5 = HEAP[inv_sbox | s5] ^ R75;
15822 t6 = HEAP[inv_sbox | s6] ^ R76;
15823 t7 = HEAP[inv_sbox | s7] ^ R77;
15824 t8 = HEAP[inv_sbox | s8] ^ R78;
15825 t9 = HEAP[inv_sbox | s9] ^ R79;
15826 tA = HEAP[inv_sbox | sA] ^ R7A;
15827 tB = HEAP[inv_sbox | sB] ^ R7B;
15828 tC = HEAP[inv_sbox | sC] ^ R7C;
15829 tD = HEAP[inv_sbox | sD] ^ R7D;
15830 tE = HEAP[inv_sbox | sE] ^ R7E;
15831 tF = HEAP[inv_sbox | sF] ^ R7F;
15832 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15833 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15834 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15835 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15836 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15837 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15838 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15839 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15840 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15841 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15842 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15843 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15844 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15845 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15846 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15847 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15848 t0 = HEAP[inv_sbox | s0] ^ R60;
15849 t1 = HEAP[inv_sbox | s1] ^ R61;
15850 t2 = HEAP[inv_sbox | s2] ^ R62;
15851 t3 = HEAP[inv_sbox | s3] ^ R63;
15852 t4 = HEAP[inv_sbox | s4] ^ R64;
15853 t5 = HEAP[inv_sbox | s5] ^ R65;
15854 t6 = HEAP[inv_sbox | s6] ^ R66;
15855 t7 = HEAP[inv_sbox | s7] ^ R67;
15856 t8 = HEAP[inv_sbox | s8] ^ R68;
15857 t9 = HEAP[inv_sbox | s9] ^ R69;
15858 tA = HEAP[inv_sbox | sA] ^ R6A;
15859 tB = HEAP[inv_sbox | sB] ^ R6B;
15860 tC = HEAP[inv_sbox | sC] ^ R6C;
15861 tD = HEAP[inv_sbox | sD] ^ R6D;
15862 tE = HEAP[inv_sbox | sE] ^ R6E;
15863 tF = HEAP[inv_sbox | sF] ^ R6F;
15864 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15865 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15866 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15867 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15868 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15869 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15870 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15871 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15872 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15873 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15874 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15875 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15876 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15877 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15878 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15879 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15880 t0 = HEAP[inv_sbox | s0] ^ R50;
15881 t1 = HEAP[inv_sbox | s1] ^ R51;
15882 t2 = HEAP[inv_sbox | s2] ^ R52;
15883 t3 = HEAP[inv_sbox | s3] ^ R53;
15884 t4 = HEAP[inv_sbox | s4] ^ R54;
15885 t5 = HEAP[inv_sbox | s5] ^ R55;
15886 t6 = HEAP[inv_sbox | s6] ^ R56;
15887 t7 = HEAP[inv_sbox | s7] ^ R57;
15888 t8 = HEAP[inv_sbox | s8] ^ R58;
15889 t9 = HEAP[inv_sbox | s9] ^ R59;
15890 tA = HEAP[inv_sbox | sA] ^ R5A;
15891 tB = HEAP[inv_sbox | sB] ^ R5B;
15892 tC = HEAP[inv_sbox | sC] ^ R5C;
15893 tD = HEAP[inv_sbox | sD] ^ R5D;
15894 tE = HEAP[inv_sbox | sE] ^ R5E;
15895 tF = HEAP[inv_sbox | sF] ^ R5F;
15896 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15897 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15898 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15899 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15900 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15901 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15902 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15903 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15904 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15905 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15906 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15907 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15908 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15909 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15910 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15911 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15912 t0 = HEAP[inv_sbox | s0] ^ R40;
15913 t1 = HEAP[inv_sbox | s1] ^ R41;
15914 t2 = HEAP[inv_sbox | s2] ^ R42;
15915 t3 = HEAP[inv_sbox | s3] ^ R43;
15916 t4 = HEAP[inv_sbox | s4] ^ R44;
15917 t5 = HEAP[inv_sbox | s5] ^ R45;
15918 t6 = HEAP[inv_sbox | s6] ^ R46;
15919 t7 = HEAP[inv_sbox | s7] ^ R47;
15920 t8 = HEAP[inv_sbox | s8] ^ R48;
15921 t9 = HEAP[inv_sbox | s9] ^ R49;
15922 tA = HEAP[inv_sbox | sA] ^ R4A;
15923 tB = HEAP[inv_sbox | sB] ^ R4B;
15924 tC = HEAP[inv_sbox | sC] ^ R4C;
15925 tD = HEAP[inv_sbox | sD] ^ R4D;
15926 tE = HEAP[inv_sbox | sE] ^ R4E;
15927 tF = HEAP[inv_sbox | sF] ^ R4F;
15928 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15929 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15930 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15931 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15932 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15933 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15934 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15935 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15936 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15937 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15938 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15939 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15940 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15941 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15942 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15943 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15944 t0 = HEAP[inv_sbox | s0] ^ R30;
15945 t1 = HEAP[inv_sbox | s1] ^ R31;
15946 t2 = HEAP[inv_sbox | s2] ^ R32;
15947 t3 = HEAP[inv_sbox | s3] ^ R33;
15948 t4 = HEAP[inv_sbox | s4] ^ R34;
15949 t5 = HEAP[inv_sbox | s5] ^ R35;
15950 t6 = HEAP[inv_sbox | s6] ^ R36;
15951 t7 = HEAP[inv_sbox | s7] ^ R37;
15952 t8 = HEAP[inv_sbox | s8] ^ R38;
15953 t9 = HEAP[inv_sbox | s9] ^ R39;
15954 tA = HEAP[inv_sbox | sA] ^ R3A;
15955 tB = HEAP[inv_sbox | sB] ^ R3B;
15956 tC = HEAP[inv_sbox | sC] ^ R3C;
15957 tD = HEAP[inv_sbox | sD] ^ R3D;
15958 tE = HEAP[inv_sbox | sE] ^ R3E;
15959 tF = HEAP[inv_sbox | sF] ^ R3F;
15960 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15961 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15962 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15963 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15964 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15965 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15966 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15967 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
15968 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
15969 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
15970 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
15971 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
15972 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
15973 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
15974 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
15975 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
15976 t0 = HEAP[inv_sbox | s0] ^ R20;
15977 t1 = HEAP[inv_sbox | s1] ^ R21;
15978 t2 = HEAP[inv_sbox | s2] ^ R22;
15979 t3 = HEAP[inv_sbox | s3] ^ R23;
15980 t4 = HEAP[inv_sbox | s4] ^ R24;
15981 t5 = HEAP[inv_sbox | s5] ^ R25;
15982 t6 = HEAP[inv_sbox | s6] ^ R26;
15983 t7 = HEAP[inv_sbox | s7] ^ R27;
15984 t8 = HEAP[inv_sbox | s8] ^ R28;
15985 t9 = HEAP[inv_sbox | s9] ^ R29;
15986 tA = HEAP[inv_sbox | sA] ^ R2A;
15987 tB = HEAP[inv_sbox | sB] ^ R2B;
15988 tC = HEAP[inv_sbox | sC] ^ R2C;
15989 tD = HEAP[inv_sbox | sD] ^ R2D;
15990 tE = HEAP[inv_sbox | sE] ^ R2E;
15991 tF = HEAP[inv_sbox | sF] ^ R2F;
15992 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
15993 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
15994 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
15995 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
15996 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
15997 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
15998 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
15999 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
16000 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
16001 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
16002 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
16003 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
16004 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
16005 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
16006 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
16007 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
16008 t0 = HEAP[inv_sbox | s0] ^ R10;
16009 t1 = HEAP[inv_sbox | s1] ^ R11;
16010 t2 = HEAP[inv_sbox | s2] ^ R12;
16011 t3 = HEAP[inv_sbox | s3] ^ R13;
16012 t4 = HEAP[inv_sbox | s4] ^ R14;
16013 t5 = HEAP[inv_sbox | s5] ^ R15;
16014 t6 = HEAP[inv_sbox | s6] ^ R16;
16015 t7 = HEAP[inv_sbox | s7] ^ R17;
16016 t8 = HEAP[inv_sbox | s8] ^ R18;
16017 t9 = HEAP[inv_sbox | s9] ^ R19;
16018 tA = HEAP[inv_sbox | sA] ^ R1A;
16019 tB = HEAP[inv_sbox | sB] ^ R1B;
16020 tC = HEAP[inv_sbox | sC] ^ R1C;
16021 tD = HEAP[inv_sbox | sD] ^ R1D;
16022 tE = HEAP[inv_sbox | sE] ^ R1E;
16023 tF = HEAP[inv_sbox | sF] ^ R1F;
16024 s0 = HEAP[xE | t0] ^ HEAP[xB | t1] ^ HEAP[xD | t2] ^ HEAP[x9 | t3];
16025 s1 = HEAP[x9 | tC] ^ HEAP[xE | tD] ^ HEAP[xB | tE] ^ HEAP[xD | tF];
16026 s2 = HEAP[xD | t8] ^ HEAP[x9 | t9] ^ HEAP[xE | tA] ^ HEAP[xB | tB];
16027 s3 = HEAP[xB | t4] ^ HEAP[xD | t5] ^ HEAP[x9 | t6] ^ HEAP[xE | t7];
16028 s4 = HEAP[xE | t4] ^ HEAP[xB | t5] ^ HEAP[xD | t6] ^ HEAP[x9 | t7];
16029 s5 = HEAP[x9 | t0] ^ HEAP[xE | t1] ^ HEAP[xB | t2] ^ HEAP[xD | t3];
16030 s6 = HEAP[xD | tC] ^ HEAP[x9 | tD] ^ HEAP[xE | tE] ^ HEAP[xB | tF];
16031 s7 = HEAP[xB | t8] ^ HEAP[xD | t9] ^ HEAP[x9 | tA] ^ HEAP[xE | tB];
16032 s8 = HEAP[xE | t8] ^ HEAP[xB | t9] ^ HEAP[xD | tA] ^ HEAP[x9 | tB];
16033 s9 = HEAP[x9 | t4] ^ HEAP[xE | t5] ^ HEAP[xB | t6] ^ HEAP[xD | t7];
16034 sA = HEAP[xD | t0] ^ HEAP[x9 | t1] ^ HEAP[xE | t2] ^ HEAP[xB | t3];
16035 sB = HEAP[xB | tC] ^ HEAP[xD | tD] ^ HEAP[x9 | tE] ^ HEAP[xE | tF];
16036 sC = HEAP[xE | tC] ^ HEAP[xB | tD] ^ HEAP[xD | tE] ^ HEAP[x9 | tF];
16037 sD = HEAP[x9 | t8] ^ HEAP[xE | t9] ^ HEAP[xB | tA] ^ HEAP[xD | tB];
16038 sE = HEAP[xD | t4] ^ HEAP[x9 | t5] ^ HEAP[xE | t6] ^ HEAP[xB | t7];
16039 sF = HEAP[xB | t0] ^ HEAP[xD | t1] ^ HEAP[x9 | t2] ^ HEAP[xE | t3];
16040 S0 = HEAP[inv_sbox | s0] ^ R00;
16041 S1 = HEAP[inv_sbox | s1] ^ R01;
16042 S2 = HEAP[inv_sbox | s2] ^ R02;
16043 S3 = HEAP[inv_sbox | s3] ^ R03;
16044 S4 = HEAP[inv_sbox | s4] ^ R04;
16045 S5 = HEAP[inv_sbox | s5] ^ R05;
16046 S6 = HEAP[inv_sbox | s6] ^ R06;
16047 S7 = HEAP[inv_sbox | s7] ^ R07;
16048 S8 = HEAP[inv_sbox | s8] ^ R08;
16049 S9 = HEAP[inv_sbox | s9] ^ R09;
16050 SA = HEAP[inv_sbox | sA] ^ R0A;
16051 SB = HEAP[inv_sbox | sB] ^ R0B;
16052 SC = HEAP[inv_sbox | sC] ^ R0C;
16053 SD = HEAP[inv_sbox | sD] ^ R0D;
16054 SE = HEAP[inv_sbox | sE] ^ R0E;
16055 SF = HEAP[inv_sbox | sF] ^ R0F;
16057 function init_state(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF) {
16091 function save_state(offset) {
16092 offset = offset |
0;
16094 HEAP[offset |
1] = S1;
16095 HEAP[offset |
2] = S2;
16096 HEAP[offset |
3] = S3;
16097 HEAP[offset |
4] = S4;
16098 HEAP[offset |
5] = S5;
16099 HEAP[offset |
6] = S6;
16100 HEAP[offset |
7] = S7;
16101 HEAP[offset |
8] = S8;
16102 HEAP[offset |
9] = S9;
16103 HEAP[offset |
10] = SA;
16104 HEAP[offset |
11] = SB;
16105 HEAP[offset |
12] = SC;
16106 HEAP[offset |
13] = SD;
16107 HEAP[offset |
14] = SE;
16108 HEAP[offset |
15] = SF;
16110 function init_key_128(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, kA, kB, kC, kD, kE, kF) {
16146 function init_key_256(k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F) {
16214 function cbc_encrypt(offset, length) {
16215 offset = offset |
0;
16216 length = length |
0;
16218 if (offset &
15) return -
1;
16219 while ((length |
0)
>=
16) {
16220 _encrypt(S0 ^ HEAP[offset], S1 ^ HEAP[offset |
1], S2 ^ HEAP[offset |
2], S3 ^ HEAP[offset |
3], S4 ^ HEAP[offset |
4], S5 ^ HEAP[offset |
5], S6 ^ HEAP[offset |
6], S7 ^ HEAP[offset |
7], S8 ^ HEAP[offset |
8], S9 ^ HEAP[offset |
9], SA ^ HEAP[offset |
10], SB ^ HEAP[offset |
11], SC ^ HEAP[offset |
12], SD ^ HEAP[offset |
13], SE ^ HEAP[offset |
14], SF ^ HEAP[offset |
15]);
16222 HEAP[offset |
1] = S1;
16223 HEAP[offset |
2] = S2;
16224 HEAP[offset |
3] = S3;
16225 HEAP[offset |
4] = S4;
16226 HEAP[offset |
5] = S5;
16227 HEAP[offset |
6] = S6;
16228 HEAP[offset |
7] = S7;
16229 HEAP[offset |
8] = S8;
16230 HEAP[offset |
9] = S9;
16231 HEAP[offset |
10] = SA;
16232 HEAP[offset |
11] = SB;
16233 HEAP[offset |
12] = SC;
16234 HEAP[offset |
13] = SD;
16235 HEAP[offset |
14] = SE;
16236 HEAP[offset |
15] = SF;
16237 offset = offset +
16 |
0;
16238 length = length -
16 |
0;
16239 encrypted = encrypted +
16 |
0;
16241 return encrypted |
0;
16243 function cbc_decrypt(offset, length) {
16244 offset = offset |
0;
16245 length = length |
0;
16246 var iv0 =
0, iv1 =
0, iv2 =
0, iv3 =
0, iv4 =
0, iv5 =
0, iv6 =
0, iv7 =
0, iv8 =
0, iv9 =
0, ivA =
0, ivB =
0, ivC =
0, ivD =
0, ivE =
0, ivF =
0, decrypted =
0;
16247 if (offset &
15) return -
1;
16264 while ((length |
0)
>=
16) {
16265 _decrypt(HEAP[offset] |
0, HEAP[offset |
1] |
0, HEAP[offset |
2] |
0, HEAP[offset |
3] |
0, HEAP[offset |
4] |
0, HEAP[offset |
5] |
0, HEAP[offset |
6] |
0, HEAP[offset |
7] |
0, HEAP[offset |
8] |
0, HEAP[offset |
9] |
0, HEAP[offset |
10] |
0, HEAP[offset |
11] |
0, HEAP[offset |
12] |
0, HEAP[offset |
13] |
0, HEAP[offset |
14] |
0, HEAP[offset |
15] |
0);
16267 iv0 = HEAP[offset] |
0;
16269 iv1 = HEAP[offset |
1] |
0;
16271 iv2 = HEAP[offset |
2] |
0;
16273 iv3 = HEAP[offset |
3] |
0;
16275 iv4 = HEAP[offset |
4] |
0;
16277 iv5 = HEAP[offset |
5] |
0;
16279 iv6 = HEAP[offset |
6] |
0;
16281 iv7 = HEAP[offset |
7] |
0;
16283 iv8 = HEAP[offset |
8] |
0;
16285 iv9 = HEAP[offset |
9] |
0;
16287 ivA = HEAP[offset |
10] |
0;
16289 ivB = HEAP[offset |
11] |
0;
16291 ivC = HEAP[offset |
12] |
0;
16293 ivD = HEAP[offset |
13] |
0;
16295 ivE = HEAP[offset |
14] |
0;
16297 ivF = HEAP[offset |
15] |
0;
16299 HEAP[offset |
1] = S1;
16300 HEAP[offset |
2] = S2;
16301 HEAP[offset |
3] = S3;
16302 HEAP[offset |
4] = S4;
16303 HEAP[offset |
5] = S5;
16304 HEAP[offset |
6] = S6;
16305 HEAP[offset |
7] = S7;
16306 HEAP[offset |
8] = S8;
16307 HEAP[offset |
9] = S9;
16308 HEAP[offset |
10] = SA;
16309 HEAP[offset |
11] = SB;
16310 HEAP[offset |
12] = SC;
16311 HEAP[offset |
13] = SD;
16312 HEAP[offset |
14] = SE;
16313 HEAP[offset |
15] = SF;
16314 offset = offset +
16 |
0;
16315 length = length -
16 |
0;
16316 decrypted = decrypted +
16 |
0;
16334 return decrypted |
0;
16336 function cbc_mac(offset, length, output) {
16337 offset = offset |
0;
16338 length = length |
0;
16339 output = output |
0;
16340 if (offset &
15) return -
1;
16341 if (~output) if (output &
31) return -
1;
16342 while ((length |
0)
>=
16) {
16343 _encrypt(S0 ^ HEAP[offset], S1 ^ HEAP[offset |
1], S2 ^ HEAP[offset |
2], S3 ^ HEAP[offset |
3], S4 ^ HEAP[offset |
4], S5 ^ HEAP[offset |
5], S6 ^ HEAP[offset |
6], S7 ^ HEAP[offset |
7], S8 ^ HEAP[offset |
8], S9 ^ HEAP[offset |
9], SA ^ HEAP[offset |
10], SB ^ HEAP[offset |
11], SC ^ HEAP[offset |
12], SD ^ HEAP[offset |
13], SE ^ HEAP[offset |
14], SF ^ HEAP[offset |
15]);
16344 offset = offset +
16 |
0;
16345 length = length -
16 |
0;
16347 if ((length |
0)
> 0) {
16348 S0 = S0 ^ HEAP[offset];
16349 if ((length |
0)
> 1) S1 = S1 ^ HEAP[offset |
1];
16350 if ((length |
0)
> 2) S2 = S2 ^ HEAP[offset |
2];
16351 if ((length |
0)
> 3) S3 = S3 ^ HEAP[offset |
3];
16352 if ((length |
0)
> 4) S4 = S4 ^ HEAP[offset |
4];
16353 if ((length |
0)
> 5) S5 = S5 ^ HEAP[offset |
5];
16354 if ((length |
0)
> 6) S6 = S6 ^ HEAP[offset |
6];
16355 if ((length |
0)
> 7) S7 = S7 ^ HEAP[offset |
7];
16356 if ((length |
0)
> 8) S8 = S8 ^ HEAP[offset |
8];
16357 if ((length |
0)
> 9) S9 = S9 ^ HEAP[offset |
9];
16358 if ((length |
0)
> 10) SA = SA ^ HEAP[offset |
10];
16359 if ((length |
0)
> 11) SB = SB ^ HEAP[offset |
11];
16360 if ((length |
0)
> 12) SC = SC ^ HEAP[offset |
12];
16361 if ((length |
0)
> 13) SD = SD ^ HEAP[offset |
13];
16362 if ((length |
0)
> 14) SE = SE ^ HEAP[offset |
14];
16363 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
16364 offset = offset + length |
0;
16368 HEAP[output |
0] = S0;
16369 HEAP[output |
1] = S1;
16370 HEAP[output |
2] = S2;
16371 HEAP[output |
3] = S3;
16372 HEAP[output |
4] = S4;
16373 HEAP[output |
5] = S5;
16374 HEAP[output |
6] = S6;
16375 HEAP[output |
7] = S7;
16376 HEAP[output |
8] = S8;
16377 HEAP[output |
9] = S9;
16378 HEAP[output |
10] = SA;
16379 HEAP[output |
11] = SB;
16380 HEAP[output |
12] = SC;
16381 HEAP[output |
13] = SD;
16382 HEAP[output |
14] = SE;
16383 HEAP[output |
15] = SF;
16387 function ccm_encrypt(offset, length, nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8, nonce9, nonceA, nonceB, nonceC, nonceD, counter0, counter1) {
16388 offset = offset |
0;
16389 length = length |
0;
16390 nonce0 = nonce0 |
0;
16391 nonce1 = nonce1 |
0;
16392 nonce2 = nonce2 |
0;
16393 nonce3 = nonce3 |
0;
16394 nonce4 = nonce4 |
0;
16395 nonce5 = nonce5 |
0;
16396 nonce6 = nonce6 |
0;
16397 nonce7 = nonce7 |
0;
16398 nonce8 = nonce8 |
0;
16399 nonce9 = nonce9 |
0;
16400 nonceA = nonceA |
0;
16401 nonceB = nonceB |
0;
16402 nonceC = nonceC |
0;
16403 nonceD = nonceD |
0;
16404 counter0 = counter0 |
0;
16405 counter1 = counter1 |
0;
16406 var iv0 =
0, iv1 =
0, iv2 =
0, iv3 =
0, iv4 =
0, iv5 =
0, iv6 =
0, iv7 =
0, iv8 =
0, iv9 =
0, ivA =
0, ivB =
0, ivC =
0, ivD =
0, ivE =
0, ivF =
0, s0 =
0, s1 =
0, s2 =
0, s3 =
0, s4 =
0, s5 =
0, s6 =
0, s7 =
0, s8 =
0, s9 =
0, sA =
0, sB =
0, sC =
0, sD =
0, sE =
0, sF =
0, encrypted =
0;
16407 if (offset &
15) return -
1;
16408 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
16409 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
16410 while ((length |
0)
>=
16) {
16411 s0 = HEAP[offset] |
0;
16412 s1 = HEAP[offset |
1] |
0;
16413 s2 = HEAP[offset |
2] |
0;
16414 s3 = HEAP[offset |
3] |
0;
16415 s4 = HEAP[offset |
4] |
0;
16416 s5 = HEAP[offset |
5] |
0;
16417 s6 = HEAP[offset |
6] |
0;
16418 s7 = HEAP[offset |
7] |
0;
16419 s8 = HEAP[offset |
8] |
0;
16420 s9 = HEAP[offset |
9] |
0;
16421 sA = HEAP[offset |
10] |
0;
16422 sB = HEAP[offset |
11] |
0;
16423 sC = HEAP[offset |
12] |
0;
16424 sD = HEAP[offset |
13] |
0;
16425 sE = HEAP[offset |
14] |
0;
16426 sF = HEAP[offset |
15] |
0;
16427 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0
>>> 24, nonce9 ^ counter0
>>> 16 &
255, nonceA ^ counter0
>>> 8 &
255, nonceB ^ counter0 &
255, nonceC ^ counter1
>>> 24, nonceD ^ counter1
>>> 16 &
255, counter1
>>> 8 &
255, counter1 &
255);
16428 HEAP[offset] = s0 ^ S0;
16429 HEAP[offset |
1] = s1 ^ S1;
16430 HEAP[offset |
2] = s2 ^ S2;
16431 HEAP[offset |
3] = s3 ^ S3;
16432 HEAP[offset |
4] = s4 ^ S4;
16433 HEAP[offset |
5] = s5 ^ S5;
16434 HEAP[offset |
6] = s6 ^ S6;
16435 HEAP[offset |
7] = s7 ^ S7;
16436 HEAP[offset |
8] = s8 ^ S8;
16437 HEAP[offset |
9] = s9 ^ S9;
16438 HEAP[offset |
10] = sA ^ SA;
16439 HEAP[offset |
11] = sB ^ SB;
16440 HEAP[offset |
12] = sC ^ SC;
16441 HEAP[offset |
13] = sD ^ SD;
16442 HEAP[offset |
14] = sE ^ SE;
16443 HEAP[offset |
15] = sF ^ SF;
16444 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, sF ^ ivF);
16445 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
16446 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
16447 encrypted = encrypted +
16 |
0;
16448 offset = offset +
16 |
0;
16449 length = length -
16 |
0;
16450 counter1 = counter1 +
1 |
0;
16451 if ((counter1 |
0) ==
0) counter0 = counter0 +
1 |
0;
16453 if ((length |
0)
> 0) {
16454 s0 = HEAP[offset] |
0;
16455 s1 = (length |
0)
> 1 ? HEAP[offset |
1] |
0 :
0;
16456 s2 = (length |
0)
> 2 ? HEAP[offset |
2] |
0 :
0;
16457 s3 = (length |
0)
> 3 ? HEAP[offset |
3] |
0 :
0;
16458 s4 = (length |
0)
> 4 ? HEAP[offset |
4] |
0 :
0;
16459 s5 = (length |
0)
> 5 ? HEAP[offset |
5] |
0 :
0;
16460 s6 = (length |
0)
> 6 ? HEAP[offset |
6] |
0 :
0;
16461 s7 = (length |
0)
> 7 ? HEAP[offset |
7] |
0 :
0;
16462 s8 = (length |
0)
> 8 ? HEAP[offset |
8] |
0 :
0;
16463 s9 = (length |
0)
> 9 ? HEAP[offset |
9] |
0 :
0;
16464 sA = (length |
0)
> 10 ? HEAP[offset |
10] |
0 :
0;
16465 sB = (length |
0)
> 11 ? HEAP[offset |
11] |
0 :
0;
16466 sC = (length |
0)
> 12 ? HEAP[offset |
12] |
0 :
0;
16467 sD = (length |
0)
> 13 ? HEAP[offset |
13] |
0 :
0;
16468 sE = (length |
0)
> 14 ? HEAP[offset |
14] |
0 :
0;
16469 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0
>>> 24, nonce9 ^ counter0
>>> 16 &
255, nonceA ^ counter0
>>> 8 &
255, nonceB ^ counter0 &
255, nonceC ^ counter1
>>> 24, nonceD ^ counter1
>>> 16 &
255, counter1
>>> 8 &
255, counter1 &
255);
16470 HEAP[offset] = s0 ^ S0;
16471 if ((length |
0)
> 1) HEAP[offset |
1] = s1 ^ S1;
16472 if ((length |
0)
> 2) HEAP[offset |
2] = s2 ^ S2;
16473 if ((length |
0)
> 3) HEAP[offset |
3] = s3 ^ S3;
16474 if ((length |
0)
> 4) HEAP[offset |
4] = s4 ^ S4;
16475 if ((length |
0)
> 5) HEAP[offset |
5] = s5 ^ S5;
16476 if ((length |
0)
> 6) HEAP[offset |
6] = s6 ^ S6;
16477 if ((length |
0)
> 7) HEAP[offset |
7] = s7 ^ S7;
16478 if ((length |
0)
> 8) HEAP[offset |
8] = s8 ^ S8;
16479 if ((length |
0)
> 9) HEAP[offset |
9] = s9 ^ S9;
16480 if ((length |
0)
> 10) HEAP[offset |
10] = sA ^ SA;
16481 if ((length |
0)
> 11) HEAP[offset |
11] = sB ^ SB;
16482 if ((length |
0)
> 12) HEAP[offset |
12] = sC ^ SC;
16483 if ((length |
0)
> 13) HEAP[offset |
13] = sD ^ SD;
16484 if ((length |
0)
> 14) HEAP[offset |
14] = sE ^ SE;
16485 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, ivF);
16486 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
16487 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
16488 encrypted = encrypted + length |
0;
16489 offset = offset + length |
0;
16491 counter1 = counter1 +
1 |
0;
16492 if ((counter1 |
0) ==
0) counter0 = counter0 +
1 |
0;
16494 return encrypted |
0;
16496 function ccm_decrypt(offset, length, nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8, nonce9, nonceA, nonceB, nonceC, nonceD, counter0, counter1) {
16497 offset = offset |
0;
16498 length = length |
0;
16499 nonce0 = nonce0 |
0;
16500 nonce1 = nonce1 |
0;
16501 nonce2 = nonce2 |
0;
16502 nonce3 = nonce3 |
0;
16503 nonce4 = nonce4 |
0;
16504 nonce5 = nonce5 |
0;
16505 nonce6 = nonce6 |
0;
16506 nonce7 = nonce7 |
0;
16507 nonce8 = nonce8 |
0;
16508 nonce9 = nonce9 |
0;
16509 nonceA = nonceA |
0;
16510 nonceB = nonceB |
0;
16511 nonceC = nonceC |
0;
16512 nonceD = nonceD |
0;
16513 counter0 = counter0 |
0;
16514 counter1 = counter1 |
0;
16515 var iv0 =
0, iv1 =
0, iv2 =
0, iv3 =
0, iv4 =
0, iv5 =
0, iv6 =
0, iv7 =
0, iv8 =
0, iv9 =
0, ivA =
0, ivB =
0, ivC =
0, ivD =
0, ivE =
0, ivF =
0, s0 =
0, s1 =
0, s2 =
0, s3 =
0, s4 =
0, s5 =
0, s6 =
0, s7 =
0, s8 =
0, s9 =
0, sA =
0, sB =
0, sC =
0, sD =
0, sE =
0, sF =
0, decrypted =
0;
16516 if (offset &
15) return -
1;
16517 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
16518 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
16519 while ((length |
0)
>=
16) {
16520 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0
>>> 24, nonce9 ^ counter0
>>> 16 &
255, nonceA ^ counter0
>>> 8 &
255, nonceB ^ counter0 &
255, nonceC ^ counter1
>>> 24, nonceD ^ counter1
>>> 16 &
255, counter1
>>> 8 &
255, counter1 &
255);
16521 HEAP[offset] = s0 = HEAP[offset] ^ S0;
16522 HEAP[offset |
1] = s1 = HEAP[offset |
1] ^ S1;
16523 HEAP[offset |
2] = s2 = HEAP[offset |
2] ^ S2;
16524 HEAP[offset |
3] = s3 = HEAP[offset |
3] ^ S3;
16525 HEAP[offset |
4] = s4 = HEAP[offset |
4] ^ S4;
16526 HEAP[offset |
5] = s5 = HEAP[offset |
5] ^ S5;
16527 HEAP[offset |
6] = s6 = HEAP[offset |
6] ^ S6;
16528 HEAP[offset |
7] = s7 = HEAP[offset |
7] ^ S7;
16529 HEAP[offset |
8] = s8 = HEAP[offset |
8] ^ S8;
16530 HEAP[offset |
9] = s9 = HEAP[offset |
9] ^ S9;
16531 HEAP[offset |
10] = sA = HEAP[offset |
10] ^ SA;
16532 HEAP[offset |
11] = sB = HEAP[offset |
11] ^ SB;
16533 HEAP[offset |
12] = sC = HEAP[offset |
12] ^ SC;
16534 HEAP[offset |
13] = sD = HEAP[offset |
13] ^ SD;
16535 HEAP[offset |
14] = sE = HEAP[offset |
14] ^ SE;
16536 HEAP[offset |
15] = sF = HEAP[offset |
15] ^ SF;
16537 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, sF ^ ivF);
16538 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
16539 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
16540 decrypted = decrypted +
16 |
0;
16541 offset = offset +
16 |
0;
16542 length = length -
16 |
0;
16543 counter1 = counter1 +
1 |
0;
16544 if ((counter1 |
0) ==
0) counter0 = counter0 +
1 |
0;
16546 if ((length |
0)
> 0) {
16547 _encrypt(nonce0, nonce1, nonce2, nonce3, nonce4, nonce5, nonce6, nonce7, nonce8 ^ counter0
>>> 24, nonce9 ^ counter0
>>> 16 &
255, nonceA ^ counter0
>>> 8 &
255, nonceB ^ counter0 &
255, nonceC ^ counter1
>>> 24, nonceD ^ counter1
>>> 16 &
255, counter1
>>> 8 &
255, counter1 &
255);
16548 s0 = HEAP[offset] ^ S0;
16549 s1 = (length |
0)
> 1 ? HEAP[offset |
1] ^ S1 :
0;
16550 s2 = (length |
0)
> 2 ? HEAP[offset |
2] ^ S2 :
0;
16551 s3 = (length |
0)
> 3 ? HEAP[offset |
3] ^ S3 :
0;
16552 s4 = (length |
0)
> 4 ? HEAP[offset |
4] ^ S4 :
0;
16553 s5 = (length |
0)
> 5 ? HEAP[offset |
5] ^ S5 :
0;
16554 s6 = (length |
0)
> 6 ? HEAP[offset |
6] ^ S6 :
0;
16555 s7 = (length |
0)
> 7 ? HEAP[offset |
7] ^ S7 :
0;
16556 s8 = (length |
0)
> 8 ? HEAP[offset |
8] ^ S8 :
0;
16557 s9 = (length |
0)
> 9 ? HEAP[offset |
9] ^ S9 :
0;
16558 sA = (length |
0)
> 10 ? HEAP[offset |
10] ^ SA :
0;
16559 sB = (length |
0)
> 11 ? HEAP[offset |
11] ^ SB :
0;
16560 sC = (length |
0)
> 12 ? HEAP[offset |
12] ^ SC :
0;
16561 sD = (length |
0)
> 13 ? HEAP[offset |
13] ^ SD :
0;
16562 sE = (length |
0)
> 14 ? HEAP[offset |
14] ^ SE :
0;
16563 sF = (length |
0)
> 15 ? HEAP[offset |
15] ^ SF :
0;
16565 if ((length |
0)
> 1) HEAP[offset |
1] = s1;
16566 if ((length |
0)
> 2) HEAP[offset |
2] = s2;
16567 if ((length |
0)
> 3) HEAP[offset |
3] = s3;
16568 if ((length |
0)
> 4) HEAP[offset |
4] = s4;
16569 if ((length |
0)
> 5) HEAP[offset |
5] = s5;
16570 if ((length |
0)
> 6) HEAP[offset |
6] = s6;
16571 if ((length |
0)
> 7) HEAP[offset |
7] = s7;
16572 if ((length |
0)
> 8) HEAP[offset |
8] = s8;
16573 if ((length |
0)
> 9) HEAP[offset |
9] = s9;
16574 if ((length |
0)
> 10) HEAP[offset |
10] = sA;
16575 if ((length |
0)
> 11) HEAP[offset |
11] = sB;
16576 if ((length |
0)
> 12) HEAP[offset |
12] = sC;
16577 if ((length |
0)
> 13) HEAP[offset |
13] = sD;
16578 if ((length |
0)
> 14) HEAP[offset |
14] = sE;
16579 _encrypt(s0 ^ iv0, s1 ^ iv1, s2 ^ iv2, s3 ^ iv3, s4 ^ iv4, s5 ^ iv5, s6 ^ iv6, s7 ^ iv7, s8 ^ iv8, s9 ^ iv9, sA ^ ivA, sB ^ ivB, sC ^ ivC, sD ^ ivD, sE ^ ivE, sF ^ ivF);
16580 iv0 = S0, iv1 = S1, iv2 = S2, iv3 = S3, iv4 = S4, iv5 = S5, iv6 = S6, iv7 = S7,
16581 iv8 = S8, iv9 = S9, ivA = SA, ivB = SB, ivC = SC, ivD = SD, ivE = SE, ivF = SF;
16582 decrypted = decrypted + length |
0;
16583 offset = offset + length |
0;
16585 counter1 = counter1 +
1 |
0;
16586 if ((counter1 |
0) ==
0) counter0 = counter0 +
1 |
0;
16588 return decrypted |
0;
16590 function cfb_encrypt(offset, length) {
16591 offset = offset |
0;
16592 length = length |
0;
16594 if (offset &
15) return -
1;
16595 while ((length |
0)
>=
16) {
16596 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
16597 S0 = S0 ^ HEAP[offset];
16598 S1 = S1 ^ HEAP[offset |
1];
16599 S2 = S2 ^ HEAP[offset |
2];
16600 S3 = S3 ^ HEAP[offset |
3];
16601 S4 = S4 ^ HEAP[offset |
4];
16602 S5 = S5 ^ HEAP[offset |
5];
16603 S6 = S6 ^ HEAP[offset |
6];
16604 S7 = S7 ^ HEAP[offset |
7];
16605 S8 = S8 ^ HEAP[offset |
8];
16606 S9 = S9 ^ HEAP[offset |
9];
16607 SA = SA ^ HEAP[offset |
10];
16608 SB = SB ^ HEAP[offset |
11];
16609 SC = SC ^ HEAP[offset |
12];
16610 SD = SD ^ HEAP[offset |
13];
16611 SE = SE ^ HEAP[offset |
14];
16612 SF = SF ^ HEAP[offset |
15];
16614 HEAP[offset |
1] = S1;
16615 HEAP[offset |
2] = S2;
16616 HEAP[offset |
3] = S3;
16617 HEAP[offset |
4] = S4;
16618 HEAP[offset |
5] = S5;
16619 HEAP[offset |
6] = S6;
16620 HEAP[offset |
7] = S7;
16621 HEAP[offset |
8] = S8;
16622 HEAP[offset |
9] = S9;
16623 HEAP[offset |
10] = SA;
16624 HEAP[offset |
11] = SB;
16625 HEAP[offset |
12] = SC;
16626 HEAP[offset |
13] = SD;
16627 HEAP[offset |
14] = SE;
16628 HEAP[offset |
15] = SF;
16629 offset = offset +
16 |
0;
16630 length = length -
16 |
0;
16631 encrypted = encrypted +
16 |
0;
16633 if ((length |
0)
> 0) {
16634 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
16635 HEAP[offset] = HEAP[offset] ^ S0;
16636 if ((length |
0)
> 1) HEAP[offset |
1] = HEAP[offset |
1] ^ S1;
16637 if ((length |
0)
> 2) HEAP[offset |
2] = HEAP[offset |
2] ^ S2;
16638 if ((length |
0)
> 3) HEAP[offset |
3] = HEAP[offset |
3] ^ S3;
16639 if ((length |
0)
> 4) HEAP[offset |
4] = HEAP[offset |
4] ^ S4;
16640 if ((length |
0)
> 5) HEAP[offset |
5] = HEAP[offset |
5] ^ S5;
16641 if ((length |
0)
> 6) HEAP[offset |
6] = HEAP[offset |
6] ^ S6;
16642 if ((length |
0)
> 7) HEAP[offset |
7] = HEAP[offset |
7] ^ S7;
16643 if ((length |
0)
> 8) HEAP[offset |
8] = HEAP[offset |
8] ^ S8;
16644 if ((length |
0)
> 9) HEAP[offset |
9] = HEAP[offset |
9] ^ S9;
16645 if ((length |
0)
> 10) HEAP[offset |
10] = HEAP[offset |
10] ^ SA;
16646 if ((length |
0)
> 11) HEAP[offset |
11] = HEAP[offset |
11] ^ SB;
16647 if ((length |
0)
> 12) HEAP[offset |
12] = HEAP[offset |
12] ^ SC;
16648 if ((length |
0)
> 13) HEAP[offset |
13] = HEAP[offset |
13] ^ SD;
16649 if ((length |
0)
> 14) HEAP[offset |
14] = HEAP[offset |
14] ^ SE;
16650 encrypted = encrypted + length |
0;
16651 offset = offset + length |
0;
16654 return encrypted |
0;
16656 function cfb_decrypt(offset, length) {
16657 offset = offset |
0;
16658 length = length |
0;
16659 var iv0 =
0, iv1 =
0, iv2 =
0, iv3 =
0, iv4 =
0, iv5 =
0, iv6 =
0, iv7 =
0, iv8 =
0, iv9 =
0, ivA =
0, ivB =
0, ivC =
0, ivD =
0, ivE =
0, ivF =
0, decrypted =
0;
16660 if (offset &
15) return -
1;
16661 while ((length |
0)
>=
16) {
16662 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
16663 iv0 = HEAP[offset] |
0;
16664 iv1 = HEAP[offset |
1] |
0;
16665 iv2 = HEAP[offset |
2] |
0;
16666 iv3 = HEAP[offset |
3] |
0;
16667 iv4 = HEAP[offset |
4] |
0;
16668 iv5 = HEAP[offset |
5] |
0;
16669 iv6 = HEAP[offset |
6] |
0;
16670 iv7 = HEAP[offset |
7] |
0;
16671 iv8 = HEAP[offset |
8] |
0;
16672 iv9 = HEAP[offset |
9] |
0;
16673 ivA = HEAP[offset |
10] |
0;
16674 ivB = HEAP[offset |
11] |
0;
16675 ivC = HEAP[offset |
12] |
0;
16676 ivD = HEAP[offset |
13] |
0;
16677 ivE = HEAP[offset |
14] |
0;
16678 ivF = HEAP[offset |
15] |
0;
16679 HEAP[offset] = S0 ^ iv0;
16680 HEAP[offset |
1] = S1 ^ iv1;
16681 HEAP[offset |
2] = S2 ^ iv2;
16682 HEAP[offset |
3] = S3 ^ iv3;
16683 HEAP[offset |
4] = S4 ^ iv4;
16684 HEAP[offset |
5] = S5 ^ iv5;
16685 HEAP[offset |
6] = S6 ^ iv6;
16686 HEAP[offset |
7] = S7 ^ iv7;
16687 HEAP[offset |
8] = S8 ^ iv8;
16688 HEAP[offset |
9] = S9 ^ iv9;
16689 HEAP[offset |
10] = SA ^ ivA;
16690 HEAP[offset |
11] = SB ^ ivB;
16691 HEAP[offset |
12] = SC ^ ivC;
16692 HEAP[offset |
13] = SD ^ ivD;
16693 HEAP[offset |
14] = SE ^ ivE;
16694 HEAP[offset |
15] = SF ^ ivF;
16711 offset = offset +
16 |
0;
16712 length = length -
16 |
0;
16713 decrypted = decrypted +
16 |
0;
16715 if ((length |
0)
> 0) {
16716 _encrypt(S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, SA, SB, SC, SD, SE, SF);
16717 HEAP[offset] = HEAP[offset] ^ S0;
16718 if ((length |
0)
> 1) HEAP[offset |
1] = HEAP[offset |
1] ^ S1;
16719 if ((length |
0)
> 2) HEAP[offset |
2] = HEAP[offset |
2] ^ S2;
16720 if ((length |
0)
> 3) HEAP[offset |
3] = HEAP[offset |
3] ^ S3;
16721 if ((length |
0)
> 4) HEAP[offset |
4] = HEAP[offset |
4] ^ S4;
16722 if ((length |
0)
> 5) HEAP[offset |
5] = HEAP[offset |
5] ^ S5;
16723 if ((length |
0)
> 6) HEAP[offset |
6] = HEAP[offset |
6] ^ S6;
16724 if ((length |
0)
> 7) HEAP[offset |
7] = HEAP[offset |
7] ^ S7;
16725 if ((length |
0)
> 8) HEAP[offset |
8] = HEAP[offset |
8] ^ S8;
16726 if ((length |
0)
> 9) HEAP[offset |
9] = HEAP[offset |
9] ^ S9;
16727 if ((length |
0)
> 10) HEAP[offset |
10] = HEAP[offset |
10] ^ SA;
16728 if ((length |
0)
> 11) HEAP[offset |
11] = HEAP[offset |
11] ^ SB;
16729 if ((length |
0)
> 12) HEAP[offset |
12] = HEAP[offset |
12] ^ SC;
16730 if ((length |
0)
> 13) HEAP[offset |
13] = HEAP[offset |
13] ^ SD;
16731 if ((length |
0)
> 14) HEAP[offset |
14] = HEAP[offset |
14] ^ SE;
16732 decrypted = decrypted + length |
0;
16733 offset = offset + length |
0;
16736 return decrypted |
0;
16739 init_state: init_state,
16740 save_state: save_state,
16741 init_key_128: init_key_128,
16742 init_key_256: init_key_256,
16743 cbc_encrypt: cbc_encrypt,
16744 cbc_decrypt: cbc_decrypt,
16746 ccm_encrypt: ccm_encrypt,
16747 ccm_decrypt: ccm_decrypt,
16748 cfb_encrypt: cfb_encrypt,
16749 cfb_decrypt: cfb_decrypt
16752 function aes_asm(stdlib, foreign, buffer) {
16753 var heap = new Uint8Array(buffer);
16754 heap.set(_aes_tables);
16755 return _aes_asm(stdlib, foreign, buffer);
16757 var _aes_block_size =
16;
16758 function _aes_constructor(options) {
16759 options = options || {};
16760 options.heapSize = options.heapSize ||
4096;
16761 if (options.heapSize <=
0 || options.heapSize %
4096) throw new IllegalArgumentError(
"heapSize must be a positive number and multiple of 4096");
16762 this.BLOCK_SIZE = _aes_block_size;
16763 this.heap = options.heap || new Uint8Array(options.heapSize);
16764 this.asm = options.asm || aes_asm(global, null, this.heap.buffer);
16765 this.pos = _aes_heap_start;
16768 this.result = null;
16769 this.reset(options);
16771 function _aes_reset(options) {
16772 options = options || {};
16773 this.result = null;
16774 this.pos = _aes_heap_start;
16776 var asm = this.asm;
16777 var key = options.key;
16778 if (key !== undefined) {
16779 if (is_buffer(key) || is_bytes(key)) {
16780 key = new Uint8Array(key);
16781 } else if (is_string(key)) {
16783 key = new Uint8Array(str.length);
16784 for (var i =
0; i < str.length; ++i) key[i] = str.charCodeAt(i);
16786 throw new TypeError(
"unexpected key type");
16788 if (key.length ===
16) {
16790 asm.init_key_128.call(asm, key[
0], key[
1], key[
2], key[
3], key[
4], key[
5], key[
6], key[
7], key[
8], key[
9], key[
10], key[
11], key[
12], key[
13], key[
14], key[
15]);
16791 } else if (key.length ===
24) {
16792 throw new IllegalArgumentError(
"illegal key size");
16793 } else if (key.length ===
32) {
16795 asm.init_key_256.call(asm, key[
0], key[
1], key[
2], key[
3], key[
4], key[
5], key[
6], key[
7], key[
8], key[
9], key[
10], key[
11], key[
12], key[
13], key[
14], key[
15], key[
16], key[
17], key[
18], key[
19], key[
20], key[
21], key[
22], key[
23], key[
24], key[
25], key[
26], key[
27], key[
28], key[
29], key[
30], key[
31]);
16797 throw new IllegalArgumentError(
"illegal key size");
16802 function _aes_init_iv(iv) {
16803 var asm = this.asm;
16804 if (iv !== undefined) {
16805 if (is_buffer(iv) || is_bytes(iv)) {
16806 iv = new Uint8Array(iv);
16807 } else if (is_string(iv)) {
16809 iv = new Uint8Array(str.length);
16810 for (var i =
0; i < str.length; ++i) iv[i] = str.charCodeAt(i);
16812 throw new TypeError(
"unexpected iv type");
16814 if (iv.length !== _aes_block_size) throw new IllegalArgumentError(
"illegal iv size");
16816 asm.init_state.call(asm, iv[
0], iv[
1], iv[
2], iv[
3], iv[
4], iv[
5], iv[
6], iv[
7], iv[
8], iv[
9], iv[
10], iv[
11], iv[
12], iv[
13], iv[
14], iv[
15]);
16819 asm.init_state.call(asm,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0);
16822 function _aes_heap_write(heap, hpos, data, dpos, dlen) {
16823 var hlen = heap.byteLength - hpos, wlen = hlen < dlen ? hlen : dlen;
16824 if (is_buffer(data) || is_bytes(data)) {
16825 heap.set(new Uint8Array(data.buffer || data, dpos, wlen), hpos);
16826 } else if (is_string(data)) {
16827 for (var i =
0; i < wlen; ++i) heap[hpos + i] = data.charCodeAt(dpos + i);
16829 throw new TypeError(
"unexpected data type");
16833 function cbc_aes_constructor(options) {
16834 this.padding = true;
16837 _aes_constructor.call(this, options);
16839 function cbc_aes_encrypt_constructor(options) {
16840 cbc_aes_constructor.call(this, options);
16842 function cbc_aes_decrypt_constructor(options) {
16843 cbc_aes_constructor.call(this, options);
16845 function cbc_aes_reset(options) {
16846 options = options || {};
16847 _aes_reset.call(this, options);
16848 var padding = options.padding;
16849 if (padding !== undefined) {
16850 this.padding = !!padding;
16852 this.padding = true;
16854 _aes_init_iv.call(this, options.iv);
16857 function cbc_aes_encrypt_process(data) {
16858 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
16859 var dpos = data.byteOffset ||
0, dlen = data.byteLength || data.length ||
0, asm = this.asm, heap = this.heap, pos = this.pos, len = this.len, rpos =
0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen =
0;
16860 var result = new Uint8Array(rlen);
16862 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
16866 wlen = asm.cbc_encrypt(pos, len);
16867 result.set(heap.subarray(pos, pos + wlen), rpos);
16873 pos = _aes_heap_start;
16877 this.result = result;
16882 function cbc_aes_encrypt_finish() {
16883 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
16884 var asm = this.asm, heap = this.heap, padding = this.padding, pos = this.pos, len = this.len, rlen = _aes_block_size * Math.ceil(len / _aes_block_size);
16885 if (len % _aes_block_size ===
0) {
16886 if (padding) rlen += _aes_block_size;
16887 } else if (!padding) {
16888 throw new IllegalArgumentError(
"data length must be a multiple of " + _aes_block_size);
16890 var result = new Uint8Array(rlen);
16892 var plen = _aes_block_size - len % _aes_block_size;
16893 for (var p =
0; p < plen; ++p) heap[pos + len + p] = plen;
16896 asm.cbc_encrypt(pos, len);
16897 result.set(heap.subarray(pos, pos + len));
16898 this.result = result;
16899 this.pos = _aes_heap_start;
16903 function cbc_aes_encrypt(data) {
16904 var result1 = cbc_aes_encrypt_process.call(this, data).result, result2 = cbc_aes_encrypt_finish.call(this).result, result;
16905 result = new Uint8Array(result1.length + result2.length);
16906 result.set(result1);
16907 result.set(result2, result1.length);
16908 this.result = result;
16911 function cbc_aes_decrypt_process(data) {
16912 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
16913 var dpos = data.byteOffset ||
0, dlen = data.byteLength || data.length ||
0, asm = this.asm, heap = this.heap, padding = this.padding, pos = this.pos, len = this.len, rpos =
0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen =
0;
16914 var result = new Uint8Array(rlen);
16916 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
16920 wlen = asm.cbc_decrypt(pos, len - (padding && dlen ===
0 && len % _aes_block_size ===
0 ? _aes_block_size :
0));
16921 result.set(heap.subarray(pos, pos + wlen), rpos);
16927 pos = _aes_heap_start;
16931 this.result = result.subarray(
0, rpos);
16936 function cbc_aes_decrypt_finish() {
16937 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
16938 var asm = this.asm, heap = this.heap, padding = this.padding, pos = this.pos, len = this.len;
16941 this.result = new Uint8Array(
0);
16942 this.pos = _aes_heap_start;
16946 throw new IllegalStateError(
"padding not found");
16949 if (len % _aes_block_size !==
0) throw new IllegalArgumentError(
"data length must be a multiple of " + _aes_block_size);
16950 var result = new Uint8Array(len);
16951 asm.cbc_decrypt(pos, len);
16952 result.set(heap.subarray(pos, pos + len));
16954 var pad = result[len -
1];
16955 result = result.subarray(
0, len - pad);
16957 this.result = result;
16958 this.pos = _aes_heap_start;
16962 function cbc_aes_decrypt(data) {
16963 var result1 = cbc_aes_decrypt_process.call(this, data).result, result2 = cbc_aes_decrypt_finish.call(this).result, result;
16964 result = new Uint8Array(result1.length + result2.length);
16965 result.set(result1);
16966 result.set(result2, result1.length);
16967 this.result = result;
16970 var cbc_aes_encrypt_prototype = cbc_aes_encrypt_constructor.prototype;
16971 cbc_aes_encrypt_prototype.reset = cbc_aes_reset;
16972 cbc_aes_encrypt_prototype.process = cbc_aes_encrypt_process;
16973 cbc_aes_encrypt_prototype.finish = cbc_aes_encrypt_finish;
16974 var cbc_aes_decrypt_prototype = cbc_aes_decrypt_constructor.prototype;
16975 cbc_aes_decrypt_prototype.reset = cbc_aes_reset;
16976 cbc_aes_decrypt_prototype.process = cbc_aes_decrypt_process;
16977 cbc_aes_decrypt_prototype.finish = cbc_aes_decrypt_finish;
16978 var cbc_aes_prototype = cbc_aes_constructor.prototype;
16979 cbc_aes_prototype.reset = cbc_aes_reset;
16980 cbc_aes_prototype.encrypt = cbc_aes_encrypt;
16981 cbc_aes_prototype.decrypt = cbc_aes_decrypt;
16982 function _cbc_mac_process(data) {
16983 var dpos = data.byteOffset ||
0, dlen = data.byteLength || data.length ||
0, wlen =
0;
16985 wlen = _aes_heap_write(this.heap, _aes_heap_start, data, dpos, dlen);
16986 this.asm.cbc_mac(_aes_heap_start, wlen, -
1);
16991 var _ccm_adata_maxLength =
65279, _ccm_data_maxLength =
68719476720;
16992 function ccm_aes_constructor(options) {
16993 this.padding = false;
16995 this.tagSize = _aes_block_size;
16996 this.lengthSize =
4;
17000 this.dataLength = -
1;
17001 this.dataLeft = -
1;
17003 _aes_constructor.call(this, options);
17005 function ccm_aes_encrypt_constructor(options) {
17006 ccm_aes_constructor.call(this, options);
17008 function ccm_aes_decrypt_constructor(options) {
17009 ccm_aes_constructor.call(this, options);
17011 function _ccm_calculate_iv() {
17012 var nonce = this.nonce, adata = this.adata, tagSize = this.tagSize, lengthSize = this.lengthSize, dataLength = this.dataLength;
17013 var data = new Uint8Array(_aes_block_size + (adata ?
2 + adata.byteLength :
0));
17014 data[
0] = (adata ?
64 :
0) | tagSize -
2 <<
2 | lengthSize -
1;
17015 data.set(nonce,
1);
17016 if (lengthSize
> 4) data[
11] = (dataLength - (dataLength
>>> 0)) /
4294967296 &
15;
17017 if (lengthSize
> 3) data[
12] = dataLength
>>> 24;
17018 if (lengthSize
> 2) data[
13] = dataLength
>>> 16 &
255;
17019 data[
14] = dataLength
>>> 8 &
255;
17020 data[
15] = dataLength &
255;
17022 data[
16] = adata.byteLength
>>> 8 &
255;
17023 data[
17] = adata.byteLength &
255;
17024 data.set(adata,
18);
17026 _cbc_mac_process.call(this, data);
17027 this.asm.save_state(_aes_heap_start);
17028 this.iv = new Uint8Array(this.heap.subarray(_aes_heap_start, _aes_heap_start + _aes_block_size));
17030 function ccm_aes_reset(options) {
17031 options = options || {};
17032 _aes_reset.call(this, options);
17033 _aes_init_iv.call(this, options.iv);
17034 var tagSize = options.tagSize;
17035 if (tagSize !== undefined) {
17036 if (!is_number(tagSize)) throw new TypeError(
"tagSize must be a number");
17037 if (tagSize <
4 || tagSize
> 16 || tagSize &
1) throw new IllegalArgumentError(
"illegal tagSize value");
17038 this.tagSize = tagSize;
17040 this.tagSize = _aes_block_size;
17042 var lengthSize = options.lengthSize, nonce = options.nonce;
17043 if (nonce !== undefined) {
17044 if (is_buffer(nonce) || is_bytes(nonce)) {
17045 nonce = new Uint8Array(nonce);
17046 } else if (is_string(nonce)) {
17048 nonce = new Uint8Array(str.length);
17049 for (var i =
0; i < str.length; ++i) nonce[i] = str.charCodeAt(i);
17051 throw new TypeError(
"unexpected nonce type");
17053 if (nonce.length <
10 || nonce.length
> 13) throw new IllegalArgumentError(
"illegal nonce length");
17054 lengthSize = lengthSize ||
15 - nonce.length;
17055 this.nonce = nonce;
17059 if (lengthSize !== undefined) {
17060 if (!is_number(lengthSize)) throw new TypeError(
"lengthSize must be a number");
17061 if (lengthSize <
2 || lengthSize
> 5 || nonce.length + lengthSize !==
15) throw new IllegalArgumentError(
"illegal lengthSize value");
17062 this.lengthSize = lengthSize;
17064 this.lengthSize = lengthSize =
4;
17067 var counter = options.counter;
17068 if (counter !== undefined) {
17069 if (iv === null) throw new IllegalStateError(
"iv is also required");
17070 if (!is_number(counter)) throw new TypeError(
"counter must be a number");
17071 this.counter = counter;
17075 var dataLength = options.dataLength;
17076 if (dataLength !== undefined) {
17077 if (!is_number(dataLength)) throw new TypeError(
"dataLength must be a number");
17078 if (dataLength <
0 || dataLength
> _ccm_data_maxLength || dataLength
> Math.pow(
2,
8 * lengthSize) -
1) throw new IllegalArgumentError("illegal dataLength value");
17079 this.dataLength = dataLength;
17080 var dataLeft = options.dataLeft || dataLength;
17081 if (!is_number(dataLeft)) throw new TypeError("dataLeft must be a number");
17082 if (dataLeft <
0 || dataLeft
> dataLength) throw new IllegalArgumentError("illegal dataLeft value");
17083 this.dataLeft = dataLeft;
17085 this.dataLength = dataLength = -
1;
17086 this.dataLeft = dataLength;
17088 var adata = options.adata;
17089 if (adata !== undefined) {
17090 if (iv !== null) throw new IllegalStateError("you must specify either adata or iv, not both");
17091 if (is_buffer(adata) || is_bytes(adata)) {
17092 adata = new Uint8Array(adata);
17093 } else if (is_string(adata)) {
17095 adata = new Uint8Array(str.length);
17096 for (var i =
0; i < str.length; ++i) adata[i] = str.charCodeAt(i);
17098 throw new TypeError("unexpected adata type");
17100 if (adata.byteLength ===
0 || adata.byteLength
> _ccm_adata_maxLength) throw new IllegalArgumentError("illegal adata length");
17101 this.adata = adata;
17104 this.adata = adata = null;
17106 if (dataLength !== -
1) _ccm_calculate_iv.call(this);
17109 function ccm_aes_encrypt_process(data) {
17110 if (!this.key) throw new IllegalStateError("no key is associated with the instance");
17111 var dpos = data.byteOffset ||
0, dlen = data.byteLength || data.length ||
0, asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, pos = this.pos, len = this.len, rpos =
0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen =
0;
17112 if ((counter -
1 <<
4) + len + dlen
> _ccm_data_maxLength) throw new RangeError("counter overflow");
17113 var result = new Uint8Array(rlen);
17114 var asm_args = [
0,
0, this.lengthSize -
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0 ];
17115 for (var i =
0; i < nonce.length; i++) asm_args[
3 + i] = nonce[i];
17117 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
17122 asm_args[
1] = len & ~
15;
17123 asm_args[
16] = counter /
4294967296 >>> 0;
17124 asm_args[
17] = counter
>>> 0;
17125 wlen = asm.ccm_encrypt.apply(asm, asm_args);
17126 result.set(heap.subarray(pos, pos + wlen), rpos);
17127 counter += wlen
>>> 4;
17133 pos = _aes_heap_start;
17137 this.result = result;
17138 this.counter = counter;
17143 function ccm_aes_encrypt_finish() {
17144 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
17145 var asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, tagSize = this.tagSize, pos = this.pos, len = this.len, wlen =
0;
17146 var result = new Uint8Array(len + tagSize);
17147 var asm_args = [
0,
0, this.lengthSize -
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0 ];
17148 for (var i =
0; i < nonce.length; i++) asm_args[
3 + i] = nonce[i];
17151 asm_args[
16] = counter /
4294967296 >>> 0;
17152 asm_args[
17] = counter
>>> 0;
17153 wlen = asm.ccm_encrypt.apply(asm, asm_args);
17154 result.set(heap.subarray(pos, pos + wlen));
17156 pos = _aes_heap_start;
17158 asm.save_state(_aes_heap_start);
17159 asm_args[
0] = _aes_heap_start, asm_args[
1] = _aes_block_size, asm_args[
16] =
0;
17161 asm.ccm_encrypt.apply(asm, asm_args);
17162 result.set(heap.subarray(_aes_heap_start, _aes_heap_start + tagSize), wlen);
17163 this.result = result;
17164 this.counter = counter;
17169 function ccm_aes_encrypt(data) {
17170 this.dataLength = this.dataLeft = data.byteLength || data.length ||
0;
17171 var result1 = ccm_aes_encrypt_process.call(this, data).result, result2 = ccm_aes_encrypt_finish.call(this).result, result;
17172 result = new Uint8Array(result1.length + result2.length);
17173 result.set(result1);
17174 result.set(result2, result1.length);
17175 this.result = result;
17178 function ccm_aes_decrypt_process(data) {
17179 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
17180 var dpos = data.byteOffset ||
0, dlen = data.byteLength || data.length ||
0, asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, tagSize = this.tagSize, pos = this.pos, len = this.len, rpos =
0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen =
0;
17181 if ((counter -
1 <<
4) + len + dlen
> _ccm_data_maxLength) throw new RangeError("counter overflow");
17182 var result = new Uint8Array(rlen);
17183 var asm_args = [
0,
0, this.lengthSize -
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0 ];
17184 for (var i =
0; i < nonce.length; i++) asm_args[
3 + i] = nonce[i];
17186 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
17191 asm_args[
1] = len + dlen - tagSize
>= _aes_block_size ? dlen
>= tagSize ? len & ~
15 : len + dlen - tagSize & ~
15 :
0;
17192 asm_args[
16] = counter /
4294967296 >>> 0;
17193 asm_args[
17] = counter
>>> 0;
17194 wlen = asm.ccm_decrypt.apply(asm, asm_args);
17195 result.set(heap.subarray(pos, pos + wlen), rpos);
17196 counter += wlen
>>> 4;
17202 pos = _aes_heap_start;
17206 this.result = result.subarray(
0, rpos);
17207 this.counter = counter;
17212 function ccm_aes_decrypt_finish() {
17213 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
17214 var asm = this.asm, heap = this.heap, nonce = this.nonce, counter = this.counter, tagSize = this.tagSize, pos = this.pos, len = this.len, rlen = len - tagSize, wlen =
0;
17215 if (len < tagSize) throw new IllegalStateError(
"authentication tag not found");
17216 var result = new Uint8Array(rlen), atag = new Uint8Array(heap.subarray(pos + rlen, pos + len));
17217 var asm_args = [
0,
0, this.lengthSize -
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0 ];
17218 for (var i =
0; i < nonce.length; i++) asm_args[
3 + i] = nonce[i];
17220 asm_args[
1] = rlen;
17221 asm_args[
16] = counter /
4294967296 >>> 0;
17222 asm_args[
17] = counter
>>> 0;
17223 wlen = asm.ccm_decrypt.apply(asm, asm_args);
17224 result.set(heap.subarray(pos, pos + wlen));
17226 pos = _aes_heap_start;
17228 asm.save_state(_aes_heap_start);
17229 asm_args[
0] = _aes_heap_start, asm_args[
1] = _aes_block_size, asm_args[
16] =
0;
17231 asm.ccm_encrypt.apply(asm, asm_args);
17233 for (var i =
0; i < tagSize; ++i) acheck |= atag[i] ^ heap[_aes_heap_start + i];
17234 if (acheck) throw new SecurityError(
"data integrity check failed");
17235 this.result = result;
17236 this.counter = counter;
17241 function ccm_aes_decrypt(data) {
17242 this.dataLength = this.dataLeft = data.byteLength || data.length ||
0;
17243 var result1 = ccm_aes_decrypt_process.call(this, data).result, result2 = ccm_aes_decrypt_finish.call(this).result, result;
17244 result = new Uint8Array(result1.length + result2.length);
17245 result.set(result1);
17246 result.set(result2, result1.length);
17247 this.result = result;
17250 var ccm_aes_prototype = ccm_aes_constructor.prototype;
17251 ccm_aes_prototype.reset = ccm_aes_reset;
17252 ccm_aes_prototype.encrypt = ccm_aes_encrypt;
17253 ccm_aes_prototype.decrypt = ccm_aes_decrypt;
17254 var ccm_aes_encrypt_prototype = ccm_aes_encrypt_constructor.prototype;
17255 ccm_aes_encrypt_prototype.reset = ccm_aes_reset;
17256 ccm_aes_encrypt_prototype.process = ccm_aes_encrypt_process;
17257 ccm_aes_encrypt_prototype.finish = ccm_aes_encrypt_finish;
17258 var ccm_aes_decrypt_prototype = ccm_aes_decrypt_constructor.prototype;
17259 ccm_aes_decrypt_prototype.reset = ccm_aes_reset;
17260 ccm_aes_decrypt_prototype.process = ccm_aes_decrypt_process;
17261 ccm_aes_decrypt_prototype.finish = ccm_aes_decrypt_finish;
17262 function cfb_aes_constructor(options) {
17263 this.padding = false;
17266 _aes_constructor.call(this, options);
17268 function cfb_aes_encrypt_constructor(options) {
17269 cfb_aes_constructor.call(this, options);
17271 function cfb_aes_decrypt_constructor(options) {
17272 cfb_aes_constructor.call(this, options);
17274 function cfb_aes_reset(options) {
17275 options = options || {};
17276 _aes_reset.call(this, options);
17277 _aes_init_iv.call(this, options.iv);
17280 function cfb_aes_encrypt_process(data) {
17281 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
17282 var dpos = data.byteOffset ||
0, dlen = data.byteLength || data.length ||
0, asm = this.asm, heap = this.heap, pos = this.pos, len = this.len, rpos =
0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen =
0;
17283 var result = new Uint8Array(rlen);
17285 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
17289 wlen = asm.cfb_encrypt(pos, _aes_block_size * Math.floor(len / _aes_block_size));
17290 result.set(heap.subarray(pos, pos + wlen), rpos);
17296 pos = _aes_heap_start;
17300 this.result = result;
17305 function cfb_aes_encrypt_finish() {
17306 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
17307 var asm = this.asm, heap = this.heap, pos = this.pos, len = this.len;
17308 var result = new Uint8Array(len);
17309 asm.cfb_encrypt(pos, len);
17310 result.set(heap.subarray(pos, pos + len));
17311 this.result = result;
17312 this.pos = _aes_heap_start;
17316 function cfb_aes_encrypt(data) {
17317 var result1 = cfb_aes_encrypt_process.call(this, data).result, result2 = cfb_aes_encrypt_finish.call(this).result, result;
17318 result = new Uint8Array(result1.length + result2.length);
17319 result.set(result1);
17320 result.set(result2, result1.length);
17321 this.result = result;
17324 function cfb_aes_decrypt_process(data) {
17325 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
17326 var dpos = data.byteOffset ||
0, dlen = data.byteLength || data.length ||
0, asm = this.asm, heap = this.heap, pos = this.pos, len = this.len, rpos =
0, rlen = _aes_block_size * Math.floor((len + dlen) / _aes_block_size), wlen =
0;
17327 var result = new Uint8Array(rlen);
17329 wlen = _aes_heap_write(heap, pos + len, data, dpos, dlen);
17333 wlen = asm.cfb_decrypt(pos, _aes_block_size * Math.floor(len / _aes_block_size));
17334 result.set(heap.subarray(pos, pos + wlen), rpos);
17340 pos = _aes_heap_start;
17344 this.result = result.subarray(
0, rpos);
17349 function cfb_aes_decrypt_finish() {
17350 if (!this.key) throw new IllegalStateError(
"no key is associated with the instance");
17351 var asm = this.asm, heap = this.heap, pos = this.pos, len = this.len;
17353 this.result = new Uint8Array(
0);
17354 this.pos = _aes_heap_start;
17358 var result = new Uint8Array(len);
17359 asm.cfb_decrypt(pos, len);
17360 result.set(heap.subarray(pos, pos + len));
17361 this.result = result;
17362 this.pos = _aes_heap_start;
17366 function cfb_aes_decrypt(data) {
17367 var result1 = cfb_aes_decrypt_process.call(this, data).result, result2 = cfb_aes_decrypt_finish.call(this).result, result;
17368 result = new Uint8Array(result1.length + result2.length);
17369 result.set(result1);
17370 result.set(result2, result1.length);
17371 this.result = result;
17374 var cfb_aes_encrypt_prototype = cfb_aes_encrypt_constructor.prototype;
17375 cfb_aes_encrypt_prototype.reset = cfb_aes_reset;
17376 cfb_aes_encrypt_prototype.process = cfb_aes_encrypt_process;
17377 cfb_aes_encrypt_prototype.finish = cfb_aes_encrypt_finish;
17378 var cfb_aes_decrypt_prototype = cfb_aes_decrypt_constructor.prototype;
17379 cfb_aes_decrypt_prototype.reset = cfb_aes_reset;
17380 cfb_aes_decrypt_prototype.process = cfb_aes_decrypt_process;
17381 cfb_aes_decrypt_prototype.finish = cfb_aes_decrypt_finish;
17382 var cfb_aes_prototype = cfb_aes_constructor.prototype;
17383 cfb_aes_prototype.reset = cfb_aes_reset;
17384 cfb_aes_prototype.encrypt = cfb_aes_encrypt;
17385 cfb_aes_prototype.decrypt = cfb_aes_decrypt;
17386 function sha256_asm(stdlib, foreign, buffer) {
17387 // Closure Compiler warning - commented out
17389 var H0 =
0, H1 =
0, H2 =
0, H3 =
0, H4 =
0, H5 =
0, H6 =
0, H7 =
0, TOTAL =
0;
17390 var I0 =
0, I1 =
0, I2 =
0, I3 =
0, I4 =
0, I5 =
0, I6 =
0, I7 =
0, O0 =
0, O1 =
0, O2 =
0, O3 =
0, O4 =
0, O5 =
0, O6 =
0, O7 =
0;
17391 var HEAP = new stdlib.Uint8Array(buffer);
17392 function _core(w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15) {
17409 var a =
0, b =
0, c =
0, d =
0, e =
0, f =
0, g =
0, h =
0, t =
0;
17418 t = w0 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1116352408 |
0;
17426 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17427 t = w1 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1899447441 |
0;
17435 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17436 t = w2 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3049323471 |
0;
17444 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17445 t = w3 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3921009573 |
0;
17453 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17454 t = w4 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
961987163 |
0;
17462 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17463 t = w5 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1508970993 |
0;
17471 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17472 t = w6 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2453635748 |
0;
17480 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17481 t = w7 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2870763221 |
0;
17489 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17490 t = w8 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3624381080 |
0;
17498 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17499 t = w9 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
310598401 |
0;
17507 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17508 t = w10 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
607225278 |
0;
17516 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17517 t = w11 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1426881987 |
0;
17525 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17526 t = w12 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1925078388 |
0;
17534 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17535 t = w13 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2162078206 |
0;
17543 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17544 t = w14 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2614888103 |
0;
17552 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17553 t = w15 + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3248222580 |
0;
17561 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17562 w0 = t = (w1
>>> 7 ^ w1
>>> 18 ^ w1
>>> 3 ^ w1 <<
25 ^ w1 <<
14) + (w14
>>> 17 ^ w14
>>> 19 ^ w14
>>> 10 ^ w14 <<
15 ^ w14 <<
13) + w0 + w9 |
0;
17563 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3835390401 |
0;
17571 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17572 w1 = t = (w2
>>> 7 ^ w2
>>> 18 ^ w2
>>> 3 ^ w2 <<
25 ^ w2 <<
14) + (w15
>>> 17 ^ w15
>>> 19 ^ w15
>>> 10 ^ w15 <<
15 ^ w15 <<
13) + w1 + w10 |
0;
17573 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
4022224774 |
0;
17581 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17582 w2 = t = (w3
>>> 7 ^ w3
>>> 18 ^ w3
>>> 3 ^ w3 <<
25 ^ w3 <<
14) + (w0
>>> 17 ^ w0
>>> 19 ^ w0
>>> 10 ^ w0 <<
15 ^ w0 <<
13) + w2 + w11 |
0;
17583 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
264347078 |
0;
17591 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17592 w3 = t = (w4
>>> 7 ^ w4
>>> 18 ^ w4
>>> 3 ^ w4 <<
25 ^ w4 <<
14) + (w1
>>> 17 ^ w1
>>> 19 ^ w1
>>> 10 ^ w1 <<
15 ^ w1 <<
13) + w3 + w12 |
0;
17593 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
604807628 |
0;
17601 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17602 w4 = t = (w5
>>> 7 ^ w5
>>> 18 ^ w5
>>> 3 ^ w5 <<
25 ^ w5 <<
14) + (w2
>>> 17 ^ w2
>>> 19 ^ w2
>>> 10 ^ w2 <<
15 ^ w2 <<
13) + w4 + w13 |
0;
17603 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
770255983 |
0;
17611 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17612 w5 = t = (w6
>>> 7 ^ w6
>>> 18 ^ w6
>>> 3 ^ w6 <<
25 ^ w6 <<
14) + (w3
>>> 17 ^ w3
>>> 19 ^ w3
>>> 10 ^ w3 <<
15 ^ w3 <<
13) + w5 + w14 |
0;
17613 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1249150122 |
0;
17621 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17622 w6 = t = (w7
>>> 7 ^ w7
>>> 18 ^ w7
>>> 3 ^ w7 <<
25 ^ w7 <<
14) + (w4
>>> 17 ^ w4
>>> 19 ^ w4
>>> 10 ^ w4 <<
15 ^ w4 <<
13) + w6 + w15 |
0;
17623 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1555081692 |
0;
17631 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17632 w7 = t = (w8
>>> 7 ^ w8
>>> 18 ^ w8
>>> 3 ^ w8 <<
25 ^ w8 <<
14) + (w5
>>> 17 ^ w5
>>> 19 ^ w5
>>> 10 ^ w5 <<
15 ^ w5 <<
13) + w7 + w0 |
0;
17633 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1996064986 |
0;
17641 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17642 w8 = t = (w9
>>> 7 ^ w9
>>> 18 ^ w9
>>> 3 ^ w9 <<
25 ^ w9 <<
14) + (w6
>>> 17 ^ w6
>>> 19 ^ w6
>>> 10 ^ w6 <<
15 ^ w6 <<
13) + w8 + w1 |
0;
17643 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2554220882 |
0;
17651 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17652 w9 = t = (w10
>>> 7 ^ w10
>>> 18 ^ w10
>>> 3 ^ w10 <<
25 ^ w10 <<
14) + (w7
>>> 17 ^ w7
>>> 19 ^ w7
>>> 10 ^ w7 <<
15 ^ w7 <<
13) + w9 + w2 |
0;
17653 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2821834349 |
0;
17661 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17662 w10 = t = (w11
>>> 7 ^ w11
>>> 18 ^ w11
>>> 3 ^ w11 <<
25 ^ w11 <<
14) + (w8
>>> 17 ^ w8
>>> 19 ^ w8
>>> 10 ^ w8 <<
15 ^ w8 <<
13) + w10 + w3 |
0;
17663 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2952996808 |
0;
17671 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17672 w11 = t = (w12
>>> 7 ^ w12
>>> 18 ^ w12
>>> 3 ^ w12 <<
25 ^ w12 <<
14) + (w9
>>> 17 ^ w9
>>> 19 ^ w9
>>> 10 ^ w9 <<
15 ^ w9 <<
13) + w11 + w4 |
0;
17673 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3210313671 |
0;
17681 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17682 w12 = t = (w13
>>> 7 ^ w13
>>> 18 ^ w13
>>> 3 ^ w13 <<
25 ^ w13 <<
14) + (w10
>>> 17 ^ w10
>>> 19 ^ w10
>>> 10 ^ w10 <<
15 ^ w10 <<
13) + w12 + w5 |
0;
17683 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3336571891 |
0;
17691 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17692 w13 = t = (w14
>>> 7 ^ w14
>>> 18 ^ w14
>>> 3 ^ w14 <<
25 ^ w14 <<
14) + (w11
>>> 17 ^ w11
>>> 19 ^ w11
>>> 10 ^ w11 <<
15 ^ w11 <<
13) + w13 + w6 |
0;
17693 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3584528711 |
0;
17701 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17702 w14 = t = (w15
>>> 7 ^ w15
>>> 18 ^ w15
>>> 3 ^ w15 <<
25 ^ w15 <<
14) + (w12
>>> 17 ^ w12
>>> 19 ^ w12
>>> 10 ^ w12 <<
15 ^ w12 <<
13) + w14 + w7 |
0;
17703 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
113926993 |
0;
17711 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17712 w15 = t = (w0
>>> 7 ^ w0
>>> 18 ^ w0
>>> 3 ^ w0 <<
25 ^ w0 <<
14) + (w13
>>> 17 ^ w13
>>> 19 ^ w13
>>> 10 ^ w13 <<
15 ^ w13 <<
13) + w15 + w8 |
0;
17713 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
338241895 |
0;
17721 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17722 w0 = t = (w1
>>> 7 ^ w1
>>> 18 ^ w1
>>> 3 ^ w1 <<
25 ^ w1 <<
14) + (w14
>>> 17 ^ w14
>>> 19 ^ w14
>>> 10 ^ w14 <<
15 ^ w14 <<
13) + w0 + w9 |
0;
17723 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
666307205 |
0;
17731 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17732 w1 = t = (w2
>>> 7 ^ w2
>>> 18 ^ w2
>>> 3 ^ w2 <<
25 ^ w2 <<
14) + (w15
>>> 17 ^ w15
>>> 19 ^ w15
>>> 10 ^ w15 <<
15 ^ w15 <<
13) + w1 + w10 |
0;
17733 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
773529912 |
0;
17741 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17742 w2 = t = (w3
>>> 7 ^ w3
>>> 18 ^ w3
>>> 3 ^ w3 <<
25 ^ w3 <<
14) + (w0
>>> 17 ^ w0
>>> 19 ^ w0
>>> 10 ^ w0 <<
15 ^ w0 <<
13) + w2 + w11 |
0;
17743 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1294757372 |
0;
17751 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17752 w3 = t = (w4
>>> 7 ^ w4
>>> 18 ^ w4
>>> 3 ^ w4 <<
25 ^ w4 <<
14) + (w1
>>> 17 ^ w1
>>> 19 ^ w1
>>> 10 ^ w1 <<
15 ^ w1 <<
13) + w3 + w12 |
0;
17753 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1396182291 |
0;
17761 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17762 w4 = t = (w5
>>> 7 ^ w5
>>> 18 ^ w5
>>> 3 ^ w5 <<
25 ^ w5 <<
14) + (w2
>>> 17 ^ w2
>>> 19 ^ w2
>>> 10 ^ w2 <<
15 ^ w2 <<
13) + w4 + w13 |
0;
17763 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1695183700 |
0;
17771 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17772 w5 = t = (w6
>>> 7 ^ w6
>>> 18 ^ w6
>>> 3 ^ w6 <<
25 ^ w6 <<
14) + (w3
>>> 17 ^ w3
>>> 19 ^ w3
>>> 10 ^ w3 <<
15 ^ w3 <<
13) + w5 + w14 |
0;
17773 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1986661051 |
0;
17781 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17782 w6 = t = (w7
>>> 7 ^ w7
>>> 18 ^ w7
>>> 3 ^ w7 <<
25 ^ w7 <<
14) + (w4
>>> 17 ^ w4
>>> 19 ^ w4
>>> 10 ^ w4 <<
15 ^ w4 <<
13) + w6 + w15 |
0;
17783 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2177026350 |
0;
17791 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17792 w7 = t = (w8
>>> 7 ^ w8
>>> 18 ^ w8
>>> 3 ^ w8 <<
25 ^ w8 <<
14) + (w5
>>> 17 ^ w5
>>> 19 ^ w5
>>> 10 ^ w5 <<
15 ^ w5 <<
13) + w7 + w0 |
0;
17793 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2456956037 |
0;
17801 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17802 w8 = t = (w9
>>> 7 ^ w9
>>> 18 ^ w9
>>> 3 ^ w9 <<
25 ^ w9 <<
14) + (w6
>>> 17 ^ w6
>>> 19 ^ w6
>>> 10 ^ w6 <<
15 ^ w6 <<
13) + w8 + w1 |
0;
17803 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2730485921 |
0;
17811 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17812 w9 = t = (w10
>>> 7 ^ w10
>>> 18 ^ w10
>>> 3 ^ w10 <<
25 ^ w10 <<
14) + (w7
>>> 17 ^ w7
>>> 19 ^ w7
>>> 10 ^ w7 <<
15 ^ w7 <<
13) + w9 + w2 |
0;
17813 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2820302411 |
0;
17821 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17822 w10 = t = (w11
>>> 7 ^ w11
>>> 18 ^ w11
>>> 3 ^ w11 <<
25 ^ w11 <<
14) + (w8
>>> 17 ^ w8
>>> 19 ^ w8
>>> 10 ^ w8 <<
15 ^ w8 <<
13) + w10 + w3 |
0;
17823 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3259730800 |
0;
17831 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17832 w11 = t = (w12
>>> 7 ^ w12
>>> 18 ^ w12
>>> 3 ^ w12 <<
25 ^ w12 <<
14) + (w9
>>> 17 ^ w9
>>> 19 ^ w9
>>> 10 ^ w9 <<
15 ^ w9 <<
13) + w11 + w4 |
0;
17833 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3345764771 |
0;
17841 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17842 w12 = t = (w13
>>> 7 ^ w13
>>> 18 ^ w13
>>> 3 ^ w13 <<
25 ^ w13 <<
14) + (w10
>>> 17 ^ w10
>>> 19 ^ w10
>>> 10 ^ w10 <<
15 ^ w10 <<
13) + w12 + w5 |
0;
17843 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3516065817 |
0;
17851 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17852 w13 = t = (w14
>>> 7 ^ w14
>>> 18 ^ w14
>>> 3 ^ w14 <<
25 ^ w14 <<
14) + (w11
>>> 17 ^ w11
>>> 19 ^ w11
>>> 10 ^ w11 <<
15 ^ w11 <<
13) + w13 + w6 |
0;
17853 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3600352804 |
0;
17861 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17862 w14 = t = (w15
>>> 7 ^ w15
>>> 18 ^ w15
>>> 3 ^ w15 <<
25 ^ w15 <<
14) + (w12
>>> 17 ^ w12
>>> 19 ^ w12
>>> 10 ^ w12 <<
15 ^ w12 <<
13) + w14 + w7 |
0;
17863 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
4094571909 |
0;
17871 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17872 w15 = t = (w0
>>> 7 ^ w0
>>> 18 ^ w0
>>> 3 ^ w0 <<
25 ^ w0 <<
14) + (w13
>>> 17 ^ w13
>>> 19 ^ w13
>>> 10 ^ w13 <<
15 ^ w13 <<
13) + w15 + w8 |
0;
17873 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
275423344 |
0;
17881 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17882 w0 = t = (w1
>>> 7 ^ w1
>>> 18 ^ w1
>>> 3 ^ w1 <<
25 ^ w1 <<
14) + (w14
>>> 17 ^ w14
>>> 19 ^ w14
>>> 10 ^ w14 <<
15 ^ w14 <<
13) + w0 + w9 |
0;
17883 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
430227734 |
0;
17891 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17892 w1 = t = (w2
>>> 7 ^ w2
>>> 18 ^ w2
>>> 3 ^ w2 <<
25 ^ w2 <<
14) + (w15
>>> 17 ^ w15
>>> 19 ^ w15
>>> 10 ^ w15 <<
15 ^ w15 <<
13) + w1 + w10 |
0;
17893 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
506948616 |
0;
17901 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17902 w2 = t = (w3
>>> 7 ^ w3
>>> 18 ^ w3
>>> 3 ^ w3 <<
25 ^ w3 <<
14) + (w0
>>> 17 ^ w0
>>> 19 ^ w0
>>> 10 ^ w0 <<
15 ^ w0 <<
13) + w2 + w11 |
0;
17903 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
659060556 |
0;
17911 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17912 w3 = t = (w4
>>> 7 ^ w4
>>> 18 ^ w4
>>> 3 ^ w4 <<
25 ^ w4 <<
14) + (w1
>>> 17 ^ w1
>>> 19 ^ w1
>>> 10 ^ w1 <<
15 ^ w1 <<
13) + w3 + w12 |
0;
17913 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
883997877 |
0;
17921 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17922 w4 = t = (w5
>>> 7 ^ w5
>>> 18 ^ w5
>>> 3 ^ w5 <<
25 ^ w5 <<
14) + (w2
>>> 17 ^ w2
>>> 19 ^ w2
>>> 10 ^ w2 <<
15 ^ w2 <<
13) + w4 + w13 |
0;
17923 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
958139571 |
0;
17931 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17932 w5 = t = (w6
>>> 7 ^ w6
>>> 18 ^ w6
>>> 3 ^ w6 <<
25 ^ w6 <<
14) + (w3
>>> 17 ^ w3
>>> 19 ^ w3
>>> 10 ^ w3 <<
15 ^ w3 <<
13) + w5 + w14 |
0;
17933 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1322822218 |
0;
17941 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17942 w6 = t = (w7
>>> 7 ^ w7
>>> 18 ^ w7
>>> 3 ^ w7 <<
25 ^ w7 <<
14) + (w4
>>> 17 ^ w4
>>> 19 ^ w4
>>> 10 ^ w4 <<
15 ^ w4 <<
13) + w6 + w15 |
0;
17943 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1537002063 |
0;
17951 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17952 w7 = t = (w8
>>> 7 ^ w8
>>> 18 ^ w8
>>> 3 ^ w8 <<
25 ^ w8 <<
14) + (w5
>>> 17 ^ w5
>>> 19 ^ w5
>>> 10 ^ w5 <<
15 ^ w5 <<
13) + w7 + w0 |
0;
17953 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1747873779 |
0;
17961 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17962 w8 = t = (w9
>>> 7 ^ w9
>>> 18 ^ w9
>>> 3 ^ w9 <<
25 ^ w9 <<
14) + (w6
>>> 17 ^ w6
>>> 19 ^ w6
>>> 10 ^ w6 <<
15 ^ w6 <<
13) + w8 + w1 |
0;
17963 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
1955562222 |
0;
17971 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17972 w9 = t = (w10
>>> 7 ^ w10
>>> 18 ^ w10
>>> 3 ^ w10 <<
25 ^ w10 <<
14) + (w7
>>> 17 ^ w7
>>> 19 ^ w7
>>> 10 ^ w7 <<
15 ^ w7 <<
13) + w9 + w2 |
0;
17973 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2024104815 |
0;
17981 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17982 w10 = t = (w11
>>> 7 ^ w11
>>> 18 ^ w11
>>> 3 ^ w11 <<
25 ^ w11 <<
14) + (w8
>>> 17 ^ w8
>>> 19 ^ w8
>>> 10 ^ w8 <<
15 ^ w8 <<
13) + w10 + w3 |
0;
17983 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2227730452 |
0;
17991 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
17992 w11 = t = (w12
>>> 7 ^ w12
>>> 18 ^ w12
>>> 3 ^ w12 <<
25 ^ w12 <<
14) + (w9
>>> 17 ^ w9
>>> 19 ^ w9
>>> 10 ^ w9 <<
15 ^ w9 <<
13) + w11 + w4 |
0;
17993 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2361852424 |
0;
18001 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
18002 w12 = t = (w13
>>> 7 ^ w13
>>> 18 ^ w13
>>> 3 ^ w13 <<
25 ^ w13 <<
14) + (w10
>>> 17 ^ w10
>>> 19 ^ w10
>>> 10 ^ w10 <<
15 ^ w10 <<
13) + w12 + w5 |
0;
18003 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2428436474 |
0;
18011 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
18012 w13 = t = (w14
>>> 7 ^ w14
>>> 18 ^ w14
>>> 3 ^ w14 <<
25 ^ w14 <<
14) + (w11
>>> 17 ^ w11
>>> 19 ^ w11
>>> 10 ^ w11 <<
15 ^ w11 <<
13) + w13 + w6 |
0;
18013 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
2756734187 |
0;
18021 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
18022 w14 = t = (w15
>>> 7 ^ w15
>>> 18 ^ w15
>>> 3 ^ w15 <<
25 ^ w15 <<
14) + (w12
>>> 17 ^ w12
>>> 19 ^ w12
>>> 10 ^ w12 <<
15 ^ w12 <<
13) + w14 + w7 |
0;
18023 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3204031479 |
0;
18031 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
18032 w15 = t = (w0
>>> 7 ^ w0
>>> 18 ^ w0
>>> 3 ^ w0 <<
25 ^ w0 <<
14) + (w13
>>> 17 ^ w13
>>> 19 ^ w13
>>> 10 ^ w13 <<
15 ^ w13 <<
13) + w15 + w8 |
0;
18033 t = t + h + (e
>>> 6 ^ e
>>> 11 ^ e
>>> 25 ^ e <<
26 ^ e <<
21 ^ e <<
7) + (g ^ e & (f ^ g)) +
3329325298 |
0;
18041 a = t + (b & c ^ d & (b ^ c)) + (b
>>> 2 ^ b
>>> 13 ^ b
>>> 22 ^ b <<
30 ^ b <<
19 ^ b <<
10) |
0;
18051 function _core_heap(offset) {
18052 offset = offset |
0;
18053 _core(HEAP[offset |
0] <<
24 | HEAP[offset |
1] <<
16 | HEAP[offset |
2] <<
8 | HEAP[offset |
3], HEAP[offset |
4] <<
24 | HEAP[offset |
5] <<
16 | HEAP[offset |
6] <<
8 | HEAP[offset |
7], HEAP[offset |
8] <<
24 | HEAP[offset |
9] <<
16 | HEAP[offset |
10] <<
8 | HEAP[offset |
11], HEAP[offset |
12] <<
24 | HEAP[offset |
13] <<
16 | HEAP[offset |
14] <<
8 | HEAP[offset |
15], HEAP[offset |
16] <<
24 | HEAP[offset |
17] <<
16 | HEAP[offset |
18] <<
8 | HEAP[offset |
19], HEAP[offset |
20] <<
24 | HEAP[offset |
21] <<
16 | HEAP[offset |
22] <<
8 | HEAP[offset |
23], HEAP[offset |
24] <<
24 | HEAP[offset |
25] <<
16 | HEAP[offset |
26] <<
8 | HEAP[offset |
27], HEAP[offset |
28] <<
24 | HEAP[offset |
29] <<
16 | HEAP[offset |
30] <<
8 | HEAP[offset |
31], HEAP[offset |
32] <<
24 | HEAP[offset |
33] <<
16 | HEAP[offset |
34] <<
8 | HEAP[offset |
35], HEAP[offset |
36] <<
24 | HEAP[offset |
37] <<
16 | HEAP[offset |
38] <<
8 | HEAP[offset |
39], HEAP[offset |
40] <<
24 | HEAP[offset |
41] <<
16 | HEAP[offset |
42] <<
8 | HEAP[offset |
43], HEAP[offset |
44] <<
24 | HEAP[offset |
45] <<
16 | HEAP[offset |
46] <<
8 | HEAP[offset |
47], HEAP[offset |
48] <<
24 | HEAP[offset |
49] <<
16 | HEAP[offset |
50] <<
8 | HEAP[offset |
51], HEAP[offset |
52] <<
24 | HEAP[offset |
53] <<
16 | HEAP[offset |
54] <<
8 | HEAP[offset |
55], HEAP[offset |
56] <<
24 | HEAP[offset |
57] <<
16 | HEAP[offset |
58] <<
8 | HEAP[offset |
59], HEAP[offset |
60] <<
24 | HEAP[offset |
61] <<
16 | HEAP[offset |
62] <<
8 | HEAP[offset |
63]);
18055 function _state_to_heap(output) {
18056 output = output |
0;
18057 HEAP[output |
0] = H0
>>> 24;
18058 HEAP[output |
1] = H0
>>> 16 &
255;
18059 HEAP[output |
2] = H0
>>> 8 &
255;
18060 HEAP[output |
3] = H0 &
255;
18061 HEAP[output |
4] = H1
>>> 24;
18062 HEAP[output |
5] = H1
>>> 16 &
255;
18063 HEAP[output |
6] = H1
>>> 8 &
255;
18064 HEAP[output |
7] = H1 &
255;
18065 HEAP[output |
8] = H2
>>> 24;
18066 HEAP[output |
9] = H2
>>> 16 &
255;
18067 HEAP[output |
10] = H2
>>> 8 &
255;
18068 HEAP[output |
11] = H2 &
255;
18069 HEAP[output |
12] = H3
>>> 24;
18070 HEAP[output |
13] = H3
>>> 16 &
255;
18071 HEAP[output |
14] = H3
>>> 8 &
255;
18072 HEAP[output |
15] = H3 &
255;
18073 HEAP[output |
16] = H4
>>> 24;
18074 HEAP[output |
17] = H4
>>> 16 &
255;
18075 HEAP[output |
18] = H4
>>> 8 &
255;
18076 HEAP[output |
19] = H4 &
255;
18077 HEAP[output |
20] = H5
>>> 24;
18078 HEAP[output |
21] = H5
>>> 16 &
255;
18079 HEAP[output |
22] = H5
>>> 8 &
255;
18080 HEAP[output |
23] = H5 &
255;
18081 HEAP[output |
24] = H6
>>> 24;
18082 HEAP[output |
25] = H6
>>> 16 &
255;
18083 HEAP[output |
26] = H6
>>> 8 &
255;
18084 HEAP[output |
27] = H6 &
255;
18085 HEAP[output |
28] = H7
>>> 24;
18086 HEAP[output |
29] = H7
>>> 16 &
255;
18087 HEAP[output |
30] = H7
>>> 8 &
255;
18088 HEAP[output |
31] = H7 &
255;
18101 function init(h0, h1, h2, h3, h4, h5, h6, h7, total) {
18121 function process(offset, length) {
18122 offset = offset |
0;
18123 length = length |
0;
18125 if (offset &
63) return -
1;
18126 while ((length |
0)
>=
64) {
18127 _core_heap(offset);
18128 offset = offset +
64 |
0;
18129 length = length -
64 |
0;
18130 hashed = hashed +
64 |
0;
18132 TOTAL = TOTAL + hashed |
0;
18135 function finish(offset, length, output) {
18136 offset = offset |
0;
18137 length = length |
0;
18138 output = output |
0;
18139 var hashed =
0, i =
0;
18140 if (offset &
63) return -
1;
18141 if (~output) if (output &
31) return -
1;
18142 if ((length |
0)
>=
64) {
18143 hashed = process(offset, length) |
0;
18144 if ((hashed |
0) == -
1) return -
1;
18145 offset = offset + hashed |
0;
18146 length = length - hashed |
0;
18148 hashed = hashed + length |
0;
18149 TOTAL = TOTAL + length |
0;
18150 HEAP[offset | length] =
128;
18151 if ((length |
0)
>=
56) {
18152 for (i = length +
1 |
0; (i |
0) <
64; i = i +
1 |
0) HEAP[offset | i] =
0;
18153 _core_heap(offset);
18155 HEAP[offset |
0] =
0;
18157 for (i = length +
1 |
0; (i |
0) <
59; i = i +
1 |
0) HEAP[offset | i] =
0;
18158 HEAP[offset |
59] = TOTAL
>>> 29;
18159 HEAP[offset |
60] = TOTAL
>>> 21 &
255;
18160 HEAP[offset |
61] = TOTAL
>>> 13 &
255;
18161 HEAP[offset |
62] = TOTAL
>>> 5 &
255;
18162 HEAP[offset |
63] = TOTAL <<
3 &
255;
18163 _core_heap(offset);
18164 if (~output) _state_to_heap(output);
18167 function hmac_reset() {
18178 function _hmac_opad() {
18189 function hmac_init(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) {
18207 _core(p0 ^
1549556828, p1 ^
1549556828, p2 ^
1549556828, p3 ^
1549556828, p4 ^
1549556828, p5 ^
1549556828, p6 ^
1549556828, p7 ^
1549556828, p8 ^
1549556828, p9 ^
1549556828, p10 ^
1549556828, p11 ^
1549556828, p12 ^
1549556828, p13 ^
1549556828, p14 ^
1549556828, p15 ^
1549556828);
18217 _core(p0 ^
909522486, p1 ^
909522486, p2 ^
909522486, p3 ^
909522486, p4 ^
909522486, p5 ^
909522486, p6 ^
909522486, p7 ^
909522486, p8 ^
909522486, p9 ^
909522486, p10 ^
909522486, p11 ^
909522486, p12 ^
909522486, p13 ^
909522486, p14 ^
909522486, p15 ^
909522486);
18228 function hmac_finish(offset, length, output) {
18229 offset = offset |
0;
18230 length = length |
0;
18231 output = output |
0;
18232 var t0 =
0, t1 =
0, t2 =
0, t3 =
0, t4 =
0, t5 =
0, t6 =
0, t7 =
0, hashed =
0;
18233 if (offset &
63) return -
1;
18234 if (~output) if (output &
31) return -
1;
18235 hashed = finish(offset, length, -
1) |
0;
18236 t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;
18238 _core(t0, t1, t2, t3, t4, t5, t6, t7,
2147483648,
0,
0,
0,
0,
0,
0,
768);
18239 if (~output) _state_to_heap(output);
18242 function pbkdf2_generate_block(offset, length, block, count, output) {
18243 offset = offset |
0;
18244 length = length |
0;
18247 output = output |
0;
18248 var h0 =
0, h1 =
0, h2 =
0, h3 =
0, h4 =
0, h5 =
0, h6 =
0, h7 =
0, t0 =
0, t1 =
0, t2 =
0, t3 =
0, t4 =
0, t5 =
0, t6 =
0, t7 =
0;
18249 if (offset &
63) return -
1;
18250 if (~output) if (output &
31) return -
1;
18251 HEAP[offset + length |
0] = block
>>> 24;
18252 HEAP[offset + length +
1 |
0] = block
>>> 16 &
255;
18253 HEAP[offset + length +
2 |
0] = block
>>> 8 &
255;
18254 HEAP[offset + length +
3 |
0] = block &
255;
18255 // Closure compiler warning - The result of the 'bitor' operator is not being used
18256 //hmac_finish(offset, length +
4 |
0, -
1) |
0;
18257 hmac_finish(offset, length +
4 |
0, -
1);
18258 h0 = t0 = H0, h1 = t1 = H1, h2 = t2 = H2, h3 = t3 = H3, h4 = t4 = H4, h5 = t5 = H5,
18259 h6 = t6 = H6, h7 = t7 = H7;
18260 count = count -
1 |
0;
18261 while ((count |
0)
> 0) {
18263 _core(t0, t1, t2, t3, t4, t5, t6, t7,
2147483648,
0,
0,
0,
0,
0,
0,
768);
18264 t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;
18266 _core(t0, t1, t2, t3, t4, t5, t6, t7,
2147483648,
0,
0,
0,
0,
0,
0,
768);
18267 t0 = H0, t1 = H1, t2 = H2, t3 = H3, t4 = H4, t5 = H5, t6 = H6, t7 = H7;
18276 count = count -
1 |
0;
18286 if (~output) _state_to_heap(output);
18294 hmac_reset: hmac_reset,
18295 hmac_init: hmac_init,
18296 hmac_finish: hmac_finish,
18297 pbkdf2_generate_block: pbkdf2_generate_block
18300 var _sha256_block_size =
64, _sha256_hash_size =
32;
18301 function sha256_constructor(options) {
18302 options = options || {};
18303 options.heapSize = options.heapSize ||
4096;
18304 if (options.heapSize <=
0 || options.heapSize %
4096) throw new IllegalArgumentError(
"heapSize must be a positive number and multiple of 4096");
18305 this.heap = options.heap || new Uint8Array(options.heapSize);
18306 this.asm = options.asm || sha256_asm(global, null, this.heap.buffer);
18307 this.BLOCK_SIZE = _sha256_block_size;
18308 this.HASH_SIZE = _sha256_hash_size;
18311 function sha256_reset() {
18312 this.result = null;
18318 function sha256_process(data) {
18319 if (this.result !== null) throw new IllegalStateError(
"state must be reset before processing new data");
18320 var dpos =
0, dlen =
0, clen =
0;
18321 if (is_buffer(data) || is_bytes(data)) {
18322 dpos = data.byteOffset ||
0;
18323 dlen = data.byteLength;
18324 } else if (is_string(data)) {
18325 dlen = data.length;
18327 throw new TypeError(
"data isn't of expected type");
18330 clen = this.heap.byteLength - this.pos - this.len;
18331 clen = clen < dlen ? clen : dlen;
18332 if (is_buffer(data) || is_bytes(data)) {
18333 this.heap.set(new Uint8Array(data.buffer || data, dpos, clen), this.pos + this.len);
18335 for (var i =
0; i < clen; i++) this.heap[this.pos + this.len + i] = data.charCodeAt(dpos + i);
18340 clen = this.asm.process(this.pos, this.len);
18341 if (clen < this.len) {
18351 function sha256_finish() {
18352 if (this.result !== null) throw new IllegalStateError(
"state must be reset before processing new data");
18353 this.asm.finish(this.pos, this.len,
0);
18354 this.result = new Uint8Array(_sha256_hash_size);
18355 this.result.set(this.heap.subarray(
0, _sha256_hash_size));
18360 sha256_constructor.BLOCK_SIZE = _sha256_block_size;
18361 sha256_constructor.HASH_SIZE = _sha256_hash_size;
18362 var sha256_prototype = sha256_constructor.prototype;
18363 sha256_prototype.reset = sha256_reset;
18364 sha256_prototype.process = sha256_process;
18365 sha256_prototype.finish = sha256_finish;
18366 function sha512_asm(stdlib, foreign, buffer) {
18367 // Closure Compiler warning - commented out
18369 var H0h =
0, H0l =
0, H1h =
0, H1l =
0, H2h =
0, H2l =
0, H3h =
0, H3l =
0, H4h =
0, H4l =
0, H5h =
0, H5l =
0, H6h =
0, H6l =
0, H7h =
0, H7l =
0, TOTAL =
0;
18370 var I0h =
0, I0l =
0, I1h =
0, I1l =
0, I2h =
0, I2l =
0, I3h =
0, I3l =
0, I4h =
0, I4l =
0, I5h =
0, I5l =
0, I6h =
0, I6l =
0, I7h =
0, I7l =
0, O0h =
0, O0l =
0, O1h =
0, O1l =
0, O2h =
0, O2l =
0, O3h =
0, O3l =
0, O4h =
0, O4l =
0, O5h =
0, O5l =
0, O6h =
0, O6l =
0, O7h =
0, O7l =
0;
18371 var HEAP = new stdlib.Uint8Array(buffer);
18372 function _core(w0h, w0l, w1h, w1l, w2h, w2l, w3h, w3l, w4h, w4l, w5h, w5l, w6h, w6l, w7h, w7l, w8h, w8l, w9h, w9l, w10h, w10l, w11h, w11l, w12h, w12l, w13h, w13l, w14h, w14l, w15h, w15l) {
18405 var ah =
0, al =
0, bh =
0, bl =
0, ch =
0, cl =
0, dh =
0, dl =
0, eh =
0, el =
0, fh =
0, fl =
0, gh =
0, gl =
0, hh =
0, hl =
0, th =
0, tl =
0, xl =
0;
18422 tl =
3609767458 + w0l |
0;
18423 th =
1116352408 + w0h + (tl
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
18425 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18426 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18428 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18429 xl = gl ^ el & (fl ^ gl) |
0;
18431 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18439 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18446 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18447 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18448 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18450 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18451 tl =
602891725 + w1l |
0;
18452 th =
1899447441 + w1h + (tl
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
18454 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18455 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18457 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18458 xl = gl ^ el & (fl ^ gl) |
0;
18460 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18468 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18475 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18476 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18477 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18479 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18480 tl =
3964484399 + w2l |
0;
18481 th =
3049323471 + w2h + (tl
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
18483 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18484 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18486 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18487 xl = gl ^ el & (fl ^ gl) |
0;
18489 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18497 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18504 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18505 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18506 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18508 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18509 tl =
2173295548 + w3l |
0;
18510 th =
3921009573 + w3h + (tl
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
18512 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18513 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18515 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18516 xl = gl ^ el & (fl ^ gl) |
0;
18518 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18526 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18533 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18534 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18535 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18537 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18538 tl =
4081628472 + w4l |
0;
18539 th =
961987163 + w4h + (tl
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
18541 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18542 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18544 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18545 xl = gl ^ el & (fl ^ gl) |
0;
18547 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18555 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18562 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18563 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18564 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18566 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18567 tl =
3053834265 + w5l |
0;
18568 th =
1508970993 + w5h + (tl
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
18570 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18571 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18573 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18574 xl = gl ^ el & (fl ^ gl) |
0;
18576 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18584 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18591 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18592 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18593 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18595 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18596 tl =
2937671579 + w6l |
0;
18597 th =
2453635748 + w6h + (tl
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
18599 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18600 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18602 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18603 xl = gl ^ el & (fl ^ gl) |
0;
18605 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18613 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18620 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18621 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18622 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18624 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18625 tl =
3664609560 + w7l |
0;
18626 th =
2870763221 + w7h + (tl
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
18628 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18629 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18631 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18632 xl = gl ^ el & (fl ^ gl) |
0;
18634 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18642 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18649 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18650 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18651 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18653 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18654 tl =
2734883394 + w8l |
0;
18655 th =
3624381080 + w8h + (tl
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
18657 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18658 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18660 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18661 xl = gl ^ el & (fl ^ gl) |
0;
18663 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18671 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18678 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18679 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18680 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18682 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18683 tl =
1164996542 + w9l |
0;
18684 th =
310598401 + w9h + (tl
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
18686 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18687 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18689 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18690 xl = gl ^ el & (fl ^ gl) |
0;
18692 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18700 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18707 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18708 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18709 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18711 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18712 tl =
1323610764 + w10l |
0;
18713 th =
607225278 + w10h + (tl
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
18715 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18716 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18718 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18719 xl = gl ^ el & (fl ^ gl) |
0;
18721 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18729 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18736 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18737 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18738 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18740 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18741 tl =
3590304994 + w11l |
0;
18742 th =
1426881987 + w11h + (tl
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
18744 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18745 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18747 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18748 xl = gl ^ el & (fl ^ gl) |
0;
18750 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18758 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18765 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18766 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18767 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18769 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18770 tl =
4068182383 + w12l |
0;
18771 th =
1925078388 + w12h + (tl
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
18773 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18774 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18776 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18777 xl = gl ^ el & (fl ^ gl) |
0;
18779 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18787 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18794 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18795 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18796 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18798 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18799 tl =
991336113 + w13l |
0;
18800 th =
2162078206 + w13h + (tl
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
18802 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18803 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18805 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18806 xl = gl ^ el & (fl ^ gl) |
0;
18808 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18816 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18823 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18824 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18825 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18827 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18828 tl =
633803317 + w14l |
0;
18829 th =
2614888103 + w14h + (tl
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
18831 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18832 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18834 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18835 xl = gl ^ el & (fl ^ gl) |
0;
18837 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18845 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18852 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18853 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18854 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18856 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18857 tl =
3479774868 + w15l |
0;
18858 th =
3248222580 + w15h + (tl
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
18860 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18861 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18863 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18864 xl = gl ^ el & (fl ^ gl) |
0;
18866 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18874 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18881 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18882 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18883 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18885 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18886 w0l = w0l + w9l |
0;
18887 w0h = w0h + w9h + (w0l
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
18888 xl = (w1l
>>> 1 | w1h <<
31) ^ (w1l
>>> 8 | w1h <<
24) ^ (w1l
>>> 7 | w1h <<
25) |
0;
18889 w0l = w0l + xl |
0;
18890 w0h = w0h + ((w1h
>>> 1 | w1l <<
31) ^ (w1h
>>> 8 | w1l <<
24) ^ w1h
>>> 7) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18891 xl = (w14l
>>> 19 | w14h <<
13) ^ (w14l <<
3 | w14h
>>> 29) ^ (w14l
>>> 6 | w14h <<
26) |
0;
18892 w0l = w0l + xl |
0;
18893 w0h = w0h + ((w14h
>>> 19 | w14l <<
13) ^ (w14h <<
3 | w14l
>>> 29) ^ w14h
>>> 6) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18894 tl =
2666613458 + w0l |
0;
18895 th =
3835390401 + w0h + (tl
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
18897 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18898 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18900 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18901 xl = gl ^ el & (fl ^ gl) |
0;
18903 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18911 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18918 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18919 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18920 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18922 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18923 w1l = w1l + w10l |
0;
18924 w1h = w1h + w10h + (w1l
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
18925 xl = (w2l
>>> 1 | w2h <<
31) ^ (w2l
>>> 8 | w2h <<
24) ^ (w2l
>>> 7 | w2h <<
25) |
0;
18926 w1l = w1l + xl |
0;
18927 w1h = w1h + ((w2h
>>> 1 | w2l <<
31) ^ (w2h
>>> 8 | w2l <<
24) ^ w2h
>>> 7) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18928 xl = (w15l
>>> 19 | w15h <<
13) ^ (w15l <<
3 | w15h
>>> 29) ^ (w15l
>>> 6 | w15h <<
26) |
0;
18929 w1l = w1l + xl |
0;
18930 w1h = w1h + ((w15h
>>> 19 | w15l <<
13) ^ (w15h <<
3 | w15l
>>> 29) ^ w15h
>>> 6) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18931 tl =
944711139 + w1l |
0;
18932 th =
4022224774 + w1h + (tl
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
18934 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18935 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18937 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18938 xl = gl ^ el & (fl ^ gl) |
0;
18940 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18948 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18955 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18956 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18957 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18959 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18960 w2l = w2l + w11l |
0;
18961 w2h = w2h + w11h + (w2l
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
18962 xl = (w3l
>>> 1 | w3h <<
31) ^ (w3l
>>> 8 | w3h <<
24) ^ (w3l
>>> 7 | w3h <<
25) |
0;
18963 w2l = w2l + xl |
0;
18964 w2h = w2h + ((w3h
>>> 1 | w3l <<
31) ^ (w3h
>>> 8 | w3l <<
24) ^ w3h
>>> 7) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18965 xl = (w0l
>>> 19 | w0h <<
13) ^ (w0l <<
3 | w0h
>>> 29) ^ (w0l
>>> 6 | w0h <<
26) |
0;
18966 w2l = w2l + xl |
0;
18967 w2h = w2h + ((w0h
>>> 19 | w0l <<
13) ^ (w0h <<
3 | w0l
>>> 29) ^ w0h
>>> 6) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18968 tl =
2341262773 + w2l |
0;
18969 th =
264347078 + w2h + (tl
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
18971 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
18972 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
18974 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18975 xl = gl ^ el & (fl ^ gl) |
0;
18977 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18985 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
18992 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
18993 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
18994 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
18996 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
18997 w3l = w3l + w12l |
0;
18998 w3h = w3h + w12h + (w3l
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
18999 xl = (w4l
>>> 1 | w4h <<
31) ^ (w4l
>>> 8 | w4h <<
24) ^ (w4l
>>> 7 | w4h <<
25) |
0;
19000 w3l = w3l + xl |
0;
19001 w3h = w3h + ((w4h
>>> 1 | w4l <<
31) ^ (w4h
>>> 8 | w4l <<
24) ^ w4h
>>> 7) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19002 xl = (w1l
>>> 19 | w1h <<
13) ^ (w1l <<
3 | w1h
>>> 29) ^ (w1l
>>> 6 | w1h <<
26) |
0;
19003 w3l = w3l + xl |
0;
19004 w3h = w3h + ((w1h
>>> 19 | w1l <<
13) ^ (w1h <<
3 | w1l
>>> 29) ^ w1h
>>> 6) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19005 tl =
2007800933 + w3l |
0;
19006 th =
604807628 + w3h + (tl
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
19008 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19009 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19011 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19012 xl = gl ^ el & (fl ^ gl) |
0;
19014 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19022 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19029 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19030 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19031 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19033 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19034 w4l = w4l + w13l |
0;
19035 w4h = w4h + w13h + (w4l
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
19036 xl = (w5l
>>> 1 | w5h <<
31) ^ (w5l
>>> 8 | w5h <<
24) ^ (w5l
>>> 7 | w5h <<
25) |
0;
19037 w4l = w4l + xl |
0;
19038 w4h = w4h + ((w5h
>>> 1 | w5l <<
31) ^ (w5h
>>> 8 | w5l <<
24) ^ w5h
>>> 7) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19039 xl = (w2l
>>> 19 | w2h <<
13) ^ (w2l <<
3 | w2h
>>> 29) ^ (w2l
>>> 6 | w2h <<
26) |
0;
19040 w4l = w4l + xl |
0;
19041 w4h = w4h + ((w2h
>>> 19 | w2l <<
13) ^ (w2h <<
3 | w2l
>>> 29) ^ w2h
>>> 6) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19042 tl =
1495990901 + w4l |
0;
19043 th =
770255983 + w4h + (tl
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
19045 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19046 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19048 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19049 xl = gl ^ el & (fl ^ gl) |
0;
19051 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19059 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19066 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19067 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19068 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19070 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19071 w5l = w5l + w14l |
0;
19072 w5h = w5h + w14h + (w5l
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
19073 xl = (w6l
>>> 1 | w6h <<
31) ^ (w6l
>>> 8 | w6h <<
24) ^ (w6l
>>> 7 | w6h <<
25) |
0;
19074 w5l = w5l + xl |
0;
19075 w5h = w5h + ((w6h
>>> 1 | w6l <<
31) ^ (w6h
>>> 8 | w6l <<
24) ^ w6h
>>> 7) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19076 xl = (w3l
>>> 19 | w3h <<
13) ^ (w3l <<
3 | w3h
>>> 29) ^ (w3l
>>> 6 | w3h <<
26) |
0;
19077 w5l = w5l + xl |
0;
19078 w5h = w5h + ((w3h
>>> 19 | w3l <<
13) ^ (w3h <<
3 | w3l
>>> 29) ^ w3h
>>> 6) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19079 tl =
1856431235 + w5l |
0;
19080 th =
1249150122 + w5h + (tl
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
19082 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19083 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19085 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19086 xl = gl ^ el & (fl ^ gl) |
0;
19088 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19096 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19103 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19104 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19105 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19107 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19108 w6l = w6l + w15l |
0;
19109 w6h = w6h + w15h + (w6l
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
19110 xl = (w7l
>>> 1 | w7h <<
31) ^ (w7l
>>> 8 | w7h <<
24) ^ (w7l
>>> 7 | w7h <<
25) |
0;
19111 w6l = w6l + xl |
0;
19112 w6h = w6h + ((w7h
>>> 1 | w7l <<
31) ^ (w7h
>>> 8 | w7l <<
24) ^ w7h
>>> 7) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19113 xl = (w4l
>>> 19 | w4h <<
13) ^ (w4l <<
3 | w4h
>>> 29) ^ (w4l
>>> 6 | w4h <<
26) |
0;
19114 w6l = w6l + xl |
0;
19115 w6h = w6h + ((w4h
>>> 19 | w4l <<
13) ^ (w4h <<
3 | w4l
>>> 29) ^ w4h
>>> 6) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19116 tl =
3175218132 + w6l |
0;
19117 th =
1555081692 + w6h + (tl
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
19119 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19120 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19122 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19123 xl = gl ^ el & (fl ^ gl) |
0;
19125 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19133 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19140 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19141 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19142 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19144 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19145 w7l = w7l + w0l |
0;
19146 w7h = w7h + w0h + (w7l
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
19147 xl = (w8l
>>> 1 | w8h <<
31) ^ (w8l
>>> 8 | w8h <<
24) ^ (w8l
>>> 7 | w8h <<
25) |
0;
19148 w7l = w7l + xl |
0;
19149 w7h = w7h + ((w8h
>>> 1 | w8l <<
31) ^ (w8h
>>> 8 | w8l <<
24) ^ w8h
>>> 7) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19150 xl = (w5l
>>> 19 | w5h <<
13) ^ (w5l <<
3 | w5h
>>> 29) ^ (w5l
>>> 6 | w5h <<
26) |
0;
19151 w7l = w7l + xl |
0;
19152 w7h = w7h + ((w5h
>>> 19 | w5l <<
13) ^ (w5h <<
3 | w5l
>>> 29) ^ w5h
>>> 6) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19153 tl =
2198950837 + w7l |
0;
19154 th =
1996064986 + w7h + (tl
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
19156 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19157 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19159 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19160 xl = gl ^ el & (fl ^ gl) |
0;
19162 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19170 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19177 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19178 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19179 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19181 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19182 w8l = w8l + w1l |
0;
19183 w8h = w8h + w1h + (w8l
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
19184 xl = (w9l
>>> 1 | w9h <<
31) ^ (w9l
>>> 8 | w9h <<
24) ^ (w9l
>>> 7 | w9h <<
25) |
0;
19185 w8l = w8l + xl |
0;
19186 w8h = w8h + ((w9h
>>> 1 | w9l <<
31) ^ (w9h
>>> 8 | w9l <<
24) ^ w9h
>>> 7) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19187 xl = (w6l
>>> 19 | w6h <<
13) ^ (w6l <<
3 | w6h
>>> 29) ^ (w6l
>>> 6 | w6h <<
26) |
0;
19188 w8l = w8l + xl |
0;
19189 w8h = w8h + ((w6h
>>> 19 | w6l <<
13) ^ (w6h <<
3 | w6l
>>> 29) ^ w6h
>>> 6) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19190 tl =
3999719339 + w8l |
0;
19191 th =
2554220882 + w8h + (tl
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
19193 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19194 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19196 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19197 xl = gl ^ el & (fl ^ gl) |
0;
19199 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19207 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19214 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19215 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19216 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19218 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19219 w9l = w9l + w2l |
0;
19220 w9h = w9h + w2h + (w9l
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
19221 xl = (w10l
>>> 1 | w10h <<
31) ^ (w10l
>>> 8 | w10h <<
24) ^ (w10l
>>> 7 | w10h <<
25) |
0;
19222 w9l = w9l + xl |
0;
19223 w9h = w9h + ((w10h
>>> 1 | w10l <<
31) ^ (w10h
>>> 8 | w10l <<
24) ^ w10h
>>> 7) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19224 xl = (w7l
>>> 19 | w7h <<
13) ^ (w7l <<
3 | w7h
>>> 29) ^ (w7l
>>> 6 | w7h <<
26) |
0;
19225 w9l = w9l + xl |
0;
19226 w9h = w9h + ((w7h
>>> 19 | w7l <<
13) ^ (w7h <<
3 | w7l
>>> 29) ^ w7h
>>> 6) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19227 tl =
766784016 + w9l |
0;
19228 th =
2821834349 + w9h + (tl
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
19230 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19231 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19233 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19234 xl = gl ^ el & (fl ^ gl) |
0;
19236 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19244 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19251 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19252 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19253 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19255 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19256 w10l = w10l + w3l |
0;
19257 w10h = w10h + w3h + (w10l
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
19258 xl = (w11l
>>> 1 | w11h <<
31) ^ (w11l
>>> 8 | w11h <<
24) ^ (w11l
>>> 7 | w11h <<
25) |
0;
19259 w10l = w10l + xl |
0;
19260 w10h = w10h + ((w11h
>>> 1 | w11l <<
31) ^ (w11h
>>> 8 | w11l <<
24) ^ w11h
>>> 7) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19261 xl = (w8l
>>> 19 | w8h <<
13) ^ (w8l <<
3 | w8h
>>> 29) ^ (w8l
>>> 6 | w8h <<
26) |
0;
19262 w10l = w10l + xl |
0;
19263 w10h = w10h + ((w8h
>>> 19 | w8l <<
13) ^ (w8h <<
3 | w8l
>>> 29) ^ w8h
>>> 6) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19264 tl =
2566594879 + w10l |
0;
19265 th =
2952996808 + w10h + (tl
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
19267 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19268 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19270 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19271 xl = gl ^ el & (fl ^ gl) |
0;
19273 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19281 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19288 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19289 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19290 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19292 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19293 w11l = w11l + w4l |
0;
19294 w11h = w11h + w4h + (w11l
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
19295 xl = (w12l
>>> 1 | w12h <<
31) ^ (w12l
>>> 8 | w12h <<
24) ^ (w12l
>>> 7 | w12h <<
25) |
0;
19296 w11l = w11l + xl |
0;
19297 w11h = w11h + ((w12h
>>> 1 | w12l <<
31) ^ (w12h
>>> 8 | w12l <<
24) ^ w12h
>>> 7) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19298 xl = (w9l
>>> 19 | w9h <<
13) ^ (w9l <<
3 | w9h
>>> 29) ^ (w9l
>>> 6 | w9h <<
26) |
0;
19299 w11l = w11l + xl |
0;
19300 w11h = w11h + ((w9h
>>> 19 | w9l <<
13) ^ (w9h <<
3 | w9l
>>> 29) ^ w9h
>>> 6) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19301 tl =
3203337956 + w11l |
0;
19302 th =
3210313671 + w11h + (tl
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
19304 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19305 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19307 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19308 xl = gl ^ el & (fl ^ gl) |
0;
19310 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19318 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19325 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19326 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19327 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19329 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19330 w12l = w12l + w5l |
0;
19331 w12h = w12h + w5h + (w12l
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
19332 xl = (w13l
>>> 1 | w13h <<
31) ^ (w13l
>>> 8 | w13h <<
24) ^ (w13l
>>> 7 | w13h <<
25) |
0;
19333 w12l = w12l + xl |
0;
19334 w12h = w12h + ((w13h
>>> 1 | w13l <<
31) ^ (w13h
>>> 8 | w13l <<
24) ^ w13h
>>> 7) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19335 xl = (w10l
>>> 19 | w10h <<
13) ^ (w10l <<
3 | w10h
>>> 29) ^ (w10l
>>> 6 | w10h <<
26) |
0;
19336 w12l = w12l + xl |
0;
19337 w12h = w12h + ((w10h
>>> 19 | w10l <<
13) ^ (w10h <<
3 | w10l
>>> 29) ^ w10h
>>> 6) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19338 tl =
1034457026 + w12l |
0;
19339 th =
3336571891 + w12h + (tl
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
19341 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19342 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19344 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19345 xl = gl ^ el & (fl ^ gl) |
0;
19347 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19355 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19362 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19363 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19364 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19366 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19367 w13l = w13l + w6l |
0;
19368 w13h = w13h + w6h + (w13l
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
19369 xl = (w14l
>>> 1 | w14h <<
31) ^ (w14l
>>> 8 | w14h <<
24) ^ (w14l
>>> 7 | w14h <<
25) |
0;
19370 w13l = w13l + xl |
0;
19371 w13h = w13h + ((w14h
>>> 1 | w14l <<
31) ^ (w14h
>>> 8 | w14l <<
24) ^ w14h
>>> 7) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19372 xl = (w11l
>>> 19 | w11h <<
13) ^ (w11l <<
3 | w11h
>>> 29) ^ (w11l
>>> 6 | w11h <<
26) |
0;
19373 w13l = w13l + xl |
0;
19374 w13h = w13h + ((w11h
>>> 19 | w11l <<
13) ^ (w11h <<
3 | w11l
>>> 29) ^ w11h
>>> 6) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19375 tl =
2466948901 + w13l |
0;
19376 th =
3584528711 + w13h + (tl
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
19378 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19379 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19381 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19382 xl = gl ^ el & (fl ^ gl) |
0;
19384 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19392 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19399 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19400 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19401 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19403 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19404 w14l = w14l + w7l |
0;
19405 w14h = w14h + w7h + (w14l
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
19406 xl = (w15l
>>> 1 | w15h <<
31) ^ (w15l
>>> 8 | w15h <<
24) ^ (w15l
>>> 7 | w15h <<
25) |
0;
19407 w14l = w14l + xl |
0;
19408 w14h = w14h + ((w15h
>>> 1 | w15l <<
31) ^ (w15h
>>> 8 | w15l <<
24) ^ w15h
>>> 7) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19409 xl = (w12l
>>> 19 | w12h <<
13) ^ (w12l <<
3 | w12h
>>> 29) ^ (w12l
>>> 6 | w12h <<
26) |
0;
19410 w14l = w14l + xl |
0;
19411 w14h = w14h + ((w12h
>>> 19 | w12l <<
13) ^ (w12h <<
3 | w12l
>>> 29) ^ w12h
>>> 6) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19412 tl =
3758326383 + w14l |
0;
19413 th =
113926993 + w14h + (tl
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
19415 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19416 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19418 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19419 xl = gl ^ el & (fl ^ gl) |
0;
19421 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19429 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19436 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19437 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19438 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19440 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19441 w15l = w15l + w8l |
0;
19442 w15h = w15h + w8h + (w15l
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
19443 xl = (w0l
>>> 1 | w0h <<
31) ^ (w0l
>>> 8 | w0h <<
24) ^ (w0l
>>> 7 | w0h <<
25) |
0;
19444 w15l = w15l + xl |
0;
19445 w15h = w15h + ((w0h
>>> 1 | w0l <<
31) ^ (w0h
>>> 8 | w0l <<
24) ^ w0h
>>> 7) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19446 xl = (w13l
>>> 19 | w13h <<
13) ^ (w13l <<
3 | w13h
>>> 29) ^ (w13l
>>> 6 | w13h <<
26) |
0;
19447 w15l = w15l + xl |
0;
19448 w15h = w15h + ((w13h
>>> 19 | w13l <<
13) ^ (w13h <<
3 | w13l
>>> 29) ^ w13h
>>> 6) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19449 tl =
168717936 + w15l |
0;
19450 th =
338241895 + w15h + (tl
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
19452 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19453 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19455 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19456 xl = gl ^ el & (fl ^ gl) |
0;
19458 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19466 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19473 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19474 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19475 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19477 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19478 w0l = w0l + w9l |
0;
19479 w0h = w0h + w9h + (w0l
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
19480 xl = (w1l
>>> 1 | w1h <<
31) ^ (w1l
>>> 8 | w1h <<
24) ^ (w1l
>>> 7 | w1h <<
25) |
0;
19481 w0l = w0l + xl |
0;
19482 w0h = w0h + ((w1h
>>> 1 | w1l <<
31) ^ (w1h
>>> 8 | w1l <<
24) ^ w1h
>>> 7) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19483 xl = (w14l
>>> 19 | w14h <<
13) ^ (w14l <<
3 | w14h
>>> 29) ^ (w14l
>>> 6 | w14h <<
26) |
0;
19484 w0l = w0l + xl |
0;
19485 w0h = w0h + ((w14h
>>> 19 | w14l <<
13) ^ (w14h <<
3 | w14l
>>> 29) ^ w14h
>>> 6) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19486 tl =
1188179964 + w0l |
0;
19487 th =
666307205 + w0h + (tl
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
19489 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19490 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19492 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19493 xl = gl ^ el & (fl ^ gl) |
0;
19495 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19503 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19510 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19511 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19512 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19514 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19515 w1l = w1l + w10l |
0;
19516 w1h = w1h + w10h + (w1l
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
19517 xl = (w2l
>>> 1 | w2h <<
31) ^ (w2l
>>> 8 | w2h <<
24) ^ (w2l
>>> 7 | w2h <<
25) |
0;
19518 w1l = w1l + xl |
0;
19519 w1h = w1h + ((w2h
>>> 1 | w2l <<
31) ^ (w2h
>>> 8 | w2l <<
24) ^ w2h
>>> 7) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19520 xl = (w15l
>>> 19 | w15h <<
13) ^ (w15l <<
3 | w15h
>>> 29) ^ (w15l
>>> 6 | w15h <<
26) |
0;
19521 w1l = w1l + xl |
0;
19522 w1h = w1h + ((w15h
>>> 19 | w15l <<
13) ^ (w15h <<
3 | w15l
>>> 29) ^ w15h
>>> 6) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19523 tl =
1546045734 + w1l |
0;
19524 th =
773529912 + w1h + (tl
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
19526 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19527 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19529 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19530 xl = gl ^ el & (fl ^ gl) |
0;
19532 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19540 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19547 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19548 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19549 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19551 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19552 w2l = w2l + w11l |
0;
19553 w2h = w2h + w11h + (w2l
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
19554 xl = (w3l
>>> 1 | w3h <<
31) ^ (w3l
>>> 8 | w3h <<
24) ^ (w3l
>>> 7 | w3h <<
25) |
0;
19555 w2l = w2l + xl |
0;
19556 w2h = w2h + ((w3h
>>> 1 | w3l <<
31) ^ (w3h
>>> 8 | w3l <<
24) ^ w3h
>>> 7) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19557 xl = (w0l
>>> 19 | w0h <<
13) ^ (w0l <<
3 | w0h
>>> 29) ^ (w0l
>>> 6 | w0h <<
26) |
0;
19558 w2l = w2l + xl |
0;
19559 w2h = w2h + ((w0h
>>> 19 | w0l <<
13) ^ (w0h <<
3 | w0l
>>> 29) ^ w0h
>>> 6) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19560 tl =
1522805485 + w2l |
0;
19561 th =
1294757372 + w2h + (tl
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
19563 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19564 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19566 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19567 xl = gl ^ el & (fl ^ gl) |
0;
19569 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19577 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19584 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19585 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19586 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19588 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19589 w3l = w3l + w12l |
0;
19590 w3h = w3h + w12h + (w3l
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
19591 xl = (w4l
>>> 1 | w4h <<
31) ^ (w4l
>>> 8 | w4h <<
24) ^ (w4l
>>> 7 | w4h <<
25) |
0;
19592 w3l = w3l + xl |
0;
19593 w3h = w3h + ((w4h
>>> 1 | w4l <<
31) ^ (w4h
>>> 8 | w4l <<
24) ^ w4h
>>> 7) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19594 xl = (w1l
>>> 19 | w1h <<
13) ^ (w1l <<
3 | w1h
>>> 29) ^ (w1l
>>> 6 | w1h <<
26) |
0;
19595 w3l = w3l + xl |
0;
19596 w3h = w3h + ((w1h
>>> 19 | w1l <<
13) ^ (w1h <<
3 | w1l
>>> 29) ^ w1h
>>> 6) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19597 tl =
2643833823 + w3l |
0;
19598 th =
1396182291 + w3h + (tl
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
19600 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19601 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19603 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19604 xl = gl ^ el & (fl ^ gl) |
0;
19606 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19614 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19621 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19622 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19623 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19625 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19626 w4l = w4l + w13l |
0;
19627 w4h = w4h + w13h + (w4l
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
19628 xl = (w5l
>>> 1 | w5h <<
31) ^ (w5l
>>> 8 | w5h <<
24) ^ (w5l
>>> 7 | w5h <<
25) |
0;
19629 w4l = w4l + xl |
0;
19630 w4h = w4h + ((w5h
>>> 1 | w5l <<
31) ^ (w5h
>>> 8 | w5l <<
24) ^ w5h
>>> 7) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19631 xl = (w2l
>>> 19 | w2h <<
13) ^ (w2l <<
3 | w2h
>>> 29) ^ (w2l
>>> 6 | w2h <<
26) |
0;
19632 w4l = w4l + xl |
0;
19633 w4h = w4h + ((w2h
>>> 19 | w2l <<
13) ^ (w2h <<
3 | w2l
>>> 29) ^ w2h
>>> 6) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19634 tl =
2343527390 + w4l |
0;
19635 th =
1695183700 + w4h + (tl
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
19637 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19638 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19640 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19641 xl = gl ^ el & (fl ^ gl) |
0;
19643 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19651 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19658 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19659 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19660 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19662 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19663 w5l = w5l + w14l |
0;
19664 w5h = w5h + w14h + (w5l
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
19665 xl = (w6l
>>> 1 | w6h <<
31) ^ (w6l
>>> 8 | w6h <<
24) ^ (w6l
>>> 7 | w6h <<
25) |
0;
19666 w5l = w5l + xl |
0;
19667 w5h = w5h + ((w6h
>>> 1 | w6l <<
31) ^ (w6h
>>> 8 | w6l <<
24) ^ w6h
>>> 7) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19668 xl = (w3l
>>> 19 | w3h <<
13) ^ (w3l <<
3 | w3h
>>> 29) ^ (w3l
>>> 6 | w3h <<
26) |
0;
19669 w5l = w5l + xl |
0;
19670 w5h = w5h + ((w3h
>>> 19 | w3l <<
13) ^ (w3h <<
3 | w3l
>>> 29) ^ w3h
>>> 6) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19671 tl =
1014477480 + w5l |
0;
19672 th =
1986661051 + w5h + (tl
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
19674 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19675 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19677 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19678 xl = gl ^ el & (fl ^ gl) |
0;
19680 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19688 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19695 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19696 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19697 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19699 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19700 w6l = w6l + w15l |
0;
19701 w6h = w6h + w15h + (w6l
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
19702 xl = (w7l
>>> 1 | w7h <<
31) ^ (w7l
>>> 8 | w7h <<
24) ^ (w7l
>>> 7 | w7h <<
25) |
0;
19703 w6l = w6l + xl |
0;
19704 w6h = w6h + ((w7h
>>> 1 | w7l <<
31) ^ (w7h
>>> 8 | w7l <<
24) ^ w7h
>>> 7) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19705 xl = (w4l
>>> 19 | w4h <<
13) ^ (w4l <<
3 | w4h
>>> 29) ^ (w4l
>>> 6 | w4h <<
26) |
0;
19706 w6l = w6l + xl |
0;
19707 w6h = w6h + ((w4h
>>> 19 | w4l <<
13) ^ (w4h <<
3 | w4l
>>> 29) ^ w4h
>>> 6) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19708 tl =
1206759142 + w6l |
0;
19709 th =
2177026350 + w6h + (tl
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
19711 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19712 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19714 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19715 xl = gl ^ el & (fl ^ gl) |
0;
19717 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19725 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19732 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19733 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19734 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19736 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19737 w7l = w7l + w0l |
0;
19738 w7h = w7h + w0h + (w7l
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
19739 xl = (w8l
>>> 1 | w8h <<
31) ^ (w8l
>>> 8 | w8h <<
24) ^ (w8l
>>> 7 | w8h <<
25) |
0;
19740 w7l = w7l + xl |
0;
19741 w7h = w7h + ((w8h
>>> 1 | w8l <<
31) ^ (w8h
>>> 8 | w8l <<
24) ^ w8h
>>> 7) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19742 xl = (w5l
>>> 19 | w5h <<
13) ^ (w5l <<
3 | w5h
>>> 29) ^ (w5l
>>> 6 | w5h <<
26) |
0;
19743 w7l = w7l + xl |
0;
19744 w7h = w7h + ((w5h
>>> 19 | w5l <<
13) ^ (w5h <<
3 | w5l
>>> 29) ^ w5h
>>> 6) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19745 tl =
344077627 + w7l |
0;
19746 th =
2456956037 + w7h + (tl
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
19748 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19749 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19751 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19752 xl = gl ^ el & (fl ^ gl) |
0;
19754 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19762 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19769 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19770 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19771 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19773 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19774 w8l = w8l + w1l |
0;
19775 w8h = w8h + w1h + (w8l
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
19776 xl = (w9l
>>> 1 | w9h <<
31) ^ (w9l
>>> 8 | w9h <<
24) ^ (w9l
>>> 7 | w9h <<
25) |
0;
19777 w8l = w8l + xl |
0;
19778 w8h = w8h + ((w9h
>>> 1 | w9l <<
31) ^ (w9h
>>> 8 | w9l <<
24) ^ w9h
>>> 7) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19779 xl = (w6l
>>> 19 | w6h <<
13) ^ (w6l <<
3 | w6h
>>> 29) ^ (w6l
>>> 6 | w6h <<
26) |
0;
19780 w8l = w8l + xl |
0;
19781 w8h = w8h + ((w6h
>>> 19 | w6l <<
13) ^ (w6h <<
3 | w6l
>>> 29) ^ w6h
>>> 6) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19782 tl =
1290863460 + w8l |
0;
19783 th =
2730485921 + w8h + (tl
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
19785 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19786 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19788 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19789 xl = gl ^ el & (fl ^ gl) |
0;
19791 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19799 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19806 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19807 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19808 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19810 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19811 w9l = w9l + w2l |
0;
19812 w9h = w9h + w2h + (w9l
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
19813 xl = (w10l
>>> 1 | w10h <<
31) ^ (w10l
>>> 8 | w10h <<
24) ^ (w10l
>>> 7 | w10h <<
25) |
0;
19814 w9l = w9l + xl |
0;
19815 w9h = w9h + ((w10h
>>> 1 | w10l <<
31) ^ (w10h
>>> 8 | w10l <<
24) ^ w10h
>>> 7) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19816 xl = (w7l
>>> 19 | w7h <<
13) ^ (w7l <<
3 | w7h
>>> 29) ^ (w7l
>>> 6 | w7h <<
26) |
0;
19817 w9l = w9l + xl |
0;
19818 w9h = w9h + ((w7h
>>> 19 | w7l <<
13) ^ (w7h <<
3 | w7l
>>> 29) ^ w7h
>>> 6) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19819 tl =
3158454273 + w9l |
0;
19820 th =
2820302411 + w9h + (tl
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
19822 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19823 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19825 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19826 xl = gl ^ el & (fl ^ gl) |
0;
19828 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19836 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19843 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19844 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19845 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19847 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19848 w10l = w10l + w3l |
0;
19849 w10h = w10h + w3h + (w10l
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
19850 xl = (w11l
>>> 1 | w11h <<
31) ^ (w11l
>>> 8 | w11h <<
24) ^ (w11l
>>> 7 | w11h <<
25) |
0;
19851 w10l = w10l + xl |
0;
19852 w10h = w10h + ((w11h
>>> 1 | w11l <<
31) ^ (w11h
>>> 8 | w11l <<
24) ^ w11h
>>> 7) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19853 xl = (w8l
>>> 19 | w8h <<
13) ^ (w8l <<
3 | w8h
>>> 29) ^ (w8l
>>> 6 | w8h <<
26) |
0;
19854 w10l = w10l + xl |
0;
19855 w10h = w10h + ((w8h
>>> 19 | w8l <<
13) ^ (w8h <<
3 | w8l
>>> 29) ^ w8h
>>> 6) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19856 tl =
3505952657 + w10l |
0;
19857 th =
3259730800 + w10h + (tl
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
19859 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19860 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19862 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19863 xl = gl ^ el & (fl ^ gl) |
0;
19865 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19873 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19880 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19881 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19882 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19884 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19885 w11l = w11l + w4l |
0;
19886 w11h = w11h + w4h + (w11l
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
19887 xl = (w12l
>>> 1 | w12h <<
31) ^ (w12l
>>> 8 | w12h <<
24) ^ (w12l
>>> 7 | w12h <<
25) |
0;
19888 w11l = w11l + xl |
0;
19889 w11h = w11h + ((w12h
>>> 1 | w12l <<
31) ^ (w12h
>>> 8 | w12l <<
24) ^ w12h
>>> 7) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19890 xl = (w9l
>>> 19 | w9h <<
13) ^ (w9l <<
3 | w9h
>>> 29) ^ (w9l
>>> 6 | w9h <<
26) |
0;
19891 w11l = w11l + xl |
0;
19892 w11h = w11h + ((w9h
>>> 19 | w9l <<
13) ^ (w9h <<
3 | w9l
>>> 29) ^ w9h
>>> 6) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19893 tl =
106217008 + w11l |
0;
19894 th =
3345764771 + w11h + (tl
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
19896 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19897 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19899 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19900 xl = gl ^ el & (fl ^ gl) |
0;
19902 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19910 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19917 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19918 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19919 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19921 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19922 w12l = w12l + w5l |
0;
19923 w12h = w12h + w5h + (w12l
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
19924 xl = (w13l
>>> 1 | w13h <<
31) ^ (w13l
>>> 8 | w13h <<
24) ^ (w13l
>>> 7 | w13h <<
25) |
0;
19925 w12l = w12l + xl |
0;
19926 w12h = w12h + ((w13h
>>> 1 | w13l <<
31) ^ (w13h
>>> 8 | w13l <<
24) ^ w13h
>>> 7) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19927 xl = (w10l
>>> 19 | w10h <<
13) ^ (w10l <<
3 | w10h
>>> 29) ^ (w10l
>>> 6 | w10h <<
26) |
0;
19928 w12l = w12l + xl |
0;
19929 w12h = w12h + ((w10h
>>> 19 | w10l <<
13) ^ (w10h <<
3 | w10l
>>> 29) ^ w10h
>>> 6) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19930 tl =
3606008344 + w12l |
0;
19931 th =
3516065817 + w12h + (tl
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
19933 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19934 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19936 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19937 xl = gl ^ el & (fl ^ gl) |
0;
19939 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19947 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19954 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19955 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19956 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19958 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19959 w13l = w13l + w6l |
0;
19960 w13h = w13h + w6h + (w13l
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
19961 xl = (w14l
>>> 1 | w14h <<
31) ^ (w14l
>>> 8 | w14h <<
24) ^ (w14l
>>> 7 | w14h <<
25) |
0;
19962 w13l = w13l + xl |
0;
19963 w13h = w13h + ((w14h
>>> 1 | w14l <<
31) ^ (w14h
>>> 8 | w14l <<
24) ^ w14h
>>> 7) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19964 xl = (w11l
>>> 19 | w11h <<
13) ^ (w11l <<
3 | w11h
>>> 29) ^ (w11l
>>> 6 | w11h <<
26) |
0;
19965 w13l = w13l + xl |
0;
19966 w13h = w13h + ((w11h
>>> 19 | w11l <<
13) ^ (w11h <<
3 | w11l
>>> 29) ^ w11h
>>> 6) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19967 tl =
1432725776 + w13l |
0;
19968 th =
3600352804 + w13h + (tl
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
19970 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
19971 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
19973 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19974 xl = gl ^ el & (fl ^ gl) |
0;
19976 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19984 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
19991 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
19992 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
19993 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
19995 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
19996 w14l = w14l + w7l |
0;
19997 w14h = w14h + w7h + (w14l
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
19998 xl = (w15l
>>> 1 | w15h <<
31) ^ (w15l
>>> 8 | w15h <<
24) ^ (w15l
>>> 7 | w15h <<
25) |
0;
19999 w14l = w14l + xl |
0;
20000 w14h = w14h + ((w15h
>>> 1 | w15l <<
31) ^ (w15h
>>> 8 | w15l <<
24) ^ w15h
>>> 7) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20001 xl = (w12l
>>> 19 | w12h <<
13) ^ (w12l <<
3 | w12h
>>> 29) ^ (w12l
>>> 6 | w12h <<
26) |
0;
20002 w14l = w14l + xl |
0;
20003 w14h = w14h + ((w12h
>>> 19 | w12l <<
13) ^ (w12h <<
3 | w12l
>>> 29) ^ w12h
>>> 6) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20004 tl =
1467031594 + w14l |
0;
20005 th =
4094571909 + w14h + (tl
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
20007 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20008 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20010 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20011 xl = gl ^ el & (fl ^ gl) |
0;
20013 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20021 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20028 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20029 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20030 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20032 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20033 w15l = w15l + w8l |
0;
20034 w15h = w15h + w8h + (w15l
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
20035 xl = (w0l
>>> 1 | w0h <<
31) ^ (w0l
>>> 8 | w0h <<
24) ^ (w0l
>>> 7 | w0h <<
25) |
0;
20036 w15l = w15l + xl |
0;
20037 w15h = w15h + ((w0h
>>> 1 | w0l <<
31) ^ (w0h
>>> 8 | w0l <<
24) ^ w0h
>>> 7) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20038 xl = (w13l
>>> 19 | w13h <<
13) ^ (w13l <<
3 | w13h
>>> 29) ^ (w13l
>>> 6 | w13h <<
26) |
0;
20039 w15l = w15l + xl |
0;
20040 w15h = w15h + ((w13h
>>> 19 | w13l <<
13) ^ (w13h <<
3 | w13l
>>> 29) ^ w13h
>>> 6) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20041 tl =
851169720 + w15l |
0;
20042 th =
275423344 + w15h + (tl
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
20044 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20045 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20047 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20048 xl = gl ^ el & (fl ^ gl) |
0;
20050 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20058 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20065 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20066 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20067 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20069 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20070 w0l = w0l + w9l |
0;
20071 w0h = w0h + w9h + (w0l
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
20072 xl = (w1l
>>> 1 | w1h <<
31) ^ (w1l
>>> 8 | w1h <<
24) ^ (w1l
>>> 7 | w1h <<
25) |
0;
20073 w0l = w0l + xl |
0;
20074 w0h = w0h + ((w1h
>>> 1 | w1l <<
31) ^ (w1h
>>> 8 | w1l <<
24) ^ w1h
>>> 7) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20075 xl = (w14l
>>> 19 | w14h <<
13) ^ (w14l <<
3 | w14h
>>> 29) ^ (w14l
>>> 6 | w14h <<
26) |
0;
20076 w0l = w0l + xl |
0;
20077 w0h = w0h + ((w14h
>>> 19 | w14l <<
13) ^ (w14h <<
3 | w14l
>>> 29) ^ w14h
>>> 6) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20078 tl =
3100823752 + w0l |
0;
20079 th =
430227734 + w0h + (tl
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
20081 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20082 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20084 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20085 xl = gl ^ el & (fl ^ gl) |
0;
20087 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20095 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20102 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20103 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20104 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20106 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20107 w1l = w1l + w10l |
0;
20108 w1h = w1h + w10h + (w1l
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
20109 xl = (w2l
>>> 1 | w2h <<
31) ^ (w2l
>>> 8 | w2h <<
24) ^ (w2l
>>> 7 | w2h <<
25) |
0;
20110 w1l = w1l + xl |
0;
20111 w1h = w1h + ((w2h
>>> 1 | w2l <<
31) ^ (w2h
>>> 8 | w2l <<
24) ^ w2h
>>> 7) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20112 xl = (w15l
>>> 19 | w15h <<
13) ^ (w15l <<
3 | w15h
>>> 29) ^ (w15l
>>> 6 | w15h <<
26) |
0;
20113 w1l = w1l + xl |
0;
20114 w1h = w1h + ((w15h
>>> 19 | w15l <<
13) ^ (w15h <<
3 | w15l
>>> 29) ^ w15h
>>> 6) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20115 tl =
1363258195 + w1l |
0;
20116 th =
506948616 + w1h + (tl
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
20118 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20119 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20121 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20122 xl = gl ^ el & (fl ^ gl) |
0;
20124 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20132 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20139 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20140 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20141 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20143 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20144 w2l = w2l + w11l |
0;
20145 w2h = w2h + w11h + (w2l
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
20146 xl = (w3l
>>> 1 | w3h <<
31) ^ (w3l
>>> 8 | w3h <<
24) ^ (w3l
>>> 7 | w3h <<
25) |
0;
20147 w2l = w2l + xl |
0;
20148 w2h = w2h + ((w3h
>>> 1 | w3l <<
31) ^ (w3h
>>> 8 | w3l <<
24) ^ w3h
>>> 7) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20149 xl = (w0l
>>> 19 | w0h <<
13) ^ (w0l <<
3 | w0h
>>> 29) ^ (w0l
>>> 6 | w0h <<
26) |
0;
20150 w2l = w2l + xl |
0;
20151 w2h = w2h + ((w0h
>>> 19 | w0l <<
13) ^ (w0h <<
3 | w0l
>>> 29) ^ w0h
>>> 6) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20152 tl =
3750685593 + w2l |
0;
20153 th =
659060556 + w2h + (tl
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
20155 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20156 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20158 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20159 xl = gl ^ el & (fl ^ gl) |
0;
20161 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20169 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20176 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20177 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20178 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20180 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20181 w3l = w3l + w12l |
0;
20182 w3h = w3h + w12h + (w3l
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
20183 xl = (w4l
>>> 1 | w4h <<
31) ^ (w4l
>>> 8 | w4h <<
24) ^ (w4l
>>> 7 | w4h <<
25) |
0;
20184 w3l = w3l + xl |
0;
20185 w3h = w3h + ((w4h
>>> 1 | w4l <<
31) ^ (w4h
>>> 8 | w4l <<
24) ^ w4h
>>> 7) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20186 xl = (w1l
>>> 19 | w1h <<
13) ^ (w1l <<
3 | w1h
>>> 29) ^ (w1l
>>> 6 | w1h <<
26) |
0;
20187 w3l = w3l + xl |
0;
20188 w3h = w3h + ((w1h
>>> 19 | w1l <<
13) ^ (w1h <<
3 | w1l
>>> 29) ^ w1h
>>> 6) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20189 tl =
3785050280 + w3l |
0;
20190 th =
883997877 + w3h + (tl
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
20192 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20193 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20195 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20196 xl = gl ^ el & (fl ^ gl) |
0;
20198 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20206 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20213 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20214 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20215 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20217 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20218 w4l = w4l + w13l |
0;
20219 w4h = w4h + w13h + (w4l
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
20220 xl = (w5l
>>> 1 | w5h <<
31) ^ (w5l
>>> 8 | w5h <<
24) ^ (w5l
>>> 7 | w5h <<
25) |
0;
20221 w4l = w4l + xl |
0;
20222 w4h = w4h + ((w5h
>>> 1 | w5l <<
31) ^ (w5h
>>> 8 | w5l <<
24) ^ w5h
>>> 7) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20223 xl = (w2l
>>> 19 | w2h <<
13) ^ (w2l <<
3 | w2h
>>> 29) ^ (w2l
>>> 6 | w2h <<
26) |
0;
20224 w4l = w4l + xl |
0;
20225 w4h = w4h + ((w2h
>>> 19 | w2l <<
13) ^ (w2h <<
3 | w2l
>>> 29) ^ w2h
>>> 6) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20226 tl =
3318307427 + w4l |
0;
20227 th =
958139571 + w4h + (tl
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
20229 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20230 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20232 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20233 xl = gl ^ el & (fl ^ gl) |
0;
20235 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20243 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20250 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20251 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20252 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20254 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20255 w5l = w5l + w14l |
0;
20256 w5h = w5h + w14h + (w5l
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
20257 xl = (w6l
>>> 1 | w6h <<
31) ^ (w6l
>>> 8 | w6h <<
24) ^ (w6l
>>> 7 | w6h <<
25) |
0;
20258 w5l = w5l + xl |
0;
20259 w5h = w5h + ((w6h
>>> 1 | w6l <<
31) ^ (w6h
>>> 8 | w6l <<
24) ^ w6h
>>> 7) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20260 xl = (w3l
>>> 19 | w3h <<
13) ^ (w3l <<
3 | w3h
>>> 29) ^ (w3l
>>> 6 | w3h <<
26) |
0;
20261 w5l = w5l + xl |
0;
20262 w5h = w5h + ((w3h
>>> 19 | w3l <<
13) ^ (w3h <<
3 | w3l
>>> 29) ^ w3h
>>> 6) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20263 tl =
3812723403 + w5l |
0;
20264 th =
1322822218 + w5h + (tl
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
20266 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20267 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20269 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20270 xl = gl ^ el & (fl ^ gl) |
0;
20272 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20280 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20287 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20288 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20289 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20291 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20292 w6l = w6l + w15l |
0;
20293 w6h = w6h + w15h + (w6l
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
20294 xl = (w7l
>>> 1 | w7h <<
31) ^ (w7l
>>> 8 | w7h <<
24) ^ (w7l
>>> 7 | w7h <<
25) |
0;
20295 w6l = w6l + xl |
0;
20296 w6h = w6h + ((w7h
>>> 1 | w7l <<
31) ^ (w7h
>>> 8 | w7l <<
24) ^ w7h
>>> 7) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20297 xl = (w4l
>>> 19 | w4h <<
13) ^ (w4l <<
3 | w4h
>>> 29) ^ (w4l
>>> 6 | w4h <<
26) |
0;
20298 w6l = w6l + xl |
0;
20299 w6h = w6h + ((w4h
>>> 19 | w4l <<
13) ^ (w4h <<
3 | w4l
>>> 29) ^ w4h
>>> 6) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20300 tl =
2003034995 + w6l |
0;
20301 th =
1537002063 + w6h + (tl
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
20303 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20304 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20306 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20307 xl = gl ^ el & (fl ^ gl) |
0;
20309 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20317 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20324 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20325 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20326 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20328 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20329 w7l = w7l + w0l |
0;
20330 w7h = w7h + w0h + (w7l
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
20331 xl = (w8l
>>> 1 | w8h <<
31) ^ (w8l
>>> 8 | w8h <<
24) ^ (w8l
>>> 7 | w8h <<
25) |
0;
20332 w7l = w7l + xl |
0;
20333 w7h = w7h + ((w8h
>>> 1 | w8l <<
31) ^ (w8h
>>> 8 | w8l <<
24) ^ w8h
>>> 7) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20334 xl = (w5l
>>> 19 | w5h <<
13) ^ (w5l <<
3 | w5h
>>> 29) ^ (w5l
>>> 6 | w5h <<
26) |
0;
20335 w7l = w7l + xl |
0;
20336 w7h = w7h + ((w5h
>>> 19 | w5l <<
13) ^ (w5h <<
3 | w5l
>>> 29) ^ w5h
>>> 6) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20337 tl =
3602036899 + w7l |
0;
20338 th =
1747873779 + w7h + (tl
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
20340 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20341 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20343 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20344 xl = gl ^ el & (fl ^ gl) |
0;
20346 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20354 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20361 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20362 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20363 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20365 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20366 w8l = w8l + w1l |
0;
20367 w8h = w8h + w1h + (w8l
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
20368 xl = (w9l
>>> 1 | w9h <<
31) ^ (w9l
>>> 8 | w9h <<
24) ^ (w9l
>>> 7 | w9h <<
25) |
0;
20369 w8l = w8l + xl |
0;
20370 w8h = w8h + ((w9h
>>> 1 | w9l <<
31) ^ (w9h
>>> 8 | w9l <<
24) ^ w9h
>>> 7) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20371 xl = (w6l
>>> 19 | w6h <<
13) ^ (w6l <<
3 | w6h
>>> 29) ^ (w6l
>>> 6 | w6h <<
26) |
0;
20372 w8l = w8l + xl |
0;
20373 w8h = w8h + ((w6h
>>> 19 | w6l <<
13) ^ (w6h <<
3 | w6l
>>> 29) ^ w6h
>>> 6) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20374 tl =
1575990012 + w8l |
0;
20375 th =
1955562222 + w8h + (tl
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
20377 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20378 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20380 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20381 xl = gl ^ el & (fl ^ gl) |
0;
20383 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20391 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20398 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20399 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20400 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20402 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20403 w9l = w9l + w2l |
0;
20404 w9h = w9h + w2h + (w9l
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
20405 xl = (w10l
>>> 1 | w10h <<
31) ^ (w10l
>>> 8 | w10h <<
24) ^ (w10l
>>> 7 | w10h <<
25) |
0;
20406 w9l = w9l + xl |
0;
20407 w9h = w9h + ((w10h
>>> 1 | w10l <<
31) ^ (w10h
>>> 8 | w10l <<
24) ^ w10h
>>> 7) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20408 xl = (w7l
>>> 19 | w7h <<
13) ^ (w7l <<
3 | w7h
>>> 29) ^ (w7l
>>> 6 | w7h <<
26) |
0;
20409 w9l = w9l + xl |
0;
20410 w9h = w9h + ((w7h
>>> 19 | w7l <<
13) ^ (w7h <<
3 | w7l
>>> 29) ^ w7h
>>> 6) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20411 tl =
1125592928 + w9l |
0;
20412 th =
2024104815 + w9h + (tl
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
20414 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20415 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20417 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20418 xl = gl ^ el & (fl ^ gl) |
0;
20420 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20428 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20435 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20436 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20437 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20439 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20440 w10l = w10l + w3l |
0;
20441 w10h = w10h + w3h + (w10l
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
20442 xl = (w11l
>>> 1 | w11h <<
31) ^ (w11l
>>> 8 | w11h <<
24) ^ (w11l
>>> 7 | w11h <<
25) |
0;
20443 w10l = w10l + xl |
0;
20444 w10h = w10h + ((w11h
>>> 1 | w11l <<
31) ^ (w11h
>>> 8 | w11l <<
24) ^ w11h
>>> 7) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20445 xl = (w8l
>>> 19 | w8h <<
13) ^ (w8l <<
3 | w8h
>>> 29) ^ (w8l
>>> 6 | w8h <<
26) |
0;
20446 w10l = w10l + xl |
0;
20447 w10h = w10h + ((w8h
>>> 19 | w8l <<
13) ^ (w8h <<
3 | w8l
>>> 29) ^ w8h
>>> 6) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20448 tl =
2716904306 + w10l |
0;
20449 th =
2227730452 + w10h + (tl
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
20451 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20452 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20454 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20455 xl = gl ^ el & (fl ^ gl) |
0;
20457 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20465 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20472 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20473 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20474 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20476 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20477 w11l = w11l + w4l |
0;
20478 w11h = w11h + w4h + (w11l
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
20479 xl = (w12l
>>> 1 | w12h <<
31) ^ (w12l
>>> 8 | w12h <<
24) ^ (w12l
>>> 7 | w12h <<
25) |
0;
20480 w11l = w11l + xl |
0;
20481 w11h = w11h + ((w12h
>>> 1 | w12l <<
31) ^ (w12h
>>> 8 | w12l <<
24) ^ w12h
>>> 7) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20482 xl = (w9l
>>> 19 | w9h <<
13) ^ (w9l <<
3 | w9h
>>> 29) ^ (w9l
>>> 6 | w9h <<
26) |
0;
20483 w11l = w11l + xl |
0;
20484 w11h = w11h + ((w9h
>>> 19 | w9l <<
13) ^ (w9h <<
3 | w9l
>>> 29) ^ w9h
>>> 6) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20485 tl =
442776044 + w11l |
0;
20486 th =
2361852424 + w11h + (tl
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
20488 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20489 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20491 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20492 xl = gl ^ el & (fl ^ gl) |
0;
20494 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20502 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20509 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20510 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20511 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20513 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20514 w12l = w12l + w5l |
0;
20515 w12h = w12h + w5h + (w12l
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
20516 xl = (w13l
>>> 1 | w13h <<
31) ^ (w13l
>>> 8 | w13h <<
24) ^ (w13l
>>> 7 | w13h <<
25) |
0;
20517 w12l = w12l + xl |
0;
20518 w12h = w12h + ((w13h
>>> 1 | w13l <<
31) ^ (w13h
>>> 8 | w13l <<
24) ^ w13h
>>> 7) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20519 xl = (w10l
>>> 19 | w10h <<
13) ^ (w10l <<
3 | w10h
>>> 29) ^ (w10l
>>> 6 | w10h <<
26) |
0;
20520 w12l = w12l + xl |
0;
20521 w12h = w12h + ((w10h
>>> 19 | w10l <<
13) ^ (w10h <<
3 | w10l
>>> 29) ^ w10h
>>> 6) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20522 tl =
593698344 + w12l |
0;
20523 th =
2428436474 + w12h + (tl
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
20525 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20526 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20528 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20529 xl = gl ^ el & (fl ^ gl) |
0;
20531 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20539 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20546 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20547 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20548 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20550 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20551 w13l = w13l + w6l |
0;
20552 w13h = w13h + w6h + (w13l
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
20553 xl = (w14l
>>> 1 | w14h <<
31) ^ (w14l
>>> 8 | w14h <<
24) ^ (w14l
>>> 7 | w14h <<
25) |
0;
20554 w13l = w13l + xl |
0;
20555 w13h = w13h + ((w14h
>>> 1 | w14l <<
31) ^ (w14h
>>> 8 | w14l <<
24) ^ w14h
>>> 7) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20556 xl = (w11l
>>> 19 | w11h <<
13) ^ (w11l <<
3 | w11h
>>> 29) ^ (w11l
>>> 6 | w11h <<
26) |
0;
20557 w13l = w13l + xl |
0;
20558 w13h = w13h + ((w11h
>>> 19 | w11l <<
13) ^ (w11h <<
3 | w11l
>>> 29) ^ w11h
>>> 6) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20559 tl =
3733110249 + w13l |
0;
20560 th =
2756734187 + w13h + (tl
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
20562 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20563 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20565 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20566 xl = gl ^ el & (fl ^ gl) |
0;
20568 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20576 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20583 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20584 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20585 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20587 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20588 w14l = w14l + w7l |
0;
20589 w14h = w14h + w7h + (w14l
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
20590 xl = (w15l
>>> 1 | w15h <<
31) ^ (w15l
>>> 8 | w15h <<
24) ^ (w15l
>>> 7 | w15h <<
25) |
0;
20591 w14l = w14l + xl |
0;
20592 w14h = w14h + ((w15h
>>> 1 | w15l <<
31) ^ (w15h
>>> 8 | w15l <<
24) ^ w15h
>>> 7) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20593 xl = (w12l
>>> 19 | w12h <<
13) ^ (w12l <<
3 | w12h
>>> 29) ^ (w12l
>>> 6 | w12h <<
26) |
0;
20594 w14l = w14l + xl |
0;
20595 w14h = w14h + ((w12h
>>> 19 | w12l <<
13) ^ (w12h <<
3 | w12l
>>> 29) ^ w12h
>>> 6) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20596 tl =
2999351573 + w14l |
0;
20597 th =
3204031479 + w14h + (tl
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
20599 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20600 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20602 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20603 xl = gl ^ el & (fl ^ gl) |
0;
20605 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20613 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20620 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20621 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20622 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20624 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20625 w15l = w15l + w8l |
0;
20626 w15h = w15h + w8h + (w15l
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
20627 xl = (w0l
>>> 1 | w0h <<
31) ^ (w0l
>>> 8 | w0h <<
24) ^ (w0l
>>> 7 | w0h <<
25) |
0;
20628 w15l = w15l + xl |
0;
20629 w15h = w15h + ((w0h
>>> 1 | w0l <<
31) ^ (w0h
>>> 8 | w0l <<
24) ^ w0h
>>> 7) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20630 xl = (w13l
>>> 19 | w13h <<
13) ^ (w13l <<
3 | w13h
>>> 29) ^ (w13l
>>> 6 | w13h <<
26) |
0;
20631 w15l = w15l + xl |
0;
20632 w15h = w15h + ((w13h
>>> 19 | w13l <<
13) ^ (w13h <<
3 | w13l
>>> 29) ^ w13h
>>> 6) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20633 tl =
3815920427 + w15l |
0;
20634 th =
3329325298 + w15h + (tl
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
20636 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20637 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20639 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20640 xl = gl ^ el & (fl ^ gl) |
0;
20642 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20650 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20657 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20658 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20659 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20661 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20662 w0l = w0l + w9l |
0;
20663 w0h = w0h + w9h + (w0l
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
20664 xl = (w1l
>>> 1 | w1h <<
31) ^ (w1l
>>> 8 | w1h <<
24) ^ (w1l
>>> 7 | w1h <<
25) |
0;
20665 w0l = w0l + xl |
0;
20666 w0h = w0h + ((w1h
>>> 1 | w1l <<
31) ^ (w1h
>>> 8 | w1l <<
24) ^ w1h
>>> 7) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20667 xl = (w14l
>>> 19 | w14h <<
13) ^ (w14l <<
3 | w14h
>>> 29) ^ (w14l
>>> 6 | w14h <<
26) |
0;
20668 w0l = w0l + xl |
0;
20669 w0h = w0h + ((w14h
>>> 19 | w14l <<
13) ^ (w14h <<
3 | w14l
>>> 29) ^ w14h
>>> 6) + (w0l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20670 tl =
3928383900 + w0l |
0;
20671 th =
3391569614 + w0h + (tl
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
20673 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20674 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20676 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20677 xl = gl ^ el & (fl ^ gl) |
0;
20679 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20687 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20694 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20695 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20696 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20698 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20699 w1l = w1l + w10l |
0;
20700 w1h = w1h + w10h + (w1l
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
20701 xl = (w2l
>>> 1 | w2h <<
31) ^ (w2l
>>> 8 | w2h <<
24) ^ (w2l
>>> 7 | w2h <<
25) |
0;
20702 w1l = w1l + xl |
0;
20703 w1h = w1h + ((w2h
>>> 1 | w2l <<
31) ^ (w2h
>>> 8 | w2l <<
24) ^ w2h
>>> 7) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20704 xl = (w15l
>>> 19 | w15h <<
13) ^ (w15l <<
3 | w15h
>>> 29) ^ (w15l
>>> 6 | w15h <<
26) |
0;
20705 w1l = w1l + xl |
0;
20706 w1h = w1h + ((w15h
>>> 19 | w15l <<
13) ^ (w15h <<
3 | w15l
>>> 29) ^ w15h
>>> 6) + (w1l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20707 tl =
566280711 + w1l |
0;
20708 th =
3515267271 + w1h + (tl
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
20710 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20711 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20713 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20714 xl = gl ^ el & (fl ^ gl) |
0;
20716 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20724 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20731 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20732 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20733 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20735 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20736 w2l = w2l + w11l |
0;
20737 w2h = w2h + w11h + (w2l
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
20738 xl = (w3l
>>> 1 | w3h <<
31) ^ (w3l
>>> 8 | w3h <<
24) ^ (w3l
>>> 7 | w3h <<
25) |
0;
20739 w2l = w2l + xl |
0;
20740 w2h = w2h + ((w3h
>>> 1 | w3l <<
31) ^ (w3h
>>> 8 | w3l <<
24) ^ w3h
>>> 7) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20741 xl = (w0l
>>> 19 | w0h <<
13) ^ (w0l <<
3 | w0h
>>> 29) ^ (w0l
>>> 6 | w0h <<
26) |
0;
20742 w2l = w2l + xl |
0;
20743 w2h = w2h + ((w0h
>>> 19 | w0l <<
13) ^ (w0h <<
3 | w0l
>>> 29) ^ w0h
>>> 6) + (w2l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20744 tl =
3454069534 + w2l |
0;
20745 th =
3940187606 + w2h + (tl
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
20747 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20748 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20750 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20751 xl = gl ^ el & (fl ^ gl) |
0;
20753 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20761 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20768 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20769 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20770 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20772 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20773 w3l = w3l + w12l |
0;
20774 w3h = w3h + w12h + (w3l
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
20775 xl = (w4l
>>> 1 | w4h <<
31) ^ (w4l
>>> 8 | w4h <<
24) ^ (w4l
>>> 7 | w4h <<
25) |
0;
20776 w3l = w3l + xl |
0;
20777 w3h = w3h + ((w4h
>>> 1 | w4l <<
31) ^ (w4h
>>> 8 | w4l <<
24) ^ w4h
>>> 7) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20778 xl = (w1l
>>> 19 | w1h <<
13) ^ (w1l <<
3 | w1h
>>> 29) ^ (w1l
>>> 6 | w1h <<
26) |
0;
20779 w3l = w3l + xl |
0;
20780 w3h = w3h + ((w1h
>>> 19 | w1l <<
13) ^ (w1h <<
3 | w1l
>>> 29) ^ w1h
>>> 6) + (w3l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20781 tl =
4000239992 + w3l |
0;
20782 th =
4118630271 + w3h + (tl
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
20784 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20785 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20787 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20788 xl = gl ^ el & (fl ^ gl) |
0;
20790 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20798 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20805 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20806 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20807 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20809 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20810 w4l = w4l + w13l |
0;
20811 w4h = w4h + w13h + (w4l
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
20812 xl = (w5l
>>> 1 | w5h <<
31) ^ (w5l
>>> 8 | w5h <<
24) ^ (w5l
>>> 7 | w5h <<
25) |
0;
20813 w4l = w4l + xl |
0;
20814 w4h = w4h + ((w5h
>>> 1 | w5l <<
31) ^ (w5h
>>> 8 | w5l <<
24) ^ w5h
>>> 7) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20815 xl = (w2l
>>> 19 | w2h <<
13) ^ (w2l <<
3 | w2h
>>> 29) ^ (w2l
>>> 6 | w2h <<
26) |
0;
20816 w4l = w4l + xl |
0;
20817 w4h = w4h + ((w2h
>>> 19 | w2l <<
13) ^ (w2h <<
3 | w2l
>>> 29) ^ w2h
>>> 6) + (w4l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20818 tl =
1914138554 + w4l |
0;
20819 th =
116418474 + w4h + (tl
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
20821 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20822 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20824 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20825 xl = gl ^ el & (fl ^ gl) |
0;
20827 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20835 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20842 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20843 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20844 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20846 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20847 w5l = w5l + w14l |
0;
20848 w5h = w5h + w14h + (w5l
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
20849 xl = (w6l
>>> 1 | w6h <<
31) ^ (w6l
>>> 8 | w6h <<
24) ^ (w6l
>>> 7 | w6h <<
25) |
0;
20850 w5l = w5l + xl |
0;
20851 w5h = w5h + ((w6h
>>> 1 | w6l <<
31) ^ (w6h
>>> 8 | w6l <<
24) ^ w6h
>>> 7) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20852 xl = (w3l
>>> 19 | w3h <<
13) ^ (w3l <<
3 | w3h
>>> 29) ^ (w3l
>>> 6 | w3h <<
26) |
0;
20853 w5l = w5l + xl |
0;
20854 w5h = w5h + ((w3h
>>> 19 | w3l <<
13) ^ (w3h <<
3 | w3l
>>> 29) ^ w3h
>>> 6) + (w5l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20855 tl =
2731055270 + w5l |
0;
20856 th =
174292421 + w5h + (tl
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
20858 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20859 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20861 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20862 xl = gl ^ el & (fl ^ gl) |
0;
20864 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20872 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20879 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20880 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20881 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20883 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20884 w6l = w6l + w15l |
0;
20885 w6h = w6h + w15h + (w6l
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
20886 xl = (w7l
>>> 1 | w7h <<
31) ^ (w7l
>>> 8 | w7h <<
24) ^ (w7l
>>> 7 | w7h <<
25) |
0;
20887 w6l = w6l + xl |
0;
20888 w6h = w6h + ((w7h
>>> 1 | w7l <<
31) ^ (w7h
>>> 8 | w7l <<
24) ^ w7h
>>> 7) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20889 xl = (w4l
>>> 19 | w4h <<
13) ^ (w4l <<
3 | w4h
>>> 29) ^ (w4l
>>> 6 | w4h <<
26) |
0;
20890 w6l = w6l + xl |
0;
20891 w6h = w6h + ((w4h
>>> 19 | w4l <<
13) ^ (w4h <<
3 | w4l
>>> 29) ^ w4h
>>> 6) + (w6l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20892 tl =
3203993006 + w6l |
0;
20893 th =
289380356 + w6h + (tl
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
20895 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20896 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20898 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20899 xl = gl ^ el & (fl ^ gl) |
0;
20901 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20909 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20916 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20917 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20918 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20920 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20921 w7l = w7l + w0l |
0;
20922 w7h = w7h + w0h + (w7l
>>> 0 < w0l
>>> 0 ?
1 :
0) |
0;
20923 xl = (w8l
>>> 1 | w8h <<
31) ^ (w8l
>>> 8 | w8h <<
24) ^ (w8l
>>> 7 | w8h <<
25) |
0;
20924 w7l = w7l + xl |
0;
20925 w7h = w7h + ((w8h
>>> 1 | w8l <<
31) ^ (w8h
>>> 8 | w8l <<
24) ^ w8h
>>> 7) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20926 xl = (w5l
>>> 19 | w5h <<
13) ^ (w5l <<
3 | w5h
>>> 29) ^ (w5l
>>> 6 | w5h <<
26) |
0;
20927 w7l = w7l + xl |
0;
20928 w7h = w7h + ((w5h
>>> 19 | w5l <<
13) ^ (w5h <<
3 | w5l
>>> 29) ^ w5h
>>> 6) + (w7l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20929 tl =
320620315 + w7l |
0;
20930 th =
460393269 + w7h + (tl
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
20932 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20933 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20935 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20936 xl = gl ^ el & (fl ^ gl) |
0;
20938 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20946 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20953 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20954 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20955 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20957 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20958 w8l = w8l + w1l |
0;
20959 w8h = w8h + w1h + (w8l
>>> 0 < w1l
>>> 0 ?
1 :
0) |
0;
20960 xl = (w9l
>>> 1 | w9h <<
31) ^ (w9l
>>> 8 | w9h <<
24) ^ (w9l
>>> 7 | w9h <<
25) |
0;
20961 w8l = w8l + xl |
0;
20962 w8h = w8h + ((w9h
>>> 1 | w9l <<
31) ^ (w9h
>>> 8 | w9l <<
24) ^ w9h
>>> 7) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20963 xl = (w6l
>>> 19 | w6h <<
13) ^ (w6l <<
3 | w6h
>>> 29) ^ (w6l
>>> 6 | w6h <<
26) |
0;
20964 w8l = w8l + xl |
0;
20965 w8h = w8h + ((w6h
>>> 19 | w6l <<
13) ^ (w6h <<
3 | w6l
>>> 29) ^ w6h
>>> 6) + (w8l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20966 tl =
587496836 + w8l |
0;
20967 th =
685471733 + w8h + (tl
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
20969 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
20970 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
20972 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20973 xl = gl ^ el & (fl ^ gl) |
0;
20975 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20983 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
20990 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
20991 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
20992 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
20994 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
20995 w9l = w9l + w2l |
0;
20996 w9h = w9h + w2h + (w9l
>>> 0 < w2l
>>> 0 ?
1 :
0) |
0;
20997 xl = (w10l
>>> 1 | w10h <<
31) ^ (w10l
>>> 8 | w10h <<
24) ^ (w10l
>>> 7 | w10h <<
25) |
0;
20998 w9l = w9l + xl |
0;
20999 w9h = w9h + ((w10h
>>> 1 | w10l <<
31) ^ (w10h
>>> 8 | w10l <<
24) ^ w10h
>>> 7) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21000 xl = (w7l
>>> 19 | w7h <<
13) ^ (w7l <<
3 | w7h
>>> 29) ^ (w7l
>>> 6 | w7h <<
26) |
0;
21001 w9l = w9l + xl |
0;
21002 w9h = w9h + ((w7h
>>> 19 | w7l <<
13) ^ (w7h <<
3 | w7l
>>> 29) ^ w7h
>>> 6) + (w9l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21003 tl =
1086792851 + w9l |
0;
21004 th =
852142971 + w9h + (tl
>>> 0 < w9l
>>> 0 ?
1 :
0) |
0;
21006 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21007 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
21009 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21010 xl = gl ^ el & (fl ^ gl) |
0;
21012 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21020 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21027 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
21028 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
21029 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
21031 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21032 w10l = w10l + w3l |
0;
21033 w10h = w10h + w3h + (w10l
>>> 0 < w3l
>>> 0 ?
1 :
0) |
0;
21034 xl = (w11l
>>> 1 | w11h <<
31) ^ (w11l
>>> 8 | w11h <<
24) ^ (w11l
>>> 7 | w11h <<
25) |
0;
21035 w10l = w10l + xl |
0;
21036 w10h = w10h + ((w11h
>>> 1 | w11l <<
31) ^ (w11h
>>> 8 | w11l <<
24) ^ w11h
>>> 7) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21037 xl = (w8l
>>> 19 | w8h <<
13) ^ (w8l <<
3 | w8h
>>> 29) ^ (w8l
>>> 6 | w8h <<
26) |
0;
21038 w10l = w10l + xl |
0;
21039 w10h = w10h + ((w8h
>>> 19 | w8l <<
13) ^ (w8h <<
3 | w8l
>>> 29) ^ w8h
>>> 6) + (w10l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21040 tl =
365543100 + w10l |
0;
21041 th =
1017036298 + w10h + (tl
>>> 0 < w10l
>>> 0 ?
1 :
0) |
0;
21043 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21044 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
21046 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21047 xl = gl ^ el & (fl ^ gl) |
0;
21049 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21057 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21064 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
21065 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
21066 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
21068 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21069 w11l = w11l + w4l |
0;
21070 w11h = w11h + w4h + (w11l
>>> 0 < w4l
>>> 0 ?
1 :
0) |
0;
21071 xl = (w12l
>>> 1 | w12h <<
31) ^ (w12l
>>> 8 | w12h <<
24) ^ (w12l
>>> 7 | w12h <<
25) |
0;
21072 w11l = w11l + xl |
0;
21073 w11h = w11h + ((w12h
>>> 1 | w12l <<
31) ^ (w12h
>>> 8 | w12l <<
24) ^ w12h
>>> 7) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21074 xl = (w9l
>>> 19 | w9h <<
13) ^ (w9l <<
3 | w9h
>>> 29) ^ (w9l
>>> 6 | w9h <<
26) |
0;
21075 w11l = w11l + xl |
0;
21076 w11h = w11h + ((w9h
>>> 19 | w9l <<
13) ^ (w9h <<
3 | w9l
>>> 29) ^ w9h
>>> 6) + (w11l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21077 tl =
2618297676 + w11l |
0;
21078 th =
1126000580 + w11h + (tl
>>> 0 < w11l
>>> 0 ?
1 :
0) |
0;
21080 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21081 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
21083 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21084 xl = gl ^ el & (fl ^ gl) |
0;
21086 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21094 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21101 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
21102 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
21103 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
21105 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21106 w12l = w12l + w5l |
0;
21107 w12h = w12h + w5h + (w12l
>>> 0 < w5l
>>> 0 ?
1 :
0) |
0;
21108 xl = (w13l
>>> 1 | w13h <<
31) ^ (w13l
>>> 8 | w13h <<
24) ^ (w13l
>>> 7 | w13h <<
25) |
0;
21109 w12l = w12l + xl |
0;
21110 w12h = w12h + ((w13h
>>> 1 | w13l <<
31) ^ (w13h
>>> 8 | w13l <<
24) ^ w13h
>>> 7) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21111 xl = (w10l
>>> 19 | w10h <<
13) ^ (w10l <<
3 | w10h
>>> 29) ^ (w10l
>>> 6 | w10h <<
26) |
0;
21112 w12l = w12l + xl |
0;
21113 w12h = w12h + ((w10h
>>> 19 | w10l <<
13) ^ (w10h <<
3 | w10l
>>> 29) ^ w10h
>>> 6) + (w12l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21114 tl =
3409855158 + w12l |
0;
21115 th =
1288033470 + w12h + (tl
>>> 0 < w12l
>>> 0 ?
1 :
0) |
0;
21117 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21118 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
21120 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21121 xl = gl ^ el & (fl ^ gl) |
0;
21123 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21131 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21138 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
21139 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
21140 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
21142 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21143 w13l = w13l + w6l |
0;
21144 w13h = w13h + w6h + (w13l
>>> 0 < w6l
>>> 0 ?
1 :
0) |
0;
21145 xl = (w14l
>>> 1 | w14h <<
31) ^ (w14l
>>> 8 | w14h <<
24) ^ (w14l
>>> 7 | w14h <<
25) |
0;
21146 w13l = w13l + xl |
0;
21147 w13h = w13h + ((w14h
>>> 1 | w14l <<
31) ^ (w14h
>>> 8 | w14l <<
24) ^ w14h
>>> 7) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21148 xl = (w11l
>>> 19 | w11h <<
13) ^ (w11l <<
3 | w11h
>>> 29) ^ (w11l
>>> 6 | w11h <<
26) |
0;
21149 w13l = w13l + xl |
0;
21150 w13h = w13h + ((w11h
>>> 19 | w11l <<
13) ^ (w11h <<
3 | w11l
>>> 29) ^ w11h
>>> 6) + (w13l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21151 tl =
4234509866 + w13l |
0;
21152 th =
1501505948 + w13h + (tl
>>> 0 < w13l
>>> 0 ?
1 :
0) |
0;
21154 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21155 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
21157 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21158 xl = gl ^ el & (fl ^ gl) |
0;
21160 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21168 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21175 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
21176 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
21177 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
21179 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21180 w14l = w14l + w7l |
0;
21181 w14h = w14h + w7h + (w14l
>>> 0 < w7l
>>> 0 ?
1 :
0) |
0;
21182 xl = (w15l
>>> 1 | w15h <<
31) ^ (w15l
>>> 8 | w15h <<
24) ^ (w15l
>>> 7 | w15h <<
25) |
0;
21183 w14l = w14l + xl |
0;
21184 w14h = w14h + ((w15h
>>> 1 | w15l <<
31) ^ (w15h
>>> 8 | w15l <<
24) ^ w15h
>>> 7) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21185 xl = (w12l
>>> 19 | w12h <<
13) ^ (w12l <<
3 | w12h
>>> 29) ^ (w12l
>>> 6 | w12h <<
26) |
0;
21186 w14l = w14l + xl |
0;
21187 w14h = w14h + ((w12h
>>> 19 | w12l <<
13) ^ (w12h <<
3 | w12l
>>> 29) ^ w12h
>>> 6) + (w14l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21188 tl =
987167468 + w14l |
0;
21189 th =
1607167915 + w14h + (tl
>>> 0 < w14l
>>> 0 ?
1 :
0) |
0;
21191 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21192 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
21194 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21195 xl = gl ^ el & (fl ^ gl) |
0;
21197 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21205 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21212 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
21213 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
21214 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
21216 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21217 w15l = w15l + w8l |
0;
21218 w15h = w15h + w8h + (w15l
>>> 0 < w8l
>>> 0 ?
1 :
0) |
0;
21219 xl = (w0l
>>> 1 | w0h <<
31) ^ (w0l
>>> 8 | w0h <<
24) ^ (w0l
>>> 7 | w0h <<
25) |
0;
21220 w15l = w15l + xl |
0;
21221 w15h = w15h + ((w0h
>>> 1 | w0l <<
31) ^ (w0h
>>> 8 | w0l <<
24) ^ w0h
>>> 7) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21222 xl = (w13l
>>> 19 | w13h <<
13) ^ (w13l <<
3 | w13h
>>> 29) ^ (w13l
>>> 6 | w13h <<
26) |
0;
21223 w15l = w15l + xl |
0;
21224 w15h = w15h + ((w13h
>>> 19 | w13l <<
13) ^ (w13h <<
3 | w13l
>>> 29) ^ w13h
>>> 6) + (w15l
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21225 tl =
1246189591 + w15l |
0;
21226 th =
1816402316 + w15h + (tl
>>> 0 < w15l
>>> 0 ?
1 :
0) |
0;
21228 th = th + hh + (tl
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21229 xl = (el
>>> 14 | eh <<
18) ^ (el
>>> 18 | eh <<
14) ^ (el <<
23 | eh
>>> 9) |
0;
21231 th = th + ((eh
>>> 14 | el <<
18) ^ (eh
>>> 18 | el <<
14) ^ (eh <<
23 | el
>>> 9)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21232 xl = gl ^ el & (fl ^ gl) |
0;
21234 th = th + (gh ^ eh & (fh ^ gh)) + (tl
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21242 eh = dh + th + (el
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21249 al = tl + (bl & cl ^ dl & (bl ^ cl)) |
0;
21250 ah = th + (bh & ch ^ dh & (bh ^ ch)) + (al
>>> 0 < tl
>>> 0 ?
1 :
0) |
0;
21251 xl = (bl
>>> 28 | bh <<
4) ^ (bl <<
30 | bh
>>> 2) ^ (bl <<
25 | bh
>>> 7) |
0;
21253 ah = ah + ((bh
>>> 28 | bl <<
4) ^ (bh <<
30 | bl
>>> 2) ^ (bh <<
25 | bl
>>> 7)) + (al
>>> 0 < xl
>>> 0 ?
1 :
0) |
0;
21254 H0l = H0l + al |
0;
21255 H0h = H0h + ah + (H0l
>>> 0 < al
>>> 0 ?
1 :
0) |
0;
21256 H1l = H1l + bl |
0;
21257 H1h = H1h + bh + (H1l
>>> 0 < bl
>>> 0 ?
1 :
0) |
0;
21258 H2l = H2l + cl |
0;
21259 H2h = H2h + ch + (H2l
>>> 0 < cl
>>> 0 ?
1 :
0) |
0;
21260 H3l = H3l + dl |
0;
21261 H3h = H3h + dh + (H3l
>>> 0 < dl
>>> 0 ?
1 :
0) |
0;
21262 H4l = H4l + el |
0;
21263 H4h = H4h + eh + (H4l
>>> 0 < el
>>> 0 ?
1 :
0) |
0;
21264 H5l = H5l + fl |
0;
21265 H5h = H5h + fh + (H5l
>>> 0 < fl
>>> 0 ?
1 :
0) |
0;
21266 H6l = H6l + gl |
0;
21267 H6h = H6h + gh + (H6l
>>> 0 < gl
>>> 0 ?
1 :
0) |
0;
21268 H7l = H7l + hl |
0;
21269 H7h = H7h + hh + (H7l
>>> 0 < hl
>>> 0 ?
1 :
0) |
0;
21271 function _core_heap(offset) {
21272 offset = offset |
0;
21273 _core(HEAP[offset |
0] <<
24 | HEAP[offset |
1] <<
16 | HEAP[offset |
2] <<
8 | HEAP[offset |
3], HEAP[offset |
4] <<
24 | HEAP[offset |
5] <<
16 | HEAP[offset |
6] <<
8 | HEAP[offset |
7], HEAP[offset |
8] <<
24 | HEAP[offset |
9] <<
16 | HEAP[offset |
10] <<
8 | HEAP[offset |
11], HEAP[offset |
12] <<
24 | HEAP[offset |
13] <<
16 | HEAP[offset |
14] <<
8 | HEAP[offset |
15], HEAP[offset |
16] <<
24 | HEAP[offset |
17] <<
16 | HEAP[offset |
18] <<
8 | HEAP[offset |
19], HEAP[offset |
20] <<
24 | HEAP[offset |
21] <<
16 | HEAP[offset |
22] <<
8 | HEAP[offset |
23], HEAP[offset |
24] <<
24 | HEAP[offset |
25] <<
16 | HEAP[offset |
26] <<
8 | HEAP[offset |
27], HEAP[offset |
28] <<
24 | HEAP[offset |
29] <<
16 | HEAP[offset |
30] <<
8 | HEAP[offset |
31], HEAP[offset |
32] <<
24 | HEAP[offset |
33] <<
16 | HEAP[offset |
34] <<
8 | HEAP[offset |
35], HEAP[offset |
36] <<
24 | HEAP[offset |
37] <<
16 | HEAP[offset |
38] <<
8 | HEAP[offset |
39], HEAP[offset |
40] <<
24 | HEAP[offset |
41] <<
16 | HEAP[offset |
42] <<
8 | HEAP[offset |
43], HEAP[offset |
44] <<
24 | HEAP[offset |
45] <<
16 | HEAP[offset |
46] <<
8 | HEAP[offset |
47], HEAP[offset |
48] <<
24 | HEAP[offset |
49] <<
16 | HEAP[offset |
50] <<
8 | HEAP[offset |
51], HEAP[offset |
52] <<
24 | HEAP[offset |
53] <<
16 | HEAP[offset |
54] <<
8 | HEAP[offset |
55], HEAP[offset |
56] <<
24 | HEAP[offset |
57] <<
16 | HEAP[offset |
58] <<
8 | HEAP[offset |
59], HEAP[offset |
60] <<
24 | HEAP[offset |
61] <<
16 | HEAP[offset |
62] <<
8 | HEAP[offset |
63], HEAP[offset |
64] <<
24 | HEAP[offset |
65] <<
16 | HEAP[offset |
66] <<
8 | HEAP[offset |
67], HEAP[offset |
68] <<
24 | HEAP[offset |
69] <<
16 | HEAP[offset |
70] <<
8 | HEAP[offset |
71], HEAP[offset |
72] <<
24 | HEAP[offset |
73] <<
16 | HEAP[offset |
74] <<
8 | HEAP[offset |
75], HEAP[offset |
76] <<
24 | HEAP[offset |
77] <<
16 | HEAP[offset |
78] <<
8 | HEAP[offset |
79], HEAP[offset |
80] <<
24 | HEAP[offset |
81] <<
16 | HEAP[offset |
82] <<
8 | HEAP[offset |
83], HEAP[offset |
84] <<
24 | HEAP[offset |
85] <<
16 | HEAP[offset |
86] <<
8 | HEAP[offset |
87], HEAP[offset |
88] <<
24 | HEAP[offset |
89] <<
16 | HEAP[offset |
90] <<
8 | HEAP[offset |
91], HEAP[offset |
92] <<
24 | HEAP[offset |
93] <<
16 | HEAP[offset |
94] <<
8 | HEAP[offset |
95], HEAP[offset |
96] <<
24 | HEAP[offset |
97] <<
16 | HEAP[offset |
98] <<
8 | HEAP[offset |
99], HEAP[offset |
100] <<
24 | HEAP[offset |
101] <<
16 | HEAP[offset |
102] <<
8 | HEAP[offset |
103], HEAP[offset |
104] <<
24 | HEAP[offset |
105] <<
16 | HEAP[offset |
106] <<
8 | HEAP[offset |
107], HEAP[offset |
108] <<
24 | HEAP[offset |
109] <<
16 | HEAP[offset |
110] <<
8 | HEAP[offset |
111], HEAP[offset |
112] <<
24 | HEAP[offset |
113] <<
16 | HEAP[offset |
114] <<
8 | HEAP[offset |
115], HEAP[offset |
116] <<
24 | HEAP[offset |
117] <<
16 | HEAP[offset |
118] <<
8 | HEAP[offset |
119], HEAP[offset |
120] <<
24 | HEAP[offset |
121] <<
16 | HEAP[offset |
122] <<
8 | HEAP[offset |
123], HEAP[offset |
124] <<
24 | HEAP[offset |
125] <<
16 | HEAP[offset |
126] <<
8 | HEAP[offset |
127]);
21275 function _state_to_heap(output) {
21276 output = output |
0;
21277 HEAP[output |
0] = H0h
>>> 24;
21278 HEAP[output |
1] = H0h
>>> 16 &
255;
21279 HEAP[output |
2] = H0h
>>> 8 &
255;
21280 HEAP[output |
3] = H0h &
255;
21281 HEAP[output |
4] = H0l
>>> 24;
21282 HEAP[output |
5] = H0l
>>> 16 &
255;
21283 HEAP[output |
6] = H0l
>>> 8 &
255;
21284 HEAP[output |
7] = H0l &
255;
21285 HEAP[output |
8] = H1h
>>> 24;
21286 HEAP[output |
9] = H1h
>>> 16 &
255;
21287 HEAP[output |
10] = H1h
>>> 8 &
255;
21288 HEAP[output |
11] = H1h &
255;
21289 HEAP[output |
12] = H1l
>>> 24;
21290 HEAP[output |
13] = H1l
>>> 16 &
255;
21291 HEAP[output |
14] = H1l
>>> 8 &
255;
21292 HEAP[output |
15] = H1l &
255;
21293 HEAP[output |
16] = H2h
>>> 24;
21294 HEAP[output |
17] = H2h
>>> 16 &
255;
21295 HEAP[output |
18] = H2h
>>> 8 &
255;
21296 HEAP[output |
19] = H2h &
255;
21297 HEAP[output |
20] = H2l
>>> 24;
21298 HEAP[output |
21] = H2l
>>> 16 &
255;
21299 HEAP[output |
22] = H2l
>>> 8 &
255;
21300 HEAP[output |
23] = H2l &
255;
21301 HEAP[output |
24] = H3h
>>> 24;
21302 HEAP[output |
25] = H3h
>>> 16 &
255;
21303 HEAP[output |
26] = H3h
>>> 8 &
255;
21304 HEAP[output |
27] = H3h &
255;
21305 HEAP[output |
28] = H3l
>>> 24;
21306 HEAP[output |
29] = H3l
>>> 16 &
255;
21307 HEAP[output |
30] = H3l
>>> 8 &
255;
21308 HEAP[output |
31] = H3l &
255;
21309 HEAP[output |
32] = H4h
>>> 24;
21310 HEAP[output |
33] = H4h
>>> 16 &
255;
21311 HEAP[output |
34] = H4h
>>> 8 &
255;
21312 HEAP[output |
35] = H4h &
255;
21313 HEAP[output |
36] = H4l
>>> 24;
21314 HEAP[output |
37] = H4l
>>> 16 &
255;
21315 HEAP[output |
38] = H4l
>>> 8 &
255;
21316 HEAP[output |
39] = H4l &
255;
21317 HEAP[output |
40] = H5h
>>> 24;
21318 HEAP[output |
41] = H5h
>>> 16 &
255;
21319 HEAP[output |
42] = H5h
>>> 8 &
255;
21320 HEAP[output |
43] = H5h &
255;
21321 HEAP[output |
44] = H5l
>>> 24;
21322 HEAP[output |
45] = H5l
>>> 16 &
255;
21323 HEAP[output |
46] = H5l
>>> 8 &
255;
21324 HEAP[output |
47] = H5l &
255;
21325 HEAP[output |
48] = H6h
>>> 24;
21326 HEAP[output |
49] = H6h
>>> 16 &
255;
21327 HEAP[output |
50] = H6h
>>> 8 &
255;
21328 HEAP[output |
51] = H6h &
255;
21329 HEAP[output |
52] = H6l
>>> 24;
21330 HEAP[output |
53] = H6l
>>> 16 &
255;
21331 HEAP[output |
54] = H6l
>>> 8 &
255;
21332 HEAP[output |
55] = H6l &
255;
21333 HEAP[output |
56] = H7h
>>> 24;
21334 HEAP[output |
57] = H7h
>>> 16 &
255;
21335 HEAP[output |
58] = H7h
>>> 8 &
255;
21336 HEAP[output |
59] = H7h &
255;
21337 HEAP[output |
60] = H7l
>>> 24;
21338 HEAP[output |
61] = H7l
>>> 16 &
255;
21339 HEAP[output |
62] = H7l
>>> 8 &
255;
21340 HEAP[output |
63] = H7l &
255;
21361 function init(h0h, h0l, h1h, h1l, h2h, h2l, h3h, h3l, h4h, h4l, h5h, h5l, h6h, h6l, h7h, h7l, total) {
21397 function process(offset, length) {
21398 offset = offset |
0;
21399 length = length |
0;
21401 if (offset &
127) return -
1;
21402 while ((length |
0)
>=
128) {
21403 _core_heap(offset);
21404 offset = offset +
128 |
0;
21405 length = length -
128 |
0;
21406 hashed = hashed +
128 |
0;
21408 TOTAL = TOTAL + hashed |
0;
21411 function finish(offset, length, output) {
21412 offset = offset |
0;
21413 length = length |
0;
21414 output = output |
0;
21415 var hashed =
0, i =
0;
21416 if (offset &
127) return -
1;
21417 if (~output) if (output &
63) return -
1;
21418 if ((length |
0)
>=
128) {
21419 hashed = process(offset, length) |
0;
21420 if ((hashed |
0) == -
1) return -
1;
21421 offset = offset + hashed |
0;
21422 length = length - hashed |
0;
21424 hashed = hashed + length |
0;
21425 TOTAL = TOTAL + length |
0;
21426 HEAP[offset | length] =
128;
21427 if ((length |
0)
>=
112) {
21428 for (i = length +
1 |
0; (i |
0) <
128; i = i +
1 |
0) HEAP[offset | i] =
0;
21429 _core_heap(offset);
21431 HEAP[offset |
0] =
0;
21433 for (i = length +
1 |
0; (i |
0) <
123; i = i +
1 |
0) HEAP[offset | i] =
0;
21434 HEAP[offset |
123] = TOTAL
>>> 29;
21435 HEAP[offset |
124] = TOTAL
>>> 21 &
255;
21436 HEAP[offset |
125] = TOTAL
>>> 13 &
255;
21437 HEAP[offset |
126] = TOTAL
>>> 5 &
255;
21438 HEAP[offset |
127] = TOTAL <<
3 &
255;
21439 _core_heap(offset);
21440 if (~output) _state_to_heap(output);
21443 function hmac_reset() {
21462 function _hmac_opad() {
21481 function hmac_init(p0h, p0l, p1h, p1l, p2h, p2l, p3h, p3l, p4h, p4l, p5h, p5l, p6h, p6l, p7h, p7l, p8h, p8l, p9h, p9l, p10h, p10l, p11h, p11l, p12h, p12l, p13h, p13l, p14h, p14l, p15h, p15l) {
21515 _core(p0h ^
1549556828, p0l ^
1549556828, p1h ^
1549556828, p1l ^
1549556828, p2h ^
1549556828, p2l ^
1549556828, p3h ^
1549556828, p3l ^
1549556828, p4h ^
1549556828, p4l ^
1549556828, p5h ^
1549556828, p5l ^
1549556828, p6h ^
1549556828, p6l ^
1549556828, p7h ^
1549556828, p7l ^
1549556828, p8h ^
1549556828, p8l ^
1549556828, p9h ^
1549556828, p9l ^
1549556828, p10h ^
1549556828, p10l ^
1549556828, p11h ^
1549556828, p11l ^
1549556828, p12h ^
1549556828, p12l ^
1549556828, p13h ^
1549556828, p13l ^
1549556828, p14h ^
1549556828, p14l ^
1549556828, p15h ^
1549556828, p15l ^
1549556828);
21533 _core(p0h ^
909522486, p0l ^
909522486, p1h ^
909522486, p1l ^
909522486, p2h ^
909522486, p2l ^
909522486, p3h ^
909522486, p3l ^
909522486, p4h ^
909522486, p4l ^
909522486, p5h ^
909522486, p5l ^
909522486, p6h ^
909522486, p6l ^
909522486, p7h ^
909522486, p7l ^
909522486, p8h ^
909522486, p8l ^
909522486, p9h ^
909522486, p9l ^
909522486, p10h ^
909522486, p10l ^
909522486, p11h ^
909522486, p11l ^
909522486, p12h ^
909522486, p12l ^
909522486, p13h ^
909522486, p13l ^
909522486, p14h ^
909522486, p14l ^
909522486, p15h ^
909522486, p15l ^
909522486);
21552 function hmac_finish(offset, length, output) {
21553 offset = offset |
0;
21554 length = length |
0;
21555 output = output |
0;
21556 var t0h =
0, t0l =
0, t1h =
0, t1l =
0, t2h =
0, t2l =
0, t3h =
0, t3l =
0, t4h =
0, t4l =
0, t5h =
0, t5l =
0, t6h =
0, t6l =
0, t7h =
0, t7l =
0, hashed =
0;
21557 if (offset &
127) return -
1;
21558 if (~output) if (output &
63) return -
1;
21559 hashed = finish(offset, length, -
1) |
0;
21577 _core(t0h, t0l, t1h, t1l, t2h, t2l, t3h, t3l, t4h, t4l, t5h, t5l, t6h, t6l, t7h, t7l,
2147483648,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1536);
21578 if (~output) _state_to_heap(output);
21581 function pbkdf2_generate_block(offset, length, block, count, output) {
21582 offset = offset |
0;
21583 length = length |
0;
21586 output = output |
0;
21587 var h0h =
0, h0l =
0, h1h =
0, h1l =
0, h2h =
0, h2l =
0, h3h =
0, h3l =
0, h4h =
0, h4l =
0, h5h =
0, h5l =
0, h6h =
0, h6l =
0, h7h =
0, h7l =
0, t0h =
0, t0l =
0, t1h =
0, t1l =
0, t2h =
0, t2l =
0, t3h =
0, t3l =
0, t4h =
0, t4l =
0, t5h =
0, t5l =
0, t6h =
0, t6l =
0, t7h =
0, t7l =
0;
21588 if (offset &
127) return -
1;
21589 if (~output) if (output &
63) return -
1;
21590 HEAP[offset + length |
0] = block
>>> 24;
21591 HEAP[offset + length +
1 |
0] = block
>>> 16 &
255;
21592 HEAP[offset + length +
2 |
0] = block
>>> 8 &
255;
21593 HEAP[offset + length +
3 |
0] = block &
255;
21594 // Closure compiler warning - The result of the 'bitor' operator is not being used
21595 //hmac_finish(offset, length +
4 |
0, -
1) |
0;
21596 hmac_finish(offset, length +
4 |
0, -
1);
21613 count = count -
1 |
0;
21614 while ((count |
0)
> 0) {
21616 _core(t0h, t0l, t1h, t1l, t2h, t2l, t3h, t3l, t4h, t4l, t5h, t5l, t6h, t6l, t7h, t7l,
2147483648,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1536);
21634 _core(t0h, t0l, t1h, t1l, t2h, t2l, t3h, t3l, t4h, t4l, t5h, t5l, t6h, t6l, t7h, t7l,
2147483648,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1536);
21667 count = count -
1 |
0;
21685 if (~output) _state_to_heap(output);
21693 hmac_reset: hmac_reset,
21694 hmac_init: hmac_init,
21695 hmac_finish: hmac_finish,
21696 pbkdf2_generate_block: pbkdf2_generate_block
21699 var _sha512_block_size =
128, _sha512_hash_size =
64;
21700 function sha512_constructor(options) {
21701 options = options || {};
21702 options.heapSize = options.heapSize ||
4096;
21703 if (options.heapSize <=
0 || options.heapSize %
4096) throw new IllegalArgumentError(
"heapSize must be a positive number and multiple of 4096");
21704 this.heap = options.heap || new Uint8Array(options.heapSize);
21705 this.asm = options.asm || sha512_asm(global, null, this.heap.buffer);
21706 this.BLOCK_SIZE = _sha512_block_size;
21707 this.HASH_SIZE = _sha512_hash_size;
21710 function sha512_reset() {
21711 this.result = null;
21717 function sha512_process(data) {
21718 if (this.result !== null) throw new IllegalStateError(
"state must be reset before processing new data");
21719 var dpos =
0, dlen =
0, clen =
0;
21720 if (is_buffer(data) || is_bytes(data)) {
21721 dpos = data.byteOffset ||
0;
21722 dlen = data.byteLength;
21723 } else if (is_string(data)) {
21724 dlen = data.length;
21726 throw new TypeError(
"data isn't of expected type");
21729 clen = this.heap.byteLength - this.pos - this.len;
21730 clen = clen < dlen ? clen : dlen;
21731 if (is_buffer(data) || is_bytes(data)) {
21732 this.heap.set(new Uint8Array(data.buffer || data, dpos, clen), this.pos + this.len);
21734 for (var i =
0; i < clen; i++) this.heap[this.pos + this.len + i] = data.charCodeAt(dpos + i);
21739 clen = this.asm.process(this.pos, this.len);
21740 if (clen < this.len) {
21750 function sha512_finish() {
21751 if (this.result !== null) throw new IllegalStateError(
"state must be reset before processing new data");
21752 this.asm.finish(this.pos, this.len,
0);
21753 this.result = new Uint8Array(_sha512_hash_size);
21754 this.result.set(this.heap.subarray(
0, _sha512_hash_size));
21759 sha512_constructor.BLOCK_SIZE = _sha512_block_size;
21760 sha512_constructor.HASH_SIZE = _sha512_hash_size;
21761 var sha512_prototype = sha512_constructor.prototype;
21762 sha512_prototype.reset = sha512_reset;
21763 sha512_prototype.process = sha512_process;
21764 sha512_prototype.finish = sha512_finish;
21765 function hmac_constructor(options) {
21766 options = options || {};
21767 if (!options.hash) throw new SyntaxError(
"option 'hash' is required");
21768 if (!options.hash.HASH_SIZE) throw new SyntaxError(
"option 'hash' supplied doesn't seem to be a valid hash function");
21769 this.hash = options.hash;
21770 this.BLOCK_SIZE = this.hash.BLOCK_SIZE;
21771 this.HMAC_SIZE = this.hash.HASH_SIZE;
21773 this.verify = null;
21774 this.result = null;
21775 if (options.password !== undefined || options.verify !== undefined) this.reset(options);
21778 function hmac_sha256_constructor(options) {
21779 options = options || {};
21780 if (!(options.hash instanceof sha256_constructor)) options.hash = new sha256_constructor(options);
21781 hmac_constructor.call(this, options);
21784 function hmac_sha512_constructor(options) {
21785 options = options || {};
21786 if (!(options.hash instanceof sha512_constructor)) options.hash = new sha512_constructor(options);
21787 hmac_constructor.call(this, options);
21790 function _hmac_key(hash, password) {
21792 if (is_buffer(password) || is_bytes(password)) {
21793 key = new Uint8Array(hash.BLOCK_SIZE);
21794 if (password.byteLength
> hash.BLOCK_SIZE) {
21795 key.set(new Uint8Array(hash.reset().process(password).finish().result));
21796 } else if (is_buffer(password)) {
21797 key.set(new Uint8Array(password));
21801 } else if (is_string(password)) {
21802 key = new Uint8Array(hash.BLOCK_SIZE);
21803 if (password.length
> hash.BLOCK_SIZE) {
21804 key.set(new Uint8Array(hash.reset().process(password).finish().result));
21806 for (var i =
0; i < password.length; ++i) key[i] = password.charCodeAt(i);
21809 throw new TypeError("password isn't of expected type");
21813 function _hmac_init_verify(verify) {
21814 if (is_buffer(verify) || is_bytes(verify)) {
21815 verify = new Uint8Array(verify);
21816 } else if (is_string(verify)) {
21817 verify = string_to_bytes(verify);
21819 throw new TypeError("verify tag isn't of expected type");
21821 if (verify.length !== this.HMAC_SIZE) throw new IllegalArgumentError("illegal verification tag size");
21822 this.verify = verify;
21824 function hmac_reset(options) {
21825 options = options || {};
21826 var password = options.password;
21827 if (this.key === null && !is_string(password) && !password) throw new IllegalStateError("no key is associated with the instance");
21828 this.result = null;
21830 if (password || is_string(password)) this.key = _hmac_key(this.hash, password);
21831 var ipad = new Uint8Array(this.key);
21832 for (var i =
0; i < ipad.length; ++i) ipad[i] ^=
54;
21833 this.hash.process(ipad);
21834 var verify = options.verify;
21835 if (verify !== undefined) {
21836 _hmac_init_verify.call(this, verify);
21838 this.verify = null;
21842 function hmac_sha256_reset(options) {
21843 options = options || {};
21844 var password = options.password;
21845 if (this.key === null && !is_string(password) && !password) throw new IllegalStateError("no key is associated with the instance");
21846 this.result = null;
21848 if (password || is_string(password)) {
21849 this.key = _hmac_key(this.hash, password);
21850 this.hash.reset().asm.hmac_init(this.key[
0] <<
24 | this.key[
1] <<
16 | this.key[
2] <<
8 | this.key[
3], this.key[
4] <<
24 | this.key[
5] <<
16 | this.key[
6] <<
8 | this.key[
7], this.key[
8] <<
24 | this.key[
9] <<
16 | this.key[
10] <<
8 | this.key[
11], this.key[
12] <<
24 | this.key[
13] <<
16 | this.key[
14] <<
8 | this.key[
15], this.key[
16] <<
24 | this.key[
17] <<
16 | this.key[
18] <<
8 | this.key[
19], this.key[
20] <<
24 | this.key[
21] <<
16 | this.key[
22] <<
8 | this.key[
23], this.key[
24] <<
24 | this.key[
25] <<
16 | this.key[
26] <<
8 | this.key[
27], this.key[
28] <<
24 | this.key[
29] <<
16 | this.key[
30] <<
8 | this.key[
31], this.key[
32] <<
24 | this.key[
33] <<
16 | this.key[
34] <<
8 | this.key[
35], this.key[
36] <<
24 | this.key[
37] <<
16 | this.key[
38] <<
8 | this.key[
39], this.key[
40] <<
24 | this.key[
41] <<
16 | this.key[
42] <<
8 | this.key[
43], this.key[
44] <<
24 | this.key[
45] <<
16 | this.key[
46] <<
8 | this.key[
47], this.key[
48] <<
24 | this.key[
49] <<
16 | this.key[
50] <<
8 | this.key[
51], this.key[
52] <<
24 | this.key[
53] <<
16 | this.key[
54] <<
8 | this.key[
55], this.key[
56] <<
24 | this.key[
57] <<
16 | this.key[
58] <<
8 | this.key[
59], this.key[
60] <<
24 | this.key[
61] <<
16 | this.key[
62] <<
8 | this.key[
63]);
21852 this.hash.asm.hmac_reset();
21854 var verify = options.verify;
21855 if (verify !== undefined) {
21856 _hmac_init_verify.call(this, verify);
21858 this.verify = null;
21862 function hmac_sha512_reset(options) {
21863 options = options || {};
21864 var password = options.password;
21865 if (this.key === null && !is_string(password) && !password) throw new IllegalStateError("no key is associated with the instance");
21866 this.result = null;
21868 if (password || is_string(password)) {
21869 this.key = _hmac_key(this.hash, password);
21870 this.hash.reset().asm.hmac_init(this.key[
0] <<
24 | this.key[
1] <<
16 | this.key[
2] <<
8 | this.key[
3], this.key[
4] <<
24 | this.key[
5] <<
16 | this.key[
6] <<
8 | this.key[
7], this.key[
8] <<
24 | this.key[
9] <<
16 | this.key[
10] <<
8 | this.key[
11], this.key[
12] <<
24 | this.key[
13] <<
16 | this.key[
14] <<
8 | this.key[
15], this.key[
16] <<
24 | this.key[
17] <<
16 | this.key[
18] <<
8 | this.key[
19], this.key[
20] <<
24 | this.key[
21] <<
16 | this.key[
22] <<
8 | this.key[
23], this.key[
24] <<
24 | this.key[
25] <<
16 | this.key[
26] <<
8 | this.key[
27], this.key[
28] <<
24 | this.key[
29] <<
16 | this.key[
30] <<
8 | this.key[
31], this.key[
32] <<
24 | this.key[
33] <<
16 | this.key[
34] <<
8 | this.key[
35], this.key[
36] <<
24 | this.key[
37] <<
16 | this.key[
38] <<
8 | this.key[
39], this.key[
40] <<
24 | this.key[
41] <<
16 | this.key[
42] <<
8 | this.key[
43], this.key[
44] <<
24 | this.key[
45] <<
16 | this.key[
46] <<
8 | this.key[
47], this.key[
48] <<
24 | this.key[
49] <<
16 | this.key[
50] <<
8 | this.key[
51], this.key[
52] <<
24 | this.key[
53] <<
16 | this.key[
54] <<
8 | this.key[
55], this.key[
56] <<
24 | this.key[
57] <<
16 | this.key[
58] <<
8 | this.key[
59], this.key[
60] <<
24 | this.key[
61] <<
16 | this.key[
62] <<
8 | this.key[
63], this.key[
64] <<
24 | this.key[
65] <<
16 | this.key[
66] <<
8 | this.key[
67], this.key[
68] <<
24 | this.key[
69] <<
16 | this.key[
70] <<
8 | this.key[
71], this.key[
72] <<
24 | this.key[
73] <<
16 | this.key[
74] <<
8 | this.key[
75], this.key[
76] <<
24 | this.key[
77] <<
16 | this.key[
78] <<
8 | this.key[
79], this.key[
80] <<
24 | this.key[
81] <<
16 | this.key[
82] <<
8 | this.key[
83], this.key[
84] <<
24 | this.key[
85] <<
16 | this.key[
86] <<
8 | this.key[
87], this.key[
88] <<
24 | this.key[
89] <<
16 | this.key[
90] <<
8 | this.key[
91], this.key[
92] <<
24 | this.key[
93] <<
16 | this.key[
94] <<
8 | this.key[
95], this.key[
96] <<
24 | this.key[
97] <<
16 | this.key[
98] <<
8 | this.key[
99], this.key[
100] <<
24 | this.key[
101] <<
16 | this.key[
102] <<
8 | this.key[
103], this.key[
104] <<
24 | this.key[
105] <<
16 | this.key[
106] <<
8 | this.key[
107], this.key[
108] <<
24 | this.key[
109] <<
16 | this.key[
110] <<
8 | this.key[
111], this.key[
112] <<
24 | this.key[
113] <<
16 | this.key[
114] <<
8 | this.key[
115], this.key[
116] <<
24 | this.key[
117] <<
16 | this.key[
118] <<
8 | this.key[
119], this.key[
120] <<
24 | this.key[
121] <<
16 | this.key[
122] <<
8 | this.key[
123], this.key[
124] <<
24 | this.key[
125] <<
16 | this.key[
126] <<
8 | this.key[
127]);
21872 this.hash.asm.hmac_reset();
21874 var verify = options.verify;
21875 if (verify !== undefined) {
21876 _hmac_init_verify.call(this, verify);
21878 this.verify = null;
21882 function hmac_process(data) {
21883 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
21884 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
21885 this.hash.process(data);
21888 function hmac_finish() {
21889 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
21890 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
21891 var inner_result = this.hash.finish().result;
21892 var opad = new Uint8Array(this.key);
21893 for (var i =
0; i < opad.length; ++i) opad[i] ^=
92;
21894 var verify = this.verify;
21895 var result = this.hash.reset().process(opad).process(inner_result).finish().result;
21897 if (verify.length === result.length) {
21899 for (var i =
0; i < verify.length; i++) {
21900 diff |= verify[i] ^ result[i];
21902 this.result = !diff;
21904 this.result = false;
21907 this.result = result;
21911 function hmac_sha256_finish() {
21912 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
21913 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
21914 var hash = this.hash, asm = this.hash.asm, heap = this.hash.heap;
21915 asm.hmac_finish(hash.pos, hash.len,
0);
21916 var verify = this.verify;
21917 var result = new Uint8Array(_sha256_hash_size);
21918 result.set(heap.subarray(
0, _sha256_hash_size));
21920 if (verify.length === result.length) {
21922 for (var i =
0; i < verify.length; i++) {
21923 diff |= verify[i] ^ result[i];
21925 this.result = !diff;
21927 this.result = false;
21930 this.result = result;
21934 function hmac_sha512_finish() {
21935 if (this.key === null) throw new IllegalStateError("no key is associated with the instance");
21936 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
21937 var hash = this.hash, asm = this.hash.asm, heap = this.hash.heap;
21938 asm.hmac_finish(hash.pos, hash.len,
0);
21939 var verify = this.verify;
21940 var result = new Uint8Array(_sha512_hash_size);
21941 result.set(heap.subarray(
0, _sha512_hash_size));
21943 if (verify.length === result.length) {
21945 for (var i =
0; i < verify.length; i++) {
21946 diff |= verify[i] ^ result[i];
21948 this.result = !diff;
21950 this.result = false;
21953 this.result = result;
21957 var hmac_prototype = hmac_constructor.prototype;
21958 hmac_prototype.reset = hmac_reset;
21959 hmac_prototype.process = hmac_process;
21960 hmac_prototype.finish = hmac_finish;
21961 hmac_sha256_constructor.BLOCK_SIZE = sha256_constructor.BLOCK_SIZE;
21962 hmac_sha256_constructor.HMAC_SIZE = sha256_constructor.HASH_SIZE;
21963 var hmac_sha256_prototype = hmac_sha256_constructor.prototype;
21964 hmac_sha256_prototype.reset = hmac_sha256_reset;
21965 hmac_sha256_prototype.process = hmac_process;
21966 hmac_sha256_prototype.finish = hmac_sha256_finish;
21967 hmac_sha512_constructor.BLOCK_SIZE = sha512_constructor.BLOCK_SIZE;
21968 hmac_sha512_constructor.HMAC_SIZE = sha512_constructor.HASH_SIZE;
21969 var hmac_sha512_prototype = hmac_sha512_constructor.prototype;
21970 hmac_sha512_prototype.reset = hmac_sha512_reset;
21971 hmac_sha512_prototype.process = hmac_process;
21972 hmac_sha512_prototype.finish = hmac_sha512_finish;
21973 function pbkdf2_constructor(options) {
21974 options = options || {};
21975 if (!options.hmac) throw new SyntaxError("option 'hmac' is required");
21976 if (!options.hmac.HMAC_SIZE) throw new SyntaxError("option 'hmac' supplied doesn't seem to be a valid HMAC function");
21977 this.hmac = options.hmac;
21978 this.count = options.count ||
4096;
21979 this.length = options.length || this.hmac.HMAC_SIZE;
21980 this.result = null;
21981 var password = options.password;
21982 if (password || is_string(password)) this.reset(options);
21985 function pbkdf2_hmac_sha256_constructor(options) {
21986 options = options || {};
21987 if (!(options.hmac instanceof hmac_sha256_constructor)) options.hmac = new hmac_sha256_constructor(options);
21988 pbkdf2_constructor.call(this, options);
21991 function pbkdf2_hmac_sha512_constructor(options) {
21992 options = options || {};
21993 if (!(options.hmac instanceof hmac_sha512_constructor)) options.hmac = new hmac_sha512_constructor(options);
21994 pbkdf2_constructor.call(this, options);
21997 function pbkdf2_reset(options) {
21998 this.result = null;
21999 this.hmac.reset(options);
22002 function pbkdf2_generate(salt, count, length) {
22003 if (this.result !== null) throw new IllegalStateError("state must be reset before processing new data");
22004 if (!salt && !is_string(salt)) throw new IllegalArgumentError("bad 'salt' value");
22005 count = count || this.count;
22006 length = length || this.length;
22007 this.result = new Uint8Array(length);
22008 var blocks = Math.ceil(length / this.hmac.HMAC_SIZE);
22009 for (var i =
1; i <= blocks; ++i) {
22010 var j = (i -
1) * this.hmac.HMAC_SIZE;
22011 var l = (i < blocks ?
0 : length % this.hmac.HMAC_SIZE) || this.hmac.HMAC_SIZE;
22012 var tmp = new Uint8Array(this.hmac.reset().process(salt).process(new Uint8Array([ i
>>> 24 &
255, i
>>> 16 &
255, i
>>> 8 &
255, i &
255 ])).finish().result);
22013 this.result.set(tmp.subarray(
0, l), j);
22014 for (var k =
1; k < count; ++k) {
22015 tmp = new Uint8Array(this.hmac.reset().process(tmp).finish().result);
22016 for (var r =
0; r < l; ++r) this.result[j + r] ^= tmp[r];
22021 function pbkdf2_hmac_sha256_generate(salt, count, length) {
22022 if (this.result !== null) throw new IllegalStateError(
"state must be reset before processing new data");
22023 if (!salt && !is_string(salt)) throw new IllegalArgumentError(
"bad 'salt' value");
22024 count = count || this.count;
22025 length = length || this.length;
22026 this.result = new Uint8Array(length);
22027 var blocks = Math.ceil(length / this.hmac.HMAC_SIZE);
22028 for (var i =
1; i <= blocks; ++i) {
22029 var j = (i -
1) * this.hmac.HMAC_SIZE;
22030 var l = (i < blocks ?
0 : length % this.hmac.HMAC_SIZE) || this.hmac.HMAC_SIZE;
22031 this.hmac.reset().process(salt);
22032 this.hmac.hash.asm.pbkdf2_generate_block(this.hmac.hash.pos, this.hmac.hash.len, i, count,
0);
22033 this.result.set(this.hmac.hash.heap.subarray(
0, l), j);
22037 function pbkdf2_hmac_sha512_generate(salt, count, length) {
22038 if (this.result !== null) throw new IllegalStateError(
"state must be reset before processing new data");
22039 if (!salt && !is_string(salt)) throw new IllegalArgumentError(
"bad 'salt' value");
22040 count = count || this.count;
22041 length = length || this.length;
22042 this.result = new Uint8Array(length);
22043 var blocks = Math.ceil(length / this.hmac.HMAC_SIZE);
22044 for (var i =
1; i <= blocks; ++i) {
22045 var j = (i -
1) * this.hmac.HMAC_SIZE;
22046 var l = (i < blocks ?
0 : length % this.hmac.HMAC_SIZE) || this.hmac.HMAC_SIZE;
22047 this.hmac.reset().process(salt);
22048 this.hmac.hash.asm.pbkdf2_generate_block(this.hmac.hash.pos, this.hmac.hash.len, i, count,
0);
22049 this.result.set(this.hmac.hash.heap.subarray(
0, l), j);
22053 var pbkdf2_prototype = pbkdf2_constructor.prototype;
22054 pbkdf2_prototype.reset = pbkdf2_reset;
22055 pbkdf2_prototype.generate = pbkdf2_generate;
22056 var pbkdf2_hmac_sha256_prototype = pbkdf2_hmac_sha256_constructor.prototype;
22057 pbkdf2_hmac_sha256_prototype.reset = pbkdf2_reset;
22058 pbkdf2_hmac_sha256_prototype.generate = pbkdf2_hmac_sha256_generate;
22059 var pbkdf2_hmac_sha512_prototype = pbkdf2_hmac_sha512_constructor.prototype;
22060 pbkdf2_hmac_sha512_prototype.reset = pbkdf2_reset;
22061 pbkdf2_hmac_sha512_prototype.generate = pbkdf2_hmac_sha512_generate;
22062 global.IllegalStateError = IllegalStateError;
22063 global.IllegalArgumentError = IllegalArgumentError;
22064 global.SecurityError = SecurityError;
22065 exports.string_to_bytes = string_to_bytes;
22066 exports.hex_to_bytes = hex_to_bytes;
22067 exports.base64_to_bytes = base64_to_bytes;
22068 exports.bytes_to_string = bytes_to_string;
22069 exports.bytes_to_hex = bytes_to_hex;
22070 exports.bytes_to_base64 = bytes_to_base64;
22071 var SHA256_instance = new sha256_constructor({
22074 function sha256_bytes(data) {
22075 if (data === undefined) throw new SyntaxError(
"data required");
22076 return SHA256_instance.reset().process(data).finish().result;
22078 function sha256_hex(data) {
22079 var result = sha256_bytes(data);
22080 return bytes_to_hex(result);
22082 function sha256_base64(data) {
22083 var result = sha256_bytes(data);
22084 return bytes_to_base64(result);
22087 bytes: sha256_bytes,
22089 base64: sha256_base64
22091 var SHA512_instance = new sha512_constructor({
22094 function sha512_bytes(data) {
22095 if (data === undefined) throw new SyntaxError(
"data required");
22096 return SHA512_instance.reset().process(data).finish().result;
22098 function sha512_hex(data) {
22099 var result = sha512_bytes(data);
22100 return bytes_to_hex(result);
22102 function sha512_base64(data) {
22103 var result = sha512_bytes(data);
22104 return bytes_to_base64(result);
22107 bytes: sha512_bytes,
22109 base64: sha512_base64
22111 var hmac_sha256_instance = new hmac_sha256_constructor({
22112 hash: SHA256_instance
22114 function hmac_sha256_bytes(data, password) {
22115 if (data === undefined) throw new SyntaxError(
"data required");
22116 if (password === undefined) throw new SyntaxError(
"password required");
22117 return hmac_sha256_instance.reset({
22119 }).process(data).finish().result;
22121 function hmac_sha256_hex(data, password) {
22122 var result = hmac_sha256_bytes(data, password);
22123 return bytes_to_hex(result);
22125 function hmac_sha256_base64(data, password) {
22126 var result = hmac_sha256_bytes(data, password);
22127 return bytes_to_base64(result);
22129 exports.HMAC = exports.HMAC_SHA256 = {
22130 bytes: hmac_sha256_bytes,
22131 hex: hmac_sha256_hex,
22132 base64: hmac_sha256_base64
22134 var hmac_sha512_instance = new hmac_sha512_constructor({
22135 hash: SHA512_instance
22137 function hmac_sha512_bytes(data, password) {
22138 if (data === undefined) throw new SyntaxError(
"data required");
22139 if (password === undefined) throw new SyntaxError(
"password required");
22140 return hmac_sha512_instance.reset({
22142 }).process(data).finish().result;
22144 function hmac_sha512_hex(data, password) {
22145 var result = hmac_sha512_bytes(data, password);
22146 return bytes_to_hex(result);
22148 function hmac_sha512_base64(data, password) {
22149 var result = hmac_sha512_bytes(data, password);
22150 return bytes_to_base64(result);
22152 exports.HMAC_SHA512 = {
22153 bytes: hmac_sha512_bytes,
22154 hex: hmac_sha512_hex,
22155 base64: hmac_sha512_base64
22157 var pbkdf2_hmac_sha256_instance = new pbkdf2_hmac_sha256_constructor({
22158 hmac: hmac_sha256_instance
22160 function pbkdf2_hmac_sha256_bytes(password, salt, iterations, dklen) {
22161 if (password === undefined) throw new SyntaxError(
"password required");
22162 if (salt === undefined) throw new SyntaxError(
"salt required");
22163 return pbkdf2_hmac_sha256_instance.reset({
22165 }).generate(salt, iterations, dklen).result;
22167 function pbkdf2_hmac_sha256_hex(password, salt, iterations, dklen) {
22168 var result = pbkdf2_hmac_sha256_bytes(password, salt, iterations, dklen);
22169 return bytes_to_hex(result);
22171 function pbkdf2_hmac_sha256_base64(password, salt, iterations, dklen) {
22172 var result = pbkdf2_hmac_sha256_bytes(password, salt, iterations, dklen);
22173 return bytes_to_base64(result);
22175 exports.PBKDF2 = exports.PBKDF2_HMAC_SHA256 = {
22176 bytes: pbkdf2_hmac_sha256_bytes,
22177 hex: pbkdf2_hmac_sha256_hex,
22178 base64: pbkdf2_hmac_sha256_base64
22180 var pbkdf2_hmac_sha512_instance = new pbkdf2_hmac_sha512_constructor({
22181 hmac: hmac_sha512_instance
22183 function pbkdf2_hmac_sha512_bytes(password, salt, iterations, dklen) {
22184 if (password === undefined) throw new SyntaxError(
"password required");
22185 if (salt === undefined) throw new SyntaxError(
"salt required");
22186 return pbkdf2_hmac_sha512_instance.reset({
22188 }).generate(salt, iterations, dklen).result;
22190 function pbkdf2_hmac_sha512_hex(password, salt, iterations, dklen) {
22191 var result = pbkdf2_hmac_sha512_bytes(password, salt, iterations, dklen);
22192 return bytes_to_hex(result);
22194 function pbkdf2_hmac_sha512_base64(password, salt, iterations, dklen) {
22195 var result = pbkdf2_hmac_sha512_bytes(password, salt, iterations, dklen);
22196 return bytes_to_base64(result);
22198 exports.PBKDF2_HMAC_SHA512 = {
22199 bytes: pbkdf2_hmac_sha512_bytes,
22200 hex: pbkdf2_hmac_sha512_hex,
22201 base64: pbkdf2_hmac_sha512_base64
22203 var cbc_aes_instance = new cbc_aes_constructor({
22206 function cbc_aes_encrypt_bytes(data, key, padding, iv) {
22207 if (data === undefined) throw new SyntaxError(
"data required");
22208 if (key === undefined) throw new SyntaxError(
"key required");
22209 return cbc_aes_instance.reset({
22213 }).encrypt(data).result;
22215 function cbc_aes_decrypt_bytes(data, key, padding, iv) {
22216 if (data === undefined) throw new SyntaxError(
"data required");
22217 if (key === undefined) throw new SyntaxError(
"key required");
22218 return cbc_aes_instance.reset({
22222 }).decrypt(data).result;
22224 exports.AES = exports.AES_CBC = {
22225 encrypt: cbc_aes_encrypt_bytes,
22226 decrypt: cbc_aes_decrypt_bytes
22228 var ccm_aes_instance = new ccm_aes_constructor({
22229 heap: cbc_aes_instance.heap,
22230 asm: cbc_aes_instance.asm
22232 function ccm_aes_encrypt_bytes(data, key, nonce, adata, tagSize) {
22233 if (data === undefined) throw new SyntaxError(
"data required");
22234 if (key === undefined) throw new SyntaxError(
"key required");
22235 if (nonce === undefined) throw new SyntaxError(
"nonce required");
22236 var dataLength = data.byteLength || data.length ||
0;
22237 return ccm_aes_instance.reset({
22242 dataLength: dataLength
22243 }).encrypt(data).result;
22245 function ccm_aes_decrypt_bytes(data, key, nonce, adata, tagSize) {
22246 if (data === undefined) throw new SyntaxError(
"data required");
22247 if (key === undefined) throw new SyntaxError(
"key required");
22248 if (nonce === undefined) throw new SyntaxError(
"nonce required");
22249 var dataLength = data.byteLength || data.length ||
0;
22250 tagSize = tagSize || _aes_block_size;
22251 return ccm_aes_instance.reset({
22256 dataLength: dataLength - tagSize
22257 }).decrypt(data).result;
22259 exports.AES_CCM = {
22260 encrypt: ccm_aes_encrypt_bytes,
22261 decrypt: ccm_aes_decrypt_bytes
22263 var cfb_aes_instance = new cfb_aes_constructor({
22264 heap: cbc_aes_instance.heap,
22265 asm: cbc_aes_instance.asm
22267 function cfb_aes_encrypt_bytes(data, key, padding, iv) {
22268 if (data === undefined) throw new SyntaxError(
"data required");
22269 if (key === undefined) throw new SyntaxError(
"key required");
22270 return cfb_aes_instance.reset({
22274 }).encrypt(data).result;
22276 function cfb_aes_decrypt_bytes(data, key, padding, iv) {
22277 if (data === undefined) throw new SyntaxError(
"data required");
22278 if (key === undefined) throw new SyntaxError(
"key required");
22279 return cfb_aes_instance.reset({
22283 }).decrypt(data).result;
22285 exports.AES_CFB = {
22286 encrypt: cfb_aes_encrypt_bytes,
22287 decrypt: cfb_aes_decrypt_bytes
22289 var cfb_aes_decrypt_instance = new cfb_aes_decrypt_constructor({
22290 heap: cbc_aes_instance.heap,
22291 asm: cbc_aes_instance.asm
22293 function cfb_aes_decrypt_init(key, padding, iv) {
22294 if (key === undefined) throw new SyntaxError(
"key required");
22295 return cfb_aes_decrypt_instance.reset({
22301 exports.AES_CFB = exports.AES_CFB || {};
22302 exports.AES_CFB.decryptor = {
22303 init: cfb_aes_decrypt_init
22305 })({}, function() {
22310 <!--<script src="/js/jsbip39.js"></script>-->
22313 * Copyright (c)
2013 Pavol Rusnak
22315 * Permission is hereby granted, free of charge, to any person obtaining a copy of
22316 * this software and associated documentation files (the "Software"), to deal in
22317 * the Software without restriction, including without limitation the rights to
22318 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
22319 * of the Software, and to permit persons to whom the Software is furnished to do
22320 * so, subject to the following conditions:
22322 * The above copyright notice and this permission notice shall be included in all
22323 * copies or substantial portions of the Software.
22325 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22326 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22327 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22328 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22329 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22330 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22334 * Javascript port from python by Ian Coleman
22336 * Includes code from asmCrypto
22337 * https://github.com/tresorit/asmcrypto.js
22340 var Mnemonic = function(language) {
22342 var PBKDF2_ROUNDS =
2048;
22349 wordlist = WORDLISTS[language];
22350 if (wordlist.length != RADIX) {
22351 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
22356 self.generate = function(strength) {
22357 strength = strength ||
128;
22358 var r = strength %
32;
22360 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
22362 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
22363 if (!hasStrongCrypto) {
22364 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
22366 var buffer = new Uint8Array(strength /
8);
22367 var data = crypto.getRandomValues(buffer);
22368 return self.toMnemonic(data);
22371 self.toMnemonic = function(data) {
22372 if (data.length %
4 > 0) {
22373 throw 'Data length in bits should be divisible by
32, but it is not (' + data.length + ' bytes = ' + data.length*
8 + ' bits).'
22376 //h = hashlib.sha256(data).hexdigest()
22377 var uintArray = new Uint8Array(data);
22378 var h = asmCrypto.SHA256.bytes(uintArray);
22380 // b is a binary string, eg '
00111010101100...'
22381 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
22382 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
22384 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
22385 // c = bin(int(h,
16))[
2:].zfill(
256)
22386 // d = c[:len(data) *
8 /
32]
22387 var a = byteArrayToBinaryString(data);
22388 var c = byteArrayToBinaryString(h);
22389 var d = c.substring(
0, data.length *
8 /
32);
22390 // b = line1 + line2
22394 var blen = b.length /
11;
22395 for (var i=
0; i
<blen; i++) {
22396 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
22397 result.push(wordlist[idx]);
22399 return result.join(' ');
22402 self.check = function(mnemonic) {
22403 var mnemonic = mnemonic.split(' ')
22404 if (mnemonic.length %
3 > 0) {
22407 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
22409 for (var i=
0; i
<mnemonic.length; i++) {
22410 var word = mnemonic[i];
22411 var wordIndex = wordlist.indexOf(word);
22412 if (wordIndex == -
1) {
22415 var binaryIndex = zfill(wordIndex.toString(
2),
11);
22416 idx.push(binaryIndex);
22418 var b = idx.join('');
22420 //d = b[:l /
33 *
32]
22422 var d = b.substring(
0, l /
33 *
32);
22423 var h = b.substring(l - l /
33, l);
22424 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
22425 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
22426 var nd = binaryStringToByteArray(d);
22427 var ndHash = asmCrypto.SHA256.bytes(nd);
22428 var ndBstr = zfill(byteArrayToBinaryString(ndHash),
256);
22429 var nh = ndBstr.substring(
0,l/
33);
22433 self.toSeed = function(mnemonic, passphrase) {
22434 passphrase = passphrase || '';
22435 mnemonic = normalizeString(mnemonic)
22436 passphrase = normalizeString(passphrase)
22437 passphrase =
"mnemonic" + passphrase;
22438 //return PBKDF2(mnemonic, 'mnemonic' + passphrase, iterations=PBKDF2_ROUNDS, macmodule=hmac, digestmodule=hashlib.sha512).read(
64)
22439 return asmCrypto.PBKDF2_HMAC_SHA512.hex(mnemonic, passphrase, PBKDF2_ROUNDS,
512/
8);
22442 function normalizeString(str) {
22443 if (typeof str.normalize ==
"function") {
22444 return str.normalize(
"NFKD");
22447 // TODO find a library to do this
22448 // Not supported on firefox mobile
22449 console.warn(
"NFKD Normalization is unavailable");
22454 function byteArrayToBinaryString(data) {
22456 for (var i=
0; i
<data.length; i++) {
22457 bin += zfill(data[i].toString(
2),
8);
22462 function binaryStringToByteArray(str) {
22463 var arrayLen = str.length /
8;
22464 var array = new Uint8Array(arrayLen);
22465 for (var i=
0; i
<arrayLen; i++) {
22466 var valueStr = str.substring(
0,
8);
22467 var value = parseInt(valueStr,
2);
22469 str = str.slice(
8);
22474 // Pad a numeric string on the left with zero digits until the given width
22476 // Note this differs to the python implementation because it does not
22477 // handle numbers starting with a sign.
22478 function zfill(source, length) {
22479 source = source.toString();
22480 while (source.length < length) {
22481 source = '
0' + source;
22492 "abandon",
"ability",
"able",
"about",
"above",
"absent",
"absorb",
"abstract",
"absurd",
"abuse",
22493 "access",
"accident",
"account",
"accuse",
"achieve",
"acid",
"acoustic",
"acquire",
"across",
"act",
22494 "action",
"actor",
"actress",
"actual",
"adapt",
"add",
"addict",
"address",
"adjust",
"admit",
22495 "adult",
"advance",
"advice",
"aerobic",
"affair",
"afford",
"afraid",
"again",
"age",
"agent",
22496 "agree",
"ahead",
"aim",
"air",
"airport",
"aisle",
"alarm",
"album",
"alcohol",
"alert",
22497 "alien",
"all",
"alley",
"allow",
"almost",
"alone",
"alpha",
"already",
"also",
"alter",
22498 "always",
"amateur",
"amazing",
"among",
"amount",
"amused",
"analyst",
"anchor",
"ancient",
"anger",
22499 "angle",
"angry",
"animal",
"ankle",
"announce",
"annual",
"another",
"answer",
"antenna",
"antique",
22500 "anxiety",
"any",
"apart",
"apology",
"appear",
"apple",
"approve",
"april",
"arch",
"arctic",
22501 "area",
"arena",
"argue",
"arm",
"armed",
"armor",
"army",
"around",
"arrange",
"arrest",
22502 "arrive",
"arrow",
"art",
"artefact",
"artist",
"artwork",
"ask",
"aspect",
"assault",
"asset",
22503 "assist",
"assume",
"asthma",
"athlete",
"atom",
"attack",
"attend",
"attitude",
"attract",
"auction",
22504 "audit",
"august",
"aunt",
"author",
"auto",
"autumn",
"average",
"avocado",
"avoid",
"awake",
22505 "aware",
"away",
"awesome",
"awful",
"awkward",
"axis",
"baby",
"bachelor",
"bacon",
"badge",
22506 "bag",
"balance",
"balcony",
"ball",
"bamboo",
"banana",
"banner",
"bar",
"barely",
"bargain",
22507 "barrel",
"base",
"basic",
"basket",
"battle",
"beach",
"bean",
"beauty",
"because",
"become",
22508 "beef",
"before",
"begin",
"behave",
"behind",
"believe",
"below",
"belt",
"bench",
"benefit",
22509 "best",
"betray",
"better",
"between",
"beyond",
"bicycle",
"bid",
"bike",
"bind",
"biology",
22510 "bird",
"birth",
"bitter",
"black",
"blade",
"blame",
"blanket",
"blast",
"bleak",
"bless",
22511 "blind",
"blood",
"blossom",
"blouse",
"blue",
"blur",
"blush",
"board",
"boat",
"body",
22512 "boil",
"bomb",
"bone",
"bonus",
"book",
"boost",
"border",
"boring",
"borrow",
"boss",
22513 "bottom",
"bounce",
"box",
"boy",
"bracket",
"brain",
"brand",
"brass",
"brave",
"bread",
22514 "breeze",
"brick",
"bridge",
"brief",
"bright",
"bring",
"brisk",
"broccoli",
"broken",
"bronze",
22515 "broom",
"brother",
"brown",
"brush",
"bubble",
"buddy",
"budget",
"buffalo",
"build",
"bulb",
22516 "bulk",
"bullet",
"bundle",
"bunker",
"burden",
"burger",
"burst",
"bus",
"business",
"busy",
22517 "butter",
"buyer",
"buzz",
"cabbage",
"cabin",
"cable",
"cactus",
"cage",
"cake",
"call",
22518 "calm",
"camera",
"camp",
"can",
"canal",
"cancel",
"candy",
"cannon",
"canoe",
"canvas",
22519 "canyon",
"capable",
"capital",
"captain",
"car",
"carbon",
"card",
"cargo",
"carpet",
"carry",
22520 "cart",
"case",
"cash",
"casino",
"castle",
"casual",
"cat",
"catalog",
"catch",
"category",
22521 "cattle",
"caught",
"cause",
"caution",
"cave",
"ceiling",
"celery",
"cement",
"census",
"century",
22522 "cereal",
"certain",
"chair",
"chalk",
"champion",
"change",
"chaos",
"chapter",
"charge",
"chase",
22523 "chat",
"cheap",
"check",
"cheese",
"chef",
"cherry",
"chest",
"chicken",
"chief",
"child",
22524 "chimney",
"choice",
"choose",
"chronic",
"chuckle",
"chunk",
"churn",
"cigar",
"cinnamon",
"circle",
22525 "citizen",
"city",
"civil",
"claim",
"clap",
"clarify",
"claw",
"clay",
"clean",
"clerk",
22526 "clever",
"click",
"client",
"cliff",
"climb",
"clinic",
"clip",
"clock",
"clog",
"close",
22527 "cloth",
"cloud",
"clown",
"club",
"clump",
"cluster",
"clutch",
"coach",
"coast",
"coconut",
22528 "code",
"coffee",
"coil",
"coin",
"collect",
"color",
"column",
"combine",
"come",
"comfort",
22529 "comic",
"common",
"company",
"concert",
"conduct",
"confirm",
"congress",
"connect",
"consider",
"control",
22530 "convince",
"cook",
"cool",
"copper",
"copy",
"coral",
"core",
"corn",
"correct",
"cost",
22531 "cotton",
"couch",
"country",
"couple",
"course",
"cousin",
"cover",
"coyote",
"crack",
"cradle",
22532 "craft",
"cram",
"crane",
"crash",
"crater",
"crawl",
"crazy",
"cream",
"credit",
"creek",
22533 "crew",
"cricket",
"crime",
"crisp",
"critic",
"crop",
"cross",
"crouch",
"crowd",
"crucial",
22534 "cruel",
"cruise",
"crumble",
"crunch",
"crush",
"cry",
"crystal",
"cube",
"culture",
"cup",
22535 "cupboard",
"curious",
"current",
"curtain",
"curve",
"cushion",
"custom",
"cute",
"cycle",
"dad",
22536 "damage",
"damp",
"dance",
"danger",
"daring",
"dash",
"daughter",
"dawn",
"day",
"deal",
22537 "debate",
"debris",
"decade",
"december",
"decide",
"decline",
"decorate",
"decrease",
"deer",
"defense",
22538 "define",
"defy",
"degree",
"delay",
"deliver",
"demand",
"demise",
"denial",
"dentist",
"deny",
22539 "depart",
"depend",
"deposit",
"depth",
"deputy",
"derive",
"describe",
"desert",
"design",
"desk",
22540 "despair",
"destroy",
"detail",
"detect",
"develop",
"device",
"devote",
"diagram",
"dial",
"diamond",
22541 "diary",
"dice",
"diesel",
"diet",
"differ",
"digital",
"dignity",
"dilemma",
"dinner",
"dinosaur",
22542 "direct",
"dirt",
"disagree",
"discover",
"disease",
"dish",
"dismiss",
"disorder",
"display",
"distance",
22543 "divert",
"divide",
"divorce",
"dizzy",
"doctor",
"document",
"dog",
"doll",
"dolphin",
"domain",
22544 "donate",
"donkey",
"donor",
"door",
"dose",
"double",
"dove",
"draft",
"dragon",
"drama",
22545 "drastic",
"draw",
"dream",
"dress",
"drift",
"drill",
"drink",
"drip",
"drive",
"drop",
22546 "drum",
"dry",
"duck",
"dumb",
"dune",
"during",
"dust",
"dutch",
"duty",
"dwarf",
22547 "dynamic",
"eager",
"eagle",
"early",
"earn",
"earth",
"easily",
"east",
"easy",
"echo",
22548 "ecology",
"economy",
"edge",
"edit",
"educate",
"effort",
"egg",
"eight",
"either",
"elbow",
22549 "elder",
"electric",
"elegant",
"element",
"elephant",
"elevator",
"elite",
"else",
"embark",
"embody",
22550 "embrace",
"emerge",
"emotion",
"employ",
"empower",
"empty",
"enable",
"enact",
"end",
"endless",
22551 "endorse",
"enemy",
"energy",
"enforce",
"engage",
"engine",
"enhance",
"enjoy",
"enlist",
"enough",
22552 "enrich",
"enroll",
"ensure",
"enter",
"entire",
"entry",
"envelope",
"episode",
"equal",
"equip",
22553 "era",
"erase",
"erode",
"erosion",
"error",
"erupt",
"escape",
"essay",
"essence",
"estate",
22554 "eternal",
"ethics",
"evidence",
"evil",
"evoke",
"evolve",
"exact",
"example",
"excess",
"exchange",
22555 "excite",
"exclude",
"excuse",
"execute",
"exercise",
"exhaust",
"exhibit",
"exile",
"exist",
"exit",
22556 "exotic",
"expand",
"expect",
"expire",
"explain",
"expose",
"express",
"extend",
"extra",
"eye",
22557 "eyebrow",
"fabric",
"face",
"faculty",
"fade",
"faint",
"faith",
"fall",
"false",
"fame",
22558 "family",
"famous",
"fan",
"fancy",
"fantasy",
"farm",
"fashion",
"fat",
"fatal",
"father",
22559 "fatigue",
"fault",
"favorite",
"feature",
"february",
"federal",
"fee",
"feed",
"feel",
"female",
22560 "fence",
"festival",
"fetch",
"fever",
"few",
"fiber",
"fiction",
"field",
"figure",
"file",
22561 "film",
"filter",
"final",
"find",
"fine",
"finger",
"finish",
"fire",
"firm",
"first",
22562 "fiscal",
"fish",
"fit",
"fitness",
"fix",
"flag",
"flame",
"flash",
"flat",
"flavor",
22563 "flee",
"flight",
"flip",
"float",
"flock",
"floor",
"flower",
"fluid",
"flush",
"fly",
22564 "foam",
"focus",
"fog",
"foil",
"fold",
"follow",
"food",
"foot",
"force",
"forest",
22565 "forget",
"fork",
"fortune",
"forum",
"forward",
"fossil",
"foster",
"found",
"fox",
"fragile",
22566 "frame",
"frequent",
"fresh",
"friend",
"fringe",
"frog",
"front",
"frost",
"frown",
"frozen",
22567 "fruit",
"fuel",
"fun",
"funny",
"furnace",
"fury",
"future",
"gadget",
"gain",
"galaxy",
22568 "gallery",
"game",
"gap",
"garage",
"garbage",
"garden",
"garlic",
"garment",
"gas",
"gasp",
22569 "gate",
"gather",
"gauge",
"gaze",
"general",
"genius",
"genre",
"gentle",
"genuine",
"gesture",
22570 "ghost",
"giant",
"gift",
"giggle",
"ginger",
"giraffe",
"girl",
"give",
"glad",
"glance",
22571 "glare",
"glass",
"glide",
"glimpse",
"globe",
"gloom",
"glory",
"glove",
"glow",
"glue",
22572 "goat",
"goddess",
"gold",
"good",
"goose",
"gorilla",
"gospel",
"gossip",
"govern",
"gown",
22573 "grab",
"grace",
"grain",
"grant",
"grape",
"grass",
"gravity",
"great",
"green",
"grid",
22574 "grief",
"grit",
"grocery",
"group",
"grow",
"grunt",
"guard",
"guess",
"guide",
"guilt",
22575 "guitar",
"gun",
"gym",
"habit",
"hair",
"half",
"hammer",
"hamster",
"hand",
"happy",
22576 "harbor",
"hard",
"harsh",
"harvest",
"hat",
"have",
"hawk",
"hazard",
"head",
"health",
22577 "heart",
"heavy",
"hedgehog",
"height",
"hello",
"helmet",
"help",
"hen",
"hero",
"hidden",
22578 "high",
"hill",
"hint",
"hip",
"hire",
"history",
"hobby",
"hockey",
"hold",
"hole",
22579 "holiday",
"hollow",
"home",
"honey",
"hood",
"hope",
"horn",
"horror",
"horse",
"hospital",
22580 "host",
"hotel",
"hour",
"hover",
"hub",
"huge",
"human",
"humble",
"humor",
"hundred",
22581 "hungry",
"hunt",
"hurdle",
"hurry",
"hurt",
"husband",
"hybrid",
"ice",
"icon",
"idea",
22582 "identify",
"idle",
"ignore",
"ill",
"illegal",
"illness",
"image",
"imitate",
"immense",
"immune",
22583 "impact",
"impose",
"improve",
"impulse",
"inch",
"include",
"income",
"increase",
"index",
"indicate",
22584 "indoor",
"industry",
"infant",
"inflict",
"inform",
"inhale",
"inherit",
"initial",
"inject",
"injury",
22585 "inmate",
"inner",
"innocent",
"input",
"inquiry",
"insane",
"insect",
"inside",
"inspire",
"install",
22586 "intact",
"interest",
"into",
"invest",
"invite",
"involve",
"iron",
"island",
"isolate",
"issue",
22587 "item",
"ivory",
"jacket",
"jaguar",
"jar",
"jazz",
"jealous",
"jeans",
"jelly",
"jewel",
22588 "job",
"join",
"joke",
"journey",
"joy",
"judge",
"juice",
"jump",
"jungle",
"junior",
22589 "junk",
"just",
"kangaroo",
"keen",
"keep",
"ketchup",
"key",
"kick",
"kid",
"kidney",
22590 "kind",
"kingdom",
"kiss",
"kit",
"kitchen",
"kite",
"kitten",
"kiwi",
"knee",
"knife",
22591 "knock",
"know",
"lab",
"label",
"labor",
"ladder",
"lady",
"lake",
"lamp",
"language",
22592 "laptop",
"large",
"later",
"latin",
"laugh",
"laundry",
"lava",
"law",
"lawn",
"lawsuit",
22593 "layer",
"lazy",
"leader",
"leaf",
"learn",
"leave",
"lecture",
"left",
"leg",
"legal",
22594 "legend",
"leisure",
"lemon",
"lend",
"length",
"lens",
"leopard",
"lesson",
"letter",
"level",
22595 "liar",
"liberty",
"library",
"license",
"life",
"lift",
"light",
"like",
"limb",
"limit",
22596 "link",
"lion",
"liquid",
"list",
"little",
"live",
"lizard",
"load",
"loan",
"lobster",
22597 "local",
"lock",
"logic",
"lonely",
"long",
"loop",
"lottery",
"loud",
"lounge",
"love",
22598 "loyal",
"lucky",
"luggage",
"lumber",
"lunar",
"lunch",
"luxury",
"lyrics",
"machine",
"mad",
22599 "magic",
"magnet",
"maid",
"mail",
"main",
"major",
"make",
"mammal",
"man",
"manage",
22600 "mandate",
"mango",
"mansion",
"manual",
"maple",
"marble",
"march",
"margin",
"marine",
"market",
22601 "marriage",
"mask",
"mass",
"master",
"match",
"material",
"math",
"matrix",
"matter",
"maximum",
22602 "maze",
"meadow",
"mean",
"measure",
"meat",
"mechanic",
"medal",
"media",
"melody",
"melt",
22603 "member",
"memory",
"mention",
"menu",
"mercy",
"merge",
"merit",
"merry",
"mesh",
"message",
22604 "metal",
"method",
"middle",
"midnight",
"milk",
"million",
"mimic",
"mind",
"minimum",
"minor",
22605 "minute",
"miracle",
"mirror",
"misery",
"miss",
"mistake",
"mix",
"mixed",
"mixture",
"mobile",
22606 "model",
"modify",
"mom",
"moment",
"monitor",
"monkey",
"monster",
"month",
"moon",
"moral",
22607 "more",
"morning",
"mosquito",
"mother",
"motion",
"motor",
"mountain",
"mouse",
"move",
"movie",
22608 "much",
"muffin",
"mule",
"multiply",
"muscle",
"museum",
"mushroom",
"music",
"must",
"mutual",
22609 "myself",
"mystery",
"myth",
"naive",
"name",
"napkin",
"narrow",
"nasty",
"nation",
"nature",
22610 "near",
"neck",
"need",
"negative",
"neglect",
"neither",
"nephew",
"nerve",
"nest",
"net",
22611 "network",
"neutral",
"never",
"news",
"next",
"nice",
"night",
"noble",
"noise",
"nominee",
22612 "noodle",
"normal",
"north",
"nose",
"notable",
"note",
"nothing",
"notice",
"novel",
"now",
22613 "nuclear",
"number",
"nurse",
"nut",
"oak",
"obey",
"object",
"oblige",
"obscure",
"observe",
22614 "obtain",
"obvious",
"occur",
"ocean",
"october",
"odor",
"off",
"offer",
"office",
"often",
22615 "oil",
"okay",
"old",
"olive",
"olympic",
"omit",
"once",
"one",
"onion",
"online",
22616 "only",
"open",
"opera",
"opinion",
"oppose",
"option",
"orange",
"orbit",
"orchard",
"order",
22617 "ordinary",
"organ",
"orient",
"original",
"orphan",
"ostrich",
"other",
"outdoor",
"outer",
"output",
22618 "outside",
"oval",
"oven",
"over",
"own",
"owner",
"oxygen",
"oyster",
"ozone",
"pact",
22619 "paddle",
"page",
"pair",
"palace",
"palm",
"panda",
"panel",
"panic",
"panther",
"paper",
22620 "parade",
"parent",
"park",
"parrot",
"party",
"pass",
"patch",
"path",
"patient",
"patrol",
22621 "pattern",
"pause",
"pave",
"payment",
"peace",
"peanut",
"pear",
"peasant",
"pelican",
"pen",
22622 "penalty",
"pencil",
"people",
"pepper",
"perfect",
"permit",
"person",
"pet",
"phone",
"photo",
22623 "phrase",
"physical",
"piano",
"picnic",
"picture",
"piece",
"pig",
"pigeon",
"pill",
"pilot",
22624 "pink",
"pioneer",
"pipe",
"pistol",
"pitch",
"pizza",
"place",
"planet",
"plastic",
"plate",
22625 "play",
"please",
"pledge",
"pluck",
"plug",
"plunge",
"poem",
"poet",
"point",
"polar",
22626 "pole",
"police",
"pond",
"pony",
"pool",
"popular",
"portion",
"position",
"possible",
"post",
22627 "potato",
"pottery",
"poverty",
"powder",
"power",
"practice",
"praise",
"predict",
"prefer",
"prepare",
22628 "present",
"pretty",
"prevent",
"price",
"pride",
"primary",
"print",
"priority",
"prison",
"private",
22629 "prize",
"problem",
"process",
"produce",
"profit",
"program",
"project",
"promote",
"proof",
"property",
22630 "prosper",
"protect",
"proud",
"provide",
"public",
"pudding",
"pull",
"pulp",
"pulse",
"pumpkin",
22631 "punch",
"pupil",
"puppy",
"purchase",
"purity",
"purpose",
"purse",
"push",
"put",
"puzzle",
22632 "pyramid",
"quality",
"quantum",
"quarter",
"question",
"quick",
"quit",
"quiz",
"quote",
"rabbit",
22633 "raccoon",
"race",
"rack",
"radar",
"radio",
"rail",
"rain",
"raise",
"rally",
"ramp",
22634 "ranch",
"random",
"range",
"rapid",
"rare",
"rate",
"rather",
"raven",
"raw",
"razor",
22635 "ready",
"real",
"reason",
"rebel",
"rebuild",
"recall",
"receive",
"recipe",
"record",
"recycle",
22636 "reduce",
"reflect",
"reform",
"refuse",
"region",
"regret",
"regular",
"reject",
"relax",
"release",
22637 "relief",
"rely",
"remain",
"remember",
"remind",
"remove",
"render",
"renew",
"rent",
"reopen",
22638 "repair",
"repeat",
"replace",
"report",
"require",
"rescue",
"resemble",
"resist",
"resource",
"response",
22639 "result",
"retire",
"retreat",
"return",
"reunion",
"reveal",
"review",
"reward",
"rhythm",
"rib",
22640 "ribbon",
"rice",
"rich",
"ride",
"ridge",
"rifle",
"right",
"rigid",
"ring",
"riot",
22641 "ripple",
"risk",
"ritual",
"rival",
"river",
"road",
"roast",
"robot",
"robust",
"rocket",
22642 "romance",
"roof",
"rookie",
"room",
"rose",
"rotate",
"rough",
"round",
"route",
"royal",
22643 "rubber",
"rude",
"rug",
"rule",
"run",
"runway",
"rural",
"sad",
"saddle",
"sadness",
22644 "safe",
"sail",
"salad",
"salmon",
"salon",
"salt",
"salute",
"same",
"sample",
"sand",
22645 "satisfy",
"satoshi",
"sauce",
"sausage",
"save",
"say",
"scale",
"scan",
"scare",
"scatter",
22646 "scene",
"scheme",
"school",
"science",
"scissors",
"scorpion",
"scout",
"scrap",
"screen",
"script",
22647 "scrub",
"sea",
"search",
"season",
"seat",
"second",
"secret",
"section",
"security",
"seed",
22648 "seek",
"segment",
"select",
"sell",
"seminar",
"senior",
"sense",
"sentence",
"series",
"service",
22649 "session",
"settle",
"setup",
"seven",
"shadow",
"shaft",
"shallow",
"share",
"shed",
"shell",
22650 "sheriff",
"shield",
"shift",
"shine",
"ship",
"shiver",
"shock",
"shoe",
"shoot",
"shop",
22651 "short",
"shoulder",
"shove",
"shrimp",
"shrug",
"shuffle",
"shy",
"sibling",
"sick",
"side",
22652 "siege",
"sight",
"sign",
"silent",
"silk",
"silly",
"silver",
"similar",
"simple",
"since",
22653 "sing",
"siren",
"sister",
"situate",
"six",
"size",
"skate",
"sketch",
"ski",
"skill",
22654 "skin",
"skirt",
"skull",
"slab",
"slam",
"sleep",
"slender",
"slice",
"slide",
"slight",
22655 "slim",
"slogan",
"slot",
"slow",
"slush",
"small",
"smart",
"smile",
"smoke",
"smooth",
22656 "snack",
"snake",
"snap",
"sniff",
"snow",
"soap",
"soccer",
"social",
"sock",
"soda",
22657 "soft",
"solar",
"soldier",
"solid",
"solution",
"solve",
"someone",
"song",
"soon",
"sorry",
22658 "sort",
"soul",
"sound",
"soup",
"source",
"south",
"space",
"spare",
"spatial",
"spawn",
22659 "speak",
"special",
"speed",
"spell",
"spend",
"sphere",
"spice",
"spider",
"spike",
"spin",
22660 "spirit",
"split",
"spoil",
"sponsor",
"spoon",
"sport",
"spot",
"spray",
"spread",
"spring",
22661 "spy",
"square",
"squeeze",
"squirrel",
"stable",
"stadium",
"staff",
"stage",
"stairs",
"stamp",
22662 "stand",
"start",
"state",
"stay",
"steak",
"steel",
"stem",
"step",
"stereo",
"stick",
22663 "still",
"sting",
"stock",
"stomach",
"stone",
"stool",
"story",
"stove",
"strategy",
"street",
22664 "strike",
"strong",
"struggle",
"student",
"stuff",
"stumble",
"style",
"subject",
"submit",
"subway",
22665 "success",
"such",
"sudden",
"suffer",
"sugar",
"suggest",
"suit",
"summer",
"sun",
"sunny",
22666 "sunset",
"super",
"supply",
"supreme",
"sure",
"surface",
"surge",
"surprise",
"surround",
"survey",
22667 "suspect",
"sustain",
"swallow",
"swamp",
"swap",
"swarm",
"swear",
"sweet",
"swift",
"swim",
22668 "swing",
"switch",
"sword",
"symbol",
"symptom",
"syrup",
"system",
"table",
"tackle",
"tag",
22669 "tail",
"talent",
"talk",
"tank",
"tape",
"target",
"task",
"taste",
"tattoo",
"taxi",
22670 "teach",
"team",
"tell",
"ten",
"tenant",
"tennis",
"tent",
"term",
"test",
"text",
22671 "thank",
"that",
"theme",
"then",
"theory",
"there",
"they",
"thing",
"this",
"thought",
22672 "three",
"thrive",
"throw",
"thumb",
"thunder",
"ticket",
"tide",
"tiger",
"tilt",
"timber",
22673 "time",
"tiny",
"tip",
"tired",
"tissue",
"title",
"toast",
"tobacco",
"today",
"toddler",
22674 "toe",
"together",
"toilet",
"token",
"tomato",
"tomorrow",
"tone",
"tongue",
"tonight",
"tool",
22675 "tooth",
"top",
"topic",
"topple",
"torch",
"tornado",
"tortoise",
"toss",
"total",
"tourist",
22676 "toward",
"tower",
"town",
"toy",
"track",
"trade",
"traffic",
"tragic",
"train",
"transfer",
22677 "trap",
"trash",
"travel",
"tray",
"treat",
"tree",
"trend",
"trial",
"tribe",
"trick",
22678 "trigger",
"trim",
"trip",
"trophy",
"trouble",
"truck",
"true",
"truly",
"trumpet",
"trust",
22679 "truth",
"try",
"tube",
"tuition",
"tumble",
"tuna",
"tunnel",
"turkey",
"turn",
"turtle",
22680 "twelve",
"twenty",
"twice",
"twin",
"twist",
"two",
"type",
"typical",
"ugly",
"umbrella",
22681 "unable",
"unaware",
"uncle",
"uncover",
"under",
"undo",
"unfair",
"unfold",
"unhappy",
"uniform",
22682 "unique",
"unit",
"universe",
"unknown",
"unlock",
"until",
"unusual",
"unveil",
"update",
"upgrade",
22683 "uphold",
"upon",
"upper",
"upset",
"urban",
"urge",
"usage",
"use",
"used",
"useful",
22684 "useless",
"usual",
"utility",
"vacant",
"vacuum",
"vague",
"valid",
"valley",
"valve",
"van",
22685 "vanish",
"vapor",
"various",
"vast",
"vault",
"vehicle",
"velvet",
"vendor",
"venture",
"venue",
22686 "verb",
"verify",
"version",
"very",
"vessel",
"veteran",
"viable",
"vibrant",
"vicious",
"victory",
22687 "video",
"view",
"village",
"vintage",
"violin",
"virtual",
"virus",
"visa",
"visit",
"visual",
22688 "vital",
"vivid",
"vocal",
"voice",
"void",
"volcano",
"volume",
"vote",
"voyage",
"wage",
22689 "wagon",
"wait",
"walk",
"wall",
"walnut",
"want",
"warfare",
"warm",
"warrior",
"wash",
22690 "wasp",
"waste",
"water",
"wave",
"way",
"wealth",
"weapon",
"wear",
"weasel",
"weather",
22691 "web",
"wedding",
"weekend",
"weird",
"welcome",
"west",
"wet",
"whale",
"what",
"wheat",
22692 "wheel",
"when",
"where",
"whip",
"whisper",
"wide",
"width",
"wife",
"wild",
"will",
22693 "win",
"window",
"wine",
"wing",
"wink",
"winner",
"winter",
"wire",
"wisdom",
"wise",
22694 "wish",
"witness",
"wolf",
"woman",
"wonder",
"wood",
"wool",
"word",
"work",
"world",
22695 "worry",
"worth",
"wrap",
"wreck",
"wrestle",
"wrist",
"write",
"wrong",
"yard",
"year",
22696 "yellow",
"you",
"young",
"youth",
"zebra",
"zero",
"zone",
"zoo"]
22700 <!--<script src="/js/index.js"></script>-->
22704 var mnemonic = new Mnemonic("english");
22705 var bip32RootKey = null;
22706 var bip32ExtendedKey = null;
22707 var network = Bitcoin.networks.bitcoin;
22708 var addressRowTemplate = $("#address-row-template");
22710 var phraseChangeTimeoutEvent = null;
22713 DOM.phrase = $(".phrase");
22714 DOM.passphrase = $(".passphrase");
22715 DOM.generate = $(".generate");
22716 DOM.rootKey = $(".root-key");
22717 DOM.extendedPrivKey = $(".extended-priv-key");
22718 DOM.extendedPubKey = $(".extended-pub-key");
22719 DOM.bip32path = $("#bip32-path");
22720 DOM.bip44path = $("#bip44-path");
22721 DOM.bip44purpose = $("#bip44 .purpose");
22722 DOM.bip44coin = $("#bip44 .coin");
22723 DOM.bip44account = $("#bip44 .account");
22724 DOM.bip44change = $("#bip44 .change");
22725 DOM.strength = $(".strength");
22726 DOM.addresses = $(".addresses");
22727 DOM.rowsToAdd = $(".rows-to-add");
22728 DOM.more = $(".more");
22729 DOM.feedback = $(".feedback");
22730 DOM.tab = $(".derivation-type a");
22731 DOM.indexToggle = $(".index-toggle");
22732 DOM.addressToggle = $(".address-toggle");
22733 DOM.privateKeyToggle = $(".private-key-toggle");
22735 var derivationPath = DOM.bip44path.val();
22739 DOM.phrase.on("input", delayedPhraseChanged);
22740 DOM.passphrase.on("input", delayedPhraseChanged);
22741 DOM.generate.on("click", generateClicked);
22742 DOM.more.on("click", showMore);
22743 DOM.bip32path.on("input", bip32Changed);
22744 DOM.bip44purpose.on("input", bip44Changed);
22745 DOM.bip44coin.on("input", bip44Changed);
22746 DOM.bip44account.on("input", bip44Changed);
22747 DOM.bip44change.on("input", bip44Changed);
22748 DOM.tab.on("click", tabClicked);
22749 DOM.indexToggle.on("click", toggleIndexes);
22750 DOM.addressToggle.on("click", toggleAddresses);
22751 DOM.privateKeyToggle.on("click", togglePrivateKeys);
22754 hideValidationError();
22759 function delayedPhraseChanged() {
22760 hideValidationError();
22762 if (phraseChangeTimeoutEvent != null) {
22763 clearTimeout(phraseChangeTimeoutEvent);
22765 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
22768 function phraseChanged() {
22770 hideValidationError();
22771 // Get the mnemonic phrase
22772 var phrase = DOM.phrase.val();
22773 var passphrase = DOM.passphrase.val();
22774 var errorText = findPhraseErrors(phrase);
22776 showValidationError(errorText);
22779 // Get the derivation path
22780 var errorText = findDerivationPathErrors();
22782 showValidationError(errorText);
22785 // Calculate and display
22786 calcBip32Seed(phrase, passphrase, derivationPath);
22787 displayBip32Info();
22791 function generateClicked() {
22794 setTimeout(function() {
22795 var phrase = generateRandomPhrase();
22803 function tabClicked(e) {
22804 var activePath = $(e.target.getAttribute("href") + " .path");
22805 derivationPath = activePath.val();
22806 derivationChanged();
22809 function derivationChanged() {
22810 delayedPhraseChanged();
22813 function bip32Changed() {
22814 derivationPath = DOM.bip32path.val();
22815 derivationChanged();
22818 function bip44Changed() {
22819 setBip44DerivationPath();
22820 derivationPath = DOM.bip44path.val();
22821 derivationChanged();
22824 function toggleIndexes() {
22825 $("td.index span").toggleClass("invisible");
22828 function toggleAddresses() {
22829 $("td.address span").toggleClass("invisible");
22832 function togglePrivateKeys() {
22833 $("td.privkey span").toggleClass("invisible");
22838 function generateRandomPhrase() {
22839 if (!hasStrongRandom()) {
22840 var errorText = "This browser does not support strong randomness";
22841 showValidationError(errorText);
22844 var numWords = parseInt(DOM.strength.val());
22845 // Check strength is an integer
22846 if (isNaN(numWords)) {
22847 DOM.strength.val("
12");
22850 // Check strength is a multiple of
32, if not round it down
22851 if (numWords %
3 !=
0) {
22852 numWords = Math.floor(numWords /
3) *
3;
22853 DOM.strength.val(numWords);
22855 // Check strength is at least
32
22856 if (numWords ==
0) {
22858 DOM.strength.val(numWords);
22860 var strength = numWords /
3 *
32;
22861 var words = mnemonic.generate(strength);
22862 DOM.phrase.val(words);
22866 function calcBip32Seed(phrase, passphrase, path) {
22867 var seed = mnemonic.toSeed(phrase, passphrase);
22868 bip32RootKey = Bitcoin.HDNode.fromSeedHex(seed, network);
22869 bip32ExtendedKey = bip32RootKey;
22870 // Derive the key from the path
22871 var pathBits = path.split("/");
22872 for (var i=
0; i
<pathBits.length; i++) {
22873 var bit = pathBits[i];
22874 var index = parseInt(bit);
22875 if (isNaN(index)) {
22878 var hardened = bit[bit.length-
1] ==
"'";
22880 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
22883 bip32ExtendedKey = bip32ExtendedKey.derive(index);
22888 function showValidationError(errorText) {
22894 function hideValidationError() {
22900 function findPhraseErrors(phrase) {
22901 // TODO make this right
22902 // Preprocess the words
22903 var parts = phrase.split(
" ");
22905 for (var i=
0; i
<parts.length; i++) {
22906 var part = parts[i];
22907 if (part.length
> 0) {
22908 // TODO check that lowercasing is always valid to do
22909 proper.push(part.toLowerCase());
22912 // TODO some levenstein on the words
22913 var properPhrase = proper.join(' ');
22914 // Check the words are valid
22915 var isValid = mnemonic.check(properPhrase);
22917 return
"Invalid mnemonic";
22922 function findDerivationPathErrors(path) {
22927 function displayBip32Info() {
22929 var rootKey = bip32RootKey.toBase58();
22930 DOM.rootKey.val(rootKey);
22931 var extendedPrivKey = bip32ExtendedKey.toBase58();
22932 DOM.extendedPrivKey.val(extendedPrivKey);
22933 var extendedPubKey = bip32ExtendedKey.toBase58(false);
22934 DOM.extendedPubKey.val(extendedPubKey);
22935 // Display the addresses and privkeys
22936 clearAddressesList();
22937 displayAddresses(
0,
20);
22940 function displayAddresses(start, total) {
22941 for (var i=
0; i
<total; i++) {
22942 var index = i+ start;
22943 var key = bip32ExtendedKey.derive(index);
22944 var address = key.getAddress().toString();
22945 var privkey = key.privKey.toWIF();
22946 addAddressToList(index, address, privkey);
22950 function showMore() {
22951 var start = DOM.addresses.children().length;
22952 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
22953 if (isNaN(rowsToAdd)) {
22955 DOM.rowsToAdd.val(
"20");
22957 if (rowsToAdd
> 200) {
22958 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
22959 msg +=
"Do you want to continue?";
22960 if (!confirm(msg)) {
22965 setTimeout(function() {
22966 displayAddresses(start, rowsToAdd);
22971 function clearDisplay() {
22972 clearAddressesList();
22974 hideValidationError();
22977 function clearAddressesList() {
22978 DOM.addresses.empty();
22981 function clearKey() {
22982 DOM.rootKey.val(
"");
22983 DOM.extendedPrivKey.val(
"");
22984 DOM.extendedPubKey.val(
"");
22987 function addAddressToList(index, address, privkey) {
22988 var row = $(addressRowTemplate.html());
22989 row.find(
".index span").text(index);
22990 row.find(
".address span").text(address);
22991 row.find(
".privkey span").text(privkey);
22992 DOM.addresses.append(row);
22995 function hasStrongRandom() {
22996 return 'crypto' in window && window['crypto'] !== null;
22999 function disableForms() {
23000 $(
"form").on(
"submit", function(e) {
23001 e.preventDefault();
23005 function setBip44DerivationPath() {
23006 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
23007 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
23008 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
23009 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
23011 path += purpose +
"'/";
23012 path += coin +
"'/";
23013 path += account +
"'/";
23015 DOM.bip44path.val(path);
23018 function parseIntNoNaN(val, defaultVal) {
23019 var v = parseInt(val);
23026 function showPending() {
23028 .text(
"Calculating...")
23032 function hidePending() {