##// END OF EJS Templates
Version probada con envio de json, nueva plantilla corregida pero error en conversion de ramp
gonzalesluisfrancisco -
r336:dcfb18d9813e
parent child
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,5
1 /*!
2 * Datetimepicker for Bootstrap 3
3 * version : 4.17.47
4 * https://github.com/Eonasdan/bootstrap-datetimepicker/
5 */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:before,.bootstrap-datetimepicker-widget.dropdown-menu:after{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid white;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid white;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:bold;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action="today"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.old,.bootstrap-datetimepicker-widget table td.new{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#337ab7;border-top-color:rgba(0,0,0,0.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget.wider{width:21em}.bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em !important}.input-group.date .input-group-addon{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0} No newline at end of file
@@ -0,0 +1,5
1 /*!
2 * Datetimepicker for Bootstrap v3
3 * https://github.com/Eonasdan/bootstrap-datetimepicker/
4 */
5 .bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:99999!important;border-radius:4px}.bootstrap-datetimepicker-widget.timepicker-sbs{width:600px}.bootstrap-datetimepicker-widget.bottom:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:7px}.bootstrap-datetimepicker-widget.bottom:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:8px}.bootstrap-datetimepicker-widget.top:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.top:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;position:absolute;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget .dow{width:14.2857%}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:100%;font-weight:bold;font-size:1.2em}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;width:20px;height:20px;border-radius:4px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#999}.bootstrap-datetimepicker-widget td.today{position:relative}.bootstrap-datetimepicker-widget td.today:before{content:'';display:inline-block;border-left:7px solid transparent;border-bottom:7px solid #428bca;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:block;width:47px;height:54px;line-height:54px;float:left;margin:2px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td span.old{color:#999}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget th.switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-group.date .input-group-addon span{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px}.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody>tr>td{padding:0!important} No newline at end of file
@@ -0,0 +1,11
1 @import url('fonts.googleapi.css');/*!
2 * bootswatch v3.3.5
3 * Homepage: http://bootswatch.com
4 * Copyright 2012-2015 Thomas Park
5 * Licensed under MIT
6 * Based on Bootstrap
7 *//*!
8 * Bootstrap v3.3.5 (http://getbootstrap.com)
9 * Copyright 2011-2015 Twitter, Inc.
10 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
11 *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,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-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding: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-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:0 0!important;color:#000!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{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.woff2) format('woff2'),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-eur:before,.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"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#222;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#008cba;text-decoration:none}a:focus,a:hover{color:#008cba;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}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:0}.img-thumbnail{padding:4px;line-height:1.4;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:21px;margin-bottom:21px;border:0;border-top:1px solid #ddd}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;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}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:300;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#999}.h1,.h2,.h3,h1,h2,h3{margin-top:21px;margin-bottom:10.5px}.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,.h5,.h6,h4,h5,h6{margin-top:10.5px;margin-bottom:10.5px}.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:39px}.h2,h2{font-size:32px}.h3,h3{font-size:26px}.h4,h4{font-size:19px}.h5,h5{font-size:15px}.h6,h6{font-size:13px}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:17px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:22.5px}}.small,small{font-size:80%}.mark,mark{background-color:#fcf8e3;padding:.2em}.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:#999}.text-primary{color:#008cba}a.text-primary:focus,a.text-primary:hover{color:#006687}.text-success{color:#43ac6a}a.text-success:focus,a.text-success:hover{color:#358753}.text-info{color:#5bc0de}a.text-info:focus,a.text-info:hover{color:#31b0d5}.text-warning{color:#e99002}a.text-warning:focus,a.text-warning:hover{color:#b67102}.text-danger{color:#f04124}a.text-danger:focus,a.text-danger:hover{color:#d32a0e}.bg-primary{color:#fff;background-color:#008cba}a.bg-primary:focus,a.bg-primary:hover{background-color:#006687}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9.5px;margin:42px 0 21px;border-bottom:1px solid #ddd}ol,ul{margin-top:0;margin-bottom:10.5px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:21px}dd,dt{line-height:1.4}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10.5px 21px;margin:0 0 21px;font-size:18.75px;border-left:5px solid #ddd}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.4;color:#6f6f6f}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #ddd;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:21px;font-style:normal;line-height:1.4}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:0}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:0;-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%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:1.4;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:0}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{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{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-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{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-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{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-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{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}caption{padding-top:8px;padding-bottom:8px;color:#999;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:21px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.4;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>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15.75px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;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=checkbox],input[type=radio]{margin:4px 0 0;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:9px;font-size:15px;line-height:1.4;color:#6f6f6f}.form-control{display:block;width:100%;height:39px;padding:8px 12px;font-size:15px;line-height:1.4;color:#6f6f6f;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:0;-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:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:39px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:36px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:60px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:21px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{padding-top:9px;padding-bottom:9px;margin-bottom:0;min-height:36px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:36px;padding:8px 12px;font-size:12px;line-height:1.5;border-radius:0}select.input-sm{height:36px;line-height:36px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:36px;padding:8px 12px;font-size:12px;line-height:1.5;border-radius:0}.form-group-sm select.form-control{height:36px;line-height:36px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:36px;min-height:33px;padding:9px 12px;font-size:12px;line-height:1.5}.input-lg{height:60px;padding:16px 20px;font-size:19px;line-height:1.3333333;border-radius:0}select.input-lg{height:60px;line-height:60px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:60px;padding:16px 20px;font-size:19px;line-height:1.3333333;border-radius:0}.form-group-lg select.form-control{height:60px;line-height:60px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:60px;min-height:40px;padding:17px 20px;font-size:19px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:48.75px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:39px;height:39px;line-height:39px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:60px;height:60px;line-height:60px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:36px;height:36px;line-height:36px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#43ac6a}.has-success .form-control{border-color:#43ac6a;-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:#358753;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #85d0a1;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #85d0a1}.has-success .input-group-addon{color:#43ac6a;border-color:#43ac6a;background-color:#dff0d8}.has-success .form-control-feedback{color:#43ac6a}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#e99002}.has-warning .form-control{border-color:#e99002;-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:#b67102;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #febc53;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #febc53}.has-warning .input-group-addon{color:#e99002;border-color:#e99002;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#e99002}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#f04124}.has-error .form-control{border-color:#f04124;-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:#d32a0e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f79483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f79483}.has-error .input-group-addon{color:#f04124;border-color:#f04124;background-color:#f2dede}.has-error .form-control-feedback{color:#f04124}.has-feedback label~.form-control-feedback{top:26px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#626262}@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 .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:9px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:30px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:9px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:22.3333328px;font-size:19px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:9px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:8px 12px;font-size:15px;line-height:1.4;border-radius:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-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{cursor:not-allowed;opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#e7e7e7;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#cecece;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#cecece;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#cecece;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#bcbcbc;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e7e7e7;border-color:#ccc}.btn-default .badge{color:#e7e7e7;background-color:#333}.btn-primary{color:#fff;background-color:#008cba;border-color:#0079a1}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#006687;border-color:#001921}.btn-primary:hover{color:#fff;background-color:#006687;border-color:#004b63}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#006687;border-color:#004b63}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#004b63;border-color:#001921}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#008cba;border-color:#0079a1}.btn-primary .badge{color:#008cba;background-color:#fff}.btn-success{color:#fff;background-color:#43ac6a;border-color:#3c9a5f}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#358753;border-color:#183e26}.btn-success:hover{color:#fff;background-color:#358753;border-color:#2b6e44}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#358753;border-color:#2b6e44}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#2b6e44;border-color:#183e26}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#43ac6a;border-color:#3c9a5f}.btn-success .badge{color:#43ac6a;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#e99002;border-color:#d08002}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#b67102;border-color:#513201}.btn-warning:hover{color:#fff;background-color:#b67102;border-color:#935b01}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#b67102;border-color:#935b01}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#935b01;border-color:#513201}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#e99002;border-color:#d08002}.btn-warning .badge{color:#e99002;background-color:#fff}.btn-danger{color:#fff;background-color:#f04124;border-color:#ea2f10}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#d32a0e;border-color:#731708}.btn-danger:hover{color:#fff;background-color:#d32a0e;border-color:#b1240c}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#d32a0e;border-color:#b1240c}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#b1240c;border-color:#731708}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#f04124;border-color:#ea2f10}.btn-danger .badge{color:#f04124;background-color:#fff}.btn-link{color:#008cba;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#008cba;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:16px 20px;font-size:19px;line-height:1.3333333;border-radius:0}.btn-group-sm>.btn,.btn-sm{padding:8px 12px;font-size:12px;line-height:1.5;border-radius:0}.btn-group-xs>.btn,.btn-xs{padding:4px 6px;font-size:12px;line-height:1.5;border-radius:0}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].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-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{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;list-style:none;font-size:15px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:rgba(0,0,0,.2)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.4;color:#555;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#eee}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#008cba}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#999}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.4;color:#999;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.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,.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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:0;border-top-left-radius:0}.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-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;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=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right: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:60px;padding:16px 20px;font-size:19px;line-height:1.3333333;border-radius:0}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:60px;line-height:60px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.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:36px;padding:8px 12px;font-size:12px;line-height:1.5;border-radius:0}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:36px;line-height:36px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn: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:8px 12px;font-size:15px;font-weight:400;line-height:1;color:#6f6f6f;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:0}.input-group-addon.input-sm{padding:8px 12px;font-size:12px;border-radius:0}.input-group-addon.input-lg{padding:16px 20px;font-size:19px;border-radius:0}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{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-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-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:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-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:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{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{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#008cba}.nav .nav-divider{height:1px;margin:9.5px 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.4;border:1px solid transparent;border-radius:0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#6f6f6f;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.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:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#008cba}.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{text-align:center;margin-bottom:5px}.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:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:54px;margin-bottom:21px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:0}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;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);-webkit-overflow-scrolling:touch}.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-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{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-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{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;padding:15px 15px;font-size:19px;line-height:21px;height:54px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:5.5px;margin-bottom:5.5px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:0}.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:6px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:21px}@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 .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:21px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:18px;padding-bottom:16px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 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);margin-top:3px;margin-bottom:3px}@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 .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{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}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:3px;margin-bottom:3px}.navbar-btn.btn-sm{margin-top:4.5px;margin-bottom:4.5px}.navbar-btn.btn-xs{margin-top:11.5px;margin-bottom:11.5px}.navbar-text{margin-top:12px;margin-bottom:12px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#333;border-color:#222}.navbar-default .navbar-brand{color:#fff}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-default .navbar-text{color:#fff}.navbar-default .navbar-nav>li>a{color:#fff}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#fff;background-color:#272727}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#fff;background-color:#272727}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:transparent}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:transparent}.navbar-default .navbar-toggle .icon-bar{background-color:#fff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#222}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#272727;color:#fff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#272727}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#272727}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#fff}.navbar-default .navbar-link:hover{color:#fff}.navbar-default .btn-link{color:#fff}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#fff}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#008cba;border-color:#006687}.navbar-inverse .navbar-brand{color:#fff}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .navbar-nav>li>a{color:#fff}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:#006687}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#006687}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:transparent}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:transparent}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#007196}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#006687;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#006687}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#006687}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#006687}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#006687}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#fff}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:21px;list-style:none;background-color:#f5f5f5;border-radius:0}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#999}.breadcrumb>.active{color:#333}.pagination{display:inline-block;padding-left:0;margin:21px 0;border-radius:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:8px 12px;line-height:1.4;text-decoration:none;color:#008cba;background-color:transparent;border:1px solid transparent;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#008cba;background-color:#eee;border-color:transparent}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#008cba;border-color:transparent;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#999;background-color:#fff;border-color:transparent;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:16px 20px;font-size:19px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:0;border-top-left-radius:0}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pagination-sm>li>a,.pagination-sm>li>span{padding:8px 12px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:0;border-top-left-radius:0}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pager{padding-left:0;margin:21px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:transparent;border:1px solid transparent;border-radius:3px}.pager li>a:focus,.pager li>a:hover{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:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#999;background-color:transparent;cursor:not-allowed}.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:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:focus,.label-default[href]:hover{background-color:grey}.label-primary{background-color:#008cba}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#006687}.label-success{background-color:#43ac6a}.label-success[href]:focus,.label-success[href]:hover{background-color:#358753}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#e99002}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#b67102}.label-danger{background-color:#f04124}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#d32a0e}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#008cba;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#008cba;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#fafafa}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:23px;font-weight:200}.jumbotron>hr{border-top-color:#e1e1e1}.container .jumbotron,.container-fluid .jumbotron{border-radius:0}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:68px}}.thumbnail{display:block;padding:4px;margin-bottom:21px;line-height:1.4;background-color:#fff;border:1px solid #ddd;border-radius:0;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-left:auto;margin-right:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#008cba}.thumbnail .caption{padding:9px;color:#222}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:0}.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{background-color:#43ac6a;border-color:#3c9a5f;color:#fff}.alert-success hr{border-top-color:#358753}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#5bc0de;border-color:#3db5d8;color:#fff}.alert-info hr{border-top-color:#2aabd2}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#e99002;border-color:#d08002;color:#fff}.alert-warning hr{border-top-color:#b67102}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#f04124;border-color:#ea2f10;color:#fff}.alert-danger hr{border-top-color:#d32a0e}.alert-danger .alert-link{color:#e6e6e6}@-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{overflow:hidden;height:21px;margin-bottom:21px;background-color:#f5f5f5;border-radius:0;-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:21px;color:#fff;text-align:center;background-color:#008cba;-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-bar-striped,.progress-striped .progress-bar{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-bar.active,.progress.active .progress-bar{-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-success{background-color:#43ac6a}.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:#e99002}.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:#f04124}.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{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.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-right-radius:0;border-top-left-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#999;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#999}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#008cba;border-color:#008cba}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#87e1ff}.list-group-item-success{color:#43ac6a;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#43ac6a}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#43ac6a;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#43ac6a;border-color:#43ac6a}.list-group-item-info{color:#5bc0de;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#5bc0de}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#5bc0de;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.list-group-item-warning{color:#e99002;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#e99002}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#e99002;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#e99002;border-color:#e99002}.list-group-item-danger{color:#f04124;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#f04124}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#f04124;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#f04124;border-color:#f04124}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:21px;background-color:#fff;border:1px solid transparent;border-radius:0;-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-right-radius:-1;border-top-left-radius:-1}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:17px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1;border-top-left-radius:-1}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-right-radius:-1;border-top-left-radius:-1}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:-1;border-top-right-radius:-1}.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table-responsive:first-child>.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 th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:-1}.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table-responsive:first-child>.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 th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:-1}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:-1;border-bottom-right-radius:-1}.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table-responsive:last-child>.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 th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1}.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table-responsive:last-child>.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 th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:21px}.panel-group .panel{margin-bottom:0;border-radius:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.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:#008cba}.panel-primary>.panel-heading{color:#fff;background-color:#008cba;border-color:#008cba}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#008cba}.panel-primary>.panel-heading .badge{color:#008cba;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#008cba}.panel-success{border-color:#3c9a5f}.panel-success>.panel-heading{color:#fff;background-color:#43ac6a;border-color:#3c9a5f}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3c9a5f}.panel-success>.panel-heading .badge{color:#43ac6a;background-color:#fff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3c9a5f}.panel-info{border-color:#3db5d8}.panel-info>.panel-heading{color:#fff;background-color:#5bc0de;border-color:#3db5d8}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3db5d8}.panel-info>.panel-heading .badge{color:#5bc0de;background-color:#fff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3db5d8}.panel-warning{border-color:#d08002}.panel-warning>.panel-heading{color:#fff;background-color:#e99002;border-color:#d08002}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d08002}.panel-warning>.panel-heading .badge{color:#e99002;background-color:#fff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d08002}.panel-danger{border-color:#ea2f10}.panel-danger>.panel-heading{color:#fff;background-color:#f04124;border-color:#ea2f10}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ea2f10}.panel-danger>.panel-heading .badge{color:#f04124;background-color:#fff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ea2f10}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fafafa;border:1px solid #e8e8e8;border-radius:0;-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:0}.well-sm{padding:9px;border-radius:0}.close{float:right;font-size:22.5px;font-weight:700;line-height:1;color:#fff;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#fff;text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(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;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.in{opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.4px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.4}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.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-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#333;border-radius:0}.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:#333}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#333}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#333}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:15px;background-color:#333;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #333;border:1px solid transparent;border-radius:0;-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{margin:0;padding:8px 14px;font-size:15px;background-color:#333;border-bottom:1px solid #262626;border-radius:-1 -1 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{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#000;border-top-color:rgba(0,0,0,.05);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#333}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#000;border-right-color:rgba(0,0,0,.05)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#333}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#000;border-bottom-color:rgba(0,0,0,.05);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#333}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#000;border-left-color:rgba(0,0,0,.05)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#333;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.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;left:0;bottom:0;width:15%;opacity:.5;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.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%);background-repeat:repeat-x}.carousel-control.right{left:auto;right:0;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%);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;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%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;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-next,.carousel-control .icon-prev{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{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right: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}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.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!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.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!important}tr.visible-md{display:table-row!important}td.visible-md,th.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!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.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!important}tr.visible-print{display:table-row!important}td.visible-print,th.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}}.navbar{border:none;font-size:13px;font-weight:300}.navbar .navbar-toggle:hover .icon-bar{background-color:#b3b3b3}.navbar-collapse{border-top-color:rgba(0,0,0,.2);-webkit-box-shadow:none;box-shadow:none}.navbar .btn{padding-top:6px;padding-bottom:6px}.navbar-form{margin-top:7px;margin-bottom:5px}.navbar-form .form-control{height:auto;padding:4px 6px}.navbar .dropdown-menu{border:none}.navbar .dropdown-menu>li>a,.navbar .dropdown-menu>li>a:focus{background-color:transparent;font-size:13px;font-weight:300}.navbar .dropdown-header{color:rgba(255,255,255,.5)}.navbar-default .dropdown-menu{background-color:#333}.navbar-default .dropdown-menu>li>a,.navbar-default .dropdown-menu>li>a:focus{color:#fff}.navbar-default .dropdown-menu>.active>a,.navbar-default .dropdown-menu>.active>a:hover,.navbar-default .dropdown-menu>li>a:hover{background-color:#272727}.navbar-inverse .dropdown-menu{background-color:#008cba}.navbar-inverse .dropdown-menu>li>a,.navbar-inverse .dropdown-menu>li>a:focus{color:#fff}.navbar-inverse .dropdown-menu>.active>a,.navbar-inverse .dropdown-menu>.active>a:hover,.navbar-inverse .dropdown-menu>li>a:hover{background-color:#006687}.btn{padding:8px 12px}.btn-lg{padding:16px 20px}.btn-sm{padding:8px 12px}.btn-xs{padding:4px 6px}.btn-group .btn~.dropdown-toggle{padding-left:16px;padding-right:16px}.btn-group .dropdown-menu{border-top-width:0}.btn-group.dropup .dropdown-menu{border-top-width:1px;border-bottom-width:0;margin-bottom:0}.btn-group .dropdown-toggle.btn-default~.dropdown-menu{background-color:#e7e7e7;border-color:#ccc}.btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a{color:#333}.btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a:hover{background-color:#d3d3d3}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu{background-color:#008cba;border-color:#0079a1}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a{color:#fff}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a:hover{background-color:#006d91}.btn-group .dropdown-toggle.btn-success~.dropdown-menu{background-color:#43ac6a;border-color:#3c9a5f}.btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a{color:#fff}.btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a:hover{background-color:#388f58}.btn-group .dropdown-toggle.btn-info~.dropdown-menu{background-color:#5bc0de;border-color:#46b8da}.btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a{color:#fff}.btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a:hover{background-color:#39b3d7}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu{background-color:#e99002;border-color:#d08002}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a{color:#fff}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a:hover{background-color:#c17702}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu{background-color:#f04124;border-color:#ea2f10}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a{color:#fff}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a:hover{background-color:#dc2c0f}.lead{color:#6f6f6f}cite{font-style:italic}blockquote{border-left-width:1px;color:#6f6f6f}blockquote.pull-right{border-right-width:1px}blockquote small{font-size:12px;font-weight:300}table{font-size:12px}.checkbox,.control-label,.help-block,.radio,label{font-size:12px;font-weight:400}input[type=checkbox],input[type=radio]{margin-top:1px}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:transparent}.nav-tabs>li>a{background-color:#e7e7e7;color:#222}.nav-tabs .caret{border-top-color:#222;border-bottom-color:#222}.nav-pills{font-weight:300}.breadcrumb{border:1px solid #ddd;border-radius:3px;font-size:10px;font-weight:300;text-transform:uppercase}.pagination{font-size:12px;font-weight:300;color:#999}.pagination>li>a,.pagination>li>span{margin-left:4px;color:#999}.pagination>.active>a,.pagination>.active>span{color:#fff}.pagination>li:first-child>a,.pagination>li:first-child>span,.pagination>li:last-child>a,.pagination>li:last-child>span,.pagination>li>a,.pagination>li>span{border-radius:3px}.pagination-lg>li>a,.pagination-lg>li>span{padding-left:22px;padding-right:22px}.pagination-sm>li>a,.pagination-sm>li>span{padding:0 5px}.pager{font-size:12px;font-weight:300;color:#999}.list-group{font-size:12px;font-weight:300}.close{opacity:.4;text-decoration:none;text-shadow:none}.close:focus,.close:hover{opacity:1}.alert{font-size:12px;font-weight:300}.alert .alert-link{font-weight:400;color:#fff;text-decoration:underline}.label{padding-left:1em;padding-right:1em;border-radius:0;font-weight:300}.label-default{background-color:#e7e7e7;color:#333}.badge{font-weight:300}.progress{height:22px;padding:2px;background-color:#f6f6f6;border:1px solid #ccc;-webkit-box-shadow:none;box-shadow:none}.dropdown-menu{padding:0;margin-top:0;font-size:12px}.dropdown-menu>li>a{padding:12px 15px}.dropdown-header{padding-left:15px;padding-right:15px;font-size:9px;text-transform:uppercase}.popover{color:#fff;font-size:12px;font-weight:300}.panel-footer,.panel-heading{border-top-right-radius:0;border-top-left-radius:0}.panel-default .close{color:#222}.modal .close{color:#222}
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
@@ -1,13 +1,37
1
1 function freq2Binary(mclock, frequency) {
2 function freq2Binary(mclock, frequency) {
3
4 var freq_bin = parseInt(frequency * (Math.pow(2,48)/mclock));
5 return freq_bin;
6
7 }
8
9 function binary2Freq(mclock, binary) {
10
2
11 var frequency = (1.0*binary) / (Math.pow(2,48)/mclock);
3 var freq_bin = parseInt(frequency * (Math.pow(2,48)/mclock));
12 return frequency;
4 return freq_bin;
13 } No newline at end of file
5
6 }
7
8 function binary2Freq(mclock, binary) {
9
10 var frequency = (1.0*binary) / (Math.pow(2,48)/mclock);
11 return frequency;
12 }
13
14
15 function binary2FreqDelta(mclock, binary) {
16
17 var frequency = (1.0*binary) / (Math.pow(2,48)/mclock);
18 return frequency;
19 }
20
21 function freqDelta2Binary(mclock, frequency) {
22
23 var freq_bin = parseInt(frequency * (Math.pow(2,48)/mclock));
24 return freq_bin;
25 }
26
27 function binary2Ramp(mclock, binary) {
28
29 var frequency = (1.0*mclock) / (binary+1);
30 return frequency;
31 }
32
33 function freqRamp2Binary(mclock, frequency) {
34
35 var freq_bin = parseInt(mclock/frequency-1);
36 return freq_bin;
37 } No newline at end of file
@@ -1,238 +1,255
1 import ast
1 import ast
2 import json
2 import json
3 import requests
3 import requests
4 import numpy as np
4 import numpy as np
5 from base64 import b64encode
5 from base64 import b64encode
6 from struct import pack
6 from struct import pack
7
7
8 from django.urls import reverse
8 from django.urls import reverse
9 from django.db import models
9 from django.db import models
10 from apps.main.models import Configuration
10 from apps.main.models import Configuration
11 from apps.main.utils import Params
11 from apps.main.utils import Params
12 # Create your models here.
12 # Create your models here.
13
13
14 from django.core.validators import MinValueValidator, MaxValueValidator
14 from django.core.validators import MinValueValidator, MaxValueValidator
15 from django.core.exceptions import ValidationError
15 from django.core.exceptions import ValidationError
16
16
17 from devices.dds_rest import api, data
17 from devices.dds_rest import api, data
18
18
19 ENABLE_TYPE = (
19 ENABLE_TYPE = (
20 (False, 'Disabled'),
20 (False, 'Disabled'),
21 (True, 'Enabled'),
21 (True, 'Enabled'),
22 )
22 )
23 MOD_TYPES = (
23 MOD_TYPES = (
24 (0, 'Single Tone'),
24 (0, 'Single Tone'),
25 (1, 'FSK'),
25 (1, 'FSK'),
26 (2, 'Ramped FSK'),
26 (2, 'Ramped FSK'),
27 (3, 'Chirp'),
27 (3, 'Chirp'),
28 (4, 'BPSK'),
28 (4, 'BPSK'),
29 )
29 )
30
30
31 class DDSRestConfiguration(Configuration):
31 class DDSRestConfiguration(Configuration):
32
32
33 DDS_NBITS = 48
33 DDS_NBITS = 48
34
34
35 clock = models.FloatField(verbose_name='Clock In (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)], null=True, default=60)
35 clock = models.FloatField(verbose_name='Clock In (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)], null=True, default=60)
36 multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=4)
36 multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=4)
37
37
38 frequencyA_Mhz = models.DecimalField(verbose_name='Frequency A (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, null=True, default=49.9200)
38 frequencyA_Mhz = models.DecimalField(verbose_name='Frequency A (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, null=True, default=49.9200)
39 frequencyA = models.BigIntegerField(verbose_name='Frequency A (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True)
39 frequencyA = models.BigIntegerField(verbose_name='Frequency A (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True)
40
40
41 frequencyB_Mhz = models.DecimalField(verbose_name='Frequency B (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
41 frequencyB_Mhz = models.DecimalField(verbose_name='Frequency B (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
42 frequencyB = models.BigIntegerField(verbose_name='Frequency B (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True)
42 frequencyB = models.BigIntegerField(verbose_name='Frequency B (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True)
43
43
44 delta_frequency_Mhz = models.DecimalField(verbose_name='Delta frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
44 delta_frequency_Mhz = models.DecimalField(verbose_name='Delta frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
45 delta_frequency = models.BigIntegerField(verbose_name='Delta frequency (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True)
45 delta_frequency = models.BigIntegerField(verbose_name='Delta frequency (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True)
46
46
47 update_clock_Mhz = models.DecimalField(verbose_name='Update clock (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
47 update_clock_Mhz = models.DecimalField(verbose_name='Update clock (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
48 update_clock = models.BigIntegerField(verbose_name='Update clock (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
48 update_clock = models.BigIntegerField(verbose_name='Update clock (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True)
49
49
50 ramp_rate_clock_Mhz = models.DecimalField(verbose_name='Ramp rate clock (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
50 ramp_rate_clock_Mhz = models.DecimalField(verbose_name='Ramp rate clock (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, blank=True, null=True)
51 ramp_rate_clock = models.BigIntegerField(verbose_name='Ramp rate clock (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**18-1)], blank=True, null=True)
51 ramp_rate_clock = models.BigIntegerField(verbose_name='Ramp rate clock (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**18-1)], blank=True, null=True)
52
52
53 phaseA_degrees = models.FloatField(verbose_name='Phase A (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], default=0)
53 phaseA_degrees = models.FloatField(verbose_name='Phase A (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], default=0)
54
54
55 phaseB_degrees = models.FloatField(verbose_name='Phase B (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], blank=True, null=True)
55 phaseB_degrees = models.FloatField(verbose_name='Phase B (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], blank=True, null=True)
56
56
57 modulation = models.PositiveIntegerField(verbose_name='Modulation Type', choices = MOD_TYPES, default = 0)
57 modulation = models.PositiveIntegerField(verbose_name='Modulation Type', choices = MOD_TYPES, default = 0)
58
58
59 amplitude_enabled = models.BooleanField(verbose_name='Amplitude Control', choices=ENABLE_TYPE, default=False)
59 amplitude_enabled = models.BooleanField(verbose_name='Amplitude Control', choices=ENABLE_TYPE, default=False)
60
60
61 amplitudeI = models.PositiveIntegerField(verbose_name='Amplitude CH1',validators=[MinValueValidator(0), MaxValueValidator(2**12-1)], blank=True, null=True)
61 amplitudeI = models.PositiveIntegerField(verbose_name='Amplitude CH1',validators=[MinValueValidator(0), MaxValueValidator(2**12-1)], blank=True, null=True)
62 amplitudeQ = models.PositiveIntegerField(verbose_name='Amplitude CH2',validators=[MinValueValidator(0), MaxValueValidator(2**12-1)], blank=True, null=True)
62 amplitudeQ = models.PositiveIntegerField(verbose_name='Amplitude CH2',validators=[MinValueValidator(0), MaxValueValidator(2**12-1)], blank=True, null=True)
63
63
64
64
65 def get_nbits(self):
65 def get_nbits(self):
66
66
67 return self.DDS_NBITS
67 return self.DDS_NBITS
68
68
69 def clean(self):
69 def clean(self):
70
70
71 if self.modulation in [1,2,3]:
71 if self.modulation in [1,2,3]:
72 if self.frequencyB is None or self.frequencyB_Mhz is None:
72 if self.frequencyB is None or self.frequencyB_Mhz is None:
73 raise ValidationError({
73 raise ValidationError({
74 'frequencyB': 'Frequency modulation has to be defined when FSK or Chirp modulation is selected'
74 'frequencyB': 'Frequency modulation has to be defined when FSK or Chirp modulation is selected'
75 })
75 })
76
76
77 if self.modulation in [4,]:
77 if self.modulation in [4,]:
78 if self.phaseB_degrees is None:
78 if self.phaseB_degrees is None:
79 raise ValidationError({
79 raise ValidationError({
80 'phaseB': 'Phase modulation has to be defined when BPSK modulation is selected'
80 'phaseB': 'Phase modulation has to be defined when BPSK modulation is selected'
81 })
81 })
82
82
83 self.frequencyA_Mhz = data.binary_to_freq(self.frequencyA, self.clock*self.multiplier)
83 self.frequencyA_Mhz = data.binary_to_freq(self.frequencyA, self.clock*self.multiplier)
84 self.frequencyB_Mhz = data.binary_to_freq(self.frequencyB, self.clock*self.multiplier)
84 self.frequencyB_Mhz = data.binary_to_freq(self.frequencyB, self.clock*self.multiplier)
85
85
86 def verify_frequencies(self):
86 def verify_frequencies(self):
87
87
88 return True
88 return True
89
89
90 def parms_to_text(self):
90 def parms_to_text(self):
91
91
92 my_dict = self.parms_to_dict()['configurations']['byId'][str(self.id)]
92 my_dict = self.parms_to_dict()['configurations']['byId'][str(self.id)]
93
93
94 text = data.dict_to_text(my_dict)
94 text = data.dict_to_text(my_dict)
95
95
96 return text
96 return text
97
97
98 def status_device(self):
98 def status_device(self):
99 print("Status ")
99 print("Status ")
100 try:
100 try:
101 answer = api.status(ip = self.device.ip_address,
101 self.device.status = 0
102 port = self.device.port_address)
102 payload = self.request('status')
103 if 'clock' in answer:
103 if payload['status']=='generating RF':
104 self.device.status = 1
104 self.device.status = 3
105 elif payload['status']=='no generating RF':
106 self.device.status = 2
105 else:
107 else:
106 self.device.status = answer[0]
108 self.device.status = 1
107 self.message = 'DDS - {}'.format(answer[2:])
109 self.device.save()
110 self.message = 'DDS REST status: {}'.format(payload['status'])
111 return False
108 except Exception as e:
112 except Exception as e:
109 self.message = str(e)
113 if 'No route to host' not in str(e):
110 self.device.status = 0
114 self.device.status = 4
115 self.device.save()
116 self.message = 'DDS REST status: {}'.format(str(e))
117 return False
111
118
112 self.device.save()
119 self.device.save()
113
120 return True
114 if self.device.status in (0, '0'):
115 return False
116 else:
117 return True
118
121
119 def reset_device(self):
122 def reset_device(self):
120
123
121 answer = api.reset(ip = self.device.ip_address,
124 answer = api.reset(ip = self.device.ip_address,
122 port = self.device.port_address)
125 port = self.device.port_address)
123
126
124 if answer[0] != "1":
127 if answer[0] != "1":
125 self.message = 'DDS - {}'.format(answer[2:])
128 self.message = 'DDS - {}'.format(answer[2:])
126 return 0
129 return 0
127
130
128 self.message = 'DDS - {}'.format(answer[2:])
131 self.message = 'DDS - {}'.format(answer[2:])
129 return 1
132 return 1
130
133
131 def stop_device(self):
134 def stop_device(self):
132
135
133 try:
136 try:
134 answer = api.disable_rf(ip = self.device.ip_address,
137 answer = api.disable_rf(ip = self.device.ip_address,
135 port = self.device.port_address)
138 port = self.device.port_address)
136
139
137 return self.status_device()
140 return self.status_device()
138
141
139 except Exception as e:
142 except Exception as e:
140 self.message = str(e)
143 self.message = str(e)
141 return False
144 return False
142
145
143 def start_device(self):
146 def start_device(self):
144
147
145 try:
148 try:
146 answer = api.enable_rf(ip = self.device.ip_address,
149 answer = api.enable_rf(ip = self.device.ip_address,
147 port = self.device.port_address)
150 port = self.device.port_address)
148
151
149 return self.status_device()
152 return self.status_device()
150
153
151 except Exception as e:
154 except Exception as e:
152 self.message = str(e)
155 self.message = str(e)
153 return False
156 return False
154
157
155 def read_device(self):
158 def read_device(self):
156
159
157 parms = api.read_config(ip = self.device.ip_address,
160 parms = api.read_config(ip = self.device.ip_address,
158 port = self.device.port_address)
161 port = self.device.port_address)
159 if not parms:
162 if not parms:
160 self.message = "Could not read DDS parameters from this device"
163 self.message = "Could not read DDS parameters from this device"
161 return parms
164 return parms
162
165
163 self.message = ""
166 self.message = ""
164 return parms
167 return parms
165
168
166 def arma_data_write(self):
169 def arma_data_write(self):
167 #clock = RCClock.objects.get(rc_configuration=self)
170 #clock = RCClock.objects.get(rc_configuration=self)
168 clock = self.clock
171 clock = self.clock
169 print(clock)
172 print(clock)
170 multiplier = self.multiplier
173 multiplier = self.multiplier
171 print(multiplier)
174 print(multiplier)
172 frequencyA_Mhz = self.frequencyA_Mhz
175 frequencyA_Mhz = self.frequencyA_Mhz
173 print(frequencyA_Mhz)
176 print(frequencyA_Mhz)
174 frequencyA = self.frequencyA
177 frequencyA = self.frequencyA
175 print(frequencyA)
178 print(frequencyA)
176 frequencyB_Mhz = self.frequencyB_Mhz
179 frequencyB_Mhz = self.frequencyB_Mhz
177 print(frequencyB_Mhz)
180 print(frequencyB_Mhz)
178 frequencyB = self.frequencyB
181 frequencyB = self.frequencyB
179 print(frequencyB)
182 print(frequencyB)
180 phaseA_degrees = self.phaseA_degrees
183 phaseA_degrees = self.phaseA_degrees
181 print(phaseA_degrees)
184 print(phaseA_degrees)
182 phaseB_degrees = self.phaseB_degrees
185 phaseB_degrees = self.phaseB_degrees
183 print(phaseB_degrees)
186 print(phaseB_degrees)
184 modulation = self.modulation
187 modulation = self.modulation
185 print(modulation)
188 print(modulation)
186 amplitude_enabled = self.amplitude_enabled
189 amplitude_enabled = self.amplitude_enabled
187 print(amplitude_enabled)
190 print(amplitude_enabled)
188 amplitudeI = self.amplitudeI
191 amplitudeI = self.amplitudeI
189 print(amplitudeI)
192 print(amplitudeI)
190 amplitudeQ = self.amplitudeQ
193 amplitudeQ = self.amplitudeQ
191 print(amplitudeQ)
194 print(amplitudeQ)
195 delta_frequency = self.delta_frequency
196 print(delta_frequency)
197 update_clock = self.update_clock
198 print(update_clock)
199 ramp_rate_clock = self.ramp_rate_clock
200 print(ramp_rate_clock)
192
201
193 cadena_json = {'clock': (b64encode(pack('<f',clock))).decode("UTF-8"),\
202 cadena_json = {'clock': (b64encode(pack('<f',clock))).decode("UTF-8"),\
194 'multiplier': (b64encode(pack('<B',multiplier))).decode("UTF-8"),\
203 'multiplier': (b64encode(pack('<B',multiplier))).decode("UTF-8"),\
195 'frequencyA': (b64encode(pack('<6B',frequencyA))).decode("UTF-8"),\
204 'frequencyA': (b64encode((frequencyA).to_bytes(6,'little'))).decode("UTF-8"),\
196 'frequencyB': (b64encode(pack('<6B',frequencyB))).decode("UTF-8")\
205 'frequencyB': (b64encode((frequencyB).to_bytes(6,'little'))).decode("UTF-8"),\
197
206 'delta_frequency': (b64encode((delta_frequency).to_bytes(6,'little'))).decode("UTF-8"),\
207 'update_clock': (b64encode((update_clock).to_bytes(4,'little'))).decode("UTF-8"),\
208 'ramp_rate_clock': (b64encode((ramp_rate_clock).to_bytes(3,'little'))).decode("UTF-8"),\
209 'control': (b64encode((ramp_rate_clock).to_bytes(4,'little'))).decode("UTF-8"),\
210 'amplitudeI': (b64encode((amplitudeI).to_bytes(2,'little'))).decode("UTF-8"),\
211 'amplitudeQ': (b64encode((amplitudeQ).to_bytes(3,'little'))).decode("UTF-8")
198 }
212 }
199 return cadena_json
213 return cadena_json
200
214
201 def write_device(self, raw=False):
215 def write_device(self, raw=False):
202 print("Ingreso a write")
216 print("Ingreso a write")
203 try:
217 try:
204
218
205 if not raw:
219 if not raw:
206 data = self.arma_data_write()
220 data = self.arma_data_write()
207 print(data)
221 print(data)
208 payload = self.request('write', 'post', data=json.dumps(data))
222 payload = self.request('write', 'post', data=json.dumps(data))
209 if payload['command'] != 'ok':
223 print(payload)
210 self.message = 'DDS Rest write: {}'.format(payload['command'])
224 if payload['write'] == 'ok':
225 self.device.status = 3
226 self.device.save()
227 self.message = 'DDS Rest write configured and started'
211 else:
228 else:
212 self.message = payload['programming']
229 self.message = payload['programming']
213 if payload['programming'] == 'fail':
230 if payload['programming'] == 'fail':
214 self.message = 'DDS Rest write: error programming DDS chip'
231 self.message = 'DDS Rest write: error programming DDS chip'
215 if raw:
232 if raw:
216 return b64encode(data)
233 return b64encode(data)
217
234
218
235
219 except Exception as e:
236 except Exception as e:
220 if 'No route to host' not in str(e):
237 if 'No route to host' not in str(e):
221 self.device.status = 4
238 self.device.status = 4
222 else:
239 else:
223 self.device.status = 0
240 self.device.status = 0
224 self.message = 'DDS Rest write: {}'.format(str(e))
241 self.message = 'DDS Rest write: {}'.format(str(e))
225 self.device.save()
242 self.device.save()
226 return False
243 return False
227
244
228 return True
245 return True
229
246
230 def request(self, cmd, method='get', **kwargs):
247 def request(self, cmd, method='get', **kwargs):
231 print("Ingreso a request")
248 print("Ingreso a request")
232 req = getattr(requests, method)(self.device.url(cmd), **kwargs)
249 req = getattr(requests, method)(self.device.url(cmd), **kwargs)
233 payload = req.json()
250 payload = req.json()
234
251
235 return payload
252 return payload
236
253
237 class Meta:
254 class Meta:
238 db_table = 'ddsrest_configurations'
255 db_table = 'ddsrest_configurations'
@@ -1,20 +1,38
1
1
2 function freq2Binary(mclock, frequency) {
2 function freq2Binary(mclock, frequency) {
3
3
4 var freq_bin = parseInt(frequency * (Math.pow(2,48)/mclock));
4 var freq_bin = parseInt(frequency * (Math.pow(2,48)/mclock));
5 return freq_bin;
5 return freq_bin;
6
6
7 }
7 }
8
8
9 function binary2Freq(mclock, binary) {
9 function binary2Freq(mclock, binary) {
10
10
11 var frequency = (1.0*binary) / (Math.pow(2,48)/mclock);
11 var frequency = (1.0*binary) / (Math.pow(2,48)/mclock);
12 return frequency;
12 return frequency;
13 }
13 }
14
14
15
15
16 function binary2FreqDelta(mclock, binary) {
16 function binary2FreqDelta(mclock, binary) {
17
17
18 var frequency = (1.0*binary) / (Math.pow(2,48)/mclock);
18 var frequency = (1.0*binary) / (Math.pow(2,48)/mclock);
19 return frequency;
19 return frequency;
20 }
21
22 function freqDelta2Binary(mclock, frequency) {
23
24 var freq_bin = parseInt(frequency * (Math.pow(2,48)/mclock));
25 return freq_bin;
26 }
27
28 function binary2Ramp(mclock, binary) {
29
30 var frequency = (1.0*mclock) / (binary+1);
31 return frequency;
32 }
33
34 function freqRamp2Binary(mclock, frequency) {
35
36 var freq_bin = parseInt(mclock/frequency-1);
37 return freq_bin;
20 } No newline at end of file
38 }
@@ -1,93 +1,158
1 {% extends "dev_conf_edit.html" %}
1 {% extends "dev_conf_edit.html" %}
2 {% load bootstrap4 %}
2 {% load bootstrap4 %}
3 {% load static %}
3 {% load static %}
4 {% load main_tags %}
4 {% load main_tags %}
5
5
6 {% block extra-js%}
6 {% block extra-js%}
7 <script src="{% static 'js/dds_conversion.js' %}"></script>
7 <script src="{% static 'js/dds_conversion.js' %}"></script>
8 <script type="text/javascript">
8 <script type="text/javascript">
9
9
10 $("#id_clock").on('change', function() {
10 $("#id_clock").on('change', function() {
11 updateFrequencies();
11 updateFrequencies();
12 });
12 });
13
13
14 $("#id_multiplier").on('change', function() {
14 $("#id_multiplier").on('change', function() {
15 updateFrequencies();
15 updateFrequencies();
16 });
16 });
17
17
18 $("#id_frequencyA_Mhz").on('change', function() {
18 $("#id_frequencyA_Mhz").on('change', function() {
19 updateBinaryFrequencies();
19 updateBinaryFrequencies();
20 });
20 });
21
21
22 $("#id_frequencyA").on('change', function() {
22 $("#id_frequencyA").on('change', function() {
23 updateFrequencies();
23 updateFrequencies();
24 });
24 });
25
25
26 $("#id_frequencyB_Mhz").on('change', function() {
26 $("#id_frequencyB_Mhz").on('change', function() {
27 updateBinaryFrequencies();
27 updateBinaryFrequencies();
28 });
28 });
29
29
30 $("#id_frequencyB").on('change', function() {
30 $("#id_frequencyB").on('change', function() {
31 updateFrequencies();
31 updateFrequencies();
32 });
32 });
33
33
34 $("#id_delta_frequency").on('change', function() {
34 $("#id_delta_frequency").on('change', function() {
35 updateFrequencyDelta();
35 updateFrequencyDelta();
36 });
36 });
37
37
38 $("#id_delta_frequency_Mhz").on('change', function() {
39 updateBinaryFrequencyDelta();
40 });
41
42 $("#id_ramp_rate_clock").on('change', function() {
43 updateFrequencyRamp();
44 });
45
46 $("#id_ramp_rate_clock_Mhz").on('change', function() {
47 updateBinaryFrequencyRamp();
48 });
49
38 function updateBinaryFrequencies() {
50 function updateBinaryFrequencies() {
39
51
40 var clock = $("#id_clock").val();
52 var clock = $("#id_clock").val();
41 var multiplier = $("#id_multiplier").val();
53 var multiplier = $("#id_multiplier").val();
42 var freq = $("#id_frequencyA_Mhz").val();
54 var freq = $("#id_frequencyA_Mhz").val();
43 var freq_mod = $("#id_frequencyB_Mhz").val();
55 var freq_mod = $("#id_frequencyB_Mhz").val();
44
56 //var freq_delta = $("#id_delta_frequency_Mhz").val();
57 //var freq_ramp = $("#id_ramp_rate_clock_Mhz").val();
58
45 var mclock = clock*multiplier;
59 var mclock = clock*multiplier;
46
60
47 var freq_bin = freq2Binary(mclock, freq);
61 var freq_bin = freq2Binary(mclock, freq);
48 var freq_mod_bin = freq2Binary(mclock, freq_mod);
62 var freq_mod_bin = freq2Binary(mclock, freq_mod);
63 //var freqdelta_bin = freqDelta2Binary(mclock, freq_delta);
64 //var freqramp_bin = freqRamp2Binary(mclock, freq_ramp);
49
65
50 $("#id_frequencyA").val(freq_bin);
66 $("#id_frequencyA").val(freq_bin);
51 $("#id_frequencyB").val(freq_mod_bin);
67 $("#id_frequencyB").val(freq_mod_bin);
68 //$("#id_delta_frequency").val(freqdelta_bin);
69 //$("#id_ramp_rate_clock").val(freqramp_bin);
52
70
53 freq = binary2Freq(mclock, freq_bin);
71 freq = binary2Freq(mclock, freq_bin);
54 freq_mod = binary2Freq(mclock, freq_mod_bin);
72 freq_mod = binary2Freq(mclock, freq_mod_bin);
73 //freqdelta = binary2FreqDelta(mclock, freqdelta_bin);
74 //freq_ramp = binary2Ramp(mclock, freqramp_bin);
55
75
56 $("#id_frequencyA_Mhz").val(freq);
76 $("#id_frequencyA_Mhz").val(freq);
57 $("#id_frequencyB_Mhz").val(freq_mod);
77 $("#id_frequencyB_Mhz").val(freq_mod);
58
78 //$("#id_delta_frequency_Mhz").val(freqdelta);
79 //$("#id_ramp_rate_clock_Mhz").val(freq_ramp);
80
59 }
81 }
60
82
61 function updateFrequencies() {
83 function updateFrequencies() {
62 console.log("Ingreso a updateFrequencies");
84 console.log("Ingreso a updateFrequencies");
63 var clock = $("#id_clock").val();
85 var clock = $("#id_clock").val();
64 var multiplier = $("#id_multiplier").val();
86 var multiplier = $("#id_multiplier").val();
65 var freq_bin = $("#id_frequencyA").val();
87 var freq_bin = $("#id_frequencyA").val();
66 var freq_mod_bin = $("#id_frequencyB").val();
88 var freq_mod_bin = $("#id_frequencyB").val();
89 var freqdelta_bin = $("#id_delta_frequency").val();
90 var freqramp_bin = $("#id_ramp_rate_clock").val();
67
91
68 var mclock = clock*multiplier;
92 var mclock = clock*multiplier;
69
93
70 var freq = binary2Freq(mclock, freq_bin);
94 var freq = binary2Freq(mclock, freq_bin);
71 var freq_mod = binary2Freq(mclock, freq_mod_bin);
95 var freq_mod = binary2Freq(mclock, freq_mod_bin);
72
96 var freqdelta = binary2FreqDelta(mclock, freqdelta_bin);
97 var freq_ramp = binary2Ramp(mclock, freqramp_bin);
98
73 $("#id_frequencyA_Mhz").val(freq);
99 $("#id_frequencyA_Mhz").val(freq);
74 $("#id_frequencyB_Mhz").val(freq_mod);
100 $("#id_frequencyB_Mhz").val(freq_mod);
75
101 $("#id_delta_frequency_Mhz").val(freqdelta);
102 $("#id_ramp_rate_clock_Mhz").val(freq_ramp);
76 }
103 }
77
104
78 function updateFrequencyDelta() {
105 function updateFrequencyDelta() {
79 console.log("Ingreso a updateFrequencyDelta");
106 console.log("Ingreso a updateFrequencyDelta");
80 var clock = $("#id_clock").val();
107 var clock = $("#id_clock").val();
81 var multiplier = $("#id_multiplier").val();
108 var multiplier = $("#id_multiplier").val();
82 var freq_bin = $("#id_delta_frequency").val();
109 var freq_bin = $("#id_delta_frequency").val();
83
110
84 var mclock = clock*multiplier;
111 var mclock = clock*multiplier;
85
112
86 var freq = binary2Freq(mclock, freq_bin);
113 var freq = binary2FreqDelta(mclock, freq_bin);
87 console.log(freq);
114 console.log(freq);
88 $("#id_delta_frequency_Mhz").val(freq);
115 $("#id_delta_frequency_Mhz").val(freq);
89 }
116 }
90
117
118 function updateBinaryFrequencyDelta() {
119 console.log("Ingreso a updateBInaryFrequencyDelta");
120 var clock = $("#id_clock").val();
121 var multiplier = $("#id_multiplier").val();
122 var freq = $("#id_delta_frequency_MHz").val();
123
124 var mclock = clock*multiplier;
125
126 var freq_bin = freqDelta2Binary(mclock, freq);
127 console.log(freq_bin);
128 $("#id_delta_frequency").val(freq_bin);
129 }
130
131 function updateFrequencyRamp() {
132 console.log("Ingreso a updateFrequencyRamp");
133 var clock = $("#id_clock").val();
134 var multiplier = $("#id_multiplier").val();
135 var freq_bin = $("#id_ramp_rate_clock").val();
136
137 var mclock = clock*multiplier;
138
139 var freq = binary2Ramp(mclock, freq_bin);
140 console.log(freq);
141 $("#id_ramp_rate_clock_Mhz").val(freq);
142 }
143
144 function updateBinaryFrequencyRamp() {
145 console.log("Ingreso a updateBInaryFrequencyRamp");
146 var clock = $("#id_clock").val();
147 var multiplier = $("#id_multiplier").val();
148 var freq = $("#id_ramp_rate_clock_MHz").val();
149
150 var mclock = clock*multiplier;
151
152 var freq_bin = freqRamp2Binary(mclock, freq);
153 console.log(freq_bin);
154 $("#id_ramp_rate_clock").val(freq_bin);
155 }
91
156
92 </script>
157 </script>
93 {% endblock %} No newline at end of file
158 {% endblock %}
@@ -1,808 +1,808
1
1
2 import os
2 import os
3 import json
3 import json
4 import requests
4 import requests
5 import time
5 import time
6 from datetime import datetime
6 from datetime import datetime
7
7
8 try:
8 try:
9 from polymorphic.models import PolymorphicModel
9 from polymorphic.models import PolymorphicModel
10 except:
10 except:
11 from polymorphic import PolymorphicModel
11 from polymorphic import PolymorphicModel
12
12
13 from django.template.base import kwarg_re
13 from django.template.base import kwarg_re
14 from django.db import models
14 from django.db import models
15 from django.urls import reverse
15 from django.urls import reverse
16 from django.core.validators import MinValueValidator, MaxValueValidator
16 from django.core.validators import MinValueValidator, MaxValueValidator
17 from django.shortcuts import get_object_or_404
17 from django.shortcuts import get_object_or_404
18 from django.contrib.auth.models import User
18 from django.contrib.auth.models import User
19 from django.db.models.signals import post_save
19 from django.db.models.signals import post_save
20 from django.dispatch import receiver
20 from django.dispatch import receiver
21
21
22 from apps.main.utils import Params
22 from apps.main.utils import Params
23 from apps.rc.utils import RCFile
23 from apps.rc.utils import RCFile
24 from apps.jars.utils import RacpFile
24 from apps.jars.utils import RacpFile
25 from devices.dds import api as dds_api
25 from devices.dds import api as dds_api
26 from devices.dds import data as dds_data
26 from devices.dds import data as dds_data
27
27
28
28
29 DEV_PORTS = {
29 DEV_PORTS = {
30 'rc' : 2000,
30 'rc' : 2000,
31 'dds' : 2000,
31 'dds' : 2000,
32 'jars' : 2000,
32 'jars' : 2000,
33 'usrp' : 2000,
33 'usrp' : 2000,
34 'cgs' : 8080,
34 'cgs' : 8080,
35 'abs' : 8080,
35 'abs' : 8080,
36 'dds_rest': 80
36 'dds_rest': 80
37 }
37 }
38
38
39 RADAR_STATES = (
39 RADAR_STATES = (
40 (0, 'No connected'),
40 (0, 'No connected'),
41 (1, 'Connected'),
41 (1, 'Connected'),
42 (2, 'Configured'),
42 (2, 'Configured'),
43 (3, 'Running'),
43 (3, 'Running'),
44 (4, 'Scheduled'),
44 (4, 'Scheduled'),
45 )
45 )
46
46
47 EXPERIMENT_TYPE = (
47 EXPERIMENT_TYPE = (
48 (0, 'RAW_DATA'),
48 (0, 'RAW_DATA'),
49 (1, 'PDATA'),
49 (1, 'PDATA'),
50 )
50 )
51
51
52 DECODE_TYPE = (
52 DECODE_TYPE = (
53 (0, 'None'),
53 (0, 'None'),
54 (1, 'TimeDomain'),
54 (1, 'TimeDomain'),
55 (2, 'FreqDomain'),
55 (2, 'FreqDomain'),
56 (3, 'InvFreqDomain'),
56 (3, 'InvFreqDomain'),
57 )
57 )
58
58
59 DEV_STATES = (
59 DEV_STATES = (
60 (0, 'No connected'),
60 (0, 'No connected'),
61 (1, 'Connected'),
61 (1, 'Connected'),
62 (2, 'Configured'),
62 (2, 'Configured'),
63 (3, 'Running'),
63 (3, 'Running'),
64 (4, 'Unknown'),
64 (4, 'Unknown'),
65 )
65 )
66
66
67 DEV_TYPES = (
67 DEV_TYPES = (
68 ('', 'Select a device type'),
68 ('', 'Select a device type'),
69 ('rc', 'Radar Controller'),
69 ('rc', 'Radar Controller'),
70 ('dds', 'Direct Digital Synthesizer'),
70 ('dds', 'Direct Digital Synthesizer'),
71 ('jars', 'Jicamarca Radar Acquisition System'),
71 ('jars', 'Jicamarca Radar Acquisition System'),
72 ('usrp', 'Universal Software Radio Peripheral'),
72 ('usrp', 'Universal Software Radio Peripheral'),
73 ('cgs', 'Clock Generator System'),
73 ('cgs', 'Clock Generator System'),
74 ('abs', 'Automatic Beam Switching'),
74 ('abs', 'Automatic Beam Switching'),
75 ('dds_rest', 'Direct Digital Synthesizer_REST'),
75 ('dds_rest', 'Direct Digital Synthesizer_REST'),
76 )
76 )
77
77
78 EXP_STATES = (
78 EXP_STATES = (
79 (0,'Error'), #RED
79 (0,'Error'), #RED
80 (1,'Cancelled'), #YELLOW
80 (1,'Cancelled'), #YELLOW
81 (2,'Running'), #GREEN
81 (2,'Running'), #GREEN
82 (3,'Scheduled'), #BLUE
82 (3,'Scheduled'), #BLUE
83 (4,'Unknown'), #WHITE
83 (4,'Unknown'), #WHITE
84 )
84 )
85
85
86 CONF_TYPES = (
86 CONF_TYPES = (
87 (0, 'Active'),
87 (0, 'Active'),
88 (1, 'Historical'),
88 (1, 'Historical'),
89 )
89 )
90
90
91 class Profile(models.Model):
91 class Profile(models.Model):
92 user = models.OneToOneField(User, on_delete=models.CASCADE)
92 user = models.OneToOneField(User, on_delete=models.CASCADE)
93 theme = models.CharField(max_length=30, default='spacelab')
93 theme = models.CharField(max_length=30, default='spacelab')
94
94
95
95
96 @receiver(post_save, sender=User)
96 @receiver(post_save, sender=User)
97 def create_user_profile(sender, instance, created, **kwargs):
97 def create_user_profile(sender, instance, created, **kwargs):
98 if created:
98 if created:
99 Profile.objects.create(user=instance)
99 Profile.objects.create(user=instance)
100
100
101 @receiver(post_save, sender=User)
101 @receiver(post_save, sender=User)
102 def save_user_profile(sender, instance, **kwargs):
102 def save_user_profile(sender, instance, **kwargs):
103 instance.profile.save()
103 instance.profile.save()
104
104
105
105
106 class Location(models.Model):
106 class Location(models.Model):
107
107
108 name = models.CharField(max_length = 30)
108 name = models.CharField(max_length = 30)
109 description = models.TextField(blank=True, null=True)
109 description = models.TextField(blank=True, null=True)
110
110
111 class Meta:
111 class Meta:
112 db_table = 'db_location'
112 db_table = 'db_location'
113
113
114 def __str__(self):
114 def __str__(self):
115 return u'%s' % self.name
115 return u'%s' % self.name
116
116
117 def get_absolute_url(self):
117 def get_absolute_url(self):
118 return reverse('url_location', args=[str(self.id)])
118 return reverse('url_location', args=[str(self.id)])
119
119
120
120
121 class DeviceType(models.Model):
121 class DeviceType(models.Model):
122
122
123 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'dds_rest')
123 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'dds_rest')
124 sequence = models.PositiveSmallIntegerField(default=55)
124 sequence = models.PositiveSmallIntegerField(default=55)
125 description = models.TextField(blank=True, null=True)
125 description = models.TextField(blank=True, null=True)
126
126
127 class Meta:
127 class Meta:
128 db_table = 'db_device_types'
128 db_table = 'db_device_types'
129
129
130 def __str__(self):
130 def __str__(self):
131 return u'%s' % self.get_name_display()
131 return u'%s' % self.get_name_display()
132
132
133 class Device(models.Model):
133 class Device(models.Model):
134
134
135 device_type = models.ForeignKey('DeviceType', on_delete=models.CASCADE)
135 device_type = models.ForeignKey('DeviceType', on_delete=models.CASCADE)
136 location = models.ForeignKey('Location', on_delete=models.CASCADE)
136 location = models.ForeignKey('Location', on_delete=models.CASCADE)
137 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
137 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
138 port_address = models.PositiveSmallIntegerField(default=2000)
138 port_address = models.PositiveSmallIntegerField(default=2000)
139 description = models.TextField(blank=True, null=True)
139 description = models.TextField(blank=True, null=True)
140 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
140 status = models.PositiveSmallIntegerField(default=4, choices=DEV_STATES)
141 conf_active = models.PositiveIntegerField(default=0, verbose_name='Current configuration')
141 conf_active = models.PositiveIntegerField(default=0, verbose_name='Current configuration')
142
142
143 class Meta:
143 class Meta:
144 db_table = 'db_devices'
144 db_table = 'db_devices'
145
145
146 def __str__(self):
146 def __str__(self):
147 ret = u'{} [{}]'.format(self.device_type.name.upper(), self.location.name)
147 ret = u'{} [{}]'.format(self.device_type.name.upper(), self.location.name)
148
148
149 return ret
149 return ret
150
150
151 @property
151 @property
152 def name(self):
152 def name(self):
153 return str(self)
153 return str(self)
154
154
155 def get_status(self):
155 def get_status(self):
156 return self.status
156 return self.status
157
157
158 @property
158 @property
159 def status_color(self):
159 def status_color(self):
160 color = 'muted'
160 color = 'muted'
161 if self.status == 0:
161 if self.status == 0:
162 color = "danger"
162 color = "danger"
163 elif self.status == 1:
163 elif self.status == 1:
164 color = "warning"
164 color = "warning"
165 elif self.status == 2:
165 elif self.status == 2:
166 color = "info"
166 color = "info"
167 elif self.status == 3:
167 elif self.status == 3:
168 color = "success"
168 color = "success"
169
169
170 return color
170 return color
171
171
172 def url(self, path=None):
172 def url(self, path=None):
173
173
174 if path:
174 if path:
175 return 'http://{}:{}/{}/'.format(self.ip_address, self.port_address, path)
175 return 'http://{}:{}/{}/'.format(self.ip_address, self.port_address, path)
176 else:
176 else:
177 return 'http://{}:{}/'.format(self.ip_address, self.port_address)
177 return 'http://{}:{}/'.format(self.ip_address, self.port_address)
178
178
179 def get_absolute_url(self):
179 def get_absolute_url(self):
180 return reverse('url_device', args=[str(self.id)])
180 return reverse('url_device', args=[str(self.id)])
181
181
182 def get_absolute_url_edit(self):
182 def get_absolute_url_edit(self):
183 return reverse('url_edit_device', args=[str(self.id)])
183 return reverse('url_edit_device', args=[str(self.id)])
184
184
185 def get_absolute_url_delete(self):
185 def get_absolute_url_delete(self):
186 return reverse('url_delete_device', args=[str(self.id)])
186 return reverse('url_delete_device', args=[str(self.id)])
187
187
188 def change_ip(self, ip_address, mask, gateway, dns, **kwargs):
188 def change_ip(self, ip_address, mask, gateway, dns, **kwargs):
189
189
190 if self.device_type.name=='dds':
190 if self.device_type.name=='dds':
191 try:
191 try:
192 answer = dds_api.change_ip(ip = self.ip_address,
192 answer = dds_api.change_ip(ip = self.ip_address,
193 port = self.port_address,
193 port = self.port_address,
194 new_ip = ip_address,
194 new_ip = ip_address,
195 mask = mask,
195 mask = mask,
196 gateway = gateway)
196 gateway = gateway)
197 if answer[0]=='1':
197 if answer[0]=='1':
198 self.message = '25|DDS - {}'.format(answer)
198 self.message = '25|DDS - {}'.format(answer)
199 self.ip_address = ip_address
199 self.ip_address = ip_address
200 self.save()
200 self.save()
201 else:
201 else:
202 self.message = '30|DDS - {}'.format(answer)
202 self.message = '30|DDS - {}'.format(answer)
203 return False
203 return False
204 except Exception as e:
204 except Exception as e:
205 self.message = '40|{}'.format(str(e))
205 self.message = '40|{}'.format(str(e))
206 return False
206 return False
207
207
208 elif self.device_type.name=='rc':
208 elif self.device_type.name=='rc':
209 headers = {'content-type': "application/json",
209 headers = {'content-type': "application/json",
210 'cache-control': "no-cache"}
210 'cache-control': "no-cache"}
211
211
212 ip = [int(x) for x in ip_address.split('.')]
212 ip = [int(x) for x in ip_address.split('.')]
213 dns = [int(x) for x in dns.split('.')]
213 dns = [int(x) for x in dns.split('.')]
214 gateway = [int(x) for x in gateway.split('.')]
214 gateway = [int(x) for x in gateway.split('.')]
215 subnet = [int(x) for x in mask.split('.')]
215 subnet = [int(x) for x in mask.split('.')]
216
216
217 payload = {
217 payload = {
218 "ip": ip,
218 "ip": ip,
219 "dns": dns,
219 "dns": dns,
220 "gateway": gateway,
220 "gateway": gateway,
221 "subnet": subnet
221 "subnet": subnet
222 }
222 }
223
223
224 req = requests.post(self.url('changeip'), data=json.dumps(payload), headers=headers)
224 req = requests.post(self.url('changeip'), data=json.dumps(payload), headers=headers)
225 try:
225 try:
226 answer = req.json()
226 answer = req.json()
227 if answer['changeip']=='ok':
227 if answer['changeip']=='ok':
228 self.message = '25|IP succesfully changed'
228 self.message = '25|IP succesfully changed'
229 self.ip_address = ip_address
229 self.ip_address = ip_address
230 self.save()
230 self.save()
231 else:
231 else:
232 self.message = '30|An error ocuur when changing IP'
232 self.message = '30|An error ocuur when changing IP'
233 except Exception as e:
233 except Exception as e:
234 self.message = '40|{}'.format(str(e))
234 self.message = '40|{}'.format(str(e))
235 else:
235 else:
236 self.message = 'Not implemented'
236 self.message = 'Not implemented'
237 return False
237 return False
238
238
239 return True
239 return True
240
240
241
241
242 class Campaign(models.Model):
242 class Campaign(models.Model):
243
243
244 template = models.BooleanField(default=False)
244 template = models.BooleanField(default=False)
245 name = models.CharField(max_length=60, unique=True)
245 name = models.CharField(max_length=60, unique=True)
246 start_date = models.DateTimeField(blank=True, null=True)
246 start_date = models.DateTimeField(blank=True, null=True)
247 end_date = models.DateTimeField(blank=True, null=True)
247 end_date = models.DateTimeField(blank=True, null=True)
248 tags = models.CharField(max_length=40, blank=True, null=True)
248 tags = models.CharField(max_length=40, blank=True, null=True)
249 description = models.TextField(blank=True, null=True)
249 description = models.TextField(blank=True, null=True)
250 experiments = models.ManyToManyField('Experiment', blank=True)
250 experiments = models.ManyToManyField('Experiment', blank=True)
251 author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE)
251 author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE)
252
252
253 class Meta:
253 class Meta:
254 db_table = 'db_campaigns'
254 db_table = 'db_campaigns'
255 ordering = ('name',)
255 ordering = ('name',)
256
256
257 def __str__(self):
257 def __str__(self):
258 if self.template:
258 if self.template:
259 return u'{} (template)'.format(self.name)
259 return u'{} (template)'.format(self.name)
260 else:
260 else:
261 return u'{}'.format(self.name)
261 return u'{}'.format(self.name)
262
262
263 def jsonify(self):
263 def jsonify(self):
264
264
265 data = {}
265 data = {}
266
266
267 ignored = ('template')
267 ignored = ('template')
268
268
269 for field in self._meta.fields:
269 for field in self._meta.fields:
270 if field.name in ignored:
270 if field.name in ignored:
271 continue
271 continue
272 data[field.name] = field.value_from_object(self)
272 data[field.name] = field.value_from_object(self)
273
273
274 data['start_date'] = data['start_date'].strftime('%Y-%m-%d')
274 data['start_date'] = data['start_date'].strftime('%Y-%m-%d')
275 data['end_date'] = data['end_date'].strftime('%Y-%m-%d')
275 data['end_date'] = data['end_date'].strftime('%Y-%m-%d')
276
276
277 return data
277 return data
278
278
279 def parms_to_dict(self):
279 def parms_to_dict(self):
280
280
281 params = Params({})
281 params = Params({})
282 params.add(self.jsonify(), 'campaigns')
282 params.add(self.jsonify(), 'campaigns')
283
283
284 for exp in Experiment.objects.filter(campaign = self):
284 for exp in Experiment.objects.filter(campaign = self):
285 params.add(exp.jsonify(), 'experiments')
285 params.add(exp.jsonify(), 'experiments')
286 configurations = Configuration.objects.filter(experiment=exp, type=0)
286 configurations = Configuration.objects.filter(experiment=exp, type=0)
287
287
288 for conf in configurations:
288 for conf in configurations:
289 params.add(conf.jsonify(), 'configurations')
289 params.add(conf.jsonify(), 'configurations')
290 if conf.device.device_type.name=='rc':
290 if conf.device.device_type.name=='rc':
291 for line in conf.get_lines():
291 for line in conf.get_lines():
292 params.add(line.jsonify(), 'lines')
292 params.add(line.jsonify(), 'lines')
293
293
294 return params.data
294 return params.data
295
295
296 def dict_to_parms(self, parms, CONF_MODELS):
296 def dict_to_parms(self, parms, CONF_MODELS):
297
297
298 experiments = Experiment.objects.filter(campaign = self)
298 experiments = Experiment.objects.filter(campaign = self)
299
299
300 if experiments:
300 if experiments:
301 for experiment in experiments:
301 for experiment in experiments:
302 experiment.delete()
302 experiment.delete()
303
303
304 for id_exp in parms['experiments']['allIds']:
304 for id_exp in parms['experiments']['allIds']:
305 exp_parms = parms['experiments']['byId'][id_exp]
305 exp_parms = parms['experiments']['byId'][id_exp]
306 dum = (datetime.now() - datetime(1970, 1, 1)).total_seconds()
306 dum = (datetime.now() - datetime(1970, 1, 1)).total_seconds()
307 exp = Experiment(name='{}'.format(dum))
307 exp = Experiment(name='{}'.format(dum))
308 exp.save()
308 exp.save()
309 exp.dict_to_parms(parms, CONF_MODELS, id_exp=id_exp)
309 exp.dict_to_parms(parms, CONF_MODELS, id_exp=id_exp)
310 self.experiments.add(exp)
310 self.experiments.add(exp)
311
311
312 camp_parms = parms['campaigns']['byId'][parms['campaigns']['allIds'][0]]
312 camp_parms = parms['campaigns']['byId'][parms['campaigns']['allIds'][0]]
313
313
314 self.name = '{}-{}'.format(camp_parms['name'], datetime.now().strftime('%y%m%d'))
314 self.name = '{}-{}'.format(camp_parms['name'], datetime.now().strftime('%y%m%d'))
315 self.start_date = camp_parms['start_date']
315 self.start_date = camp_parms['start_date']
316 self.end_date = camp_parms['end_date']
316 self.end_date = camp_parms['end_date']
317 self.tags = camp_parms['tags']
317 self.tags = camp_parms['tags']
318 self.save()
318 self.save()
319
319
320 return self
320 return self
321
321
322 def get_experiments_by_radar(self, radar=None):
322 def get_experiments_by_radar(self, radar=None):
323
323
324 ret = []
324 ret = []
325 if radar:
325 if radar:
326 locations = Location.objects.filter(pk=radar)
326 locations = Location.objects.filter(pk=radar)
327 else:
327 else:
328 locations = set([e.location for e in self.experiments.all()])
328 locations = set([e.location for e in self.experiments.all()])
329
329
330 for loc in locations:
330 for loc in locations:
331 dum = {}
331 dum = {}
332 dum['name'] = loc.name
332 dum['name'] = loc.name
333 dum['id'] = loc.pk
333 dum['id'] = loc.pk
334 dum['experiments'] = [e for e in self.experiments.all() if e.location==loc]
334 dum['experiments'] = [e for e in self.experiments.all() if e.location==loc]
335 ret.append(dum)
335 ret.append(dum)
336
336
337 return ret
337 return ret
338
338
339 def get_absolute_url(self):
339 def get_absolute_url(self):
340 return reverse('url_campaign', args=[str(self.id)])
340 return reverse('url_campaign', args=[str(self.id)])
341
341
342 def get_absolute_url_edit(self):
342 def get_absolute_url_edit(self):
343 return reverse('url_edit_campaign', args=[str(self.id)])
343 return reverse('url_edit_campaign', args=[str(self.id)])
344
344
345 def get_absolute_url_delete(self):
345 def get_absolute_url_delete(self):
346 return reverse('url_delete_campaign', args=[str(self.id)])
346 return reverse('url_delete_campaign', args=[str(self.id)])
347
347
348 def get_absolute_url_export(self):
348 def get_absolute_url_export(self):
349 return reverse('url_export_campaign', args=[str(self.id)])
349 return reverse('url_export_campaign', args=[str(self.id)])
350
350
351 def get_absolute_url_import(self):
351 def get_absolute_url_import(self):
352 return reverse('url_import_campaign', args=[str(self.id)])
352 return reverse('url_import_campaign', args=[str(self.id)])
353
353
354
354
355 class RunningExperiment(models.Model):
355 class RunningExperiment(models.Model):
356 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
356 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
357 running_experiment = models.ManyToManyField('Experiment', blank = True)
357 running_experiment = models.ManyToManyField('Experiment', blank = True)
358 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
358 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
359
359
360
360
361 class Experiment(models.Model):
361 class Experiment(models.Model):
362
362
363 template = models.BooleanField(default=False)
363 template = models.BooleanField(default=False)
364 name = models.CharField(max_length=40, default='', unique=True)
364 name = models.CharField(max_length=40, default='', unique=True)
365 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
365 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
366 freq = models.FloatField(verbose_name='Operating Freq. (MHz)', validators=[MinValueValidator(1), MaxValueValidator(10000)], default=49.9200)
366 freq = models.FloatField(verbose_name='Operating Freq. (MHz)', validators=[MinValueValidator(1), MaxValueValidator(10000)], default=49.9200)
367 start_time = models.TimeField(default='00:00:00')
367 start_time = models.TimeField(default='00:00:00')
368 end_time = models.TimeField(default='23:59:59')
368 end_time = models.TimeField(default='23:59:59')
369 task = models.CharField(max_length=36, default='', blank=True, null=True)
369 task = models.CharField(max_length=36, default='', blank=True, null=True)
370 status = models.PositiveSmallIntegerField(default=4, choices=EXP_STATES)
370 status = models.PositiveSmallIntegerField(default=4, choices=EXP_STATES)
371 author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE)
371 author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE)
372 hash = models.CharField(default='', max_length=64, null=True, blank=True)
372 hash = models.CharField(default='', max_length=64, null=True, blank=True)
373
373
374 class Meta:
374 class Meta:
375 db_table = 'db_experiments'
375 db_table = 'db_experiments'
376 ordering = ('template', 'name')
376 ordering = ('template', 'name')
377
377
378 def __str__(self):
378 def __str__(self):
379 if self.template:
379 if self.template:
380 return u'%s (template)' % (self.name)
380 return u'%s (template)' % (self.name)
381 else:
381 else:
382 return u'%s' % (self.name)
382 return u'%s' % (self.name)
383
383
384 def jsonify(self):
384 def jsonify(self):
385
385
386 data = {}
386 data = {}
387
387
388 ignored = ('template')
388 ignored = ('template')
389
389
390 for field in self._meta.fields:
390 for field in self._meta.fields:
391 if field.name in ignored:
391 if field.name in ignored:
392 continue
392 continue
393 data[field.name] = field.value_from_object(self)
393 data[field.name] = field.value_from_object(self)
394
394
395 data['start_time'] = data['start_time'].strftime('%H:%M:%S')
395 data['start_time'] = data['start_time'].strftime('%H:%M:%S')
396 data['end_time'] = data['end_time'].strftime('%H:%M:%S')
396 data['end_time'] = data['end_time'].strftime('%H:%M:%S')
397 data['location'] = self.location.name
397 data['location'] = self.location.name
398 data['configurations'] = ['{}'.format(conf.pk) for
398 data['configurations'] = ['{}'.format(conf.pk) for
399 conf in Configuration.objects.filter(experiment=self, type=0)]
399 conf in Configuration.objects.filter(experiment=self, type=0)]
400
400
401 return data
401 return data
402
402
403 @property
403 @property
404 def radar_system(self):
404 def radar_system(self):
405 return self.location
405 return self.location
406
406
407 def clone(self, **kwargs):
407 def clone(self, **kwargs):
408
408
409 confs = Configuration.objects.filter(experiment=self, type=0)
409 confs = Configuration.objects.filter(experiment=self, type=0)
410 self.pk = None
410 self.pk = None
411 self.name = '{}_{:%y%m%d}'.format(self.name, datetime.now())
411 self.name = '{}_{:%y%m%d}'.format(self.name, datetime.now())
412 for attr, value in kwargs.items():
412 for attr, value in kwargs.items():
413 setattr(self, attr, value)
413 setattr(self, attr, value)
414
414
415 self.save()
415 self.save()
416
416
417 for conf in confs:
417 for conf in confs:
418 conf.clone(experiment=self, template=False)
418 conf.clone(experiment=self, template=False)
419
419
420 return self
420 return self
421
421
422 def start(self):
422 def start(self):
423 '''
423 '''
424 Configure and start experiments's devices
424 Configure and start experiments's devices
425 ABS-CGS-DDS-RC-JARS
425 ABS-CGS-DDS-RC-JARS
426 '''
426 '''
427
427
428 confs = []
428 confs = []
429 allconfs = Configuration.objects.filter(experiment=self, type = 0).order_by('-device__device_type__sequence')
429 allconfs = Configuration.objects.filter(experiment=self, type = 0).order_by('-device__device_type__sequence')
430 rc_mix = [conf for conf in allconfs if conf.device.device_type.name=='rc' and conf.mix]
430 rc_mix = [conf for conf in allconfs if conf.device.device_type.name=='rc' and conf.mix]
431 if rc_mix:
431 if rc_mix:
432 for conf in allconfs:
432 for conf in allconfs:
433 if conf.device.device_type.name == 'rc' and not conf.mix:
433 if conf.device.device_type.name == 'rc' and not conf.mix:
434 continue
434 continue
435 confs.append(conf)
435 confs.append(conf)
436 else:
436 else:
437 confs = allconfs
437 confs = allconfs
438
438
439 try:
439 try:
440 for conf in confs:
440 for conf in confs:
441 conf.stop_device()
441 conf.stop_device()
442 conf.write_device()
442 conf.write_device()
443 conf.device.conf_active = conf.pk
443 conf.device.conf_active = conf.pk
444 conf.device.save()
444 conf.device.save()
445 conf.start_device()
445 conf.start_device()
446 time.sleep(1)
446 time.sleep(1)
447 except:
447 except:
448 return 0
448 return 0
449 return 2
449 return 2
450
450
451
451
452 def stop(self):
452 def stop(self):
453 '''
453 '''
454 Stop experiments's devices
454 Stop experiments's devices
455 DDS-JARS-RC-CGS-ABS
455 DDS-JARS-RC-CGS-ABS
456 '''
456 '''
457
457
458 confs = Configuration.objects.filter(experiment=self, type = 0).order_by('device__device_type__sequence')
458 confs = Configuration.objects.filter(experiment=self, type = 0).order_by('device__device_type__sequence')
459 confs=confs.exclude(device__device_type__name='cgs')
459 confs=confs.exclude(device__device_type__name='cgs')
460 try:
460 try:
461 for conf in confs:
461 for conf in confs:
462 conf.stop_device()
462 conf.stop_device()
463 except:
463 except:
464 return 0
464 return 0
465 return 1
465 return 1
466
466
467 def get_status(self):
467 def get_status(self):
468
468
469 if self.status == 3:
469 if self.status == 3:
470 return
470 return
471
471
472 confs = Configuration.objects.filter(experiment=self, type=0)
472 confs = Configuration.objects.filter(experiment=self, type=0)
473
473
474 for conf in confs:
474 for conf in confs:
475 conf.status_device()
475 conf.status_device()
476
476
477 total = confs.aggregate(models.Sum('device__status'))['device__status__sum']
477 total = confs.aggregate(models.Sum('device__status'))['device__status__sum']
478
478
479 if total==2*confs.count():
479 if total==2*confs.count():
480 status = 1
480 status = 1
481 elif total == 3*confs.count():
481 elif total == 3*confs.count():
482 status = 2
482 status = 2
483 else:
483 else:
484 status = 0
484 status = 0
485
485
486 self.status = status
486 self.status = status
487 self.save()
487 self.save()
488
488
489 def status_color(self):
489 def status_color(self):
490 color = 'muted'
490 color = 'muted'
491 if self.status == 0:
491 if self.status == 0:
492 color = "danger"
492 color = "danger"
493 elif self.status == 1:
493 elif self.status == 1:
494 color = "warning"
494 color = "warning"
495 elif self.status == 2:
495 elif self.status == 2:
496 color = "success"
496 color = "success"
497 elif self.status == 3:
497 elif self.status == 3:
498 color = "info"
498 color = "info"
499
499
500 return color
500 return color
501
501
502 def parms_to_dict(self):
502 def parms_to_dict(self):
503
503
504 params = Params({})
504 params = Params({})
505 params.add(self.jsonify(), 'experiments')
505 params.add(self.jsonify(), 'experiments')
506
506
507 configurations = Configuration.objects.filter(experiment=self, type=0)
507 configurations = Configuration.objects.filter(experiment=self, type=0)
508
508
509 for conf in configurations:
509 for conf in configurations:
510 params.add(conf.jsonify(), 'configurations')
510 params.add(conf.jsonify(), 'configurations')
511 if conf.device.device_type.name=='rc':
511 if conf.device.device_type.name=='rc':
512 for line in conf.get_lines():
512 for line in conf.get_lines():
513 params.add(line.jsonify(), 'lines')
513 params.add(line.jsonify(), 'lines')
514
514
515 return params.data
515 return params.data
516
516
517 def dict_to_parms(self, parms, CONF_MODELS, id_exp=None):
517 def dict_to_parms(self, parms, CONF_MODELS, id_exp=None):
518
518
519 configurations = Configuration.objects.filter(experiment=self)
519 configurations = Configuration.objects.filter(experiment=self)
520
520
521 if id_exp is not None:
521 if id_exp is not None:
522 exp_parms = parms['experiments']['byId'][id_exp]
522 exp_parms = parms['experiments']['byId'][id_exp]
523 else:
523 else:
524 exp_parms = parms['experiments']['byId'][parms['experiments']['allIds'][0]]
524 exp_parms = parms['experiments']['byId'][parms['experiments']['allIds'][0]]
525
525
526 if configurations:
526 if configurations:
527 for configuration in configurations:
527 for configuration in configurations:
528 configuration.delete()
528 configuration.delete()
529
529
530 for id_conf in exp_parms['configurations']:
530 for id_conf in exp_parms['configurations']:
531 conf_parms = parms['configurations']['byId'][id_conf]
531 conf_parms = parms['configurations']['byId'][id_conf]
532 device = Device.objects.filter(device_type__name=conf_parms['device_type'])[0]
532 device = Device.objects.filter(device_type__name=conf_parms['device_type'])[0]
533 model = CONF_MODELS[conf_parms['device_type']]
533 model = CONF_MODELS[conf_parms['device_type']]
534 conf = model(
534 conf = model(
535 experiment = self,
535 experiment = self,
536 device = device,
536 device = device,
537 )
537 )
538 conf.dict_to_parms(parms, id=id_conf)
538 conf.dict_to_parms(parms, id=id_conf)
539
539
540
540
541 location, created = Location.objects.get_or_create(name=exp_parms['location'])
541 location, created = Location.objects.get_or_create(name=exp_parms['location'])
542 self.name = '{}-{}'.format(exp_parms['name'], datetime.now().strftime('%y%m%d'))
542 self.name = '{}-{}'.format(exp_parms['name'], datetime.now().strftime('%y%m%d'))
543 self.location = location
543 self.location = location
544 self.start_time = exp_parms['start_time']
544 self.start_time = exp_parms['start_time']
545 self.end_time = exp_parms['end_time']
545 self.end_time = exp_parms['end_time']
546 self.save()
546 self.save()
547
547
548 return self
548 return self
549
549
550 def get_absolute_url(self):
550 def get_absolute_url(self):
551 return reverse('url_experiment', args=[str(self.id)])
551 return reverse('url_experiment', args=[str(self.id)])
552
552
553 def get_absolute_url_edit(self):
553 def get_absolute_url_edit(self):
554 return reverse('url_edit_experiment', args=[str(self.id)])
554 return reverse('url_edit_experiment', args=[str(self.id)])
555
555
556 def get_absolute_url_delete(self):
556 def get_absolute_url_delete(self):
557 return reverse('url_delete_experiment', args=[str(self.id)])
557 return reverse('url_delete_experiment', args=[str(self.id)])
558
558
559 def get_absolute_url_import(self):
559 def get_absolute_url_import(self):
560 return reverse('url_import_experiment', args=[str(self.id)])
560 return reverse('url_import_experiment', args=[str(self.id)])
561
561
562 def get_absolute_url_export(self):
562 def get_absolute_url_export(self):
563 return reverse('url_export_experiment', args=[str(self.id)])
563 return reverse('url_export_experiment', args=[str(self.id)])
564
564
565 def get_absolute_url_start(self):
565 def get_absolute_url_start(self):
566 return reverse('url_start_experiment', args=[str(self.id)])
566 return reverse('url_start_experiment', args=[str(self.id)])
567
567
568 def get_absolute_url_stop(self):
568 def get_absolute_url_stop(self):
569 return reverse('url_stop_experiment', args=[str(self.id)])
569 return reverse('url_stop_experiment', args=[str(self.id)])
570
570
571
571
572 class Configuration(PolymorphicModel):
572 class Configuration(PolymorphicModel):
573
573
574 template = models.BooleanField(default=False)
574 template = models.BooleanField(default=False)
575 # name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
575 # name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
576 device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE)
576 device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE)
577 label = models.CharField(verbose_name="Label", max_length=40, default='', blank=True, null=True)
577 label = models.CharField(verbose_name="Label", max_length=40, default='', blank=True, null=True)
578 experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE)
578 experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE)
579 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
579 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
580 created_date = models.DateTimeField(auto_now_add=True)
580 created_date = models.DateTimeField(auto_now_add=True)
581 programmed_date = models.DateTimeField(auto_now=True)
581 programmed_date = models.DateTimeField(auto_now=True)
582 parameters = models.TextField(default='{}')
582 parameters = models.TextField(default='{}')
583 author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE)
583 author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE)
584 hash = models.CharField(default='', max_length=64, null=True, blank=True)
584 hash = models.CharField(default='', max_length=64, null=True, blank=True)
585 message = ""
585 message = ""
586
586
587 class Meta:
587 class Meta:
588 db_table = 'db_configurations'
588 db_table = 'db_configurations'
589 ordering = ('device__device_type__name',)
589 ordering = ('device__device_type__name',)
590
590
591 def __str__(self):
591 def __str__(self):
592
592
593 ret = u'{} '.format(self.device.device_type.name.upper())
593 ret = u'{} '.format(self.device.device_type.name.upper())
594
594
595 if 'mix' in [f.name for f in self._meta.get_fields()]:
595 if 'mix' in [f.name for f in self._meta.get_fields()]:
596 if self.mix:
596 if self.mix:
597 ret = '{} MIX '.format(self.device.device_type.name.upper())
597 ret = '{} MIX '.format(self.device.device_type.name.upper())
598
598
599 if 'label' in [f.name for f in self._meta.get_fields()]:
599 if 'label' in [f.name for f in self._meta.get_fields()]:
600 ret += '{}'.format(self.label)
600 ret += '{}'.format(self.label)
601
601
602 if self.template:
602 if self.template:
603 ret += ' (template)'
603 ret += ' (template)'
604
604
605 return ret
605 return ret
606
606
607 @property
607 @property
608 def name(self):
608 def name(self):
609
609
610 return str(self)
610 return str(self)
611
611
612 def jsonify(self):
612 def jsonify(self):
613
613
614 data = {}
614 data = {}
615
615
616 ignored = ('type', 'polymorphic_ctype', 'configuration_ptr',
616 ignored = ('type', 'polymorphic_ctype', 'configuration_ptr',
617 'created_date', 'programmed_date', 'template', 'device',
617 'created_date', 'programmed_date', 'template', 'device',
618 'experiment')
618 'experiment')
619
619
620 for field in self._meta.fields:
620 for field in self._meta.fields:
621 if field.name in ignored:
621 if field.name in ignored:
622 continue
622 continue
623 data[field.name] = field.value_from_object(self)
623 data[field.name] = field.value_from_object(self)
624
624
625 data['device_type'] = self.device.device_type.name
625 data['device_type'] = self.device.device_type.name
626
626
627 if self.device.device_type.name == 'rc':
627 if self.device.device_type.name == 'rc':
628 data['lines'] = ['{}'.format(line.pk) for line in self.get_lines()]
628 data['lines'] = ['{}'.format(line.pk) for line in self.get_lines()]
629 data['delays'] = self.get_delays()
629 data['delays'] = self.get_delays()
630 data['pulses'] = self.get_pulses()
630 data['pulses'] = self.get_pulses()
631
631
632 elif self.device.device_type.name == 'jars':
632 elif self.device.device_type.name == 'jars':
633 data['decode_type'] = DECODE_TYPE[self.decode_data][1]
633 data['decode_type'] = DECODE_TYPE[self.decode_data][1]
634
634
635 elif self.device.device_type.name == 'dds':
635 elif self.device.device_type.name == 'dds':
636 data['frequencyA_Mhz'] = float(data['frequencyA_Mhz'])
636 data['frequencyA_Mhz'] = float(data['frequencyA_Mhz'])
637 data['frequencyB_Mhz'] = float(data['frequencyB_Mhz'])
637 data['frequencyB_Mhz'] = float(data['frequencyB_Mhz'])
638 data['phaseA'] = dds_data.phase_to_binary(data['phaseA_degrees'])
638 data['phaseA'] = dds_data.phase_to_binary(data['phaseA_degrees'])
639 data['phaseB'] = dds_data.phase_to_binary(data['phaseB_degrees'])
639 data['phaseB'] = dds_data.phase_to_binary(data['phaseB_degrees'])
640
640
641 return data
641 return data
642
642
643 def clone(self, **kwargs):
643 def clone(self, **kwargs):
644
644
645 self.pk = None
645 self.pk = None
646 self.id = None
646 self.id = None
647 for attr, value in kwargs.items():
647 for attr, value in kwargs.items():
648 setattr(self, attr, value)
648 setattr(self, attr, value)
649
649
650 self.save()
650 self.save()
651
651
652 return self
652 return self
653
653
654 def parms_to_dict(self):
654 def parms_to_dict(self):
655
655
656 params = Params({})
656 params = Params({})
657 params.add(self.jsonify(), 'configurations')
657 params.add(self.jsonify(), 'configurations')
658
658
659 if self.device.device_type.name=='rc':
659 if self.device.device_type.name=='rc':
660 for line in self.get_lines():
660 for line in self.get_lines():
661 params.add(line.jsonify(), 'lines')
661 params.add(line.jsonify(), 'lines')
662
662
663 return params.data
663 return params.data
664
664
665 def parms_to_text(self):
665 def parms_to_text(self):
666
666
667 raise NotImplementedError("This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper())
667 raise NotImplementedError("This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper())
668
668
669
669
670 def parms_to_binary(self):
670 def parms_to_binary(self):
671
671
672 raise NotImplementedError("This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper())
672 raise NotImplementedError("This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper())
673
673
674
674
675 def dict_to_parms(self, parameters, id=None):
675 def dict_to_parms(self, parameters, id=None):
676
676
677 params = Params(parameters)
677 params = Params(parameters)
678
678
679 if id:
679 if id:
680 data = params.get_conf(id_conf=id)
680 data = params.get_conf(id_conf=id)
681 else:
681 else:
682 data = params.get_conf(dtype=self.device.device_type.name)
682 data = params.get_conf(dtype=self.device.device_type.name)
683
683
684 if data['device_type']=='rc':
684 if data['device_type']=='rc':
685 self.clean_lines()
685 self.clean_lines()
686 lines = data.pop('lines', None)
686 lines = data.pop('lines', None)
687 for line_id in lines:
687 for line_id in lines:
688 pass
688 pass
689
689
690 for key, value in data.items():
690 for key, value in data.items():
691 if key not in ('id', 'device_type'):
691 if key not in ('id', 'device_type'):
692 setattr(self, key, value)
692 setattr(self, key, value)
693
693
694 self.save()
694 self.save()
695
695
696
696
697 def export_to_file(self, format="json"):
697 def export_to_file(self, format="json"):
698
698
699 content_type = ''
699 content_type = ''
700
700
701 if format == 'racp':
701 if format == 'racp':
702 content_type = 'text/plain'
702 content_type = 'text/plain'
703 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, 'racp')
703 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, 'racp')
704 content = self.parms_to_text(file_format = 'racp')
704 content = self.parms_to_text(file_format = 'racp')
705
705
706 if format == 'text':
706 if format == 'text':
707 content_type = 'text/plain'
707 content_type = 'text/plain'
708 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
708 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
709 content = self.parms_to_text()
709 content = self.parms_to_text()
710
710
711 if format == 'binary':
711 if format == 'binary':
712 content_type = 'application/octet-stream'
712 content_type = 'application/octet-stream'
713 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
713 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
714 content = self.parms_to_binary()
714 content = self.parms_to_binary()
715
715
716 if not content_type:
716 if not content_type:
717 content_type = 'application/json'
717 content_type = 'application/json'
718 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
718 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
719 content = json.dumps(self.parms_to_dict(), indent=2)
719 content = json.dumps(self.parms_to_dict(), indent=2)
720
720
721 fields = {'content_type':content_type,
721 fields = {'content_type':content_type,
722 'filename':filename,
722 'filename':filename,
723 'content':content
723 'content':content
724 }
724 }
725
725
726 return fields
726 return fields
727
727
728 def import_from_file(self, fp):
728 def import_from_file(self, fp):
729
729
730 parms = {}
730 parms = {}
731
731
732 path, ext = os.path.splitext(fp.name)
732 path, ext = os.path.splitext(fp.name)
733
733
734 if ext == '.json':
734 if ext == '.json':
735 parms = json.load(fp)
735 parms = json.load(fp)
736
736
737 if ext == '.dds':
737 if ext == '.dds':
738 lines = fp.readlines()
738 lines = fp.readlines()
739 parms = dds_data.text_to_dict(lines)
739 parms = dds_data.text_to_dict(lines)
740
740
741 if ext == '.racp':
741 if ext == '.racp':
742 if self.device.device_type.name == 'jars':
742 if self.device.device_type.name == 'jars':
743 parms = RacpFile(fp).to_dict()
743 parms = RacpFile(fp).to_dict()
744 parms['filter_parms'] = json.loads(self.filter_parms)
744 parms['filter_parms'] = json.loads(self.filter_parms)
745 return parms
745 return parms
746 parms = RCFile(fp).to_dict()
746 parms = RCFile(fp).to_dict()
747
747
748 return parms
748 return parms
749
749
750 def status_device(self):
750 def status_device(self):
751
751
752 self.message = 'Function not implemented'
752 self.message = 'Function not implemented'
753 return False
753 return False
754
754
755
755
756 def stop_device(self):
756 def stop_device(self):
757
757
758 self.message = 'Function not implemented'
758 self.message = 'Function not implemented'
759 return False
759 return False
760
760
761
761
762 def start_device(self):
762 def start_device(self):
763
763
764 self.message = 'Function not implemented'
764 self.message = 'Function not implemented'
765 return False
765 return False
766
766
767
767
768 def write_device(self, parms):
768 def write_device(self, parms):
769
769
770 self.message = 'Function not implemented'
770 self.message = 'Function not implemented'
771 return False
771 return False
772
772
773
773
774 def read_device(self):
774 def read_device(self):
775
775
776 self.message = 'Function not implemented'
776 self.message = 'Function not implemented'
777 return False
777 return False
778
778
779
779
780 def get_absolute_url(self):
780 def get_absolute_url(self):
781 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
781 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
782
782
783 def get_absolute_url_edit(self):
783 def get_absolute_url_edit(self):
784 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
784 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
785
785
786 def get_absolute_url_delete(self):
786 def get_absolute_url_delete(self):
787 return reverse('url_delete_dev_conf', args=[str(self.id)])
787 return reverse('url_delete_dev_conf', args=[str(self.id)])
788
788
789 def get_absolute_url_import(self):
789 def get_absolute_url_import(self):
790 return reverse('url_import_dev_conf', args=[str(self.id)])
790 return reverse('url_import_dev_conf', args=[str(self.id)])
791
791
792 def get_absolute_url_export(self):
792 def get_absolute_url_export(self):
793 return reverse('url_export_dev_conf', args=[str(self.id)])
793 return reverse('url_export_dev_conf', args=[str(self.id)])
794
794
795 def get_absolute_url_write(self):
795 def get_absolute_url_write(self):
796 return reverse('url_write_dev_conf', args=[str(self.id)])
796 return reverse('url_write_dev_conf', args=[str(self.id)])
797
797
798 def get_absolute_url_read(self):
798 def get_absolute_url_read(self):
799 return reverse('url_read_dev_conf', args=[str(self.id)])
799 return reverse('url_read_dev_conf', args=[str(self.id)])
800
800
801 def get_absolute_url_start(self):
801 def get_absolute_url_start(self):
802 return reverse('url_start_dev_conf', args=[str(self.id)])
802 return reverse('url_start_dev_conf', args=[str(self.id)])
803
803
804 def get_absolute_url_stop(self):
804 def get_absolute_url_stop(self):
805 return reverse('url_stop_dev_conf', args=[str(self.id)])
805 return reverse('url_stop_dev_conf', args=[str(self.id)])
806
806
807 def get_absolute_url_status(self):
807 def get_absolute_url_status(self):
808 return reverse('url_status_dev_conf', args=[str(self.id)])
808 return reverse('url_status_dev_conf', args=[str(self.id)])
@@ -1,116 +1,120
1 #igp-top{
1 #igp-top{
2 height:35px;
2 height:35px;
3 background-color: var(--primary);
3 background-color: var(--primary);
4 }
4 }
5
5
6 #igp-top .navbar{
6 #igp-top .navbar{
7 padding: 0 0;
7 padding: 0 0;
8 }
8 }
9
9
10 .dropdown-menu a{
11 color: #000000 !important;
12 }
13
10 .nav-social a {
14 .nav-social a {
11 text-align: center;
15 text-align: center;
12 line-height: 23px;
16 line-height: 23px;
13 width: 25px;
17 width: 25px;
14 margin-right: 10px;
18 margin-right: 10px;
15 color: #fff !important;
19 color: #fff !important;
16 }
20 }
17
21
18 .nav-social a:hover{
22 .nav-social a:hover{
19 background-color: #277ea0;
23 background-color: #277ea0;
20 }
24 }
21
25
22 .navbar {
26 .navbar {
23 padding: 7px 0;
27 padding: 7px 0;
24 }
28 }
25
29
26 .navbar-toggler-icon {
30 .navbar-toggler-icon {
27 font-size: 0.75em;
31 font-size: 0.75em;
28 padding-top: 5px;
32 padding-top: 5px;
29 }
33 }
30
34
31 .nav-contacto{
35 .nav-contacto{
32 margin-top: 5px;
36 margin-top: 5px;
33 display: contents;
37 display: contents;
34 }
38 }
35
39
36 .nav-contacto li{
40 .nav-contacto li{
37 font-size: 14px;
41 font-size: 14px;
38 margin-left: 10px;
42 margin-left: 10px;
39 display: inline;
43 display: inline;
40 color: #fff;
44 color: #fff;
41 }
45 }
42
46
43 .nav-contacto ul>li:last-of-type {
47 .nav-contacto ul>li:last-of-type {
44 padding-left: 10px;
48 padding-left: 10px;
45 border-left: 1px solid white;
49 border-left: 1px solid white;
46 }
50 }
47
51
48 .nav-contacto li a{
52 .nav-contacto li a{
49 color: #fff;
53 color: #fff;
50 text-decoration: none;
54 text-decoration: none;
51 }
55 }
52
56
53 .navbar-igp-1 {
57 .navbar-igp-1 {
54 display: contents;
58 display: contents;
55 }
59 }
56 .navbar-igp-1 .nav-link {
60 .navbar-igp-1 .nav-link {
57 color: var(--secondary);
61 color: var(--secondary);
58 display: inline;
62 display: inline;
59 padding: 0;
63 padding: 0;
60 }
64 }
61
65
62 .navbar-igp-1 li.active a,
66 .navbar-igp-1 li.active a,
63 .navbar-igp-1 li a:hover {
67 .navbar-igp-1 li a:hover {
64 color: var(--tertiary);
68 color: var(--tertiary);
65 }
69 }
66
70
67 .navbar-igp-1 li:after {
71 .navbar-igp-1 li:after {
68 content: '|';
72 content: '|';
69 margin: 0.2em;
73 margin: 0.2em;
70 }
74 }
71
75
72 .navbar-igp-1 ul>li:last-of-type:after {
76 .navbar-igp-1 ul>li:last-of-type:after {
73 margin-right: 0;
77 margin-right: 0;
74 }
78 }
75
79
76 #igp-bottom {
80 #igp-bottom {
77 background-color: var(--bg-sections);
81 background-color: var(--bg-sections);
78 border-bottom: var(--bd-sections);
82 border-bottom: var(--bd-sections);
79 border-top: var(--bd-sections);
83 border-top: var(--bd-sections);
80 }
84 }
81 #igp-bottom .navbar {
85 #igp-bottom .navbar {
82 padding: 7px 0;
86 padding: 7px 0;
83 }
87 }
84
88
85 .navbar-igp-2 .nav-link{
89 .navbar-igp-2 .nav-link{
86 color: var(--secondary);
90 color: var(--secondary);
87 display: inline;
91 display: inline;
88 padding: 0;
92 padding: 0;
89 }
93 }
90
94
91 .navbar-igp-2 ul>li:not(:first-of-type) a:hover{
95 .navbar-igp-2 ul>li:not(:first-of-type) a:hover{
92 color: var(--secondary);
96 color: var(--secondary);
93 }
97 }
94
98
95 .navbar-igp-2 li.active a {
99 .navbar-igp-2 li.active a {
96 color: var(--tertiary);
100 color: var(--tertiary);
97 }
101 }
98
102
99 .navbar-igp-2 ul>li:not(:first-of-type):before {
103 .navbar-igp-2 ul>li:not(:first-of-type):before {
100 content: '|';
104 content: '|';
101 margin: 0.2em;
105 margin: 0.2em;
102 }
106 }
103
107
104 .logo{
108 .logo{
105 height: 40px;
109 height: 40px;
106 padding-right: 0.5em;
110 padding-right: 0.5em;
107 }
111 }
108
112
109 @media (max-width: 768px){
113 @media (max-width: 768px){
110 .logo{
114 .logo{
111 height: 30px;
115 height: 30px;
112 }
116 }
113 .navbar-igp-1 li:after {
117 .navbar-igp-1 li:after {
114 content: '';
118 content: '';
115 }
119 }
116 } No newline at end of file
120 }
@@ -1,45 +1,45
1 {% load static %} {% load bootstrap4 %}
1 {% load static %} {% load bootstrap4 %}
2 <footer>
2 <footer>
3 <div class="container">
3 <div class="container">
4 <ul class="footer-contact">
4 <ul class="footer-contact">
5 <li>
5 <li>
6 <span class="fa fa-fax"></span><div><p>Atención al ciudadano</p>
6 <span class="fa fa-fax"></span><div><p>Atención al ciudadano</p>
7 <p>Lunes a Viernes de 8:30 a 16:30</p></div>
7 <p>Lunes a Viernes de 8:30 a 16:30</p></div>
8 </li>
8 </li>
9 <li>
9 <li>
10 <span class="fa fa-map-marker-alt"></span><div>
10 <span class="fa fa-map-marker"></span><div>
11 <p>Calle Badajoz Nº 169 Urb. Mayorazgo</p>
11 <p>Calle Badajoz Nº 169 Urb. Mayorazgo</p>
12 <p>I Etapa Ate, Lima 15012 - Perú</p></div>
12 <p>I Etapa Ate, Lima 15012 - Perú</p></div>
13 </li>
13 </li>
14 <li>
14 <li>
15 <span class="fa fa-envelope"></span>
15 <span class="fa fa-envelope"></span>
16 roj@igp.gob.pe
16 roj@igp.gob.pe
17 </li>
17 </li>
18 <li>
18 <li>
19 <span class="fa fa-phone"></span>
19 <span class="fa fa-phone"></span>
20 (511)317-2313
20 (511)317-2313
21 </li>
21 </li>
22 </ul>
22 </ul>
23 <ul class="nav-social social-footer">
23 <ul class="nav-social social-footer">
24 <li>
24 <li>
25 <a href="https://www.facebook.com/igp.peru"><i class="fab fa-facebook-f"></i></a>
25 <a href="https://www.facebook.com/igp.peru"><i class="fab fa-facebook-f"></i></a>
26 </li>
26 </li>
27 <li>
27 <li>
28 <a href="https://twitter.com/igp_peru"><i class="fab fa-twitter"></i></a>
28 <a href="https://twitter.com/igp_peru"><i class="fab fa-twitter"></i></a>
29 </li>
29 </li>
30 <li>
30 <li>
31 <a href="https://www.linkedin.com/company/igpperu/"><i class="fab fa-linkedin-in"></i></a>
31 <a href="https://www.linkedin.com/company/igpperu/"><i class="fab fa-linkedin-in"></i></a>
32 </li>
32 </li>
33 <li>
33 <li>
34 <a href="https://www.instagram.com/igp.peru"><i class="fab fa-instagram"></i></a>
34 <a href="https://www.instagram.com/igp.peru"><i class="fab fa-instagram"></i></a>
35 </li>
35 </li>
36 <li>
36 <li>
37 <a href="https://www.youtube.com/igp_videos"><i class="fab fa-youtube"></i></a>
37 <a href="https://www.youtube.com/igp_videos"><i class="fab fa-youtube"></i></a>
38 </li>
38 </li>
39 </ul>
39 </ul>
40 </div>
40 </div>
41 <iframe class="map d-none d-sm-block"
41 <iframe class="map d-none d-sm-block"
42 src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d3901.828012758223!2d-76.94633793139629!3d-12.055351713347235!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x7ea774b6fa66a3c6!2sInstituto+Geof%C3%ADsico+del+Per%C3%BA!5e0!3m2!1ses-419!2spe!4v1545658855595"
42 src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d3901.828012758223!2d-76.94633793139629!3d-12.055351713347235!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x7ea774b6fa66a3c6!2sInstituto+Geof%C3%ADsico+del+Per%C3%BA!5e0!3m2!1ses-419!2spe!4v1545658855595"
43 width="100%" height="100%" frameborder="0" allowfullscreen="false">&#160;
43 width="100%" height="100%" frameborder="0" allowfullscreen="false">&#160;
44 </iframe>
44 </iframe>
45 </footer> No newline at end of file
45 </footer>
@@ -1,119 +1,130
1 {% load static %} {% load bootstrap4 %}
1 {% load static %} {% load bootstrap4 %}
2
2
3 <div id="igp-top">
3 <div id="igp-top">
4 <div class="container">
4 <div class="container">
5 <nav class="navbar navbar-expand">
5 <nav class="navbar navbar-expand">
6 <div class="nav-social">
6 <div class="nav-social">
7 <ul class="navbar-nav mr-auto">
7 <ul class="navbar-nav mr-auto">
8 <li class="nav-item">
8 <li class="nav-item">
9 <a target="_blank" href="https://www.facebook.com/igp.peru" class="nav-link">
9 <a target="_blank" href="https://www.facebook.com/igp.peru" class="nav-link">
10 <i class="fab fa-facebook-f">
10 <i class="fab fa-facebook-f">
11 </i></a></li>
11 </i></a></li>
12 <li class="nav-item"><a target="_blank" href="https://twitter.com/igp_peru" class="nav-link">
12 <li class="nav-item"><a target="_blank" href="https://twitter.com/igp_peru" class="nav-link">
13 <i class="fab fa-twitter">
13 <i class="fab fa-twitter">
14 </i></a></li>
14 </i></a></li>
15 <li class="nav-item"><a target="_blank"
15 <li class="nav-item"><a target="_blank"
16 href="https://www.linkedin.com/company/igpperu/" class="nav-link">
16 href="https://www.linkedin.com/company/igpperu/" class="nav-link">
17 <i class="fab fa-linkedin-in">
17 <i class="fab fa-linkedin-in">
18 </i></a></li>
18 </i></a></li>
19 <li class="nav-item"><a target="_blank"
19 <li class="nav-item"><a target="_blank"
20 href="https://www.instagram.com/igp.peru" class="nav-link">
20 href="https://www.instagram.com/igp.peru" class="nav-link">
21 <i class="fab fa-instagram">
21 <i class="fab fa-instagram">
22 </i></a></li>
22 </i></a></li>
23 <li class="nav-item"><a target="_blank"
23 <li class="nav-item"><a target="_blank"
24 href="https://www.youtube.com/igp_videos" class="nav-link">
24 href="https://www.youtube.com/igp_videos" class="nav-link">
25 <i class="fab fa-youtube">
25 <i class="fab fa-youtube">
26 </i></a></li>
26 </i></a></li>
27 </ul>
27 </ul>
28 </div>
28 </div>
29 <div class="nav-contacto">
29 <div class="nav-contacto">
30 <ul class="navbar-nav ml-auto">
30 <ul class="navbar-nav ml-auto">
31 <li class="d-none d-lg-inline nav-item">
31 <li class="d-none d-lg-inline nav-item">
32 <span><i class="fa fa-phone"> </i> (511) 3172313</span>
32 <span><i class="fa fa-phone"> </i> (511) 3172313</span>
33 </li>
33 </li>
34 <li class="d-none d-lg-inline nav-item">
34 <li class="d-none d-lg-inline nav-item">
35 <a href="mailto:roj@igp.gob.pe">
35 <a href="mailto:roj@igp.gob.pe">
36 <span><i class="fa fa-envelope"> </i>&nbsp;roj@igp.gob.pe</span>
36 <span><i class="fa fa-envelope"> </i>&nbsp;roj@igp.gob.pe</span>
37 </a>
37 </a>
38 </li>
38 </li>
39 <li class="nav-divider"></li>
40 {% if user.is_authenticated %}
41 <li class="dropdown">
42 <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ user.first_name }}<span class="caret"></span></a>
43 <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
44 <li><a class="dropdown-item" href="/admin">Control Panel</a></li>
45 <li><a class="dropdown-item" href="{% url 'url_logout' %}">Logout</a></li>
46 </ul>
47 </li>
48 {% else %}
49 <li class="nav-item">
50 <a href="{% url 'url_login' %}?next={{request.get_full_path}}">
51 <span><i class="fas fa-user"> </i>&nbsp;Login</span>
52 </a>
53 </li>
54 {% endif %}
39 </ul>
55 </ul>
40 </div>
56 </div>
41 </nav>
57 </nav>
42 </div>
58 </div>
43 </div>
59 </div>
44
60
45 <div class="container">
61 <div class="container">
46 <nav class="navbar navbar-expand-md">
62 <nav class="navbar navbar-expand-md">
47 <ul class="navbar-nav mr-auto">
63 <ul class="navbar-nav mr-auto">
48 <a class="nav-link"
64 <a class="nav-link"
49 href="/">
65 href="/">
50 <img class="logo img-fluid" src="{% static 'images/logo-minan.png' %}"
66 <img class="logo img-fluid" src="{% static 'images/logo-minan.png' %}"
51 alt="Logo Minam IGP">
67 alt="Logo Minam IGP">
52 <img class="logo img-fluid" src="{% static 'images/logo_igp_normal.png' %}" alt="Logo IGP">
68 <img class="logo img-fluid" src="{% static 'images/logo_igp_normal.png' %}" alt="Logo IGP">
53 </a>
69 </a>
54 </ul>
70 </ul>
55 <button class="navbar-toggler" type="button" data-toggle="collapse"
71 <button class="navbar-toggler" type="button" data-toggle="collapse"
56 data-target="#navbar-main"
72 data-target="#navbar-main"
57 aria-controls="navbar-main" aria-expanded="false"
73 aria-controls="navbar-main" aria-expanded="false"
58 aria-label="Toggle navigation">
74 aria-label="Toggle navigation">
59 <span class="navbar-toggler-icon">
75 <span class="navbar-toggler-icon">
60 <i class="fas fa-ellipsis-v" style="color:#444"></i>
76 <i class="fas fa-ellipsis-v" style="color:#444"></i>
61 </span>
77 </span>
62 </button>
78 </button>
63 <div id="navbar-main" class="navbar-collapse collapse">
79 <div id="navbar-main" class="navbar-collapse collapse">
64 <div class="navbar-igp-1">
80 <div class="navbar-igp-1">
65 <ul class="navbar-nav ml-auto">
81 <ul class="navbar-nav ml-auto">
66 <li class="nav-item {{menu_operation}}">
82 <li class="nav-item {{menu_operation}}">
67 <a class="nav-link" href="{% url 'url_operation'%}">Operation</a>
83 <a class="nav-link" href="{% url 'url_operation'%}">Operation</a>
68 </li>
84 </li>
69 <li class="nav-item {{menu_campaigns}}">
85 <li class="nav-item {{menu_campaigns}}">
70 <a class="nav-link" href="{% url 'url_campaigns'%}">Campaigns</a>
86 <a class="nav-link" href="{% url 'url_campaigns'%}">Campaigns</a>
71 </li>
87 </li>
72 <li class="nav-item {{menu_experiments}}">
88 <li class="nav-item {{menu_experiments}}">
73 <a class="nav-link" href="{% url 'url_experiments'%}">Experiments</a>
89 <a class="nav-link" href="{% url 'url_experiments'%}">Experiments</a>
74 </li>
90 </li>
75 <li class="nav-item {{menu_configurations}}">
91 <li class="nav-item {{menu_configurations}}">
76 <a class="nav-link" href="{% url 'url_dev_confs'%}">Configurations</a>
92 <a class="nav-link" href="{% url 'url_dev_confs'%}">Configurations</a>
77 </li>
93 </li>
78 <li class="nav-item {{menu_devices}}">
94 <li class="nav-item {{menu_devices}}">
79 <a class="nav-link" href="{% url 'url_devices'%}">Devices</a>
95 <a class="nav-link" href="{% url 'url_devices'%}">Devices</a>
80 </li>
96 </li>
81 </ul>
97 </ul>
82
83 <ul class="nav navbar-nav navbar-right">
84 <li class="nav-divider"></li>
85 {% if user.is_authenticated %}
86 <li class="dropdown">
87 <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ user.first_name }}<span class="caret"></span></a>
88 <ul class="dropdown-menu" role="menu">
89 <li><a href="/admin" target="_blank">Control Panel</a></li>
90 <li><a href="{% url 'url_logout' %}">Logout</a></li>
91 </ul>
92 </li>
93 {% else %}
94 <li class="nav-item"><a class="nav-link" href="{% url 'url_login' %}?next={{request.get_full_path}}">Login</a></li>
95 {% endif %}
96 </ul>
97 </div>
98 </div>
98 </div>
99 </div>
99
100
100 </nav>
101 </nav>
101 </div>
102 </div>
102
103
103 <div id="igp-bottom">
104 <div id="igp-bottom">
104 <div class="container">
105 <div class="container">
105 <nav class="navbar navbar-expand">
106 <nav class="navbar navbar-expand">
106 <div class="navbar-igp-2">
107 <div class="navbar-igp-2">
107 <ul class="navbar-nav mr-auto">
108 <ul class="navbar-nav mr-auto">
108 <li class="nav-item active">
109 <li class="nav-item active">
109 <a class="nav-link"
110 <a class="nav-link"
110 href="https://www.gob.pe/igp"><span><i class="fas fa-home"> </i>&nbsp; IGP portal</span></a>
111 href="https://www.gob.pe/igp"><span><i class="fas fa-home"> </i>&nbsp; IGP portal</span></a>
111 </li>
112 </li>
113 {% if tag %}
114 <li class="nav-item">
115 <a class="nav-link" href="/">{{tag | title}}</a>
116 </li>
117 {% endif %}
118 {% if title != 'Home' %}
119 <li class="nav-item">
120 <a class="nav-link">{{title}}</a>
121 </li>
122 {% endif %}
112 </ul>
123 </ul>
113 </div>
124 </div>
114 </nav>
125 </nav>
115 </div>
126 </div>
116 </div>
127 </div>
117 <br>
128 <br>
118
129
119
130
@@ -1,5 +1,5
1 /*!
1 /*!
2 * Datetimepicker for Bootstrap v3
2 * Datetimepicker for Bootstrap 3
3 * version : 4.17.47
3 * https://github.com/Eonasdan/bootstrap-datetimepicker/
4 * https://github.com/Eonasdan/bootstrap-datetimepicker/
4 */
5 */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:before,.bootstrap-datetimepicker-widget.dropdown-menu:after{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid white;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid white;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:bold;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action="today"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.old,.bootstrap-datetimepicker-widget table td.new{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#337ab7;border-top-color:rgba(0,0,0,0.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget.wider{width:21em}.bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em !important}.input-group.date .input-group-addon{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0} No newline at end of file
5 .bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:99999!important;border-radius:4px}.bootstrap-datetimepicker-widget.timepicker-sbs{width:600px}.bootstrap-datetimepicker-widget.bottom:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:7px}.bootstrap-datetimepicker-widget.bottom:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:8px}.bootstrap-datetimepicker-widget.top:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.top:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;position:absolute;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget .dow{width:14.2857%}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:100%;font-weight:bold;font-size:1.2em}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;width:20px;height:20px;border-radius:4px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#999}.bootstrap-datetimepicker-widget td.today{position:relative}.bootstrap-datetimepicker-widget td.today:before{content:'';display:inline-block;border-left:7px solid transparent;border-bottom:7px solid #428bca;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:block;width:47px;height:54px;line-height:54px;float:left;margin:2px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td span.old{color:#999}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget th.switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:none;color:#999;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-group.date .input-group-addon span{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px}.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody>tr>td{padding:0!important} No newline at end of file
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now