404
\nPage not found
diff --git a/README.md b/README.md
index 6f50096..3d1f25e 100644
--- a/README.md
+++ b/README.md
@@ -6,4 +6,4 @@ Installation: http://www.flowbat.com/installation.html
User Manual: http://www.flowbat.com/user-manual.html
Support: support@flowbat.com
-v1.3.2
+v1.5.0
diff --git a/client/helpers.coffee b/client/helpers.coffee
index dfc24e4..492fc3c 100644
--- a/client/helpers.coffee
+++ b/client/helpers.coffee
@@ -2,6 +2,10 @@ UI.registerHelper("fieldI18nString", ->
"rwcut.fields." + @.trim()
)
+UI.registerHelper("fieldDefinitions", ->
+ "field.definitions." + @.trim()
+)
+
UI.registerHelper("fieldIsSelected", (query, property) ->
@.toString() in query[property]
)
diff --git a/client/i18n/en.coffee b/client/i18n/en.coffee
index c2e29e1..e483601 100644
--- a/client/i18n/en.coffee
+++ b/client/i18n/en.coffee
@@ -119,7 +119,7 @@ i18n.addResourceBundle("en",
"initialFlags": "Initial flags"
"sessionFlags": "Session flags"
"application": "Application"
- "type": "Sensor type"
+ "type": "Flow type"
"sTime+msec": "starting time of flow including milliseconds (milliseconds are always displayed)"
"eTime+msec": "end time of flow including milliseconds (milliseconds are always displayed)"
"dur+msec": "duration of flow including milliseconds (milliseconds are always displayed)"
@@ -132,6 +132,44 @@ i18n.addResourceBundle("en",
"Bytes": "Bytes"
"cumul_%": "% Cumulative"
"Date": "Bin date and time"
+ field:
+ definitions:
+ "sIP": "Source IP address. These can be specified during input as IP addresses or CIDR notation."
+ "dIP": "Destination IP address. These can be specified during input as IP addresses or CIDR notation."
+ "aIP": "Matches source or destination IP address. These can be specified during input as IP addresses or CIDR notation." # proxy
+ "sPort": "Source ports can be specified during input as individual ports or hypenated ranges (IE: 0-1024)"
+ "dPort": "Destination ports can be specified during input as individual ports or hypenated ranges (IE: 0-1024)"
+ "aPort": "This will match against records with a source or destination port matching this value or range (IE: 0-1024)." # proxy
+ "protocol": "Pass the record if its IP Suite Protocol is in this INTEGER_LIST, possible values are 0-255."
+ "pro": "$t(rwcut.fields.protocol)"
+ "packets": "Pass the record if its packet count is in this INTEGER_RANGE or value."
+ "bytes": "Pass the record if its average bytes per packet count (bytes/packet) is in this DECIMAL_RANGE."
+ "flags": "Pass the record if any of the HIGH_SET/MASK_SET pairs is true when looking at the bitwise OR of the TCP flags across all packets in the flow."
+ "sTime": "Starting time of flow (seconds resolution)."
+ "duration": "Duration of flow (seconds resolution)."
+ "dur": "$t(rwcut.fields.duration)"
+ "eTime": "End time of the flow (seconds resolution)."
+ "sensor": "Name or ID of the sensor where the flow was collected."
+ "sen": "$t(rwcut.fields.sensor)"
+ "class": "Binning by class and/or type equates to binning by the integer value used internally to represent the class/type pair. See the rwflowpack configuration."
+ "scc": "This is filtering or grouping by source country code. The source country code refers to the country code associated with the source address per flow record."
+ "dcc": "This is filtering or grouping by destination country code. The destination country code refers to the country code associated with the destination address per flow record."
+ "initialFlags": "Pass the record if the initial HIGH_SET/MASK_SET pairs is true when looking at the bitwise OR of the TCP flags across the FIRST packet in the flow."
+ "sessionFlags": "Pass the record if any of the HIGH_SET/MASK_SET pairs is true when looking at the bitwise OR of the TCP flags across all packets in the flow, excluding the first."
+ "application": "The application value is the port number that is traditionally used for that type of traffic but is based on packet inspection by the generator. If the application cannot be determined, a 0 is used. Not all flow generators will inspect data to this level."
+ "type": "Flow type. Types are defined in silk.conf, they typically refer to the direction of the flow. Examples include; int2"
+ "sTime+msec": "starting time of flow including milliseconds (milliseconds are always displayed)"
+ "eTime+msec": "end time of flow including milliseconds (milliseconds are always displayed)"
+ "dur+msec": "duration of flow including milliseconds (milliseconds are always displayed)"
+ "iType": "Pass the record if its ICMP (or ICMPv6) type is in this INTEGER_LIST; possible values 0-255."
+ "iCode": "Pass the record if its ICMP (or ICMPv6) code is in this INTEGER_LIST; possible values 0-255."
+ "icmpTypeCode": "ICMP type & code."
+ # rwstats values
+ "Records": "In rwstats, count the number of flow records that mapped to each bin."
+ "Packets": "In rwstats, sum the number of packets across all records that mapped to each bin."
+ "Bytes": "In rwstats, sum the number of bytes across all records that mapped to each bin."
+ "cumul_%": "Cumulative-percentage"
+ "Date": "Bin date and time"
users:
fields:
username: "Username"
diff --git a/client/templates/help/help.html.jade b/client/templates/help/help.html.jade
index 2b84f78..723f030 100644
--- a/client/templates/help/help.html.jade
+++ b/client/templates/help/help.html.jade
@@ -3,7 +3,416 @@ template(name="help")
.row
.col-xs-12
.panel
- .panel-heading
- h4.panel-title Help
.panel-body
- | Documentation will be here soon.
+ head
+ meta(charset='utf-8')
+ title Untitled Document.md
+ style.
+ body#preview
+ h1
+ a#FlowBAT_0
+ | FlowBAT Help
+ hr
+ p
+ a(href='http://www.flowbat.com/') FlowBAT
+ | is a graphical flow-based analysis tool. Utilizing the power and versatility of network flow records,
+ a(href='http://www.flowbat.com/') FlowBAT
+ | can help provide visibility for network administrators and network security practitioners.
+ p
+ | Whether you are a seasoned pro at using flow data or brand new to it, FlowBAT provides a user experience that should make it easy to rapidly track connections in to and out of your network. This includes
+ ul
+ li Investigating intrusion detection system alerts
+ li Tracking attacker activity through a network
+ li Troubleshooting network communication issues
+ li Learning more about the communication to/from devices on your network
+ h2
+ a#ToC
+ | Table of Contents
+ hr
+ h4
+ p(style='white-space:pre;')
+ a(href='#FlowBAT_0') FlowBAT
+ a(href='#Tech_10') Tech
+ a(href='#Count_40') Count
+ a(href='#Tech_10') Tech
+ a(href='#Installation_14') Installation
+ a(href='#Initial_Configuration_18') Initial Configuration
+ h5
+ p(style='white-space:pre;')
+ a(href='#SiLK_Site_Configuration_File_20') - SiLK Site Configuration File
+ a(href='#SiLK_Root_Directory_22') - SiLK Root Directory
+ a(href='#Temporary_Storage_Directory_24') - Temporary Storage Directory
+ h4
+ a(href='#Basic_Usage_and_Best_Practices_27') Basic Usage and Best Practices
+ h5
+ p(style='white-space:pre;')
+ a(href='#Filters_31') - Filters
+ a(href='#Exclusions_38') - Exclusions
+ a(href='#Stats_45') - Stats
+ a(href='#Count_40') - Count
+ a(href='#IP_Sets_53') - IP Sets
+ a(href='#Tuple_Files_56') - Tuple Files
+ a(href='#PCAP_Analysis') - PCAP Analysis
+ a(href='#RWF_Analysis') - RWF Analysis
+ h4
+ a(href='#Layout_59') Layout
+ h5
+ p(style='white-space:pre;')
+ a(href='#Dashboard_69') - Dashboard
+ a(href='#Quick_Query_72') - Quick Query
+ a(href='#Saved_Queries_75') - Saved Queries
+ a(href='#IP_Sets_78') - IP Sets
+ a(href='#Tuple_Files_81') - Tuple Files
+ a(href='#Night_Mode') - Night Mode
+ a(href='#Configuration_Settings_84') - Configuration Settings
+ a(href='#User_Administration_86') - User Administration
+ a(href='#SiLK_Server_Administration_88') - SiLK Server Administration
+ a(href='#Help_90') - Help
+ h4
+ a(href='#Query_Examples_94') QueryExamples
+ a(href='#Additional_Notes_115') Additional Notes
+ h5
+ p(style='white-space:pre;')
+ a(href='#Standards_117') - Standards
+ a(href='#HTTPS_123') - HTTPS
+ h4
+ a(href='#Support_126') Support
+ a(href='#License_135') License
+ h3
+ a#Tech_10
+ | Tech
+ hr
+ p
+ a(href='http://www.flowbat.com/') FlowBAT
+ | is written in Node.js using the Meteor framework. It is designed to work along side an existing
+ a(href='https://tools.netsa.cert.org/silk/') SiLK
+ | -based NetFlow system, or to be installed in conjunction with one.
+ a(href='http://www.flowbat.com/') FlowBAT
+ | was written with ease of installation and deployment in mind.
+ h3
+ a#Installation_14
+ | Installation
+ hr
+ p
+ | If you’re reading this, you probably already succeeded at installing
+ a(href='http://www.flowbat.com/') FlowBAT
+ | . However, if you are perhaps not the installer and are looking to check out what went into getting this running, check out the
+ a(href='http://www.flowbat.com/installation.html') installation
+ | documentation. It was probably just two scripts and maybe some manually configuration editing of sensor.conf and silk.conf.
+ h3
+ a#Initial_Configuration_18
+ | Initial Configuration
+ hr
+ h4
+ a#SiLK_Site_Configuration_File_20
+ | SiLK Site Configuration File
+ p
+ | This is the main configuration file that SiLK uses to interpret your sensor deployment. If you’ve installed using the scripts provided at
+ a(href='http://www.flowbat.com/') FlowBAT
+ | .com then it is /data/silk.conf
+ h4
+ a#SiLK_Root_Directory_22
+ | SiLK Root Directory
+ p
+ | This is the directory where you are storing flow data on the SiLK server. If you’ve installed using the scripts provided at
+ a(href='http://www.flowbat.com/') FlowBAT
+ | .com then it is /data/
+ h4
+ a#Temporary_Storage_Directory_24
+ | Temporary Storage Directory
+ p
+ | This is where temporary files, sets, rwf files, and generally anything else that FlowBAT needs to make and use later will be stored. It is easy to want to use /tmp/ as the directory but due to how the filesystem cleans it up regularly, it is not recommended. Instead, create a directory that you can manually control if needed.
+ h3
+ a#Basic_Usage_and_Best_Practices_27
+ | Basic Usage and Best Practices
+ hr
+ p
+ a(href='http://www.flowbat.com/') FlowBAT
+ | can be used to search for flows, perform stats against user defined bins of flow data, or it can be used to count flows of a certain type and put them in timebased bins for a time based analysis. The record results are presented as a customizable table where columns can be moved around via mouse, and fields can be removed using selection boxes below the table. Single clicking a column will all data on the table in an ascending or descending order based on the column clicked. Every value in the table has a pivot capability when clicked. For instance, timestamps can be used to further customize the filter by adding a “Before/After 1 minute” to the filter simply by clicking and pivoting off of the user selected time in the table. IP addresses have lookup features in Robtex. More sources are being added via updates.
+ em Stats
+ | and
+ em Count
+ | output types can be presented as either a table or a chart.
+ em Stats
+ | is based on
+ a(href='https://tools.netsa.cert.org/silk/rwstats.html') rwstats
+ | and the tables have limited pivoting available for
+ em Stats Fields
+ | .
+ em Count
+ | is based on
+ a(href='https://tools.netsa.cert.org/silk/rwcount.html') rwcount
+ | and has static table output as well as line chart output. For more details on
+ em Stats
+ | and
+ em Count
+ | usage, see below.
+ h4
+ a#Filters_31
+ | Filters
+ p
+ | The most common usage of FlowBAT will be to use filters to search for specific flows from a SiLK datastore. The syntax for a query is implicitly “AND”, meaning that every record in a result will be a match of the combined result of all user provided options in the query. The goal is always to narrow down to smaller results via
+ em filters
+ | , and then you can do more specific carving using
+ em exclusions
+ | . Lets say that you are looking for traffic where either address is 192.168.1.15. Your filter will be as simple as:
+ pre
+ code
+ | --any-address=192.168.1.15 --type=all
+ p
+ | The
+ em any-address
+ | option says to look for 192.168.1.15 in source or destination IP address fields. The
+ em type
+ | option is an input option that states that we want to look in all forms of traffic whether it is inbound, outbound, or internal to internal traffic. In this case the
+ em type
+ | is redundant though due to liberties taken in FlowBAT to meet more common user use cases. We default to “all” for the
+ em type
+ | field. See “Other Notes” at the end of this documentation for more detail.
+ h4
+ a#Exclusions_38
+ | Exclusions
+ p
+ em Exclusions
+ | are used to narrow a filter’s results. Think of exclusions as doing an equal and opposite feature of filtering. Assume that you have a fair amount of SSH traffic and Google Hangouts traffic that is overwhelming a specific search. Hypothetically the following exclusion would remove records from the results that have [a source IP address of 192.168.1.15 and a source address of port 22] OR [UDP records with some local source IP addresses that looks like Google Hangouts traffic on ports 19302 through 19309]. You could write an exclusion as such:
+ pre
+ code
+ | --saddress=192.168.1.15 --sport=22 OR --protocol=17 --scidr=192.168.0.0/16 --dcidr=173.194.0.0/16,74.125.0.0/16 --aport=19302-19309
+ p
+ | If you’re wanting to look for large groupings of IP addresses, you’ll want to generate IP sets. Please refer to the “IP Sets” section for more information. When filters alone won’t accomplish some goals of pulling very specific 5-tuple combinations, we allow the creation of 5-tuple files for use in the query builder. See “Tuple Files” for more information.
+ h4
+ a#Stats_45
+ | Stats
+ p
+ em Stats
+ | is based on
+ a(href='https://tools.netsa.cert.org/silk/rwstats.html') rwstats
+ | and is used to calculate top-n/bottom-n lists based on user definied fields and stat values.
+ em Stats
+ | is best explained via examples and the best practice is usually to try to put into words what you are looking for first. For instance, you are looking for the [top 10 sIP-dIP pairs by bytes]. In this case you would specify “Top”, “Count=10”, select Source IP and Dest IP as fields, and select “Bytes” as the
+ em Stats Value
+ | . Multiple
+ em Stats Values
+ | can be selected as long as the value does not match the field being searched for. In the event that you are pulling muliple stat values, you’ll want to select the *Primary Stats Value" that is most important to you. The other fields will be supplementary information, but will not be the main values being used to calculate against.
+ p
+ | Table output allows for pivoting on certain
+ em stats fields
+ | but not on
+ em stats values
+ | . You can select between bar, column, and pie charts for the chart display. The chart uses a logarithmic scale due to the widely varying values when using multiple
+ em stats values
+ h4
+ a#Count_40
+ | Count
+ p
+ em Count
+ | is based on
+ a(href='https://tools.netsa.cert.org/silk/rwcount.html') rwcount
+ | and is used to summarize flow records over time, grouping record, byte, and packet counts into time bins of a user defined duration. Each row in the table output each data point on the line chart output represents one bin. If the user uses a 60 second bin size (the default is 30 seconds) this means that the total number of records/minute, bytes/minute, and packets/minute. Special considerations need to be taken when making charts with rwcount. If the time range specified is incredible long and the bin size is unreasonably small for that range, the chart will take a long time to create and it will be illegible if it actually appears. This is because you are loading the entire dataset onto one chart.
+ h4
+ a#IP_Sets_53
+ | IP Sets
+ p
+ em IP Sets
+ | are user defined lists of IP addresses that can be edited in the “IP Sets” tab in the navbar at the top of the screen. There you will create an IP set that can be IP addresses, CIDR ranges, or combinations of the two. Saving the results will allow you to specify those sets in the query builder under the “host” subheading. As before, selecting
+ em any IP set
+ | will add the
+ em anyset
+ | option to the query. That option looks for any match from the sets, regardless if they occur as the source or destination IP address.
+ h4
+ a#Tuple_Files_56
+ | Tuple Files
+ p
+ em Tuple Files
+ | allow you to specify up to an entire 5-tuple to search for, and by default it will search in any direction. This means that if you choose to only look for communications between two addresses, you can specify them in the file as something like “192.168.1.15,8.8.8.8”. You can save as many tuples as you would like in the file (just as you did in IP Sets), but specifying the options in the query builder is slightly more complex to give you more power in filtering. Under the “additional options” subheading in the query builder you’ll find Tuple File, Tuple Direction, Tuple Delimiter, and Tuple Fields. After selecting the tuple file that you’ve created, the tuple direction refers to what order you wish to search in. Selecting “both” will search for any occurence of the tuple elements regardless of where they appear in the individual record. This is the most common use case as it accomplishes a task that isn’t easily specified in default options. After specifying direction, you need to tell FlowBAT how the tuple file is formatted. Provide the delimiter that you chose (in this example we are using a comma
+ strong ,
+ | ), and tell FlowBAT what the elements are in the tuple. In this case, we can say
+ strong sip,dip
+ | . If we’ve chosen the tuple direction to be both, this really just implies that both of the values are IP addresses. Had we chosen otherwise, the sip,dip would have more meaning. Also, had we provided the full 5-tuple we might have used
+ strong sip,dip,sport,dport,protocol
+ | to define the tuple fields.
+ h4
+ a#PCAP_Analysis
+ | PCAP Analysis
+ p
+ | PCAP analysis can be performed in FlowBAT by specifying the full path of the file at either the command line FlowBAT interface or the "Additional Options" tab. See the examples at the end of this documentation for more details.
+ pre
+ code
+ | /home/jason/badguys.pcap --saddress=192.168.1.15 --aport=31337
+ h4
+ a#RWF_Analysis
+ | RWF Analysis
+ p
+ | RWF files are the binary files that SiLK tools operate on. These can also be created at the command line in cases where automation might be desired. If you need to review an rwf file in FlowBAT, simply specify it prior to the rest of the filter.
+ pre
+ code
+ | /home/jason/IOT.rwf --type=out,outweb --packets=4- --ack-flag=1
+ h3
+ a#Layout_59
+ | Layout
+ hr
+ p
+ a(href='http://www.flowbat.com/') FlowBAT
+ | was created to be a more user-friendly frontend for the SiLK flow analysis tool suite. Seasoned professionals will notice that many tools are not immediately available to use, but instead have been packaged together in an effort to meet the most common SiLK analysis use-cases.
+ a(href='http://www.flowbat.com/') FlowBAT
+ | allows the user to search and filter for flow data as well as run statistics based on the outputs. The main FlowBAT Interface is divided into six main sections:
+ ul
+ li Dashboard
+ li Quick Query
+ li Saved Queries
+ li IP Sets
+ li Tuple Files
+ li Configuration Settings
+ h4
+ a#Dashboard_69
+ | Dashboard
+ p
+ | If this is your first time booting up
+ a(href='http://www.flowbat.com/') FlowBAT
+ | you might notice that the dashboard is a plain canvas. This is a place to put the output of saved queries. Those outputs might be bandwidth graphs or tables of records with interactions with malicious IP sets, or generally just anything you want. In order to make them actionable in a dashboard, you’ll want to make sure that the outputs are updated, so make sure that the intended queries have rolling times and periodic execution. At the top of the Dashboard is a quick query command interface input. This input allows for running a search spontaneously without navigating manually to other tabs. For the query builder, you will need to go to
+ em quick query
+ | or
+ em saved queries
+ | .
+ h4
+ a#Quick_Query_72
+ | Quick Query
+ p
+ | Running a quick query is useful when you are just doing some regular hunting or providing situational awareness upon request. If it is something that you don’t think that you will keep, then quick query is the place to go. However, in the event that you just love something you’ve found, you can go ahead and make it a saved query on the fly from the quick query page. In the event that you cannot filter exactly how you want, or perhaps there is an outlier that you also want removed, you can also provide “exclusions” which will remove data from your results. See “Basic Usage and Best Practices”. There is also a query builder that provides individual descriptions and input fields for those not verse in SiLK syntax already. Each input contains a help bubble that can assist in understanding what fields mean. Upon adding fields in the query builder, the full SiLK query itself (in red) is populated below the input parameters. New users can take note of the syntax to ween themselves off of the query builder and opt to make use of quick query for a more streamlined experience.
+ h4
+ a#Saved_Queries_75
+ | Saved Queries
+ p
+ | The
+ em Saved Queries
+ | tab shows all queries that you have saved. This tab also provides the actual SiLK queries needed to replicate from the command line on the server itself (useful for those wanting to learn SiLK syntax and run automated tasks against flow data). Query names in this list are referenced when selecting outputs to display on the dashboard.
+ h4
+ a#IP_Sets_78
+ | IP Sets
+ p
+ | Here you can create an IP set that can be IP addresses, CIDR ranges, or combinations of the two. Saving the results will allow you to specify those sets in the query builder under the “host” subheading. When creating IP sets it is recommended that you leave a note descibing the set and have a unique IP set name. The name will be referenced in the query builder. See “Basic Usage and Best Practices” for more details.
+ h4
+ a#Tuple_Files_81
+ | Tuple Files
+ p
+ | Here you can create a tuple file (see “Basic Usage and Best Practices” for more details on these unique files). Saving the results will allow you to specify those tuples in the query builder under the “Additional options” subheading. When creating tuple files it is recommended that you leave a note descibing the file and have a unique name. The name will be referenced in the query builder. See “Basic Usage and Best Practices” for more details.
+ h4
+ a#Night_Mode
+ | Night Mode
+ p
+ | Night Mode changes the visual theme of FlowBAT to make it easier on the eyes in darker environments. Simple click the sun/moon symbol to toggle. Night Mode is only available on webkit enabled browsers (Chrome, Safari, Opera).
+ h4
+ a#Configuration_Settings_84
+ | Configuration Settings
+ p These are options available to all users.
+ h5
+ a#User_Administration_86
+ | - User Administration
+ p Add, remove, or edit users.
+ h5
+ a#SiLK_Server_Administration_88
+ | - SiLK Server Administration
+ p
+ | Change initial FlowBAT configuration options such as silk.conf location, data directory, temporary storage directory, and SSH options. See “Initial Configuration” for more details.
+ h5
+ a#Help_90
+ | - Help
+ p You are here.
+ h3
+ a#Query_Examples_94
+ | Query Examples
+ hr
+ p
+ | Search for all records with IP address 192.168.1.15 as either source IP or dest IP
+ pre
+ code
+ | Filter: --any-address=192.168.1.15
+ p Search for 192.168.1.15 but only show outbound flows
+ pre
+ code
+ | Filter: --any-address=192.168.1.15 --type=out,outweb
+ p Look at the top 10 source-dest ip pairs with stats by bytes
+ pre
+ code
+ | Filter: --protocol=0-255
+ | Stats: --top --count=10 --fields=sip,dip --values=bytes
+ p
+ | Look at the top 10 list of destination country codes for outbound traffic by packets, excluding the United States, Great Britain, and private IP space
+ pre
+ code
+ | Filter: --protocol=0-255 --type=out,outweb
+ | Exclusion: --dcc=US,GB,--
+ | Stats: --top --count=10 --fields=dcc --values=packets
+ p
+ | Examine a pre-made RWF file of IoT traffic to determine how much outbound data is traversing the network.
+ pre
+ code
+ | Filter: /home/jason/IOT.rwf --type=out,outweb --packets=4- --ack-flag=1
+ | Count: --bin-size=60
+ p
+ | Examine a PCAP file to generate a list of the top talking sip-dip pairs by bytes.
+ pre
+ code
+ | Filter: /home/jason/badguys.pcap --protocol=0-255
+ | Stats --top --count=10 --fields=sip,dip --values=bytes
+
+ h3
+ a#Additional_Notes_115
+ | Additional Notes
+ hr
+ h4
+ a#Standards_117
+ | Standards
+ p
+ a(href='http://www.flowbat.com/') FlowBAT
+ | makes every attempt at keeping most of the standards set by
+ a(href='https://tools.netsa.cert.org/silk/') SiLK
+ | and only deviates when it is in the analysts best interest. The most significant change is regarding the
+ em type
+ | default values when creating a filter. If you’re a veteran of SiLK you’ll probably know that SiLK defaults to incoming traffic as per the
+ a(href='https://tools.netsa.cert.org/silk/rwfilter.html') rwfilter
+ | documentation:
+ blockquote
+ p
+ | The default-type list is determined by the value of CLASS, and the default types generally include only incoming traffic.
+ p
+ | In our experience analysts generally intend to start searching by looking through all flows collected and as such
+ strong
+ | we have made “all” the default value for
+ em type
+ | .
+ h4
+ a#HTTPS_123
+ | HTTPS
+ p
+ | We have also provided a script in the support folder of the project that allows the user to quickly set up an nginx proxy for https access. This script is only meant to ensure that connections made to FlowBAT are encrypted, but as with any security measures, you should customize the proxy configuration to your own liking if you desire any more than what is described here.
+ h3
+ a#Support_126
+ | Support
+ hr
+ p
+ | Don’t hesitate to email
+ a(href='support@flowbat.com') support
+ | if you have any questions or feature requests about
+ a(href='http://www.flowbat.com/') FlowBAT
+ | . You can also submit
+ a(href='https://github.com/chrissanders/FlowBAT/issues') issues
+ | if you feel inclined to submit bugs or requests via github.
+ p
+ | For more information on
+ a(href='https://tools.netsa.cert.org/silk/') SiLK
+ | please see the [SiLK documentation] and for tool specific documentation, see the following
+ ul
+ li
+ a(href='https://tools.netsa.cert.org/silk/rwfilter.html') rwfilter
+ li
+ a(href='https://tools.netsa.cert.org/silk/rwstats.html') rwstats
+ li
+ a(href='https://tools.netsa.cert.org/silk/rwcount.html') rwcount
+ h3
+ a#License_135
+ | License
+ p
+ | Refer to the
+ a(href='https://github.com/chrissanders/FlowBAT/blob/master/LICENSE.md') license
+ | on the project page.
diff --git a/client/templates/navbar/navbar.css.styl b/client/templates/navbar/navbar.css.styl
index 6b89553..a4c8caa 100644
--- a/client/templates/navbar/navbar.css.styl
+++ b/client/templates/navbar/navbar.css.styl
@@ -1,2 +1,6 @@
.navbar-brand
padding 5px
+#nightMode
+ display none
+ &:not(*:root)
+ display block
diff --git a/client/templates/navbar/navbar.html.jade b/client/templates/navbar/navbar.html.jade
index 30a1cf0..3150e71 100644
--- a/client/templates/navbar/navbar.html.jade
+++ b/client/templates/navbar/navbar.html.jade
@@ -40,3 +40,5 @@ template(name="navbar")
li: a.logout(href="#") Logout
else
+login
+ ul.nav.navbar-nav.navbar-right
+ a.btn.btn-primary#nightMode(href="javascript:(function(){var css='html {-webkit-filter: invert(100%);'+'-moz-filter: invert(100%);'+'-o-filter: invert(100%);'+'-ms-filter: invert(100%); }body{background:#1B1815}',head=document.getElementsByTagName('head')[0],style=document.createElement('style');if(!window.counter){window.counter=1;}else{window.counter++;if(window.counter%2==0){var css='html {-webkit-filter: invert(0%); -moz-filter: invert(0%); -o-filter: invert(0%); -ms-filter: invert(0%); }body{background:#E4E7EA}'}};style.type='text/css';if(style.styleSheet){style.styleSheet.cssText=css;}else{style.appendChild(document.createTextNode(css));}head.appendChild(style);})();" style="margin-top: 0.5em; margin-right: 0.5em; ") /
diff --git a/client/templates/navbar/navbar.js.coffee b/client/templates/navbar/navbar.js.coffee
index e3aa1df..454fa65 100644
--- a/client/templates/navbar/navbar.js.coffee
+++ b/client/templates/navbar/navbar.js.coffee
@@ -1,7 +1,7 @@
Template.navbar.helpers
Template.navbar.rendered = ->
-
+Blaze._allowJavascriptUrls()
Template.navbar.events
"click .create-quick-query": grab (event, template) ->
_id = share.Queries.insert(
@@ -10,4 +10,3 @@ Template.navbar.events
Router.go("/query/" + _id)
"click .logout": grab (event, template) ->
Meteor.logout()
-
diff --git a/client/templates/results/fieldsets/fieldsets.html.jade b/client/templates/results/fieldsets/fieldsets.html.jade
index 55d4fcf..7ed0e4b 100644
--- a/client/templates/results/fieldsets/fieldsets.html.jade
+++ b/client/templates/results/fieldsets/fieldsets.html.jade
@@ -309,7 +309,7 @@ template(name="fieldsets")
if condition output "is" "rwstats"
fieldset.rwstats-parameters
legend Stats parameters
- i.fa.fa-question-circle.text-muted(data-toggle="popover", title="rwstats fields", data-content="These parameters determine how the statistics are to be calculated by selecting Top-N or Bottom-N, and a value to limit the amount of output. Count sets a static limit (top 20 for instance), threshold outputs all results over/under a specific stats VALUE, and percentage prints the bins where the primary value is greater-than (or less-than) N percent of the sum of the primary values across all bins.")
+ i.fa.fa-question-circle.text-muted(data-toggle="popover", title="Stats Parameters", data-content="These parameters determine how the statistics are to be calculated by selecting Top-N or Bottom-N, and a value to limit the amount of output. Count sets a static limit (top 20 for instance), threshold outputs all results over/under a specific stats VALUE, and percentage prints the bins where the primary value is greater-than (or less-than) N percent of the sum of the primary values across all bins.")
.row
.col-xs-2
.input-group.direction-input-group
@@ -359,7 +359,7 @@ template(name="fieldsets")
.col-xs-12
each rwstatsFieldsOrder
.checkbox
- label
+ label(data-toggle="popover", title="{{t fieldI18nString}}", data-content="{{t fieldDefinitions}}")
input.field-checkbox(type="checkbox", checked="{{fieldIsSelected .. 'rwstatsFields'}}", value="{{.}}", data-property="rwstatsFields")
| {{t fieldI18nString}}
fieldset.display-fields-block
@@ -369,7 +369,7 @@ template(name="fieldsets")
.col-xs-12
each rwstatsValuesOrder
.checkbox
- label
+ label(data-toggle="popover", title="{{t fieldI18nString}}", data-content="{{t fieldDefinitions}}")
input.field-checkbox(type="checkbox", checked="{{fieldIsSelected .. 'rwstatsValues'}}", value="{{.}}", data-property="rwstatsValues")
if condition . "in" share.rwstatsValues
strong {{t fieldI18nString}}
diff --git a/client/templates/results/results.html.jade b/client/templates/results/results.html.jade
index 0b6fa40..6e34199 100644
--- a/client/templates/results/results.html.jade
+++ b/client/templates/results/results.html.jade
@@ -96,6 +96,6 @@ template(name="results")
legend Display fields
each fieldsOrder
.checkbox
- label
+ label(data-toggle="popover", title="{{t fieldI18nString}}", data-content="{{t fieldDefinitions}}")
input.field-checkbox(type="checkbox", checked="{{fieldIsSelected .. 'fields'}}", value="{{.}}", data-property="fields")
| {{t fieldI18nString}}
diff --git a/lib/app.coffee b/lib/app.coffee
index 20bf911..4caa98f 100644
--- a/lib/app.coffee
+++ b/lib/app.coffee
@@ -155,7 +155,7 @@ share.filterOptions = (options, additionalPermittedCharacters = "") ->
for excludedOption in ["--python-expr", "--python-file", "--pmap", "--dynamic-library", "--all-destination", "--fail-destination", "--pass-destination", "--print-statistics", "--print-volume-statistics", "--xargs"]
regexp = new RegExp(excludedOption + "=?[^\\s]*", "gi")
options = options.replace(regexp, "")
- filter = new RegExp("[^\\s\\=\\-\\/\\,\\.\\:0-9a-z" + additionalPermittedCharacters + "]", "gi")
+ filter = new RegExp("[^\\s\\=\\-\\/\\,\\.\\:0-9a-z_" + additionalPermittedCharacters + "]", "gi")
options = options.replace(filter, "")
options
diff --git a/lib/transformations.coffee b/lib/transformations.coffee
index f8eb850..0dd14f1 100644
--- a/lib/transformations.coffee
+++ b/lib/transformations.coffee
@@ -80,15 +80,26 @@ class share.Query
inputCommand: (config, profile, isPresentation = false) ->
command = "rwfilter"
command += " " + @inputOptions(config)
-
+ # defaults to having --type=all as the standard instead of the SiLK default.
+ if @interface is "cmd"
+ typeValidate = command.search(RegExp('--type', 'i'))
+ if typeValidate < 0
+ command += " --type=all "
if config.siteConfigFile
command += " --site-config-file=" + config.siteConfigFile
- rwFileValidate = command.search(RegExp(' (\\/|\\w)+\\.(rwf|rw)', 'i'))
-
+ # rwf and pcap integration
+ rwFileValidate = command.search(RegExp(' (\\/|\\w)+(\\/|\\w|\\-)*\\.(rwf|rw)', 'i'))
if rwFileValidate < 0
- if config.dataRootdir
- command += " --data-rootdir=" + config.dataRootdir
-
+ pcapFileValidate = command.search(RegExp(' (\\/|\\w)+(\\/|\\w|\\-)*\\.(pcap)', 'i'))
+ if pcapFileValidate >= 0
+ pcapFile = command.match(RegExp('(\\/|\\w)+(\\/|\\w|\\-)*\\.(pcap)', 'i'))
+ command += " --input-pipe=stdin"
+ command = command.replace(pcapFile[0],"")
+ command = "rwp2yaf2silk --in=" + pcapFile[0] + " --out=- |" + command
+ else
+ if config.dataRootdir
+ command += " --data-rootdir=" + config.dataRootdir
+
command += " --pass=stdout"
for exclusion in @inputExclusions()
command += " | rwfilter --input-pipe=stdin"
diff --git a/private/bundle/programs/server/app/lib/app.coffee.js b/private/bundle/programs/server/app/lib/app.coffee.js
index c221193..9cf31bb 100644
--- a/private/bundle/programs/server/app/lib/app.coffee.js
+++ b/private/bundle/programs/server/app/lib/app.coffee.js
@@ -89,7 +89,7 @@ share.filterOptions = function(options, additionalPermittedCharacters) {
regexp = new RegExp(excludedOption + "=?[^\\s]*", "gi");
options = options.replace(regexp, "");
}
- filter = new RegExp("[^\\s\\=\\-\\/\\,\\.\\:0-9a-z" + additionalPermittedCharacters + "]", "gi");
+ filter = new RegExp("[^\\s\\=\\-\\/\\,\\.\\:0-9a-z_" + additionalPermittedCharacters + "]", "gi");
options = options.replace(filter, "");
return options;
};
diff --git a/private/bundle/programs/server/app/lib/app.coffee.js.map b/private/bundle/programs/server/app/lib/app.coffee.js.map
index 23f8f2d..7f81a45 100644
--- a/private/bundle/programs/server/app/lib/app.coffee.js.map
+++ b/private/bundle/programs/server/app/lib/app.coffee.js.map
@@ -1 +1 @@
-{"version":3,"sources":["app.coffee"],"names":[],"mappings":"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","file":"/lib/app.coffee.js","sourcesContent":["share = share or {}\n\n#share.combine = (funcs...) ->\n# (args...) =>\n# for func in funcs\n# func.apply(@, args)\n\nshare.user = (fields, userId = Meteor.userId()) ->\n Meteor.users.findOne(userId, {fields: fields})\n\nshare.intval = (value) ->\n parseInt(value, 10) || 0\n\nshare.minute = 60 * 1000\nshare.hour = 60 * share.minute\n\nshare.datetimeFormat = \"YYYY/MM/DD HH:mm:ss.SSS\"\nshare.rwcutFields = [\n \"sIP\"\n \"dIP\"\n \"sPort\"\n \"dPort\"\n \"protocol\"\n \"packets\"\n \"bytes\"\n \"flags\"\n \"sTime\"\n \"duration\"\n \"eTime\"\n \"sensor\"\n \"class\"\n \"scc\"\n \"dcc\"\n \"initialFlags\"\n \"sessionFlags\"\n \"application\"\n \"type\"\n \"icmpTypeCode\"\n]\nshare.rwstatsValues = [\n \"Records\"\n \"Packets\"\n \"Bytes\"\n]\nshare.rwcountFields = [\n \"Date\"\n \"Records\"\n \"Bytes\"\n \"Packets\"\n]\nshare.rwcountLoadSchemes = [\n \"\"\n \"bin-uniform\"\n \"start-spike\"\n \"end-spike\"\n \"middle-spike\"\n \"time-proportional\"\n \"maximum-volume\"\n \"minimum-volume\"\n]\nshare.tupleDirections = [\n \"\"\n \"both\"\n \"forward\"\n \"reverse\"\n]\nshare.availableChartTypes =\n \"rwcut\": []\n \"rwstats\": [\"BarChart\", \"ColumnChart\", \"PieChart\"]\n \"rwcount\": [\"LineChart\"]\nshare.chartFieldTypes =\n \"sPort\": \"number\"\n \"dPort\": \"number\"\n \"protocol\": \"number\"\n \"pro\": \"number\"\n \"packets\": \"number\"\n \"bytes\": \"number\"\n \"sTime\": \"datetime\"\n \"duration\": \"number\"\n \"dur\": \"number\"\n \"eTime\": \"datetime\"\n \"Records\": \"number\"\n \"Packets\": \"number\"\n \"Bytes\": \"number\"\n \"Date\": \"datetime\"\n \"cumul_%\": \"number\"\nshare.startDateOffsets =\n \"Hour\": (60).toString()\n \"Day\": (24 * 60).toString()\n \"Week\": (7 * 24 * 60).toString()\n \"Month\": (30 * 24 * 60).toString()\n\nshare.parseResult = (result) ->\n rows = []\n for row in result.split(\"\\n\")\n rows.push(row.split(\"|\"))\n rows\n\nshare.queryTypes = [\"in\", \"out\", \"inweb\", \"outweb\", \"inicmp\", \"outicmp\", \"innull\", \"outnull\", \"int2int\", \"ext2ext\", \"other\"]\nshare.inputFields = [\n \"interface\"\n \"cmd\"\n \"exclusionsCmd\"\n \"startDateEnabled\"\n \"startDate\"\n \"endDateEnabled\"\n \"endDate\"\n \"sensorEnabled\"\n \"sensor\"\n \"typesEnabled\"\n \"types\"\n \"daddressEnabled\"\n \"daddress\"\n \"saddressEnabled\"\n \"saddress\"\n \"anyAddressEnabled\"\n \"anyAddress\"\n \"dipSetEnabled\"\n \"dipSet\"\n \"sipSetEnabled\"\n \"sipSet\"\n \"anySetEnabled\"\n \"anySet\"\n \"tupleFileEnabled\"\n \"tupleFile\"\n \"tupleDirectionEnabled\"\n \"tupleDirection\"\n \"tupleDelimiterEnabled\"\n \"tupleDelimiter\"\n \"tupleFieldsEnabled\"\n \"tupleFields\"\n \"dportEnabled\"\n \"dport\"\n \"sportEnabled\"\n \"sport\"\n \"aportEnabled\"\n \"aport\"\n \"dccEnabled\"\n \"dcc\"\n \"sccEnabled\"\n \"scc\"\n \"protocolEnabled\"\n \"protocol\"\n \"flagsAllEnabled\"\n \"flagsAll\"\n \"activeTimeEnabled\"\n \"activeTime\"\n \"additionalParametersEnabled\"\n \"additionalParameters\"\n \"additionalExclusionsCmdEnabled\"\n \"additionalExclusionsCmd\"\n]\n\nshare.filterOptions = (options, additionalPermittedCharacters = \"\") ->\n for excludedOption in [\"--python-expr\", \"--python-file\", \"--pmap\", \"--dynamic-library\", \"--all-destination\", \"--fail-destination\", \"--pass-destination\", \"--print-statistics\", \"--print-volume-statistics\", \"--xargs\"]\n regexp = new RegExp(excludedOption + \"=?[^\\\\s]*\", \"gi\")\n options = options.replace(regexp, \"\")\n filter = new RegExp(\"[^\\\\s\\\\=\\\\-\\\\/\\\\,\\\\.\\\\:0-9a-z\" + additionalPermittedCharacters + \"]\", \"gi\")\n options = options.replace(filter, \"\")\n options\n\nshare.isDebug = Meteor.settings.public.isDebug\n\nobject = if typeof(window) != \"undefined\" then window else GLOBAL\nobject.isDebug = share.isDebug\nif typeof(console) != \"undefined\" && console.log && _.isFunction(console.log)\n object.cl = _.bind(console.log, console)\nelse\n object.cl = ->\n"]}
\ No newline at end of file
+{"version":3,"sources":["app.coffee"],"names":[],"mappings":"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","file":"/lib/app.coffee.js","sourcesContent":["share = share or {}\n\n#share.combine = (funcs...) ->\n# (args...) =>\n# for func in funcs\n# func.apply(@, args)\n\nshare.user = (fields, userId = Meteor.userId()) ->\n Meteor.users.findOne(userId, {fields: fields})\n\nshare.intval = (value) ->\n parseInt(value, 10) || 0\n\nshare.minute = 60 * 1000\nshare.hour = 60 * share.minute\n\nshare.datetimeFormat = \"YYYY/MM/DD HH:mm:ss.SSS\"\nshare.rwcutFields = [\n \"sIP\"\n \"dIP\"\n \"sPort\"\n \"dPort\"\n \"protocol\"\n \"packets\"\n \"bytes\"\n \"flags\"\n \"sTime\"\n \"duration\"\n \"eTime\"\n \"sensor\"\n \"class\"\n \"scc\"\n \"dcc\"\n \"initialFlags\"\n \"sessionFlags\"\n \"application\"\n \"type\"\n \"icmpTypeCode\"\n]\nshare.rwstatsValues = [\n \"Records\"\n \"Packets\"\n \"Bytes\"\n]\nshare.rwcountFields = [\n \"Date\"\n \"Records\"\n \"Bytes\"\n \"Packets\"\n]\nshare.rwcountLoadSchemes = [\n \"\"\n \"bin-uniform\"\n \"start-spike\"\n \"end-spike\"\n \"middle-spike\"\n \"time-proportional\"\n \"maximum-volume\"\n \"minimum-volume\"\n]\nshare.tupleDirections = [\n \"\"\n \"both\"\n \"forward\"\n \"reverse\"\n]\nshare.availableChartTypes =\n \"rwcut\": []\n \"rwstats\": [\"BarChart\", \"ColumnChart\", \"PieChart\"]\n \"rwcount\": [\"LineChart\"]\nshare.chartFieldTypes =\n \"sPort\": \"number\"\n \"dPort\": \"number\"\n \"protocol\": \"number\"\n \"pro\": \"number\"\n \"packets\": \"number\"\n \"bytes\": \"number\"\n \"sTime\": \"datetime\"\n \"duration\": \"number\"\n \"dur\": \"number\"\n \"eTime\": \"datetime\"\n \"Records\": \"number\"\n \"Packets\": \"number\"\n \"Bytes\": \"number\"\n \"Date\": \"datetime\"\n \"cumul_%\": \"number\"\nshare.startDateOffsets =\n \"Hour\": (60).toString()\n \"Day\": (24 * 60).toString()\n \"Week\": (7 * 24 * 60).toString()\n \"Month\": (30 * 24 * 60).toString()\n\nshare.parseResult = (result) ->\n rows = []\n for row in result.split(\"\\n\")\n rows.push(row.split(\"|\"))\n rows\n\nshare.queryTypes = [\"in\", \"out\", \"inweb\", \"outweb\", \"inicmp\", \"outicmp\", \"innull\", \"outnull\", \"int2int\", \"ext2ext\", \"other\"]\nshare.inputFields = [\n \"interface\"\n \"cmd\"\n \"exclusionsCmd\"\n \"startDateEnabled\"\n \"startDate\"\n \"endDateEnabled\"\n \"endDate\"\n \"sensorEnabled\"\n \"sensor\"\n \"typesEnabled\"\n \"types\"\n \"daddressEnabled\"\n \"daddress\"\n \"saddressEnabled\"\n \"saddress\"\n \"anyAddressEnabled\"\n \"anyAddress\"\n \"dipSetEnabled\"\n \"dipSet\"\n \"sipSetEnabled\"\n \"sipSet\"\n \"anySetEnabled\"\n \"anySet\"\n \"tupleFileEnabled\"\n \"tupleFile\"\n \"tupleDirectionEnabled\"\n \"tupleDirection\"\n \"tupleDelimiterEnabled\"\n \"tupleDelimiter\"\n \"tupleFieldsEnabled\"\n \"tupleFields\"\n \"dportEnabled\"\n \"dport\"\n \"sportEnabled\"\n \"sport\"\n \"aportEnabled\"\n \"aport\"\n \"dccEnabled\"\n \"dcc\"\n \"sccEnabled\"\n \"scc\"\n \"protocolEnabled\"\n \"protocol\"\n \"flagsAllEnabled\"\n \"flagsAll\"\n \"activeTimeEnabled\"\n \"activeTime\"\n \"additionalParametersEnabled\"\n \"additionalParameters\"\n \"additionalExclusionsCmdEnabled\"\n \"additionalExclusionsCmd\"\n]\n\nshare.filterOptions = (options, additionalPermittedCharacters = \"\") ->\n for excludedOption in [\"--python-expr\", \"--python-file\", \"--pmap\", \"--dynamic-library\", \"--all-destination\", \"--fail-destination\", \"--pass-destination\", \"--print-statistics\", \"--print-volume-statistics\", \"--xargs\"]\n regexp = new RegExp(excludedOption + \"=?[^\\\\s]*\", \"gi\")\n options = options.replace(regexp, \"\")\n filter = new RegExp(\"[^\\\\s\\\\=\\\\-\\\\/\\\\,\\\\.\\\\:0-9a-z_\" + additionalPermittedCharacters + \"]\", \"gi\")\n options = options.replace(filter, \"\")\n options\n\nshare.isDebug = Meteor.settings.public.isDebug\n\nobject = if typeof(window) != \"undefined\" then window else GLOBAL\nobject.isDebug = share.isDebug\nif typeof(console) != \"undefined\" && console.log && _.isFunction(console.log)\n object.cl = _.bind(console.log, console)\nelse\n object.cl = ->\n"]}
\ No newline at end of file
diff --git a/private/bundle/programs/server/app/lib/transformations.coffee.js b/private/bundle/programs/server/app/lib/transformations.coffee.js
index 795cbd7..623659a 100644
--- a/private/bundle/programs/server/app/lib/transformations.coffee.js
+++ b/private/bundle/programs/server/app/lib/transformations.coffee.js
@@ -138,19 +138,33 @@ share.Query = (function() {
};
Query.prototype.inputCommand = function(config, profile, isPresentation) {
- var command, exclusion, rwFileValidate, _i, _len, _ref;
+ var command, exclusion, pcapFile, pcapFileValidate, rwFileValidate, typeValidate, _i, _len, _ref;
if (isPresentation == null) {
isPresentation = false;
}
command = "rwfilter";
command += " " + this.inputOptions(config);
+ if (this["interface"] === "cmd") {
+ typeValidate = command.search(RegExp('--type', 'i'));
+ if (typeValidate < 0) {
+ command += " --type=all ";
+ }
+ }
if (config.siteConfigFile) {
command += " --site-config-file=" + config.siteConfigFile;
}
- rwFileValidate = command.search(RegExp(' (\\/|\\w)+\\.(rwf|rw)', 'i'));
+ rwFileValidate = command.search(RegExp(' (\\/|\\w)+(\\/|\\w|\\-)*\\.(rwf|rw)', 'i'));
if (rwFileValidate < 0) {
- if (config.dataRootdir) {
- command += " --data-rootdir=" + config.dataRootdir;
+ pcapFileValidate = command.search(RegExp(' (\\/|\\w)+(\\/|\\w|\\-)*\\.(pcap)', 'i'));
+ if (pcapFileValidate >= 0) {
+ pcapFile = command.match(RegExp('(\\/|\\w)+(\\/|\\w|\\-)*\\.(pcap)', 'i'));
+ command += " --input-pipe=stdin";
+ command = command.replace(pcapFile[0], "");
+ command = "rwp2yaf2silk --in=" + pcapFile[0] + " --out=- |" + command;
+ } else {
+ if (config.dataRootdir) {
+ command += " --data-rootdir=" + config.dataRootdir;
+ }
}
}
command += " --pass=stdout";
diff --git a/private/bundle/programs/server/app/lib/transformations.coffee.js.map b/private/bundle/programs/server/app/lib/transformations.coffee.js.map
index 2b57f2a..5d427b8 100644
--- a/private/bundle/programs/server/app/lib/transformations.coffee.js.map
+++ b/private/bundle/programs/server/app/lib/transformations.coffee.js.map
@@ -1 +1 @@
-{"version":3,"sources":["transformations.coffee"],"names":[],"mappings":"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","file":"/lib/transformations.coffee.js","sourcesContent":["# not used by default\nclass share.User\n constructor: (doc) ->\n _.extend(@, doc)\n @email = @emails?[0]?.address\n @name = @profile.name\n @firstName = @name.split(' ').slice(0, 1).join(' ')\n @lastName = @name.split(' ').slice(1).join(' ')\n\nclass share.Config\n constructor: (doc) ->\n _.extend(@, doc)\n wrapCommand: (command) ->\n \"ssh \" + @getSSHOptions() + \" -p \" + @port + \" \" + @user + \"@\" + @host + \" \\\"\" + command + \"\\\"\"\n getSSHOptions: ->\n \"-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=error -i \" + @getIdentityFile()\n getIdentityFile: ->\n if @identityFile then @identityFile else process.env.PWD + \"/settings/identity\"\n\nclass share.Query\n constructor: (doc) ->\n _.extend(@, doc)\n @header = []\n @rows = []\n if @result\n parsedResult = share.parseResult(@result)\n if @output is \"rwstats\"\n parsedResult.shift()\n parsedResult.shift()\n # shift-shift outta here, you redundant rows\n if @output is \"rwcount\"\n parsedResult.unshift(share.rwcountFields)\n rawHeader = parsedResult.shift()\n for name in rawHeader\n spec =\n _id: name\n name: name.trim()\n isDistinct: false\n isPercentage: false\n if spec.name.indexOf(\"%\") is 0\n spec.isPercentage = true\n spec.name = spec.name.substr(1)\n distinctRegex = /-D.*$/i\n if spec.name.match(distinctRegex)\n spec.isDistinct = true\n spec.name = spec.name.replace(distinctRegex, \"\")\n if spec.isDistinct\n spec.chartType = \"number\"\n else\n spec.chartType = share.chartFieldTypes[spec.name] or \"string\"\n @header.push(spec)\n if @presentation is \"chart\"\n for parsedRow in parsedResult\n row = []\n for parsedValue, index in parsedRow\n spec = @header[index]\n if @output is \"rwcount\" and spec.name not in @rwcountFields\n continue\n switch spec.chartType\n when \"number\"\n parsedValue = parseFloat(parsedValue)\n when \"date\", \"datetime\"\n m = moment.utc(parsedValue, \"YYYY/MM/DDTHH:mm:ss.SSS\")\n parsedValue = m.toDate()\n row.push(parsedValue)\n @rows.push(row)\n else\n for parsedRow in parsedResult\n row = []\n for parsedValue, index in parsedRow\n spec = @header[index]\n row.push({_id: spec._id, value: parsedValue, queryId: @_id})\n @rows.push(row)\n filteredHeader = []\n for spec in @header\n filteredHeader.push(spec)\n @header = filteredHeader\n displayName: ->\n if @isQuick then \"Quick query #\" + @_id else @name or \"#\" + @_id\n inputCommand: (config, profile, isPresentation = false) ->\n command = \"rwfilter\"\n command += \" \" + @inputOptions(config)\n \n if config.siteConfigFile\n command += \" --site-config-file=\" + config.siteConfigFile\n rwFileValidate = command.search(RegExp(' (\\\\/|\\\\w)+\\\\.(rwf|rw)', 'i'))\n \n if rwFileValidate < 0\n if config.dataRootdir\n command += \" --data-rootdir=\" + config.dataRootdir\n \n command += \" --pass=stdout\"\n for exclusion in @inputExclusions()\n command += \" | rwfilter --input-pipe=stdin\"\n command += \" \" + exclusion\n if config.siteConfigFile\n command += \" --site-config-file=\" + config.siteConfigFile\n # config.dataRootdir shouldn't be used with exclusions\n command += \" --fail=stdout\"\n command += \" > \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n inputOptions: (config) ->\n if @interface is \"builder\"\n parameters = []\n if @typesEnabled and @types.length and _.difference(share.queryTypes, @types).length\n value = @types.join(\",\")\n else\n value = \"all\"\n parameters.push(\"--type=\" + value)\n if @startDateType is \"interval\"\n if @startDateEnabled and @startDate\n parameters.push(\"--start-date=\" + @startDate)\n if @endDateEnabled and @endDate\n parameters.push(\"--end-date=\" + @endDate)\n if @activeTimeEnabled and @activeTime\n parameters.push(\"--active-time=\" + @activeTime)\n else\n if @startDateOffsetEnabled and @startDateOffset\n startDateOffsetNumber = share.intval(@startDateOffset)\n eTimeMoment = moment.utc()\n sTimeMoment = eTimeMoment.clone().subtract(startDateOffsetNumber, 'minutes')\n parameters.push(\"--start-date=\" + sTimeMoment.format(\"YYYY/MM/DD:HH\"))\n parameters.push(\"--end-date=\" + eTimeMoment.format(\"YYYY/MM/DD:HH\"))\n parameters.push(\"--active-time=\" + sTimeMoment.format(\"YYYY/MM/DDTHH:mm:ss.SSS\") + \"-\" + eTimeMoment.format(\"YYYY/MM/DDTHH:mm:ss.SSS\"))\n if @sensorEnabled and @sensor\n parameters.push(\"--sensor=\" + @sensor)\n if @daddressEnabled and @daddress\n parameters.push(\"--daddress=\" + @daddress)\n if @saddressEnabled and @saddress\n parameters.push(\"--saddress=\" + @saddress)\n if @anyAddressEnabled and @anyAddress\n parameters.push(\"--any-address=\" + @anyAddress)\n if @dipSetEnabled and @dipSet\n parameters.push(\"--dipset=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @dipSet + \".rws\")\n if @sipSetEnabled and @sipSet\n parameters.push(\"--sipset=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @sipSet + \".rws\")\n if @anySetEnabled and @anySet\n parameters.push(\"--anyset=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @anySet + \".rws\")\n if @tupleFileEnabled and @tupleFile\n parameters.push(\"--tuple-file=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @tupleFile + \".tuple\")\n if @tupleDirectionEnabled and @tupleDirection\n parameters.push(\"--tuple-direction=\" + @tupleDirection)\n if @tupleDelimiterEnabled and @tupleDelimiter\n parameters.push(\"--tuple-delimiter=\" + @tupleDelimiter)\n if @tupleFieldsEnabled and @tupleFields\n parameters.push(\"--tuple-fields=\" + @tupleFields)\n if @dportEnabled and @dport\n parameters.push(\"--dport=\" + @dport)\n if @sportEnabled and @sport\n parameters.push(\"--sport=\" + @sport)\n if @aportEnabled and @aport\n parameters.push(\"--aport=\" + @aport)\n if @dccEnabled and @dcc.length\n parameters.push(\"--dcc=\" + @dcc.join(\",\"))\n if @sccEnabled and @scc.length\n parameters.push(\"--scc=\" + @scc.join(\",\"))\n if @protocolEnabled and @protocol\n parameters.push(\"--protocol=\" + @protocol)\n if @flagsAllEnabled and @flagsAll\n parameters.push(\"--flags-all=\" + @flagsAll)\n if @additionalParametersEnabled and @additionalParameters\n parameters.push(@additionalParameters)\n string = parameters.join(\" \")\n else\n string = @cmd\n share.filterOptions(string)\n inputExclusions: ->\n exclusionsCmd = \"\"\n if @interface is \"builder\"\n if @additionalExclusionsCmdEnabled\n exclusionsCmd = @additionalExclusionsCmd\n else\n exclusionsCmd = @exclusionsCmd\n exclusionsCmd = share.filterOptions(exclusionsCmd)\n _.compact(exclusionsCmd.split(/\\s+(?:OR|\\|\\|)\\s+/i))\n outputCommand: (config, profile, isPresentation = false) ->\n switch @output\n when \"rwcut\"\n @outputRwcutCommand(config, profile, isPresentation)\n when \"rwstats\"\n @outputRwstatsCommand(config, profile, isPresentation)\n when \"rwcount\"\n @outputRwcountCommand(config, profile, isPresentation)\n outputRwcutCommand: (config, profile, isPresentation = false) ->\n commands = []\n if @sortField\n rwsortOptions = [\"--fields=\" + @sortField]\n if @sortReverse\n rwsortOptions.push(\"--reverse\")\n if config.siteConfigFile\n rwsortOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwsortOptionsString = rwsortOptions.join(\" \")\n rwsortOptionsString = share.filterOptions(rwsortOptionsString)\n commands.push(\"rwsort \" + rwsortOptionsString)\n rwcutOptions = [\"--num-recs=\" + profile.numRecs, \"--start-rec-num=\" + @startRecNum, \"--delimited\"]\n if @fields.length\n rwcutOptions.push(\"--fields=\" + _.intersection(@fieldsOrder, @fields).join(\",\"))\n if config.siteConfigFile\n rwcutOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwcutOptionsString = rwcutOptions.join(\" \")\n rwcutOptionsString = share.filterOptions(rwcutOptionsString)\n commands.push(\"rwcut \" + rwcutOptionsString)\n commands[0] += \" \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n command = commands.join(\" | \")\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n outputRwstatsCommand: (config, profile, isPresentation = false) ->\n defaultRwstatsOptions = [\"--delimited\"]\n if @interface is \"builder\"\n rwstatsOptions = defaultRwstatsOptions\n if @rwstatsFields.length\n rwstatsOptions.push(\"--fields=\" + _.intersection(@rwstatsFieldsOrder, @rwstatsFields).join(\",\"))\n rwstatsValues = @rwstatsValues.slice(0)\n rwstatsValuesOrder = @rwstatsValuesOrder.slice(0)\n if @rwstatsPrimaryValue\n rwstatsValues.unshift(@rwstatsPrimaryValue)\n rwstatsValuesOrder.unshift(@rwstatsPrimaryValue)\n if rwstatsValues.length\n values = _.intersection(rwstatsValuesOrder, rwstatsValues)\n for value, index in values\n if value not in share.rwstatsValues\n values[index] = \"distinct:\" + value\n rwstatsOptions.push(\"--values=\" + values.join(\",\"))\n if values[0] not in share.rwstatsValues\n rwstatsOptions.push(\"--no-percents\")\n rwstatsOptions.push(\"--\" + @rwstatsDirection)\n switch @rwstatsMode\n when \"count\"\n rwstatsOptions.push(\"--count=\" + @rwstatsCountModeValue)\n when \"threshold\"\n rwstatsOptions.push(\"--threshold=\" + @rwstatsThresholdModeValue)\n when \"percentage\"\n rwstatsOptions.push(\"--percentage=\" + @rwstatsPercentageModeValue)\n if @rwstatsBinTimeEnabled\n if @rwstatsBinTime\n rwstatsOptions.push(\"--bin-time=\" + @rwstatsBinTime)\n else\n rwstatsOptions.push(\"--bin-time\")\n if config.siteConfigFile\n rwstatsOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwstatsOptionsString = rwstatsOptions.join(\" \")\n else\n rwstatsOptionsString = @rwstatsCmd + \" \" + defaultRwstatsOptions.join(\" \")\n rwstatsOptionsString = share.filterOptions(rwstatsOptionsString)\n command = \"rwstats \" + rwstatsOptionsString\n command += \" \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n outputRwcountCommand: (config, profile, isPresentation = false) ->\n defaultRwcountOptions = [\"--delimited\", \"--no-titles\"] # --no-titles is necessary, because header is added later\n if @interface is \"builder\"\n rwcountOptions = defaultRwcountOptions\n if @rwcountBinSizeEnabled\n rwcountOptions.push(\"--bin-size=\" + @rwcountBinSize)\n if @rwcountLoadSchemeEnabled\n rwcountOptions.push(\"--load-scheme=\" + @rwcountLoadScheme)\n if @rwcountSkipZeroes\n rwcountOptions.push(\"--skip-zeroes\")\n if config.siteConfigFile\n rwcountOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwcountOptionsString = rwcountOptions.join(\" \")\n else\n rwcountOptionsString = @rwcountCmd + \" \" + defaultRwcountOptions.join(\" \")\n rwcountOptionsString = share.filterOptions(rwcountOptionsString)\n command = \"rwcount \" + rwcountOptionsString\n command += \" \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n if @presentation is \"table\"\n if @sortField\n fieldIndex = share.rwcountFields.indexOf(@sortField)\n sortOptions = \"--field-separator=\\\\\\| --key=+\" + (fieldIndex + 1) + \"n\" + (if @sortReverse then \"r\" else \"\")\n sortOptions = share.filterOptions(sortOptions, \"\\\\\\\\\\\\|\\\\+\")\n sortCommand = \"sort \" + sortOptions\n command += \" | \" + sortCommand\n if profile.numRecs\n headOptions = \"--lines=\" + (@startRecNum + profile.numRecs - 1)\n headOptions = share.filterOptions(headOptions)\n headCommand = \"head \" + headOptions\n tailOptions = \"--lines=\" + profile.numRecs\n tailOptions = share.filterOptions(tailOptions)\n tailCommand = \"tail \" + tailOptions\n command += \" | \" + headCommand + \" | \" + tailCommand\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n rwstatsCountModeValueIsEnabled: ->\n @rwstatsMode is \"count\"\n rwstatsThresholdModeValueIsEnabled: ->\n @rwstatsMode is \"threshold\"\n rwstatsPercentageModeValueIsEnabled: ->\n @rwstatsMode is \"percentage\"\n availableChartTypes: ->\n share.availableChartTypes[@output]\n path: ->\n \"/query/\" + @_id\n\nclass share.IPSet\n constructor: (doc) ->\n _.extend(@, doc)\n displayName: ->\n @name or \"#\" + @_id\n objectSelectName: ->\n @displayName()\n objectSelectValue: ->\n @_id\n path: ->\n \"/ipset/\" + @_id\n\nclass share.Tuple\n constructor: (doc) ->\n _.extend(@, doc)\n displayName: ->\n @name or \"#\" + @_id\n objectSelectName: ->\n @displayName()\n objectSelectValue: ->\n @_id\n path: ->\n \"/tuple/\" + @_id\n\nshare.Transformations =\n user: (user) ->\n if user instanceof share.User or not user then user else new share.User(user)\n config: (config) ->\n if config instanceof share.Config or not config then config else new share.Config(config)\n query: (query) ->\n if query instanceof share.Query or not query then query else new share.Query(query)\n ipset: (ipset) ->\n if ipset instanceof share.IPSet or not ipset then ipset else new share.IPSet(ipset)\n tuple: (tuple) ->\n if tuple instanceof share.Tuple or not tuple then tuple else new share.Tuple(tuple)\n"]}
\ No newline at end of file
+{"version":3,"sources":["transformations.coffee"],"names":[],"mappings":"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","file":"/lib/transformations.coffee.js","sourcesContent":["# not used by default\nclass share.User\n constructor: (doc) ->\n _.extend(@, doc)\n @email = @emails?[0]?.address\n @name = @profile.name\n @firstName = @name.split(' ').slice(0, 1).join(' ')\n @lastName = @name.split(' ').slice(1).join(' ')\n\nclass share.Config\n constructor: (doc) ->\n _.extend(@, doc)\n wrapCommand: (command) ->\n \"ssh \" + @getSSHOptions() + \" -p \" + @port + \" \" + @user + \"@\" + @host + \" \\\"\" + command + \"\\\"\"\n getSSHOptions: ->\n \"-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=error -i \" + @getIdentityFile()\n getIdentityFile: ->\n if @identityFile then @identityFile else process.env.PWD + \"/settings/identity\"\n\nclass share.Query\n constructor: (doc) ->\n _.extend(@, doc)\n @header = []\n @rows = []\n if @result\n parsedResult = share.parseResult(@result)\n if @output is \"rwstats\"\n parsedResult.shift()\n parsedResult.shift()\n # shift-shift outta here, you redundant rows\n if @output is \"rwcount\"\n parsedResult.unshift(share.rwcountFields)\n rawHeader = parsedResult.shift()\n for name in rawHeader\n spec =\n _id: name\n name: name.trim()\n isDistinct: false\n isPercentage: false\n if spec.name.indexOf(\"%\") is 0\n spec.isPercentage = true\n spec.name = spec.name.substr(1)\n distinctRegex = /-D.*$/i\n if spec.name.match(distinctRegex)\n spec.isDistinct = true\n spec.name = spec.name.replace(distinctRegex, \"\")\n if spec.isDistinct\n spec.chartType = \"number\"\n else\n spec.chartType = share.chartFieldTypes[spec.name] or \"string\"\n @header.push(spec)\n if @presentation is \"chart\"\n for parsedRow in parsedResult\n row = []\n for parsedValue, index in parsedRow\n spec = @header[index]\n if @output is \"rwcount\" and spec.name not in @rwcountFields\n continue\n switch spec.chartType\n when \"number\"\n parsedValue = parseFloat(parsedValue)\n when \"date\", \"datetime\"\n m = moment.utc(parsedValue, \"YYYY/MM/DDTHH:mm:ss.SSS\")\n parsedValue = m.toDate()\n row.push(parsedValue)\n @rows.push(row)\n else\n for parsedRow in parsedResult\n row = []\n for parsedValue, index in parsedRow\n spec = @header[index]\n row.push({_id: spec._id, value: parsedValue, queryId: @_id})\n @rows.push(row)\n filteredHeader = []\n for spec in @header\n filteredHeader.push(spec)\n @header = filteredHeader\n displayName: ->\n if @isQuick then \"Quick query #\" + @_id else @name or \"#\" + @_id\n inputCommand: (config, profile, isPresentation = false) ->\n command = \"rwfilter\"\n command += \" \" + @inputOptions(config)\n # defaults to having --type=all as the standard instead of the SiLK default.\n if @interface is \"cmd\"\n typeValidate = command.search(RegExp('--type', 'i'))\n if typeValidate < 0\n command += \" --type=all \"\n if config.siteConfigFile\n command += \" --site-config-file=\" + config.siteConfigFile\n # rwf and pcap integration\n rwFileValidate = command.search(RegExp(' (\\\\/|\\\\w)+(\\\\/|\\\\w|\\\\-)*\\\\.(rwf|rw)', 'i'))\n if rwFileValidate < 0\n pcapFileValidate = command.search(RegExp(' (\\\\/|\\\\w)+(\\\\/|\\\\w|\\\\-)*\\\\.(pcap)', 'i'))\n if pcapFileValidate >= 0\n pcapFile = command.match(RegExp('(\\\\/|\\\\w)+(\\\\/|\\\\w|\\\\-)*\\\\.(pcap)', 'i'))\n command += \" --input-pipe=stdin\"\n command = command.replace(pcapFile[0],\"\")\n command = \"rwp2yaf2silk --in=\" + pcapFile[0] + \" --out=- |\" + command\n else\n if config.dataRootdir\n command += \" --data-rootdir=\" + config.dataRootdir\n\n command += \" --pass=stdout\"\n for exclusion in @inputExclusions()\n command += \" | rwfilter --input-pipe=stdin\"\n command += \" \" + exclusion\n if config.siteConfigFile\n command += \" --site-config-file=\" + config.siteConfigFile\n # config.dataRootdir shouldn't be used with exclusions\n command += \" --fail=stdout\"\n command += \" > \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n inputOptions: (config) ->\n if @interface is \"builder\"\n parameters = []\n if @typesEnabled and @types.length and _.difference(share.queryTypes, @types).length\n value = @types.join(\",\")\n else\n value = \"all\"\n parameters.push(\"--type=\" + value)\n if @startDateType is \"interval\"\n if @startDateEnabled and @startDate\n parameters.push(\"--start-date=\" + @startDate)\n if @endDateEnabled and @endDate\n parameters.push(\"--end-date=\" + @endDate)\n if @activeTimeEnabled and @activeTime\n parameters.push(\"--active-time=\" + @activeTime)\n else\n if @startDateOffsetEnabled and @startDateOffset\n startDateOffsetNumber = share.intval(@startDateOffset)\n eTimeMoment = moment.utc()\n sTimeMoment = eTimeMoment.clone().subtract(startDateOffsetNumber, 'minutes')\n parameters.push(\"--start-date=\" + sTimeMoment.format(\"YYYY/MM/DD:HH\"))\n parameters.push(\"--end-date=\" + eTimeMoment.format(\"YYYY/MM/DD:HH\"))\n parameters.push(\"--active-time=\" + sTimeMoment.format(\"YYYY/MM/DDTHH:mm:ss.SSS\") + \"-\" + eTimeMoment.format(\"YYYY/MM/DDTHH:mm:ss.SSS\"))\n if @sensorEnabled and @sensor\n parameters.push(\"--sensor=\" + @sensor)\n if @daddressEnabled and @daddress\n parameters.push(\"--daddress=\" + @daddress)\n if @saddressEnabled and @saddress\n parameters.push(\"--saddress=\" + @saddress)\n if @anyAddressEnabled and @anyAddress\n parameters.push(\"--any-address=\" + @anyAddress)\n if @dipSetEnabled and @dipSet\n parameters.push(\"--dipset=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @dipSet + \".rws\")\n if @sipSetEnabled and @sipSet\n parameters.push(\"--sipset=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @sipSet + \".rws\")\n if @anySetEnabled and @anySet\n parameters.push(\"--anyset=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @anySet + \".rws\")\n if @tupleFileEnabled and @tupleFile\n parameters.push(\"--tuple-file=\" + (config.dataTempdir or \"/tmp\") + \"/\" + @tupleFile + \".tuple\")\n if @tupleDirectionEnabled and @tupleDirection\n parameters.push(\"--tuple-direction=\" + @tupleDirection)\n if @tupleDelimiterEnabled and @tupleDelimiter\n parameters.push(\"--tuple-delimiter=\" + @tupleDelimiter)\n if @tupleFieldsEnabled and @tupleFields\n parameters.push(\"--tuple-fields=\" + @tupleFields)\n if @dportEnabled and @dport\n parameters.push(\"--dport=\" + @dport)\n if @sportEnabled and @sport\n parameters.push(\"--sport=\" + @sport)\n if @aportEnabled and @aport\n parameters.push(\"--aport=\" + @aport)\n if @dccEnabled and @dcc.length\n parameters.push(\"--dcc=\" + @dcc.join(\",\"))\n if @sccEnabled and @scc.length\n parameters.push(\"--scc=\" + @scc.join(\",\"))\n if @protocolEnabled and @protocol\n parameters.push(\"--protocol=\" + @protocol)\n if @flagsAllEnabled and @flagsAll\n parameters.push(\"--flags-all=\" + @flagsAll)\n if @additionalParametersEnabled and @additionalParameters\n parameters.push(@additionalParameters)\n string = parameters.join(\" \")\n else\n string = @cmd\n share.filterOptions(string)\n inputExclusions: ->\n exclusionsCmd = \"\"\n if @interface is \"builder\"\n if @additionalExclusionsCmdEnabled\n exclusionsCmd = @additionalExclusionsCmd\n else\n exclusionsCmd = @exclusionsCmd\n exclusionsCmd = share.filterOptions(exclusionsCmd)\n _.compact(exclusionsCmd.split(/\\s+(?:OR|\\|\\|)\\s+/i))\n outputCommand: (config, profile, isPresentation = false) ->\n switch @output\n when \"rwcut\"\n @outputRwcutCommand(config, profile, isPresentation)\n when \"rwstats\"\n @outputRwstatsCommand(config, profile, isPresentation)\n when \"rwcount\"\n @outputRwcountCommand(config, profile, isPresentation)\n outputRwcutCommand: (config, profile, isPresentation = false) ->\n commands = []\n if @sortField\n rwsortOptions = [\"--fields=\" + @sortField]\n if @sortReverse\n rwsortOptions.push(\"--reverse\")\n if config.siteConfigFile\n rwsortOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwsortOptionsString = rwsortOptions.join(\" \")\n rwsortOptionsString = share.filterOptions(rwsortOptionsString)\n commands.push(\"rwsort \" + rwsortOptionsString)\n rwcutOptions = [\"--num-recs=\" + profile.numRecs, \"--start-rec-num=\" + @startRecNum, \"--delimited\"]\n if @fields.length\n rwcutOptions.push(\"--fields=\" + _.intersection(@fieldsOrder, @fields).join(\",\"))\n if config.siteConfigFile\n rwcutOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwcutOptionsString = rwcutOptions.join(\" \")\n rwcutOptionsString = share.filterOptions(rwcutOptionsString)\n commands.push(\"rwcut \" + rwcutOptionsString)\n commands[0] += \" \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n command = commands.join(\" | \")\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n outputRwstatsCommand: (config, profile, isPresentation = false) ->\n defaultRwstatsOptions = [\"--delimited\"]\n if @interface is \"builder\"\n rwstatsOptions = defaultRwstatsOptions\n if @rwstatsFields.length\n rwstatsOptions.push(\"--fields=\" + _.intersection(@rwstatsFieldsOrder, @rwstatsFields).join(\",\"))\n rwstatsValues = @rwstatsValues.slice(0)\n rwstatsValuesOrder = @rwstatsValuesOrder.slice(0)\n if @rwstatsPrimaryValue\n rwstatsValues.unshift(@rwstatsPrimaryValue)\n rwstatsValuesOrder.unshift(@rwstatsPrimaryValue)\n if rwstatsValues.length\n values = _.intersection(rwstatsValuesOrder, rwstatsValues)\n for value, index in values\n if value not in share.rwstatsValues\n values[index] = \"distinct:\" + value\n rwstatsOptions.push(\"--values=\" + values.join(\",\"))\n if values[0] not in share.rwstatsValues\n rwstatsOptions.push(\"--no-percents\")\n rwstatsOptions.push(\"--\" + @rwstatsDirection)\n switch @rwstatsMode\n when \"count\"\n rwstatsOptions.push(\"--count=\" + @rwstatsCountModeValue)\n when \"threshold\"\n rwstatsOptions.push(\"--threshold=\" + @rwstatsThresholdModeValue)\n when \"percentage\"\n rwstatsOptions.push(\"--percentage=\" + @rwstatsPercentageModeValue)\n if @rwstatsBinTimeEnabled\n if @rwstatsBinTime\n rwstatsOptions.push(\"--bin-time=\" + @rwstatsBinTime)\n else\n rwstatsOptions.push(\"--bin-time\")\n if config.siteConfigFile\n rwstatsOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwstatsOptionsString = rwstatsOptions.join(\" \")\n else\n rwstatsOptionsString = @rwstatsCmd + \" \" + defaultRwstatsOptions.join(\" \")\n rwstatsOptionsString = share.filterOptions(rwstatsOptionsString)\n command = \"rwstats \" + rwstatsOptionsString\n command += \" \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n outputRwcountCommand: (config, profile, isPresentation = false) ->\n defaultRwcountOptions = [\"--delimited\", \"--no-titles\"] # --no-titles is necessary, because header is added later\n if @interface is \"builder\"\n rwcountOptions = defaultRwcountOptions\n if @rwcountBinSizeEnabled\n rwcountOptions.push(\"--bin-size=\" + @rwcountBinSize)\n if @rwcountLoadSchemeEnabled\n rwcountOptions.push(\"--load-scheme=\" + @rwcountLoadScheme)\n if @rwcountSkipZeroes\n rwcountOptions.push(\"--skip-zeroes\")\n if config.siteConfigFile\n rwcountOptions.push(\"--site-config-file=\" + config.siteConfigFile)\n rwcountOptionsString = rwcountOptions.join(\" \")\n else\n rwcountOptionsString = @rwcountCmd + \" \" + defaultRwcountOptions.join(\" \")\n rwcountOptionsString = share.filterOptions(rwcountOptionsString)\n command = \"rwcount \" + rwcountOptionsString\n command += \" \" + (config.dataTempdir or \"/tmp\") + \"/\" + @_id + \".rwf\"\n if @presentation is \"table\"\n if @sortField\n fieldIndex = share.rwcountFields.indexOf(@sortField)\n sortOptions = \"--field-separator=\\\\\\| --key=+\" + (fieldIndex + 1) + \"n\" + (if @sortReverse then \"r\" else \"\")\n sortOptions = share.filterOptions(sortOptions, \"\\\\\\\\\\\\|\\\\+\")\n sortCommand = \"sort \" + sortOptions\n command += \" | \" + sortCommand\n if profile.numRecs\n headOptions = \"--lines=\" + (@startRecNum + profile.numRecs - 1)\n headOptions = share.filterOptions(headOptions)\n headCommand = \"head \" + headOptions\n tailOptions = \"--lines=\" + profile.numRecs\n tailOptions = share.filterOptions(tailOptions)\n tailCommand = \"tail \" + tailOptions\n command += \" | \" + headCommand + \" | \" + tailCommand\n if config.isSSH and not isPresentation\n command = config.wrapCommand(command)\n command\n rwstatsCountModeValueIsEnabled: ->\n @rwstatsMode is \"count\"\n rwstatsThresholdModeValueIsEnabled: ->\n @rwstatsMode is \"threshold\"\n rwstatsPercentageModeValueIsEnabled: ->\n @rwstatsMode is \"percentage\"\n availableChartTypes: ->\n share.availableChartTypes[@output]\n path: ->\n \"/query/\" + @_id\n\nclass share.IPSet\n constructor: (doc) ->\n _.extend(@, doc)\n displayName: ->\n @name or \"#\" + @_id\n objectSelectName: ->\n @displayName()\n objectSelectValue: ->\n @_id\n path: ->\n \"/ipset/\" + @_id\n\nclass share.Tuple\n constructor: (doc) ->\n _.extend(@, doc)\n displayName: ->\n @name or \"#\" + @_id\n objectSelectName: ->\n @displayName()\n objectSelectValue: ->\n @_id\n path: ->\n \"/tuple/\" + @_id\n\nshare.Transformations =\n user: (user) ->\n if user instanceof share.User or not user then user else new share.User(user)\n config: (config) ->\n if config instanceof share.Config or not config then config else new share.Config(config)\n query: (query) ->\n if query instanceof share.Query or not query then query else new share.Query(query)\n ipset: (ipset) ->\n if ipset instanceof share.IPSet or not ipset then ipset else new share.IPSet(ipset)\n tuple: (tuple) ->\n if tuple instanceof share.Tuple or not tuple then tuple else new share.Tuple(tuple)\n"]}
\ No newline at end of file
diff --git a/private/bundle/programs/server/app/server/execution.coffee.js b/private/bundle/programs/server/app/server/execution.coffee.js
index a99b45f..3dd7284 100644
--- a/private/bundle/programs/server/app/server/execution.coffee.js
+++ b/private/bundle/programs/server/app/server/execution.coffee.js
@@ -374,6 +374,9 @@ executeQuery = function(query, config, profile, callback) {
result = stdout.trim();
error = stderr.trim();
code = err ? err.code : 0;
+ if (error.indexOf("Rejected") !== -1) {
+ error = null;
+ }
return callback(result, error, code);
}));
};
diff --git a/private/bundle/programs/server/app/server/execution.coffee.js.map b/private/bundle/programs/server/app/server/execution.coffee.js.map
index 196b69f..2490b69 100644
--- a/private/bundle/programs/server/app/server/execution.coffee.js.map
+++ b/private/bundle/programs/server/app/server/execution.coffee.js.map
@@ -1 +1 @@
-{"version":3,"sources":["execution.coffee"],"names":[],"mappings":"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","file":"/server/execution.coffee.js","sourcesContent":["fs = Npm.require(\"fs\")\nProcess = Npm.require(\"child_process\")\nFuture = Npm.require('fibers/future')\nwriteFile = Future.wrap(fs.writeFile)\n\nshare.Queries.after.update (userId, query, fieldNames, modifier, options) ->\n if _.intersection(fieldNames, share.inputFields).length\n share.Queries.update(query._id, {$set: {isInputStale: true}})\n\nshare.Queries.after.update (userId, query, fieldNames, modifier, options) ->\n if not query.isOutputStale\n return\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n query = share.Transformations.query(query)\n if not query.inputOptions(config)\n share.Queries.update(query._id, {$set: {isInputStale: false, isOutputStale: false}})\n return\n profile = Meteor.users.findOne(query.ownerId).profile\n callback = (result, error, code) ->\n share.Queries.update(query._id, {$set: {result: result, error: error, code: code, isInputStale: false, isOutputStale: false}})\n loadQueryResult(query, config, profile, callback)\n\nMeteor.methods\n checkConnection: ->\n unless @userId\n throw new Match.Error(\"Operation not allowed for unauthorized users\")\n queryId = share.Queries.insert({\n interface: \"cmd\"\n cmd: \"--protocol=0-255\"\n isQuick: true\n })\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n profile = Meteor.users.findOne(@userId).profile\n query = share.Queries.findOne(queryId, {transform: share.Transformations.query})\n @unblock()\n fut = new Future()\n callback = (result, error, code) ->\n if error\n fut.throw(new Meteor.Error(500, error))\n else\n fut.return(result)\n executeQuery(query, config, profile, callback)\n fut.wait()\n # quick queries are cleaned up automatically\n loadDataForCSV: (queryId) ->\n check(queryId, Match.App.QueryId)\n unless @userId\n throw new Match.Error(\"Operation not allowed for unauthorized users\")\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n query = share.Queries.findOne(queryId, {transform: share.Transformations.query})\n unless @userId is query.ownerId\n throw new Match.Error(\"Operation not allowed for non-owners\")\n @unblock()\n fut = new Future()\n callback = (result, error, code) ->\n if error\n fut.throw(new Error(error))\n else\n fut.return(result)\n query.startRecNum = 1\n loadQueryResult(query, config, {numRecs: 0}, callback)\n fut.wait()\n getRwfToken: (queryId) ->\n check(queryId, Match.App.QueryId)\n unless @userId\n throw new Match.Error(\"Operation not allowed for unauthorized users\")\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n profile = Meteor.users.findOne(@userId).profile\n query = share.Queries.findOne(queryId, {transform: share.Transformations.query})\n unless @userId is query.ownerId\n throw new Match.Error(\"Operation not allowed for non-owners\")\n @unblock()\n token = Random.id()\n fut = new Future()\n callback = (result, error, code) ->\n if error\n fut.throw(new Error(error))\n else\n if config.isSSH\n copyCommand = \"scp \" + config.getSSHOptions() + \" -P \" + config.port + \" \" + config.user + \"@\" + config.host + \":\" + config.dataTempdir + \"/\" + query._id + \".rwf \" + \"/tmp\" + \"/\" + token + \".rwf\"\n else\n copyCommand = \"cp \" + config.dataTempdir + \"/\" + query._id + \".rwf \" + \"/tmp\" + \"/\" + token + \".rwf\"\n Process.exec(copyCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n fut.throw(new Error(error))\n else\n fut.return(token)\n ))\n executeQuery(query, config, profile, callback)\n fut.wait()\n\nexecuteQuery = (query, config, profile, callback) ->\n rwsetbuildErrors = []\n rwsetbuildFutures = []\n isIpsetStale = false\n _.each([\"dipSet\", \"sipSet\", \"anySet\"], (field) ->\n if query[field + \"Enabled\"] and query[field]\n set = share.IPSets.findOne(query[field])\n if set.isOutputStale\n isIpsetStale = true\n rwsetbuildFuture = new Future()\n txtFilename = \"/tmp\" + \"/\" + set._id + \".txt\"\n rwsFilename = config.dataTempdir + \"/\" + set._id + \".rws\"\n writeFileFuture = writeFile(txtFilename, set.contents)\n if config.isSSH\n scpCommand = \"scp \" + config.getSSHOptions() + \" -P \" + config.port + \" \" + txtFilename + \" \" + config.user + \"@\" + config.host + \":\" + txtFilename\n scpFuture = new Future()\n Process.exec(scpCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n rwsetbuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"scp: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n scpFuture.return(result)\n ))\n scpFuture.wait()\n rmCommand = \"rm -f \" + rwsFilename\n if config.isSSH\n rmCommand = config.wrapCommand(rmCommand)\n rmFuture = new Future()\n Process.exec(rmCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n rwsetbuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"rm: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n rmFuture.return(result)\n ))\n rmFuture.wait()\n writeFileFuture.resolve Meteor.bindEnvironment((err, result) ->\n if err\n rwsetbuildErrors.push(err)\n rwsetbuildFuture.return(result)\n else\n rwsetbuildCommand = \"rwsetbuild \" + txtFilename + \" \" + rwsFilename\n if config.isSSH\n rwsetbuildCommand = config.wrapCommand(rwsetbuildCommand)\n Process.exec(rwsetbuildCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n rwsetbuildErrors.push(error)\n if code is 0\n share.IPSets.update(set._id, {$set: {isOutputStale: false}})\n else\n if not error\n throw \"rwsetbuild: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n rwsetbuildFuture.return(result)\n ))\n )\n rwsetbuildFutures.push(rwsetbuildFuture)\n )\n Future.wait(rwsetbuildFutures)\n\n if rwsetbuildErrors.length\n callback(\"\", rwsetbuildErrors.join(\"\\n\"), 255)\n return\n\n if not query.isInputStale and not isIpsetStale\n callback(\"\", \"\", 0)\n return\n\n tuplebuildErrors = []\n tuplebuildFutures = []\n isTupleStale = false\n _.each([\"tupleFile\"], (field) ->\n if query[field + \"Enabled\"] and query[field]\n set = share.Tuples.findOne(query[field])\n if set.isOutputStale\n isTupleStale = true\n tuplebuildFuture = new Future()\n txtFilename = \"/tmp\" + \"/\" + set._id + \".txt\"\n tupleFilename = config.dataTempdir + \"/\" + set._id + \".tuple\"\n writeFileFuture = writeFile(txtFilename, set.contents)\n if config.isSSH\n scpCommand = \"scp \" + config.getSSHOptions() + \" -P \" + config.port + \" \" + txtFilename + \" \" + config.user + \"@\" + config.host + \":\" + txtFilename\n scpFuture = new Future()\n Process.exec(scpCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n tuplebuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"scp: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n scpFuture.return(result)\n ))\n scpFuture.wait()\n rmCommand = \"rm -f \" + tupleFilename\n if config.isSSH\n rmCommand = config.wrapCommand(rmCommand)\n rmFuture = new Future()\n Process.exec(rmCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n tuplebuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"rm: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n rmFuture.return(result)\n ))\n rmFuture.wait()\n writeFileFuture.resolve Meteor.bindEnvironment((err, result) ->\n if err\n tuplebuildErrors.push(err)\n tuplebuildFuture.return(result)\n else\n tuplebuildCommand = \"cat \" + txtFilename + \" > \" + tupleFilename\n if config.isSSH\n tuplebuildCommand = config.wrapCommand(tuplebuildCommand)\n Process.exec(tuplebuildCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n tuplebuildErrors.push(error)\n if code is 0\n share.Tuples.update(set._id, {$set: {isOutputStale: false}})\n else\n if not error\n throw \"tuplebuild: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n tuplebuildFuture.return(result)\n ))\n )\n tuplebuildFutures.push(tuplebuildFuture)\n )\n Future.wait(tuplebuildFutures)\n\n if tuplebuildErrors.length\n callback(\"\", tuplebuildErrors.join(\"\\n\"), 255)\n return\n\n if not query.isInputStale and not isTupleStale\n callback(\"\", \"\", 0)\n return\n\n command = query.inputCommand(config, profile)\n Process.exec(command, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n callback(result, error, code)\n ))\n\nloadQueryResult = (query, config, profile, callback) ->\n executeQuery(query, config, profile, Meteor.bindEnvironment((result, error, code) ->\n if error\n return callback(result, error, code)\n command = query.outputCommand(config, profile)\n Process.exec(command, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error.indexOf(\"Error opening file\") isnt -1\n query.isInputStale = true\n loadQueryResult(query, config, profile, callback)\n else\n callback(result, error, code)\n ))\n ))\n"]}
\ No newline at end of file
+{"version":3,"sources":["execution.coffee"],"names":[],"mappings":"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","file":"/server/execution.coffee.js","sourcesContent":["fs = Npm.require(\"fs\")\nProcess = Npm.require(\"child_process\")\nFuture = Npm.require('fibers/future')\nwriteFile = Future.wrap(fs.writeFile)\n\nshare.Queries.after.update (userId, query, fieldNames, modifier, options) ->\n if _.intersection(fieldNames, share.inputFields).length\n share.Queries.update(query._id, {$set: {isInputStale: true}})\n\nshare.Queries.after.update (userId, query, fieldNames, modifier, options) ->\n if not query.isOutputStale\n return\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n query = share.Transformations.query(query)\n if not query.inputOptions(config)\n share.Queries.update(query._id, {$set: {isInputStale: false, isOutputStale: false}})\n return\n profile = Meteor.users.findOne(query.ownerId).profile\n callback = (result, error, code) ->\n share.Queries.update(query._id, {$set: {result: result, error: error, code: code, isInputStale: false, isOutputStale: false}})\n loadQueryResult(query, config, profile, callback)\n\nMeteor.methods\n checkConnection: ->\n unless @userId\n throw new Match.Error(\"Operation not allowed for unauthorized users\")\n queryId = share.Queries.insert({\n interface: \"cmd\"\n cmd: \"--protocol=0-255\"\n isQuick: true\n })\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n profile = Meteor.users.findOne(@userId).profile\n query = share.Queries.findOne(queryId, {transform: share.Transformations.query})\n @unblock()\n fut = new Future()\n callback = (result, error, code) ->\n if error\n fut.throw(new Meteor.Error(500, error))\n else\n fut.return(result)\n executeQuery(query, config, profile, callback)\n fut.wait()\n # quick queries are cleaned up automatically\n loadDataForCSV: (queryId) ->\n check(queryId, Match.App.QueryId)\n unless @userId\n throw new Match.Error(\"Operation not allowed for unauthorized users\")\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n query = share.Queries.findOne(queryId, {transform: share.Transformations.query})\n unless @userId is query.ownerId\n throw new Match.Error(\"Operation not allowed for non-owners\")\n @unblock()\n fut = new Future()\n callback = (result, error, code) ->\n if error\n fut.throw(new Error(error))\n else\n fut.return(result)\n query.startRecNum = 1\n loadQueryResult(query, config, {numRecs: 0}, callback)\n fut.wait()\n getRwfToken: (queryId) ->\n check(queryId, Match.App.QueryId)\n unless @userId\n throw new Match.Error(\"Operation not allowed for unauthorized users\")\n config = share.Configs.findOne({}, {transform: share.Transformations.config})\n profile = Meteor.users.findOne(@userId).profile\n query = share.Queries.findOne(queryId, {transform: share.Transformations.query})\n unless @userId is query.ownerId\n throw new Match.Error(\"Operation not allowed for non-owners\")\n @unblock()\n token = Random.id()\n fut = new Future()\n callback = (result, error, code) ->\n if error\n fut.throw(new Error(error))\n else\n if config.isSSH\n copyCommand = \"scp \" + config.getSSHOptions() + \" -P \" + config.port + \" \" + config.user + \"@\" + config.host + \":\" + config.dataTempdir + \"/\" + query._id + \".rwf \" + \"/tmp\" + \"/\" + token + \".rwf\"\n else\n copyCommand = \"cp \" + config.dataTempdir + \"/\" + query._id + \".rwf \" + \"/tmp\" + \"/\" + token + \".rwf\"\n Process.exec(copyCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n fut.throw(new Error(error))\n else\n fut.return(token)\n ))\n executeQuery(query, config, profile, callback)\n fut.wait()\n\nexecuteQuery = (query, config, profile, callback) ->\n rwsetbuildErrors = []\n rwsetbuildFutures = []\n isIpsetStale = false\n _.each([\"dipSet\", \"sipSet\", \"anySet\"], (field) ->\n if query[field + \"Enabled\"] and query[field]\n set = share.IPSets.findOne(query[field])\n if set.isOutputStale\n isIpsetStale = true\n rwsetbuildFuture = new Future()\n txtFilename = \"/tmp\" + \"/\" + set._id + \".txt\"\n rwsFilename = config.dataTempdir + \"/\" + set._id + \".rws\"\n writeFileFuture = writeFile(txtFilename, set.contents)\n if config.isSSH\n scpCommand = \"scp \" + config.getSSHOptions() + \" -P \" + config.port + \" \" + txtFilename + \" \" + config.user + \"@\" + config.host + \":\" + txtFilename\n scpFuture = new Future()\n Process.exec(scpCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n rwsetbuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"scp: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n scpFuture.return(result)\n ))\n scpFuture.wait()\n rmCommand = \"rm -f \" + rwsFilename\n if config.isSSH\n rmCommand = config.wrapCommand(rmCommand)\n rmFuture = new Future()\n Process.exec(rmCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n rwsetbuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"rm: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n rmFuture.return(result)\n ))\n rmFuture.wait()\n writeFileFuture.resolve Meteor.bindEnvironment((err, result) ->\n if err\n rwsetbuildErrors.push(err)\n rwsetbuildFuture.return(result)\n else\n rwsetbuildCommand = \"rwsetbuild \" + txtFilename + \" \" + rwsFilename\n if config.isSSH\n rwsetbuildCommand = config.wrapCommand(rwsetbuildCommand)\n Process.exec(rwsetbuildCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n rwsetbuildErrors.push(error)\n if code is 0\n share.IPSets.update(set._id, {$set: {isOutputStale: false}})\n else\n if not error\n throw \"rwsetbuild: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n rwsetbuildFuture.return(result)\n ))\n )\n rwsetbuildFutures.push(rwsetbuildFuture)\n )\n Future.wait(rwsetbuildFutures)\n\n if rwsetbuildErrors.length\n callback(\"\", rwsetbuildErrors.join(\"\\n\"), 255)\n return\n\n if not query.isInputStale and not isIpsetStale\n callback(\"\", \"\", 0)\n return\n\n tuplebuildErrors = []\n tuplebuildFutures = []\n isTupleStale = false\n _.each([\"tupleFile\"], (field) ->\n if query[field + \"Enabled\"] and query[field]\n set = share.Tuples.findOne(query[field])\n if set.isOutputStale\n isTupleStale = true\n tuplebuildFuture = new Future()\n txtFilename = \"/tmp\" + \"/\" + set._id + \".txt\"\n tupleFilename = config.dataTempdir + \"/\" + set._id + \".tuple\"\n writeFileFuture = writeFile(txtFilename, set.contents)\n if config.isSSH\n scpCommand = \"scp \" + config.getSSHOptions() + \" -P \" + config.port + \" \" + txtFilename + \" \" + config.user + \"@\" + config.host + \":\" + txtFilename\n scpFuture = new Future()\n Process.exec(scpCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n tuplebuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"scp: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n scpFuture.return(result)\n ))\n scpFuture.wait()\n rmCommand = \"rm -f \" + tupleFilename\n if config.isSSH\n rmCommand = config.wrapCommand(rmCommand)\n rmFuture = new Future()\n Process.exec(rmCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n tuplebuildErrors.push(error)\n if code is 0\n else\n if not error\n throw \"rm: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n rmFuture.return(result)\n ))\n rmFuture.wait()\n writeFileFuture.resolve Meteor.bindEnvironment((err, result) ->\n if err\n tuplebuildErrors.push(err)\n tuplebuildFuture.return(result)\n else\n tuplebuildCommand = \"cat \" + txtFilename + \" > \" + tupleFilename\n if config.isSSH\n tuplebuildCommand = config.wrapCommand(tuplebuildCommand)\n Process.exec(tuplebuildCommand, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error\n tuplebuildErrors.push(error)\n if code is 0\n share.Tuples.update(set._id, {$set: {isOutputStale: false}})\n else\n if not error\n throw \"tuplebuild: code is \\\"\" + code + \"\\\" while stderr is \\\"\" + error + \"\\\"\"\n tuplebuildFuture.return(result)\n ))\n )\n tuplebuildFutures.push(tuplebuildFuture)\n )\n Future.wait(tuplebuildFutures)\n\n if tuplebuildErrors.length\n callback(\"\", tuplebuildErrors.join(\"\\n\"), 255)\n return\n\n if not query.isInputStale and not isTupleStale\n callback(\"\", \"\", 0)\n return\n\n command = query.inputCommand(config, profile)\n Process.exec(command, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error.indexOf(\"Rejected\") isnt -1\n error = null\n callback(result, error, code)\n ))\n\nloadQueryResult = (query, config, profile, callback) ->\n executeQuery(query, config, profile, Meteor.bindEnvironment((result, error, code) ->\n if error\n return callback(result, error, code)\n command = query.outputCommand(config, profile)\n Process.exec(command, Meteor.bindEnvironment((err, stdout, stderr) ->\n result = stdout.trim()\n error = stderr.trim()\n code = if err then err.code else 0\n if error.indexOf(\"Error opening file\") isnt -1\n query.isInputStale = true\n loadQueryResult(query, config, profile, callback)\n else\n callback(result, error, code)\n ))\n ))\n"]}
\ No newline at end of file
diff --git a/private/bundle/programs/server/assets/app/FlowBAT.tar.gz b/private/bundle/programs/server/assets/app/FlowBAT.tar.gz
new file mode 100644
index 0000000..88f9b75
Binary files /dev/null and b/private/bundle/programs/server/assets/app/FlowBAT.tar.gz differ
diff --git a/private/bundle/programs/server/node_modules/chalk/node_modules/escape-string-regexp/package.json b/private/bundle/programs/server/node_modules/chalk/node_modules/escape-string-regexp/package.json
index 5f75157..f05c4af 100644
--- a/private/bundle/programs/server/node_modules/chalk/node_modules/escape-string-regexp/package.json
+++ b/private/bundle/programs/server/node_modules/chalk/node_modules/escape-string-regexp/package.json
@@ -1,6 +1,6 @@
{
"name": "escape-string-regexp",
- "version": "1.0.4",
+ "version": "1.0.5",
"description": "Escape RegExp special characters",
"license": "MIT",
"repository": {
@@ -47,25 +47,29 @@
"ava": "*",
"xo": "*"
},
- "gitHead": "e9ca6832a9506ca26402cb0e6dc95efcf35b0b97",
+ "gitHead": "db124a3e1aae9d692c4899e42a5c6c3e329eaa20",
"bugs": {
"url": "https://github.com/sindresorhus/escape-string-regexp/issues"
},
"homepage": "https://github.com/sindresorhus/escape-string-regexp",
- "_id": "escape-string-regexp@1.0.4",
- "_shasum": "b85e679b46f72d03fbbe8a3bf7259d535c21b62f",
+ "_id": "escape-string-regexp@1.0.5",
+ "_shasum": "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
"_from": "escape-string-regexp@^1.0.0",
- "_npmVersion": "2.14.7",
- "_nodeVersion": "4.2.1",
+ "_npmVersion": "2.14.12",
+ "_nodeVersion": "4.2.6",
"_npmUser": {
- "name": "sindresorhus",
- "email": "sindresorhus@gmail.com"
+ "name": "jbnicolai",
+ "email": "jappelman@xebia.com"
},
"dist": {
- "shasum": "b85e679b46f72d03fbbe8a3bf7259d535c21b62f",
- "tarball": "http://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.4.tgz"
+ "shasum": "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
+ "tarball": "http://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
+ },
+ "_npmOperationalInternal": {
+ "host": "packages-9-west.internal.npmjs.com",
+ "tmp": "tmp/escape-string-regexp-1.0.5.tgz_1456059312074_0.7245344955008477"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.4.tgz",
+ "_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"readme": "ERROR: No README data found!"
}
diff --git a/private/bundle/programs/server/node_modules/chalk/package.json b/private/bundle/programs/server/node_modules/chalk/package.json
index b37abee..148a96a 100644
--- a/private/bundle/programs/server/node_modules/chalk/package.json
+++ b/private/bundle/programs/server/node_modules/chalk/package.json
@@ -77,5 +77,6 @@
"tarball": "http://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz"
},
"directories": {},
- "_resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz"
+ "_resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "readme": "ERROR: No README data found!"
}
diff --git a/private/bundle/programs/server/program.json b/private/bundle/programs/server/program.json
index 6a39756..ae29875 100644
--- a/private/bundle/programs/server/program.json
+++ b/private/bundle/programs/server/program.json
@@ -355,217 +355,358 @@
{
"sourceMap": "app/server/security/lib/matches.coffee.js.map",
"sourceMapRoot": "server/security/lib",
- "path": "app/server/security/lib/matches.coffee.js"
+ "path": "app/server/security/lib/matches.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/security/lib/securityRulesWrapper.coffee.js.map",
"sourceMapRoot": "server/security/lib",
- "path": "app/server/security/lib/securityRulesWrapper.coffee.js"
+ "path": "app/server/security/lib/securityRulesWrapper.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/lib/compatibility/i18next-1.7.3.js"
+ "path": "app/lib/compatibility/i18next-1.7.3.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/lib/compatibility/moment.js"
+ "path": "app/lib/compatibility/moment.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/lib/compatibility/underscore.string.js"
+ "path": "app/lib/compatibility/underscore.string.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/lib/compatibility/xss.js"
+ "path": "app/lib/compatibility/xss.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/lib/app.coffee.js.map",
"sourceMapRoot": "lib",
- "path": "app/lib/app.coffee.js"
+ "path": "app/lib/app.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/lib/regexps.coffee.js.map",
"sourceMapRoot": "lib",
- "path": "app/lib/regexps.coffee.js"
+ "path": "app/lib/regexps.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/lib/security.coffee.js.map",
"sourceMapRoot": "lib",
- "path": "app/lib/security.coffee.js"
+ "path": "app/lib/security.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/lib/transformations.coffee.js.map",
"sourceMapRoot": "lib",
- "path": "app/lib/transformations.coffee.js"
+ "path": "app/lib/transformations.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/server/emailTemplates/handlebars.newUserHtml.js"
+ "path": "app/server/emailTemplates/handlebars.newUserHtml.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/server/emailTemplates/handlebars.newUserSubject.js"
+ "path": "app/server/emailTemplates/handlebars.newUserSubject.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/server/emailTemplates/handlebars.resetPasswordHtml.js"
+ "path": "app/server/emailTemplates/handlebars.resetPasswordHtml.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/server/emailTemplates/handlebars.resetPasswordSubject.js"
+ "path": "app/server/emailTemplates/handlebars.resetPasswordSubject.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/server/exec/exec.js"
+ "path": "app/server/exec/exec.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/i18n/_.coffee.js.map",
"sourceMapRoot": "server/i18n",
- "path": "app/server/i18n/_.coffee.js"
+ "path": "app/server/i18n/_.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/i18n/en.coffee.js.map",
"sourceMapRoot": "server/i18n",
- "path": "app/server/i18n/en.coffee.js"
+ "path": "app/server/i18n/en.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/model/collections.coffee.js.map",
"sourceMapRoot": "server/model",
- "path": "app/server/model/collections.coffee.js"
+ "path": "app/server/model/collections.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/model/publications.coffee.js.map",
"sourceMapRoot": "server/model",
- "path": "app/server/model/publications.coffee.js"
+ "path": "app/server/model/publications.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/security/configs.coffee.js.map",
"sourceMapRoot": "server/security",
- "path": "app/server/security/configs.coffee.js"
+ "path": "app/server/security/configs.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/security/ipsets.coffee.js.map",
"sourceMapRoot": "server/security",
- "path": "app/server/security/ipsets.coffee.js"
+ "path": "app/server/security/ipsets.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/security/queries.coffee.js.map",
"sourceMapRoot": "server/security",
- "path": "app/server/security/queries.coffee.js"
+ "path": "app/server/security/queries.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/security/tuples.coffee.js.map",
"sourceMapRoot": "server/security",
- "path": "app/server/security/tuples.coffee.js"
+ "path": "app/server/security/tuples.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/security/users.coffee.js.map",
"sourceMapRoot": "server/security",
- "path": "app/server/security/users.coffee.js"
+ "path": "app/server/security/users.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/configs.defaults.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/configs.defaults.coffee.js"
+ "path": "app/common/configs.defaults.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/ipsets.defaults.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/ipsets.defaults.coffee.js"
+ "path": "app/common/ipsets.defaults.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/ipsets.hooks.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/ipsets.hooks.coffee.js"
+ "path": "app/common/ipsets.hooks.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/queries.defaults.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/queries.defaults.coffee.js"
+ "path": "app/common/queries.defaults.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/queries.hooks.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/queries.hooks.coffee.js"
+ "path": "app/common/queries.hooks.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/tuples.defaults.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/tuples.defaults.coffee.js"
+ "path": "app/common/tuples.defaults.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/tuples.hooks.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/tuples.hooks.coffee.js"
+ "path": "app/common/tuples.hooks.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/common/users.defaults.coffee.js.map",
"sourceMapRoot": "common",
- "path": "app/common/users.defaults.coffee.js"
+ "path": "app/common/users.defaults.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/cleanup.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/cleanup.coffee.js"
+ "path": "app/server/cleanup.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/configs.hooks.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/configs.hooks.coffee.js"
+ "path": "app/server/configs.hooks.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/cron.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/cron.coffee.js"
+ "path": "app/server/cron.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/executingAt.query.hooks.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/executingAt.query.hooks.coffee.js"
+ "path": "app/server/executingAt.query.hooks.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/execution.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/execution.coffee.js"
+ "path": "app/server/execution.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/fastrender.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/fastrender.coffee.js"
+ "path": "app/server/fastrender.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/fixtures.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/fixtures.coffee.js"
+ "path": "app/server/fixtures.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/helpers.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/helpers.coffee.js"
+ "path": "app/server/helpers.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
- "path": "app/server/meteor-security-patch.js"
+ "path": "app/server/meteor-security-patch.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/methods.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/methods.coffee.js"
+ "path": "app/server/methods.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/periodic.execution.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/periodic.execution.coffee.js"
+ "path": "app/server/periodic.execution.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/queries.hooks.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/queries.hooks.coffee.js"
+ "path": "app/server/queries.hooks.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/routing.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/routing.coffee.js"
+ "path": "app/server/routing.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/startup.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/startup.coffee.js"
+ "path": "app/server/startup.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "app/server/users.hooks.coffee.js.map",
"sourceMapRoot": "server",
- "path": "app/server/users.hooks.coffee.js"
+ "path": "app/server/users.hooks.coffee.js",
+ "assets": {
+ "FlowBAT.tar.gz": "assets/app/FlowBAT.tar.gz"
+ }
},
{
"sourceMap": "packages/service-configuration.js.map",
diff --git a/private/bundle/programs/web.browser/5e50bc1ff2730b927bd5a8843b8180b18b6fba0e.css b/private/bundle/programs/web.browser/40985797a98c80d720d8ea9e7852aa5ed0291e35.css
similarity index 98%
rename from private/bundle/programs/web.browser/5e50bc1ff2730b927bd5a8843b8180b18b6fba0e.css
rename to private/bundle/programs/web.browser/40985797a98c80d720d8ea9e7852aa5ed0291e35.css
index f948e1a..4a4459f 100644
--- a/private/bundle/programs/web.browser/5e50bc1ff2730b927bd5a8843b8180b18b6fba0e.css
+++ b/private/bundle/programs/web.browser/40985797a98c80d720d8ea9e7852aa5ed0291e35.css
@@ -76,4 +76,4 @@
url('/fonts/roboto/Roboto-Black-webfont.svg#RobotoBlack') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'RobotoBlackItalic';src:url('/fonts/roboto/Roboto-BlackItalic-webfont.eot');src:url('/fonts/roboto/Roboto-BlackItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('/fonts/roboto/Roboto-BlackItalic-webfont.woff') format('woff'),
url('/fonts/roboto/Roboto-BlackItalic-webfont.ttf') format('truetype'),
- url('/fonts/roboto/Roboto-BlackItalic-webfont.svg#RobotoBlackItalic') format('svg');font-weight:normal;font-style:normal}body{background:#1d2939;font-family:'LatoRegular', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif !important;line-height:21px;color:#636e7b;overflow:hidden}body.notfound,body.signin{background:#e4e7ea}input,select,textarea{font-family:'LatoRegular', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif !important;color:#636e7b}a:focus,a:active{outline:none}h1,h2,h3,h4,h5{font-family:'LatoRegular', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif}strong{font-family:'LatoBold';font-weight:normal}#preloader{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#e4e7ea;z-index:10000}#status{width:30px;height:30px;position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:32px}.headerbar{border-left:1px solid #eee;background:#fff}.headerbar::after{clear:both;display:block;content:''}.menutoggle{float:left;width:50px;height:50px;font-size:22px;cursor:pointer;float:left;color:#1d2939;border-right:1px solid #eee;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.menutoggle:hover{color:#1d2939;background-color:#f7f7f7}.menutoggle .fa,.menutoggle .glyphicon{margin:14px 0 0 15px}.searchform input{width:250px;background:#fff url(/images/icon-search.png) no-repeat 95% center;float:left;padding:18px 20px;border:0;border-right:1px solid #eee;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;height:50px;font-size:14px}.searchform input:focus{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-color:#ddd}.searchform-left{margin-top:10px;margin-bottom:20px}.searchform-left .form-control{border:0;background:#131b26}.header-left{float:left}.header-right{float:right}.headermenu{list-style:none;margin:0;padding:0}.headermenu:after{clear:both;display:block;content:''}.headermenu>li{display:inline-block;float:left;border-left:1px solid #eee;position:relative}.headermenu .dropdown-toggle{padding:12px 10px;border-color:#fff;background:#fff;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border:0}.headermenu .dropdown-toggle:hover,.headermenu .dropdown-toggle:focus,.headermenu .dropdown-toggle:active,.headermenu .dropdown-toggle.active,.headermenu .open .dropdown-toggle.dropdown-toggle{background:#f9f9f9;color:#333;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.headermenu .dropdown-toggle img{vertical-align:middle;margin-right:5px;width:26px;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.headermenu .dropdown-toggle .caret{margin-left:5px}.headermenu .dropdown-menu{border:0;margin-top:0px;margin-right:-1px;-moz-border-radius:2px 0 2px 2px;-webkit-border-radius:2px 0 2px 2px;border-radius:2px 0 2px 2px;-moz-box-shadow:3px 3px 0 rgba(12,12,12,0.05);-webkit-box-shadow:3px 3px 0 rgba(12,12,12,0.05);box-shadow:3px 3px 0 rgba(12,12,12,0.05);padding:5px}.headermenu .dropdown-menu:after{border-bottom:6px solid #1d2939;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;right:17px;position:absolute;top:-6px}.headermenu .dropdown-grid .grid-list{padding:20px}.headermenu .dropdown-menu li{display:block;margin:0;float:none;background:none;padding:15px 5px}.headermenu .dropdown-menu-usermenu li{padding:0}.headermenu .dropdown-menu-usermenu:after{right:95px}.headermenu .dropdown-menu li a{color:#94989d;font-size:13px;padding:7px 10px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.headermenu .dropdown-menu li a:hover{background:#1caf9a;color:#fff}.headermenu .dropdown-menu li i{font-size:11px;margin-right:5px}.headermenu .dropdown-menu-head{padding:0;min-width:300px}.headermenu .tp-icon{padding:12px 15px;height:50px;font-size:16px;background:#fff;color:#333;border-color:#fff;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.headermenu .tp-icon+.dropdown-menu:after{right:17px}.headermenu .chat-icon{border-right:0}.headermenu .dropdown-menu-usermenu{background:#1d2939;min-width:200px}.headermenu .dropdown-menu-head ul{border:1px solid #ddd;border-top:0;padding:0 10px}.headermenu .dropdown-menu-head li a{color:#333;padding:0;opacity:1}.headermenu .dropdown-menu-head li a:hover{background:none;color:#428BCA;text-decoration:none}.headermenu .btn-group{margin-bottom:0}.dropdown-list li{padding:15px;overflow:hidden;border-bottom:1px solid #eee}.dropdown-list li:last-child{border-bottom:0}.dropdown-list .thumb{width:36px;float:left}.dropdown-list .thumb img{width:100%;display:block;vertical-align:middle}.dropdown-list .desc{margin-left:45px;display:block}.dropdown-list .desc h5{font-size:13px;margin-top:7px}.dropdown-list li:last-child{padding:7px 5px}.dropdown-list li .badge{float:right}.user-list{width:300px}.gen-list li a{display:block}.gen-list li a:hover{color:#333 !important;text-decoration:none}.gen-list li .name{font-size:13px;font-family:'LatoBold','Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif;line-height:21px;display:block}.gen-list li .msg{font-size:11px;line-height:normal;color:#999;display:block}.leftpanel{width:240px;position:absolute;top:0;left:0;z-index:100}.sticky-leftpanel{position:fixed;height:100%;overflow-y:auto}.logopanel{padding:10px;background:#fff}.logopanel h1{font-size:30px;font-family:'LatoBold', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif;letter-spacing:-1.5px;color:#1d2939;line-height:30px;margin:0}.logopanel h1 span{color:#1caf9a}.leftpanelinner{padding:5px 15px}.leftpanel .searchform{display:none}.leftpanel .searchform::after{content:'';display:block;clear:both}.leftpanel .searchform input{padding:10px;height:auto;width:100%;margin:5px 0 20px 0;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.leftpanel .userlogged{margin:0;padding:0;padding-bottom:15px;margin-bottom:15px;border-bottom:1px solid rgba(255,255,255,0.1);display:none}.leftpanel .userlogged .media-object{width:40px;-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;float:left;border:2px solid #1CAF9A;padding:2px;margin-left:2px}.leftpanel .userlogged .media-body{margin-left:50px;color:#ccc}.leftpanel .userlogged .media-body h4{font-size:15px;margin:0}.leftpanel .userlogged .media-body span{font-style:italic;font-size:11px;opacity:0.5}.sidebartitle{font-size:11px;text-transform:uppercase;color:#999;margin-bottom:10px}.nav-bracket{margin-bottom:30px}.nav-bracket>li>a{color:#8f939e;padding:7px 10px}.nav-bracket>li>a:hover,.nav-bracket>li>a:active,.nav-bracket>li>a:focus{background-color:#fff;color:#1d2939;-moz-box-shadow:0 3px 0 rgba(0,0,0,0.2);-webkit-box-shadow:0 3px 0 rgba(0,0,0,0.2);box-shadow:0 3px 0 rgba(0,0,0,0.2)}.nav-bracket>li.nav-parent>a{background:transparent url(/images/plus-white.png) no-repeat 96% center}.nav-bracket>li.nav-parent>a:focus{background-color:none;color:#8F939E;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.nav-bracket>li.nav-parent>a:hover,.nav-bracket>li.nav-parent>a:active{color:#1d2939;background-color:#fff;background-image:url(/images/plus.png)}.nav-bracket>li.nav-active>a{background-color:#fff;background-image:url(/images/minus.png);color:#1d2939;-moz-box-shadow:0 3px 0 rgba(0,0,0,0.2);-webkit-box-shadow:0 3px 0 rgba(0,0,0,0.2);box-shadow:0 3px 0 rgba(0,0,0,0.2)}.nav-bracket>li.nav-active>a:hover{background-image:url(/images/minus.png);background-repeat:no-repeat}.nav-bracket>li.nav-active>a:focus{color:#1d2939}.nav-bracket>li.active>a,.nav-bracket>li.active>a:hover,.nav-bracket>li.active>a:focus{background-color:#1caf9a;color:#fff}.nav-bracket>li.active>a{-moz-box-shadow:0 3px 0 rgba(0,0,0,0.2);-webkit-box-shadow:0 3px 0 rgba(0,0,0,0.2);box-shadow:0 3px 0 rgba(0,0,0,0.2)}.nav-bracket>li.nav-parent.active>a{background-image:url(/images/plus.png)}.nav-bracket>li.nav-active.active>a{background-image:url(/images/minus.png)}.nav-bracket>li.nav-active.active>a:hover{background-image:url(/images/minus.png)}.nav-bracket li .fa,.nav-bracket li .glyphicon{font-size:16px;vertical-align:middle;margin-right:10px;width:16px;text-align:center}.nav-bracket>li>a>.badge{margin-top:2px}.nav-bracket .children{list-style:none;display:none;margin:5px 0;padding:0}.nav-bracket .children>li>a{color:#94989d;font-size:13px;display:block;padding:5px 0 5px 27px;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.nav-bracket .children>li>a>span{margin-top:2px}.nav-bracket .children>li>a:hover,.nav-bracket .children>li>a:active,.nav-bracket .children>li>a:focus{text-decoration:none;color:#1caf9a}.nav-bracket .children>li .fa{font-size:12px;opacity:0.5;margin-right:5px;text-align:left;width:auto;vertical-align:baseline}.nav-bracket .children>li.active>a{color:#1caf9a}.nav-bracket .children ul{margin-left:12px;border:0}.infosummary{margin:30px 0}.infosummary ul{padding:0;margin:20px 0 0;list-style:none;border-top:1px solid rgba(255,255,255,0.05)}.infosummary li{padding:10px 0;border-bottom:1px solid rgba(255,255,255,0.05)}.infosummary li:after{clear:both;display:block;content:''}.infosummary .datainfo{float:left;line-height:normal}.infosummary .datainfo h4{margin:0;font-size:16px;color:#fff;opacity:0.7}.infosummary span{font-size:11px;line-height:normal;text-transform:uppercase;font-size:10px;opacity:0.4}.infosummary .chart{float:right;margin-top:5px;opacity:0.6}.mainpanel{margin-left:240px;background:#e4e7ea;min-height:1000px}.pageheader{padding:15px;border-bottom:1px solid #d3d7db;border-top:1px solid #eee;background:#f7f7f7;position:relative}.pageheader h2{font-size:28px;color:#1D2939;letter-spacing:-0.5px;margin:0}.pageheader .glyphicon,.pageheader .fa{font-size:24px;margin-right:5px;padding:6px 7px;border:2px solid #1D2939;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.pageheader .fa.fa-pencil{padding:6px 9px}.pageheader .fa.fa-hand-o-up{padding:6px 9px 6px 7px}.pageheader .fa-file-o{padding:6px 10px}.pageheader .fa-user{padding:6px 10px}.pageheader .fa-file-text{padding:6px 10px}.pageheader .fa-map-marker{padding:6px 12px}.pageheader .fa-dollar{padding:6px 12px}.pageheader .fa-clock-o{padding:6px 8px}.pageheader h2 span{font-size:13px;text-transform:none;color:#999;font-style:italic;vertical-align:middle;letter-spacing:0}.pageheader h2 span::before{content:'/';margin:0 10px 0 5px;color:#ccc}.pageheader .breadcrumb-wrapper{position:absolute;top:23px;right:25px}.pageheader .breadcrumb-wrapper .label{color:#999;text-transform:uppercase;font-size:11px;font-weight:normal;display:inline-block}.pageheader .breadcrumb{background:none;display:inline-block;padding:0}.pageheader .breadcrumb li{font-size:12px}.pageheader .breadcrumb li.active{color:#333}.contentpanel{padding:20px;position:relative}.contentpanel::after{clear:both;display:block;content:''}form .form-group:last-child{margin-bottom:0}.row-pad-5{margin-left:-5px;margin-right:-5px}.row-pad-5 [class*="col-lg"],.row-pad-5 [class*="col-md"],.row-pad-5 [class*="col-sm"]{padding-left:5px;padding-right:5px;margin-bottom:10px}.subtitle{font-size:13px;text-transform:uppercase;color:#333;font-family:'LatoBold';margin-bottom:15px;margin-top:0}.subtitle-lined{border-bottom:1px dotted #ddd;padding-bottom:5px}p{margin-bottom:10px}.panel-stat{background:none}.panel-stat .panel-heading{padding:15px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.panel-stat .stat{color:#fff;max-width:250px}.panel-stat .stat img{text-align:center}.panel-stat i{font-size:30px;border:1px solid #fff;padding:15px;border-radius:50px;opacity:0.5}.panel-stat .stat-label{text-transform:uppercase;font-size:11px;opacity:0.75;display:block;line-height:normal;margin-bottom:2px}.panel-stat h1{margin:0;line-height:36px;font-family:'Helvetica Neue', sans-serif;font-size:38px}.panel-stat h4{margin:0;font-family:'Helvetica Neue', sans-serif}.sublabel{display:block;font-size:12px;margin-bottom:2px}.dashboard-datatable .dataTables_filter{float:left}.ckbox,.rdio{position:relative}.ckbox input[type="checkbox"],.rdio input[type="radio"]{opacity:0}.ckbox label,.rdio label{padding-left:10px;cursor:pointer;margin-bottom:7px !important}.ckbox label:before{width:18px;height:18px;position:absolute;top:1px;left:0;content:'';display:inline-block;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border:1px solid #bbb;background:#fff}.ckbox input[type="checkbox"]:disabled+label{color:#999}.ckbox input[type="checkbox"]:disabled+label:before{background-color:#eee}.ckbox input[type="checkbox"]:checked+label::after{font-family:'FontAwesome';content:"\F00C";position:absolute;top:0;left:3.5px;display:inline-block;font-size:11px;width:16px;height:16px;color:#fff}.ckbox-default input[type="checkbox"]:checked+label:before{border-color:#999}.ckbox-default input[type="checkbox"]:checked+label::after{color:#333}.ckbox-primary input[type="checkbox"]:checked+label:before{border-color:#357EBD;background-color:#428BCA}.ckbox-warning input[type="checkbox"]:checked+label:before{border-color:#EEA236;background-color:#F0AD4E}.ckbox-success input[type="checkbox"]:checked+label:before{border-color:#1CAF9A;background-color:#1CAF9A}.ckbox-danger input[type="checkbox"]:checked+label:before{border-color:#D43F3A;background-color:#D9534F}.rdio label:before{width:18px;height:18px;position:absolute;top:1px;left:0;content:'';display:inline-block;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;border:1px solid #bbb;background:#fff}.rdio input[type="radio"]:disabled+label{color:#999}.rdio input[type="radio"]:disabled+label:before{background-color:#eee}.rdio input[type="radio"]:checked+label::after{content:'';position:absolute;top:5px;left:4px;display:inline-block;font-size:11px;width:10px;height:10px;background-color:#444;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.rdio-default input[type="radio"]:checked+label:before{border-color:#999}.rdio-primary input[type="radio"]:checked+label:before{border-color:#428BCA}.rdio-primary input[type="radio"]:checked+label::after{background-color:#428BCA}.rdio-warning input[type="radio"]:checked+label:before{border-color:#F0AD4E}.rdio-warning input[type="radio"]:checked+label::after{background-color:#F0AD4E}.rdio-success input[type="radio"]:checked+label:before{border-color:#1CAF9A}.rdio-success input[type="radio"]:checked+label::after{background-color:#1CAF9A}.rdio-danger input[type="radio"]:checked+label:before{border-color:#D9534F}.rdio-danger input[type="radio"]:checked+label::after{background-color:#D9534F}pre{font-size:12px;color:#C7254E;border:1px solid #ddd;padding:8px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;background:#fff}label.error{color:#B94A48;margin-top:2px}label.error:empty{display:none !important}.asterisk{color:#D9534F}div.error{margin-bottom:20px;display:none;position:relative}div.error label.error{display:block;padding-left:25px;position:relative}div.error label.error:before{font-family:'Glyphicons Halflings';content:'\e101';position:absolute;top:-2px;left:0;font-size:16px;color:#D9534F;display:inline-block}.bootstrap-timepicker .dropdown-menu{top:40px}.editable{padding:10px;border:1px solid #fcfcfc;margin-bottom:20px}.editable:hover{border:1px solid #ccc}.editable h4{color:#333}.basic-wizard .nav li a{background:#e4e7ea;border-bottom:1px solid #ccc;color:#4A535E;border-right:1px solid #ccc;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;opacity:0.75}.basic-wizard .nav li:last-child a{border-right:0}.basic-wizard .nav li a:hover{background-color:#f7f7f7;opacity:1}.basic-wizard .nav li.active a,.basic-wizard .nav li.active a:focus,.basic-wizard .nav li.active a:active{background:#fcfcfc;border-bottom-color:#fcfcfc;color:#333;opacity:1}.basic-wizard ul li a span{font-family:'LatoBold', sans-serif}.basic-wizard .pager{margin:0;border-top:1px solid #ddd;background:#f7f7f7;padding:10px}.basic-wizard .pager li a{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border-color:#357EBD;background-color:#428BCA;color:#fff}.basic-wizard .pager li a:hover{background-color:#3276B1;border-color:#285E8E}.basic-wizard .pager li.disabled a{background:#eee;color:#999;border-color:#ccc}.basic-wizard .progress{height:12px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.basic-wizard .nav-disabled-click li a:hover,.basic-wizard .nav-disabled-click li a:active,.basic-wizard .nav-disabled-click li a:focus{background-color:#E4E7EA;opacity:0.75;color:#4A535E;cursor:default}.basic-wizard .nav-disabled-click li.active a:hover,.basic-wizard .nav-disabled-click li.active a:active,.basic-wizard .nav-disabled-click li.active a:focus{background:#fcfcfc;color:#333;opacity:1}.basic-wizard .tab-content{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.tab-pane::after{clear:both;display:block;content:''}.btn-demo::after{clear:both;display:block;content:''}.btn-demo .btn{float:left;margin:0 10px 10px 0}.fonticon-list{list-style:none;margin:20px 0;padding:0}.fontawesome-list{list-style:none;padding:0}.fonticon-list li,.fontawesome-list li{display:block;margin-bottom:5px}.fonticon-list li span,.fontawesome-list li span{color:#333;vertical-align:middle;margin-right:8px;min-width:20px;display:inline-block;width:20px}.tooltip-example .btn,.popover-example .btn{margin:0 5px 5px 0}.tooltipflot{background-color:rgba(0,0,0,0.75);font-size:11px;color:#fff;padding:3px 10px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.jqstooltip{min-height:25px;border:0;min-width:30px;height:auto !important;width:auto !important}.tinystat{display:inline-block}.tinystat .chart,.tinystat .datainfo{display:inline-block;vertical-align:middle}.tinystat .chart{margin-right:5px}.tinystat .text-muted{text-transform:uppercase;font-size:10px}.tinystat h4{margin:0;color:#333;font-family:'LatoBold';line-height:normal;font-size:16px}.widget-quick-status-post .nav-tabs>li>a{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.widget-quick-status-post .panel-body{padding:0}.widget-messaging .panel-btns .panel-edit{padding:15px 17px;opacity:0.5;font-size:24px;margin-top:-18px;margin-right:-20px;position:relative}.widget-messaging .panel-btns .panel-edit:hover{opacity:1}.widget-messaging .panel-body{padding:0}.widget-messaging ul{list-style:none;padding:0;margin:0}.widget-messaging ul li{padding:15px;border-top:1px solid #eee;background-color:#fff}.widget-messaging ul li:hover{background-color:#fcfcfc}.widget-messaging ul li:first-child{border-top:0}.widget-messaging .sender{font-size:13px;color:#333;margin:0;font-family:'LatoBold';line-height:normal}.widget-messaging ul li small{line-height:normal}.widget-today .panel-heading,.widget-time .panel-heading{height:115px}.widget-today .glyphicon,.widget-today .fa{font-size:72px;color:#fff;opacity:1}.widget-time .glyphicon,.widget-time .fa{font-size:60px;color:#fff;opacity:1}.widget-today .today,.widget-time .today{line-height:normal;margin:0;color:#333;font-family:'LatoBold';font-size:20px}.widget-photoday .panel-body{padding:0}.widget-photoday .photoday img{width:100%;display:block;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.widget-photoday .photo-details{padding:15px}.widget-photoday .photo-title{color:#333;font-size:16px;margin:0;font-family:'LatoBold';line-height:normal}.widget-photoday .photo-details small{display:block}.widget-photoday .photo-meta{list-style:none;padding:0;margin:0;border-top:1px solid #e3e3e3;background-color:#f7f7f7}.widget-photoday .photo-meta li{display:table-cell;width:1%;text-align:center;border-left:1px solid #e3e3e3}.widget-photoday .photo-meta li:first-child{border-left:0}.widget-photoday .photo-meta li a,.widget-photoday .photo-meta li span{padding:15px 10px;display:block;color:#999;font-size:12px}.widget-photoday .photo-meta li a:hover{color:#666;text-decoration:none}.widget-bloglist .media{border-bottom:1px solid #eee;padding:0}.widget-bloglist .media .thumbnail{margin-bottom:15px}.widget-weather{overflow:hidden}.widget-weather .panel-body{padding:0;background-color:#1D2939}.widget-weather .row{margin:0}.widget-weather .temp,.widget-weather .weather{padding:0}.widget-weather .temp{background-color:#1CAF9A;color:#fff;padding:10px 0}.widget-weather .temp h1{font-size:60px;font-family:'LatoLight'}.widget-weather .temp h1 span{width:20px;height:20px;display:inline-block;margin-left:-10px}.widget-weather .temp h5{text-transform:uppercase}.widget-weather .weather-icon{color:#666;font-size:60px;background-color:#fff;display:block;padding:20px 0}.widget-weather .weather>div{width:50%;text-align:center;color:#fff;font-size:14px;padding-top:10px}.widget-profile .panel-heading{position:relative}.widget-profile .cover{position:absolute;top:0;left:0;height:105px;overflow:hidden;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.widget-profile .cover img{width:100%;display:block}.widget-profile .panel-body{position:relative;padding:0}.widget-profile-img{position:relative;margin-top:30px;margin-left:15px}.widget-profile-title{background:#428BCA;margin-top:-77px;padding:15px 0 15px 120px;color:#fff}.widget-profile-title h4{font-size:18px;margin:0;line-height:normal}.widget-profile-title small{line-height:normal}.widget-profile blockquote{font-size:18px;border-left:0;margin:0;color:#555;padding:15px}.widget-profile-title .fa{margin-right:7px}.widget-profile .row{margin:0}.widget-profile .row>div{padding:0}.widget-profile .row>div>span{display:block;border-right:1px solid rgba(255,255,255,0.15);font-size:14px;padding:15px 10px;text-transform:uppercase;background:#1D2939;color:#fff}.widget-profile .row>div:first-child span{-moz-border-radius:0 0 0 3px;-webkit-border-radius:0 0 0 3px;border-radius:0 0 0 3px}.widget-profile .row>div:last-child span{border-right:0;-moz-border-radius:0 0 3px 0;-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px 0}.widget-todo .panel-btns i{font-size:12px}.widget-todo .todo-list{padding:0;margin:0;list-style:none}.widget-todo .panel-body{padding:0}.widget-todo .todo-list li{border-bottom:1px solid #eee;padding:15px 10px 8px 20px}.widget-todo .todo-list li input:checked+label{text-decoration:line-through}.widget-todo .todo-list .todo-form{padding-bottom:15px}.widget-todo .todo-list li .btn{margin:0;padding:6px 10px}.widget-slider .carousel-control.right,.widget-slider .carousel-control.left{background:none}.widget-slider .carousel-control{width:auto;text-shadow:none;color:#fff;bottom:auto;top:-55px;padding:0;line-height:normal}.widget-slider .carousel-control.left{left:auto;right:25px}.widget-slider .carousel-control span{line-height:normal;font-size:18px}.widget-slider .media{padding-bottom:0}.widget-slider .carousel-indicators{top:-53px;right:0;bottom:auto;left:auto;width:auto}.btn-compose-email{padding:10px 0;margin-bottom:20px}.nav-email>li>a>.badge{margin-top:2px}.nav-email>li>a{color:#444}.nav-email>li>a>i{width:16px;text-align:center;margin-right:10px}.nav-email>li>a:hover{background-color:#d8dcdf}.table-email{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-bottom:1px solid #eee;margin:0;background-color:#f7f7f7}.table-email tr.unread td{background-color:#fff}.table-email tbody>tr>td{vertical-align:middle}.table-email tr:hover{background-color:#eee;cursor:pointer}.table-email tr.selected td{background-color:#eee}.table-email .ckbox{width:18px;height:19px}.table-email .ckbox input[type="checkbox"]:checked+label:after{top:2px}.table-email .star{color:#ccc}.table-email .star-checked{color:#F0AD4E}.table-email td:first-child{width:30px}.table-email td:nth-child(2){width:30px}.table-email .media{margin:0;padding:0}.table-email .media-object{width:35px}.table-email .media h4{margin:0;font-size:14px;line-height:normal;font-family:'LatoBold', sans-serif}.table-email .media-meta{font-size:11px;color:#999}.table-email .email-summary{margin:2px 0 0 0}.table-email .email-summary strong{color:#333}.read-panel{margin-top:10px;border-top:1px solid #eee;padding-top:20px}.read-panel .media-object{width:35px}.read-panel .media h4{margin:2px 0 0 0;font-size:14px;line-height:normal}.read-panel .media-meta{font-size:12px}.email-subject{color:#333}.dataTables_length .chosen-container{min-width:75px}.dataTables_length .chosen-container-single .chosen-single{padding-right:0}.table-action{text-align:center}.table-action-hide a{opacity:0}.table-action a,.table-action-hide a{display:inline-block;margin-right:5px;color:#666}.table-action a:hover,.table-action-hide a:hover{color:#333}.table-action a:last-child,.table-action-hide a:last-child{margin-right:0}.external-event{background:#428BCA;margin-bottom:5px;padding:6px 10px;color:#fff;font-size:13px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.filemanager-options{list-style:none;margin:0;padding:0;margin-bottom:20px;background:#fcfcfc;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03)}.filemanager-options li{display:inline-block;padding:12px 15px;border-right:1px solid #eee;font-size:12px;color:#666}.filemanager-options li a{color:#666}.filemanager-options li a.disabled{opacity:0.5;cursor:default}.filemanager-options li a.disabled:hover{text-decoration:none}.filemanager-options li i{font-size:14px;margin-right:5px;color:#444}.filemanager-options .ckbox label{margin:0 !important}.filemanager-options .filter-type{float:right;border-right:0;border-left:1px solid #eee}.filemanager-options .filter-type a{display:inline-block;margin-right:10px}.filemanager-options .filter-type a:last-child{margin-right:0}.filemanager-options .filter-type a:first-child{margin-left:10px}.filemanager-options .filter-type a.active{text-decoration:underline;color:#2A6496}.filemanager .thmb{border:1px solid #fcfcfc;background:#fcfcfc;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:10px;margin-bottom:20px;position:relative;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03)}.filemanager .thmb.checked{border-color:#ccc}.filemanager .thmb::after{clear:both;display:block;content:''}.filemanager .ckbox{position:absolute;top:15px;left:15px;display:none}.filemanager .fm-group{position:absolute;top:15px;right:15px;display:none}.filemanager .fm-toggle{padding:1px 4px;line-height:normal;background:#fff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.filemanager .fm-menu{min-width:120px}.filemanager .fm-menu a{font-size:12px;color:#333}.filemanager .fm-menu i{margin-right:7px;color:#999;width:16px;font-size:13px}.filemanager .thmb-prev{background:#eee;overflow:hidden}.filemanager .thmb-prev a{display:block}.filemanager .fm-title{margin-bottom:0;font-size:13px}.filemanager .fm-title a{overflow:hidden;text-overflow:ellipsis;display:block}.fm-sidebar{padding-left:10px}.fm-sidebar .subtitle a{color:#999;font-size:11px}.fm-sidebar .subtitle a:hover{text-decoration:none;color:#333}.folder-list{list-style:none;padding:0;margin:0}.folder-list li{display:block;border-bottom:1px solid #ddd}.folder-list li a{display:block;padding:5px 0;color:#666}.folder-list li a:hover{color:#333;text-decoration:none}.folder-list li i{margin-right:10px;width:16px}.fm-sidebar .tag-list{list-style:none;padding:0;margin:0}.fm-sidebar .tag-list li{float:left;margin-right:5px;margin-bottom:5px}.fm-sidebar .tag-list li a{display:block;padding:2px 7px;font-size:11px;background:#fcfcfc;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;color:#666}.fm-sidebar .tag-list li a:hover{color:#fff;text-decoration:none;background:#428BCA}.profile-name{margin:0;margin-bottom:10px;color:#333}.profile-location,.profile-position{font-size:13px;margin-bottom:3px}.profile-location .fa,.profile-position .fa{width:16px;margin-right:8px;text-align:center}.profile-header{margin-bottom:30px}.profile-header .btn .fa{margin-right:7px}.profile-social-list{list-style:none;margin:0;padding:0}.profile-social-list li{border-bottom:1px solid #ddd;padding:5px 0}.profile-social-list li:first-child{padding-top:0}.profile-social-list li .fa{margin-right:10px;width:16px}.activity-list{padding:20px 10px}.activity-list .act-media{border-bottom:1px solid #eee}.activity-list .act-thumb{width:28px;vertical-align:middle}.activity-list .act-media-body{line-height:16px}.activity-list .media-body p{line-height:21px;font-size:13px}.activity-list .media-title{font-family:'LatoBold';font-size:15px;margin-bottom:0}.activity-list .blog-media{padding-bottom:0}.activity-list .blog-media .media-object{width:120px;margin-right:10px;margin-top:5px}.activity-list .blog-media .media-title{margin:0}.activity-list .img-single img{width:50%}.uploadphoto-list{list-style:none;padding:0;margin:0;margin-top:20px}.uploadphoto-list li{width:20%;float:left}.uploadphoto-list li a{display:block;margin-right:5px}.follower-list{padding:10px}.follower-list .media{border-bottom:1px solid #eee}.follower-list .btn .fa{margin-right:5px}.follower-list .media-object{margin-right:10px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.follower-name{color:#333;margin:0;font-size:18px;margin-bottom:5px}.events{padding:10px}.events .subtitle{margin-bottom:20px}.events .media-object{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.events-list{list-style:none;margin:0;padding:0}.events-list .event-body{font-size:13px}.event-body small{display:block}.event-body small .fa{margin-right:5px;width:14px;text-align:center}.event-body p{margin-top:10px}.event-title{margin:0;margin-bottom:5px;font-size:16px;font-family:'LatoBold';line-height:normal}.blog-item{background:#fcfcfc;margin-bottom:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);position:relative}.blog-img img{-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.blog-details{padding:15px}.blog-title{font-family:'LatoBold';margin:0;font-weight:normal}.blog-title a{color:#333}.blog-meta{list-style:none;padding:0;margin:0;margin-top:10px}.blog-meta::after{clear:both;display:block;content:''}.blog-meta li{float:left;padding:0 5px;border-right:1px solid #ddd;line-height:normal;font-size:11px;margin-bottom:5px}.blog-meta li:first-child{padding-left:0}.blog-meta li:last-child{padding-right:0;border-right:0}.blog-summary{font-size:13px}.blog-summary p{margin:10px 0}.blog-summary .btn{margin-top:10px}.blog-quote .quote{margin:0;font-size:18px;line-height:24px}.blog-quote .quote a{padding:15px;background:#1d2939;color:#dadfe6;display:block;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;text-align:center}.blog-quote .quote a:hover{text-decoration:none;background:#2c394c}.blog-quote .quote-author{display:block;font-family:'LatoRegular';opacity:0.5}.blog-quote .blog-meta{margin-top:3px}.blog-video{-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;overflow:hidden;height:0;padding-top:30px;padding-bottom:56.25%;position:relative}.blog-video iframe{position:absolute;width:100%;height:100%;border:0;top:0;left:0}.blog-quote .quote-primary a{background-color:#428BCA}.blog-quote .quote-primary a:hover{background-color:#357EBD}.blog-quote .quote-success a{background-color:#1CAF9A;color:#fff}.blog-quote .quote-success a:hover{background-color:#17A08C}.blog-quote .quote-danger a{background-color:#D9534F;color:#fff}.blog-quote .quote-danger a:hover{background-color:#D43F3A}.panel-blog .blog-img img{width:100%}.blogsingle-title{font-family:'LatoRegular';color:#333;margin:0}.blog-content{max-width:975px}.authorpanel{margin:20px 0;border-top:1px solid #ddd;border-bottom:1px solid #ddd;padding:20px 0}.authorpanel::after{clear:both;display:block;content:''}.authorpanel .media{padding:0}.authorpanel .media-object{margin-right:15px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.authorpanel p{margin-bottom:0;font-size:13px}.blog-sidebar{font-size:13px;padding-left:5px;margin-top:5px}.sidebar-list{list-style:none;padding:0;margin:0}.sidebar-list li{display:block;border-bottom:1px solid #ddd}.sidebar-list li a{padding:7px 0;display:block}.sidebar-list li i{display:inline-block;margin-right:5px}.comment-list .media{border-bottom:1px solid #ddd}.comment-list .media-object{width:60px;margin-right:10px}.comment-list h4{margin:0;color:#333;font-size:16px}.comment-list .media-body{font-size:13px;position:relative}.comment-list .reply{padding:3px 8px;line-height:normal;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.comment-list .media-body p:last-child{margin-bottom:0}.comment-list .media-body .media:last-child{padding-bottom:0;border-bottom:0}.letter-list{list-style:none;padding:0;margin:0;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03)}.letter-list li{border-left:1px solid #eee;display:table-cell;width:1%}.letter-list li:first-child{border-left:0}.letter-list li a{display:block;padding:8px 0;text-align:center;text-transform:uppercase;background:#f7f7f7;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.letter-list li:first-child a{-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.letter-list li:last-child a{-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.letter-list li a:hover{color:#fff;background:#428BCA;text-decoration:none;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.people-item{background:#fcfcfc;padding:20px;font-size:13px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);margin-bottom:20px}.people-item .media{padding:0}.people-item .media-object{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;margin-right:10px;width:110px;height:110px}.people-item .fa{margin-right:5px}.person-name{margin:0 0 5px 0;color:#428BCA}.people-item .social-list{margin-top:10px;margin-bottom:0;list-style:none;padding:0}.people-item .social-list::after{clear:both;display:block;content:''}.people-item .social-list li{float:left;margin-right:5px;margin-bottom:5px}.people-item .social-list li a{font-size:16px;border:1px solid #ddd;padding:3px 5px;width:30px;display:block;text-align:center;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;color:#666}.people-item .social-list li a:hover{background-color:#eee;color:#333}.people-item .social-list li a .fa{margin-right:0}.notfoundpanel{text-align:center;margin-top:10%;width:600px;margin:10% auto 0 auto}.notfoundpanel h1{font-size:130px;font-family:'LatoBold', sans-serif;color:#333;margin:0;line-height:130px}.notfoundpanel h3{color:#333;margin:0}.notfound h4{font-size:14px}.notfoundpanel form{width:350px;margin:20px auto 0 auto}.notfoundpanel .form-control{width:250px;float:left}.nav-sr li{border-bottom:1px solid #ddd}.nav-sr li a{padding:5px 0;color:#555}.nav-sr li a:hover{background:none;color:#333}.nav-sr li a i{margin-right:5px}.results-list .media{border-bottom:1px solid #eee}.results-list .media-object{width:125px;margin-right:10px}.results-list .filename{margin:0;font-size:16px}.results-list .media-body{line-height:18px}.table-invoice{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-bottom:1px solid #eee;margin-top:20px}.table-invoice thead>tr>th{background:none}.table-invoice thead>tr>th:last-child,.table-invoice thead>tr>th:nth-child(3),.table-invoice thead>tr>th:nth-child(2){text-align:right}.table-invoice tbody>tr>td:last-child,.table-invoice tbody>tr>td:nth-child(3),.table-invoice tbody>tr>td:nth-child(2){width:15%;text-align:right}.table-total{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;float:right}.table-total>tbody>tr>td{border:0}.table-total>tbody>tr>td:last-child{border-bottom:1px solid #ddd;width:15%;text-align:right}.table-total>tbody>tr>td:first-child{text-align:right;color:#333}.timeline-post .panel-body{padding:0}.timeline-post .form-control{border:0;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;resize:vertical}.timeline-post .form-control:focus{-moz-box-shdow:none;-webkit-box-shadow:none;box-shadow:none}.timeline-post .panel-footer{padding:10px;background:#f7f7f7}.timeline-btns{padding:5px}.timeline-btns a{display:inline-block;font-size:14px;width:20px;height:20px;color:#ccc;text-align:center;margin-right:5px}.timeline-btns a:hover{color:#666}.panel-timeline .panel-heading{padding:10px 10px 6px 10px;border-bottom:0}.panel-timeline .panel-body{padding:0 10px}.panel-timeline .panel-heading .media{margin:0;padding:0}.panel-timeline .panel-heading .media-object,.panel-timeline .panel-footer .media-object{width:32px;border-radius:1px}.panel-timeline .panel-body .media{margin-top:10px;padding-bottom:10px}.panel-timeline .panel-body .media-object{width:150px}.panel-timeline .panel-body h4{font-size:16px;margin-bottom:5px;font-family:'LatoBold', sans-serif}.panel-timeline h4{margin:0;font-size:13px;line-height:normal}.panel-timeline .panel-footer{padding:10px}.panel-timeline .panel-footer .form-control{padding:8px 10px;border-radius:0}.timeline-btns{padding:10px}.timeline-btns:after{clear:both;display:block;content:''}.timeline-video{-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;overflow:hidden;height:0;padding-top:30px;padding-bottom:56.25%;position:relative}.timeline-video iframe{position:absolute;width:100%;height:100%;border:0;top:0;left:0}.lockedpanel{width:250px;margin:10% auto 0 auto;text-align:center}.lockedpanel .loginuser{text-align:center}.lockedpanel .loginuser img{-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;background:rgba(255,255,255,0.4);padding:5px}.lockedpanel .locked{font-size:42px;margin-bottom:20px}.lockedpanel .logged{margin-top:20px}.lockedpanel .logged h4{margin:0;font-size:21px;color:#333}.lockedpanel form{margin-top:20px}.lockedpanel form .btn{display:block;margin-top:10px}.signinpanel{width:780px;margin:10% auto 0 auto}.signinpanel .logopanel{float:none;width:auto;padding:0;background:none}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .signin-info a{color:#333}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(/images/user.png) no-repeat 95% center}.signinpanel .pword{background:#fff url(/images/locked.png) no-repeat 95% center}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,0.2);border:1px solid #ccc;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signinpanel form a{color:#666}.signuppanel{margin:5% auto 0 auto;width:780px}.signuppanel .row{margin-left:-5px;margin-right:-5px}.signuppanel .logopanel{float:none;width:auto;padding:0;background:none}.signuppanel .col-sm-6,.signuppanel .col-sm-5,.signuppanel .col-sm-3,.signuppanel .col-sm-4{padding-left:5px;padding-right:5px}.signuppanel .signup-info{padding-right:20px}.signuppanel form{background:rgba(255,255,255,0.2);border:1px solid #ccc;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.feat-list{margin-top:20px}.feat-list .fa{font-size:20px;border:2px solid #636e7b;padding:4px 5px;-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;float:left}.feat-list h4{margin-left:45px;padding-top:3px}.feat-list p{margin-left:45px}.signup-footer{border-top:1px solid #ddd;margin-top:30px;padding-top:10px;font-size:12px}.leftpanel-collapsed .logopanel{display:none}.leftpanel-collapsed .headerbar{margin-left:-50px}.leftpanel-collapsed .leftpanel{width:50px;top:50px}.leftpanel-collapsed .leftpanelinner{padding:0}.leftpanel-collapsed .leftpanelinner .sidebartitle{display:none}.leftpanel-collapsed .nav-bracket{margin:5px}.leftpanel-collapsed .nav-bracket li a{text-align:center;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;padding:10px;position:relative}.leftpanel-collapsed .nav-bracket>li>a:hover{border-radius:2px 0 0 2px}.leftpanel-collapsed .nav-bracket>li.nav-parent>a{background-image:none}.leftpanel-collapsed .nav-bracket>li>a>span:last-child{position:absolute;background:#fff;padding:10px 10px 10px 5px;left:40px;top:0;min-width:209px;text-align:left;z-index:100;display:none;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.leftpanel-collapsed .nav-bracket>li>a .badge{display:none}.leftpanel-collapsed .nav-bracket>li.active>a>span:last-child{-moz-border-radius:0 2px 0 0;-webkit-border-radius:0 2px 0 0;border-radius:0 2px 0 0}.leftpanel-collapsed .nav-bracket ul{display:none}.leftpanel-collapsed .nav-bracket>li.nav-hover>a{background:#fff;color:#1d2939}.leftpanel-collapsed .nav-bracket>li.nav-hover.active>a{background:#1CAF9A;color:#fff}.leftpanel-collapsed .nav-bracket>li.nav-hover>a>span:last-child{display:block}.leftpanel-collapsed .nav-bracket>li.nav-hover.active>a>span:last-child{background:#1CAF9A;color:#fff}.leftpanel-collapsed .nav-bracket li.nav-hover ul{display:block;position:absolute;top:41px;left:45px;margin:0;min-width:204px;background:#1d2939;z-index:100;-moz-border-radius:0 0 2px 0;-webkit-border-radius:0 0 2px 0;border-radius:0 0 2px 0}.leftpanel-collapsed .nav-bracket ul a{text-align:left;padding:6px 10px;padding-left:0}.leftpanel-collapsed .nav-bracket ul a:hover{background:none}.leftpanel-collapsed .nav-bracket li a i{margin-right:0}.leftpanel-collapsed .mainpanel{margin-left:50px}.leftpanel-collapsed .infosummary{display:none}.leftpanel-collapsed .sticky-leftpanel{overflow-y:visible}.leftpanel-collapsed .nav-bracket .children{display:none}.chat-view{margin-right:240px}.rightpanel{width:240px;height:100%;position:fixed;overflow-y:auto;overflow-x:hidden;top:0;right:-240px;display:none}.chat-view .rightpanel{display:block;right:0}.chat-relative-view{right:240px}.chat-relative-view .rightpanel{display:block;right:0}.rightpanel,.rightpanel label{color:#999}.rightpanel .nav-tabs{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;background:#131d29;position:fixed;width:240px}.rightpanel .nav-tabs>li{display:table-cell;width:1%}.rightpanel .nav-tabs>li>a{padding:15px 20px 16px 20px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;color:rgba(255,255,255,0.5)}.rightpanel .nav-tabs>.active>a,.rightpanel .nav-tabs>.active>a:hover,.rightpanel .nav-tabs>.active>a:focus{background:#1D2939;color:#fff}.rightpanel .tab-content{background:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;margin-top:45px}.chatuserlist{list-style:none;padding:0;border-bottom:1px dotted rgba(255,255,255,0.05)}.chatuserlist li{border-top:1px dotted rgba(255,255,255,0.05)}.chatuserlist .media-thumb{-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;border:2px solid #999;padding:3px;display:block}.chatuserlist .media{margin:10px 0;padding:0}.chatuserlist .online .media-thumb{border-color:#1CAF9A}.chatuserlist .media-object{width:30px;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.chatuserlist .media-body{line-height:normal;padding-top:7px}.chatuserlist .media-body small{color:#666;display:block}.chatuserlist .media-body strong{color:#bbb;font-size:13px;margin-bottom:4px;display:block}.chatuserlist .badge{margin-top:5px}.rightpanel .pane-settings{font-size:13px}.horizontal-menu{margin:0}.horizontal-menu .menutoggle{display:none}.horizontal-menu .leftpanel{display:none}.horizontal-menu .mainpanel{margin:0;width:100%;overflow:hidden}.horizontal-menu.chat-view .mainpanel{margin-left:-240px}.headerbar .logopanel{float:left;width:240px;border-right:1px solid #eee}.horizontal-menu.chat-view .navhor-bracket{padding:0}.headerbar .topnav{float:left;margin:0}.headerbar .topnav>ul{padding:0;margin:0;float:left}.headerbar .topnav>ul>li{margin:0;float:left}.headerbar .topnav>ul>li>a{padding:15px 15px 12px 15px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;text-transform:uppercase;font-size:12px;color:#666;font-family:'LatoBold', sans-serif}.headerbar .topnav>ul>li>a:hover,.headerbar .topnav>ul>li>a:focus,.headerbar .topnav>ul>li.open>a,.headerbar .topnav>ul>li.active>a{box-shadow:0 3px 0 #1CAF9A;color:#1CAF9A;background:none}.headerbar .topnav>ul>li>a i{margin-right:5px}.headerbar .topnav>ul>li>a .badge{margin-left:10px}.headerbar .topnav>ul>li .dropdown-menu{margin-top:2px;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.headerbar .topnav>ul>li .dropdown-menu>li>a{padding:6px 10px;font-size:13px}.headerbar .topnav>ul>li .dropdown-menu>li>a:hover{background:#1CAF9A;color:#fff}.headerbar .topnav>ul>li .dropdown-menu i{display:none}.fixed{background:#c9cccf}.fixed section{margin:auto;max-width:1050px;position:relative;background:#1D2939}.fixed .rightpanel{background:#1D2939}.fixed-noleft .leftpanel{display:none}.fixed-noleft .mainpanel{margin-left:0}.fixed-noleft.chat-view .headerbar{margin-left:0}.fixed-noleft.chat-view .logopanel{display:block}.fixed-noleft .menutoggle{display:none}.bs-example-modal-panel .modal-content{background:none}.modal-photo-viewer{margin-top:0;margin-bottom:0;top:50%;left:50%;width:auto;position:absolute}.modal-photo-viewer .modal-content{position:relative;width:900px;height:600px;margin-left:-50%;margin-top:-300px}.modal-photo-viewer .modal-photo-left,.modal-photo-viewer .modal-photo-right{padding:0}.modal-photo-viewer .modal-photo-left{background:#000}.modal-photo-viewer .modal-photo{top:50%;position:relative}.modal-photo-viewer .row{margin-left:0;margin-right:0}.modal-photo-viewer .img-responsive{max-height:600px;margin:auto}.media-details{padding:20px}.media-details .categ{font-size:11px}.media-details .media-title{margin:0;margin-bottom:10px;color:#333;font-size:20px}.media-details p{font-size:13px}.media-details .details{margin-top:20px}.media-details .details h4{font-size:12px;color:#333;text-transform:uppercase;font-family:'LatoBold'}.media-details .table{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.media-details .table tr td{padding:3px 0;font-size:13px;background:none}.table-primary thead tr th{background:#428BCA}.table-success thead tr th{background:#1CAF9A}.table-warning thead tr th{background:#F0AD4E}.table-danger thead tr th{background:#D9534F}.table-info thead tr th{background:#5BC0DE}.table-dark thead tr th{background:#1D2939}.table.table-primary thead tr th,.table.table-success thead tr th,.table.table-danger thead tr th,.table.table-warning thead tr th,.table.table-info thead tr th,.table.table-dark thead tr th{color:#fff;border-bottom:0}.table-bordered.table-primary thead tr th,.table-bordered.table-success thead tr th,.table-bordered.table-warning thead tr th,.table-bordered.table-danger thead tr th,.table-bordered.table-info thead tr th,.table-bordered.table-dark thead tr th{border-color:rgba(255,255,255,0.2)}.panel .panel-table{padding:0}.panel-table .table{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;margin:0}.table-buglist thead tr th:first-child,.table-buglist tbody tr td:first-child{text-align:center;width:30px}.table-buglist .fa{cursor:pointer}.table-buglist .fa-bug{color:#D9534F}.table-buglist .fa-magic{color:#1CAF9A}.table-buglist .btn-group{margin:0}.table-buglist .btn-group .dropdown-toggle{color:#999;cursor:pointer}.table-buglist .btn-group .dropdown-toggle:hover{color:#666}.bug-key-title{margin:0;margin-bottom:5px}.dropdown-menu-head{background:#fff}.dropdown-menu-head .title{background:#1d2939;color:#94989d;padding:15px;text-transform:uppercase;font-size:11px;margin:0}.tp-icon{padding:10px 20px;line-height:20px;border-color:#ddd;position:relative}.tp-icon .badge{position:absolute;font-size:10px;font-weight:normal;right:4px;top:10px;line-height:13px;background-color:#D9534F;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;padding:2px 5px}.chosen-container-single .chosen-single div{width:30px;border-left:1px solid #ccc;background:#e4e7ea}.chosen-container-single .chosen-single div b{background:url(/images/dropdown-arrow.png) no-repeat 8px 15px}.chosen-container-active.chosen-with-drop .chosen-single div{width:30px;border-left:0;background:#fff}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:8px -33px}.bootstrap-timepicker-widget.dropdown-menu{width:230px}.colorpicker-input{width:200px;float:left}.colorselector{margin-top:4px}.stickyheader .logopanel{position:fixed;top:0;left:0;width:240px;z-index:100}.stickyheader .leftpanel{top:50px}.stickyheader .sticky-leftpanel{top:0}.stickyheader .sticky-leftpanel .leftpanelinner{margin-top:55px}.stickyheader .headerbar{position:fixed;top:0;left:240px;width:100%;z-index:100;box-shadow:0 1px rgba(0,0,0,0.05)}.stickyheader .mainpanel{padding-top:50px}.stickyheader .header-right{margin-right:240px}.stickyheader.leftpanel-collapsed .headerbar{left:50px}.stickyheader.leftpanel-collapsed .header-right{margin-right:0}.stickyheader.chat-view .headerbar{right:240px;width:auto}.mb5{margin-bottom:5px}.mb10{margin-bottom:10px}.mb15{margin-bottom:15px}.mb20{margin-bottom:20px}.mb30{margin-bottom:30px}.mb40{margin-bottom:40px}.mr5{margin-right:5px}.mr10{margin-right:10px}.mr20{margin-right:20px}.mr30{margin-right:30px}.mt5{margin-top:5px}.mt10{margin-top:10px}.nomargin{margin:0}.noshadow{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.border-right-0{border-right:0}.border-left-0{border-left:0}.nopadding{padding:0 !important}.padding-top-0{padding-top:0}.padding5{padding:5px}.padding10{padding:10px}.serif{font-family:'Georgia, serif'}.italic{font-style:italic}.dark{color:#333}.width100p{width:100%}.width20{width:20px}.width30{width:30px}.inblock{display:inline-block}@media screen and (max-width: 1024px){body{position:relative}.leftpanel{display:none}.mainpanel{margin-left:0;width:100%}.leftpanel-collapsed .leftpanel{display:none}.leftpanel-collapsed .mainpanel{margin-left:0}.leftpanel-collapsed .headerbar{margin-left:0}.leftpanel-show section{overflow-x:hidden}.leftpanel-show .leftpanel{display:block}.leftpanel-show .mainpanel{margin-left:240px}.stickyheader .headerbar{left:0}.stickyheader.leftpanel-show .headerbar{left:240px}.stickyheader.chat-relative-view .headerbar{right:240px;left:auto}.stickyheader .header-right{margin-right:0}.btn-demo{margin-bottom:20px}.leftpanelinner{padding:5px 10px}.leftpanelinner .searchform input{background:#131b26;border:0}.nav-horizontal{position:relative}.horizontal-menu .menutoggle{display:block}.horizontal-menu .headerbar .logopanel{display:none}.nav-horizontal .caret{display:none}.horizontal-menu .header-left,.horizontal-menu .topnav{float:none}.horizontal-menu-sidebar .header-left,.horizontal-menu-sidebar .topnav{float:none}.fixed-noleft .menutoggle{display:block}.fixed-noleft .headerbar .logopanel{display:none}.fixed-noleft .header-left,.fixed-noleft .topnav{float:none}}@media screen and (max-width: 767px){.searchform{position:relative}.headermenu li:nth-child(4){display:none}.leftpanel .searchform,.leftpanel .userlogged{display:block}.breadcrumb-wrapper{display:none}.headermenu .dropdown-menu:after{display:none}.rightpanel .nav-tabs.nav-justified>li>a,.rightpanel .nav-justified>li>a{margin-bottom:0}.panel-email .col-sm-3{display:none}}@media screen and (max-width: 640px){.notfoundpanel{width:auto;padding:0 20px}.notfoundpanel h1{font-size:72px;line-height:72px}.notfoundpanel h3{font-size:14px;line-height:normal}.notfound h4{font-size:12px;line-height:18px}.notfoundpanel form{width:auto}.notfoundpanel .form-control{float:none;width:100%}.notfoundpanel .btn{margin-top:10px;width:100%}.signinpanel,.signuppanel{margin:0 auto;width:480px;padding:20px}.signinpanel form{margin-top:20px}.signup-footer{margin-bottom:10px}.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none !important;text-align:center}.widget-quick-status-post .nav-tabs.nav-justified>li{display:table-cell;width:1%;margin-bottom:-5px}.widget-quick-status-post .nav-tabs.nav-justified>li a{margin:0}.nav-tabs.nav-justified.nav-profile>li{float:none;margin-bottom:0;display:table-cell;width:1%}.nav-tabs.nav-justified.nav-profile>li a{margin:0;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.dataTables_info{float:none !important;text-align:center;margin-bottom:10px}.dataTables_paginate{margin-bottom:10px;text-align:center !important;float:none !important}.paginate_disabled_previous,.paginate_enabled_previous,.paginate_disabled_next,.paginate_enabled_next{float:none !important}.dataTables_filter,.dataTables_length{float:none !important;padding:10px 0 0 10px;margin:auto !important;display:inline-block}.table.dataTable th,.table.dataTable td{font-size:13px;min-width:150px}.paging_full_numbers{min-width:500px;margin:0 0 10px 10px}.paging_full_numbers:after{clear:both;display:block;content:''}}@media screen and (max-width: 480px){.signinpanel,.signuppanel{width:360px}.panel-email .pull-right{float:none !important}.pageheader h2{font-size:18px}.pageheader .glyphicon,.pageheader .fa{font-size:18px}.pageheader h2 span{font-size:11px}.fc-header td{display:block !important;text-align:center;width:100%;border:1px solid #eee;padding:10px !important;margin-top:-1px}.fc-button{padding:2px 5px !important;margin:0 !important}.fc-header-title h2{margin:0 !important}.filemanager-options li{padding:5px 7px}.filemanager-options .filter-type{display:block;float:none;border-top:1px solid #eee}.comment-list .media-object{width:30px;padding:2px}.comment-list .media>.pull-left{margin:0}.comment-list h4{font-size:13px}.comment-list .reply{font-size:10px;padding:2px 5px}.comment-list .media-body{font-size:12px;line-height:18px}.blog-content form{margin-bottom:20px}.letter-list{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.letter-list::after{clear:both;display:block;content:''}.letter-list li{float:left;width:auto;display:inline-block}.letter-list li a{display:block;padding:2px 5px}.btn-invoice:before{display:block;content:'';clear:both}.btn-invoice .btn{display:block;width:100%;margin-top:10px}.nav-tabs.nav-justified.nav-profile>li a{font-size:13px;padding:14px 10px}#bloglist>div{padding:0;margin:0;float:none;width:auto}}@media screen and (max-width: 360px){.pageheader h2 span{display:none}.blog-title{font-size:14px;line-height:18px}.blog-summary{font-size:12px;line-height:18px}.blog-summary .btn{padding:2px 5px;display:block;width:100%}.headermenu li:first-child .dropdown-menu{margin-right:-130px}.headermenu li:nth-child(2) .dropdown-menu{margin-right:-85px}.headermenu li:nth-child(3) .dropdown-menu{margin-right:-37px}.nav-tabs.nav-justified.nav-profile>li{float:none;display:block;width:auto}.blog-media .media-body{overflow:visible}.follower-list .btn{display:block;margin:0 0 5px 0;width:100%}.filemanager-options li{display:block;border-top:1px solid #eee}.filemanager-options li:first-child{border-top:0}.authorpanel .media-object{width:80px;margin-right:10px}.people-item .media-object{width:80px !important;height:80px !important}.pagination{margin-bottom:20px}}@media screen and (max-width: 320px){.signinpanel,.signuppanel{width:310px}}.toggle-slide{overflow:hidden;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;direction:ltr}.toggle-slide .toggle-on,.toggle-slide .toggle-off,.toggle-slide .toggle-blob{float:left}.toggle-slide .toggle-blob{position:relative;z-index:99;cursor:hand;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.toggle-slide{overflow:hidden;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;direction:ltr}.toggle-slide .toggle-on,.toggle-slide .toggle-off,.toggle-slide .toggle-blob{float:left}.toggle-slide .toggle-blob{position:relative;z-index:99;cursor:hand;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.toggle-default .toggle-slide{border:1px solid #ccc}.toggle-default .toggle-slide.active{border-color:#999}.toggle-default .toggle-slide .toggle-on,.toggle-default .toggle-slide .toggle-off,.toggle-default .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-default .toggle-slide .toggle-on,.toggle-default .toggle-select .toggle-inner .active{background:#999;color:#fff}.toggle-default .toggle-slide .toggle-off,.toggle-default .toggle-select .toggle-on{color:#666;background:#f7f7f7}.toggle-default .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #ccc}.toggle-default .toggle-slide.active .toggle-blob{border-left:1px solid #999;border-right:0}.toggle-default .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-primary .toggle-slide{border:1px solid #999}.toggle-primary .toggle-slide.active{border-color:#357EBD}.toggle-primary .toggle-slide .toggle-on,.toggle-primary .toggle-slide .toggle-off,.toggle-primary .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-primary .toggle-slide .toggle-on,.toggle-primary .toggle-select .toggle-inner .active{background:#428BCA;color:#fff}.toggle-primary .toggle-slide .toggle-off,.toggle-primary .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-primary .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-primary .toggle-slide.active .toggle-blob{border-left:1px solid #357EBD;border-right:0}.toggle-primary .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-success .toggle-slide{border:1px solid #999}.toggle-success .toggle-slide.active{border-color:#1CAF9A}.toggle-success .toggle-slide .toggle-on,.toggle-success .toggle-slide .toggle-off,.toggle-success .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-success .toggle-slide .toggle-on,.toggle-success .toggle-select .toggle-inner .active{background:#1CAF9A;color:#fff}.toggle-success .toggle-slide .toggle-off,.toggle-success .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-success .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-success .toggle-slide.active .toggle-blob{border-left:1px solid #4CAE4C;border-right:0}.toggle-success .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-warning .toggle-slide{border:1px solid #999}.toggle-warning .toggle-slide.active{border-color:#EEA236}.toggle-warning .toggle-slide .toggle-on,.toggle-warning .toggle-slide .toggle-off,.toggle-warning .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-warning .toggle-slide .toggle-on,.toggle-warning .toggle-select .toggle-inner .active{background:#F0AD4E;color:#fff}.toggle-warning .toggle-slide .toggle-off,.toggle-warning .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-warning .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-warning .toggle-slide.active .toggle-blob{border-left:1px solid #EEA236;border-right:0}.toggle-warning .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-danger .toggle-slide{border:1px solid #999}.toggle-danger .toggle-slide.active{border-color:#D43F3A}.toggle-danger .toggle-slide .toggle-on,.toggle-danger .toggle-slide .toggle-off,.toggle-danger .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-danger .toggle-slide .toggle-on,.toggle-danger .toggle-select .toggle-inner .active{background:#D9534F;color:#fff}.toggle-danger .toggle-slide .toggle-off,.toggle-danger .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-danger .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-danger .toggle-slide.active .toggle-blob{border-left:1px solid #D43F3A;border-right:0}.toggle-danger .toggle-slide .toggle-blob:hover{background:#fcfcfc}.input-group.exclusion{margin-top:4px}.input-group-btn.add-exclusion a:last-child{margin-top:4px}.ipset-contents-editor{min-height:300px}.ui-menu .ui-menu-item a,.ui-menu .ui-menu-item a:active,.ui-menu .ui-menu-item a:focus,.ui-menu .ui-menu-item a:hover{color:#2f4f4f}.ui-autocomplete{max-height:181px;border:1px solid #ccc;overflow-y:auto;overflow-x:hidden;background-color:#fff}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{margin:0px;background:url("/images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;color:#2f4f4f}html{position:absolute;width:100%;height:100%;margin:0;padding:0}body{overflow-y:scroll;width:100%;height:100%;margin:0;padding:0}.start-editing:hover,.stop-editing:hover,.add-object:hover{cursor:pointer;text-decoration:underline}.control-icons .fa{cursor:pointer}.object.is-edited>.form-area{margin-left:-15px;margin-right:-15px;background-color:#f5f5f5;-webkit-border-radius:5px;border-radius:5px}.object.is-edited>.form-area>.row{margin-left:0;margin-right:0}.object.is-edited>.form-area form{margin:15px 0}.object.is-edited>.form-area .control-label{text-align:left}.object.is-edited>.form-area .form-control{font-size:18px}.user .avatar{display:inline-block;vertical-align:middle;width:30px;height:30px;overflow:hidden;-webkit-border-radius:5px;border-radius:5px;margin-right:4px}.user .avatar img{max-width:30px}.user .name{vertical-align:middle}.user .party{vertical-align:middle}.align-middle{vertical-align:middle}.add-objects-wrapper{margin:10px 0}.add-objects-wrapper .results{margin-bottom:15px}.add-objects-wrapper .results .user:hover{cursor:pointer}.add-objects-wrapper .results .user:hover .name{text-decoration:underline}.object.placeholder{background-color:#f0f0f0}.object-list ul li{padding:0}.object-list ul a{display:block;padding:15px 20px}.object-list ul a:hover{text-decoration:none}.object-list ul a:hover .sender{text-decoration:underline}.object-list ul a,.object-list ul a:link,.object-list ul a:visited,.object-list ul a:active{color:#636e7b}.splash-screen .row{margin-top:150px}.splash-screen .error-container{line-height:45px;font-size:16px;padding:0 15px}.equiwidth{min-width:110px}.fake-input-group .input-group-addon{border:1px solid #ccc;-webkit-border-radius:2px;border-radius:2px}.fake-input-group .fake-input{height:42px}.dashed{border-bottom:1px dashed #428bca;text-decoration:none}.dashed:hover{text-decoration:none;border-bottom:1px dashed #2a6496}html{height:auto}body{background-color:#e4e7ea}.navbar-main{background-color:#fff;border:0}.navbar-main .navbar-form{margin-top:7px;margin-bottom:6px}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{background-color:#e4e7ea}.input-group .btn{padding-top:9px;padding-bottom:9px}.input-group .btn-near-select{padding-top:7px;padding-bottom:7px}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span,.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:default}legend{padding-bottom:3px;margin-bottom:10px}.chosen-choices,.chosen-single{padding:4px !important}.chosen-single{padding-left:8px !important;padding-right:8px !important;line-height:32px !important}.chosen-container-single .chosen-single abbr{top:12px;right:34px}.chosen-disabled{opacity:1 !important}.chosen-disabled .chosen-choices{background-color:#eee}.chosen-disabled .chosen-choices li.search-choice{background-color:#dedede}.chosen-disabled .chosen-single{background-color:#eee}.chosen-disabled .chosen-single div{opacity:0.65}div.error{color:#a94442;margin-top:5px;margin-bottom:10px}.nav>li>a{font-family:'LatoBold'}select{-webkit-appearance:menulist-button}.panel-heading p{margin-top:5px}legend{font-size:17px}.signin,.signup{width:320px;padding:10px}.signin .sign-in-with-google,.signup .sign-in-with-google{width:100%}.signin p,.signup p{text-align:center;padding:0;margin:0 0 4px 0}.signin label.error,.signup label.error{color:#e24333 !important;padding:0 8px 4px}.navbar-brand{padding:5px}.not-found .pad{width:400px;margin:100px auto}.results>thead>tr>th:first-child,.results>tbody>tr>th:first-child,.results>tfoot>tr>th:first-child,.results>thead>tr>td:first-child,.results>tbody>tr>td:first-child,.results>tfoot>tr>td:first-child{padding-left:15px}.results>thead>tr>th:last-child,.results>tbody>tr>th:last-child,.results>tfoot>tr>th:last-child,.results>thead>tr>td:last-child,.results>tbody>tr>td:last-child,.results>tfoot>tr>td:last-child{padding-right:15px}.results form .form-group:last-child{margin-bottom:15px}.results form .form-group:last-child .btn-group{margin-bottom:0}.results .options-form>*{margin-top:7px;margin-bottom:7px}.results .options-form .controlsForTheHeartOfTheSun+fieldset{margin-top:10px}.results .options-form fieldset+.controlsForTheHeartOfTheSun{margin-top:10px}.results .pager{margin-top:0}.results .dropdown-toggle{cursor:pointer}.results .results-buttons{margin-top:10px;margin-bottom:10px}.results .results-buttons .btn-group{margin:0}.results .fieldset-toggle{cursor:pointer}.results .secondary-controls .interface-toggle-btn-group{display:none}.results *[data-toggle='popover']{margin-left:5px}.query-display{display:block;margin:10px 0;white-space:pre-line}.results-scroller{overflow:visible}.results-table{white-space:nowrap}.results-table>tbody>tr.highlighted>td,.results-table>tbody>tr.highlighted>th{background-color:#f5f5f5}.results-table thead th{cursor:pointer}.display-fields-block .checkbox{width:150px;height:25px;float:left;margin-top:0 !important}.num-recs{width:auto;display:inline;padding:8px;border:1px solid #ddd;color:#636e7b}.extras{margin-bottom:10px;text-align:center}.extras a{margin:0 5px}input-group.bin-time{margin-top:10px}input.stats-radio-input{width:60px}.bin-time{border-left:2px solid #563d7c}.rwstats-parameters .direction-input-group .btn-group{width:100%}.rwstats-parameters .direction-input-group .btn-group .btn{width:50%}.rwstats-parameters .input-group-addon label{vertical-align:top;margin:0 !important}.rwstats-parameters .input-group-addon.equisize-input-group-addon label{min-width:80px;text-align:left}.tuple-contents-editor{min-height:300px}.container-xs-height{display:table;padding-left:0px;padding-right:0px}.row-xs-height{display:table-row}.col-xs-height{display:table-cell;float:none}@media (min-width: 768px){.container-sm-height{display:table;padding-left:0px;padding-right:0px}.row-sm-height{display:table-row}.col-sm-height{display:table-cell;float:none}}@media (min-width: 992px){.container-md-height{display:table;padding-left:0px;padding-right:0px}.row-md-height{display:table-row}.col-md-height{display:table-cell;float:none}}@media (min-width: 1200px){.container-lg-height{display:table;padding-left:0px;padding-right:0px}.row-lg-height{display:table-row}.col-lg-height{display:table-cell;float:none}}.col-top{vertical-align:top}.col-middle{vertical-align:middle}.col-bottom{vertical-align:bottom}.dragtable-drag-handle{cursor:move}.dragtable-drag-wrapper{position:absolute;z-index:1000}.dragtable-drag-wrapper .dragtable-drag-col{opacity:0.7;filter:alpha(opacity=70);cursor:move}.dragtable-col-placeholder{border-left:1px dotted black;border-right:1px dotted black;color:#EFEFEF;background:#EFEFEF !important;visibility:visible !important}table .dragtable-col-placeholder:first{border-top:1px dotted black}.dragtable-col-placeholder *{opacity:0.0;visibility:hidden}.dragtable-col-placeholder{color:transparent !important}html{position:relative;min-height:100%}body{margin-bottom:60px}.footer{position:absolute;bottom:0;width:100%;height:45px}
\ No newline at end of file
+ url('/fonts/roboto/Roboto-BlackItalic-webfont.svg#RobotoBlackItalic') format('svg');font-weight:normal;font-style:normal}body{background:#1d2939;font-family:'LatoRegular', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif !important;line-height:21px;color:#636e7b;overflow:hidden}body.notfound,body.signin{background:#e4e7ea}input,select,textarea{font-family:'LatoRegular', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif !important;color:#636e7b}a:focus,a:active{outline:none}h1,h2,h3,h4,h5{font-family:'LatoRegular', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif}strong{font-family:'LatoBold';font-weight:normal}#preloader{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#e4e7ea;z-index:10000}#status{width:30px;height:30px;position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:32px}.headerbar{border-left:1px solid #eee;background:#fff}.headerbar::after{clear:both;display:block;content:''}.menutoggle{float:left;width:50px;height:50px;font-size:22px;cursor:pointer;float:left;color:#1d2939;border-right:1px solid #eee;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.menutoggle:hover{color:#1d2939;background-color:#f7f7f7}.menutoggle .fa,.menutoggle .glyphicon{margin:14px 0 0 15px}.searchform input{width:250px;background:#fff url(/images/icon-search.png) no-repeat 95% center;float:left;padding:18px 20px;border:0;border-right:1px solid #eee;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;height:50px;font-size:14px}.searchform input:focus{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-color:#ddd}.searchform-left{margin-top:10px;margin-bottom:20px}.searchform-left .form-control{border:0;background:#131b26}.header-left{float:left}.header-right{float:right}.headermenu{list-style:none;margin:0;padding:0}.headermenu:after{clear:both;display:block;content:''}.headermenu>li{display:inline-block;float:left;border-left:1px solid #eee;position:relative}.headermenu .dropdown-toggle{padding:12px 10px;border-color:#fff;background:#fff;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border:0}.headermenu .dropdown-toggle:hover,.headermenu .dropdown-toggle:focus,.headermenu .dropdown-toggle:active,.headermenu .dropdown-toggle.active,.headermenu .open .dropdown-toggle.dropdown-toggle{background:#f9f9f9;color:#333;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.headermenu .dropdown-toggle img{vertical-align:middle;margin-right:5px;width:26px;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.headermenu .dropdown-toggle .caret{margin-left:5px}.headermenu .dropdown-menu{border:0;margin-top:0px;margin-right:-1px;-moz-border-radius:2px 0 2px 2px;-webkit-border-radius:2px 0 2px 2px;border-radius:2px 0 2px 2px;-moz-box-shadow:3px 3px 0 rgba(12,12,12,0.05);-webkit-box-shadow:3px 3px 0 rgba(12,12,12,0.05);box-shadow:3px 3px 0 rgba(12,12,12,0.05);padding:5px}.headermenu .dropdown-menu:after{border-bottom:6px solid #1d2939;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;right:17px;position:absolute;top:-6px}.headermenu .dropdown-grid .grid-list{padding:20px}.headermenu .dropdown-menu li{display:block;margin:0;float:none;background:none;padding:15px 5px}.headermenu .dropdown-menu-usermenu li{padding:0}.headermenu .dropdown-menu-usermenu:after{right:95px}.headermenu .dropdown-menu li a{color:#94989d;font-size:13px;padding:7px 10px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.headermenu .dropdown-menu li a:hover{background:#1caf9a;color:#fff}.headermenu .dropdown-menu li i{font-size:11px;margin-right:5px}.headermenu .dropdown-menu-head{padding:0;min-width:300px}.headermenu .tp-icon{padding:12px 15px;height:50px;font-size:16px;background:#fff;color:#333;border-color:#fff;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.headermenu .tp-icon+.dropdown-menu:after{right:17px}.headermenu .chat-icon{border-right:0}.headermenu .dropdown-menu-usermenu{background:#1d2939;min-width:200px}.headermenu .dropdown-menu-head ul{border:1px solid #ddd;border-top:0;padding:0 10px}.headermenu .dropdown-menu-head li a{color:#333;padding:0;opacity:1}.headermenu .dropdown-menu-head li a:hover{background:none;color:#428BCA;text-decoration:none}.headermenu .btn-group{margin-bottom:0}.dropdown-list li{padding:15px;overflow:hidden;border-bottom:1px solid #eee}.dropdown-list li:last-child{border-bottom:0}.dropdown-list .thumb{width:36px;float:left}.dropdown-list .thumb img{width:100%;display:block;vertical-align:middle}.dropdown-list .desc{margin-left:45px;display:block}.dropdown-list .desc h5{font-size:13px;margin-top:7px}.dropdown-list li:last-child{padding:7px 5px}.dropdown-list li .badge{float:right}.user-list{width:300px}.gen-list li a{display:block}.gen-list li a:hover{color:#333 !important;text-decoration:none}.gen-list li .name{font-size:13px;font-family:'LatoBold','Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif;line-height:21px;display:block}.gen-list li .msg{font-size:11px;line-height:normal;color:#999;display:block}.leftpanel{width:240px;position:absolute;top:0;left:0;z-index:100}.sticky-leftpanel{position:fixed;height:100%;overflow-y:auto}.logopanel{padding:10px;background:#fff}.logopanel h1{font-size:30px;font-family:'LatoBold', 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, sans-serif;letter-spacing:-1.5px;color:#1d2939;line-height:30px;margin:0}.logopanel h1 span{color:#1caf9a}.leftpanelinner{padding:5px 15px}.leftpanel .searchform{display:none}.leftpanel .searchform::after{content:'';display:block;clear:both}.leftpanel .searchform input{padding:10px;height:auto;width:100%;margin:5px 0 20px 0;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.leftpanel .userlogged{margin:0;padding:0;padding-bottom:15px;margin-bottom:15px;border-bottom:1px solid rgba(255,255,255,0.1);display:none}.leftpanel .userlogged .media-object{width:40px;-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;float:left;border:2px solid #1CAF9A;padding:2px;margin-left:2px}.leftpanel .userlogged .media-body{margin-left:50px;color:#ccc}.leftpanel .userlogged .media-body h4{font-size:15px;margin:0}.leftpanel .userlogged .media-body span{font-style:italic;font-size:11px;opacity:0.5}.sidebartitle{font-size:11px;text-transform:uppercase;color:#999;margin-bottom:10px}.nav-bracket{margin-bottom:30px}.nav-bracket>li>a{color:#8f939e;padding:7px 10px}.nav-bracket>li>a:hover,.nav-bracket>li>a:active,.nav-bracket>li>a:focus{background-color:#fff;color:#1d2939;-moz-box-shadow:0 3px 0 rgba(0,0,0,0.2);-webkit-box-shadow:0 3px 0 rgba(0,0,0,0.2);box-shadow:0 3px 0 rgba(0,0,0,0.2)}.nav-bracket>li.nav-parent>a{background:transparent url(/images/plus-white.png) no-repeat 96% center}.nav-bracket>li.nav-parent>a:focus{background-color:none;color:#8F939E;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.nav-bracket>li.nav-parent>a:hover,.nav-bracket>li.nav-parent>a:active{color:#1d2939;background-color:#fff;background-image:url(/images/plus.png)}.nav-bracket>li.nav-active>a{background-color:#fff;background-image:url(/images/minus.png);color:#1d2939;-moz-box-shadow:0 3px 0 rgba(0,0,0,0.2);-webkit-box-shadow:0 3px 0 rgba(0,0,0,0.2);box-shadow:0 3px 0 rgba(0,0,0,0.2)}.nav-bracket>li.nav-active>a:hover{background-image:url(/images/minus.png);background-repeat:no-repeat}.nav-bracket>li.nav-active>a:focus{color:#1d2939}.nav-bracket>li.active>a,.nav-bracket>li.active>a:hover,.nav-bracket>li.active>a:focus{background-color:#1caf9a;color:#fff}.nav-bracket>li.active>a{-moz-box-shadow:0 3px 0 rgba(0,0,0,0.2);-webkit-box-shadow:0 3px 0 rgba(0,0,0,0.2);box-shadow:0 3px 0 rgba(0,0,0,0.2)}.nav-bracket>li.nav-parent.active>a{background-image:url(/images/plus.png)}.nav-bracket>li.nav-active.active>a{background-image:url(/images/minus.png)}.nav-bracket>li.nav-active.active>a:hover{background-image:url(/images/minus.png)}.nav-bracket li .fa,.nav-bracket li .glyphicon{font-size:16px;vertical-align:middle;margin-right:10px;width:16px;text-align:center}.nav-bracket>li>a>.badge{margin-top:2px}.nav-bracket .children{list-style:none;display:none;margin:5px 0;padding:0}.nav-bracket .children>li>a{color:#94989d;font-size:13px;display:block;padding:5px 0 5px 27px;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.nav-bracket .children>li>a>span{margin-top:2px}.nav-bracket .children>li>a:hover,.nav-bracket .children>li>a:active,.nav-bracket .children>li>a:focus{text-decoration:none;color:#1caf9a}.nav-bracket .children>li .fa{font-size:12px;opacity:0.5;margin-right:5px;text-align:left;width:auto;vertical-align:baseline}.nav-bracket .children>li.active>a{color:#1caf9a}.nav-bracket .children ul{margin-left:12px;border:0}.infosummary{margin:30px 0}.infosummary ul{padding:0;margin:20px 0 0;list-style:none;border-top:1px solid rgba(255,255,255,0.05)}.infosummary li{padding:10px 0;border-bottom:1px solid rgba(255,255,255,0.05)}.infosummary li:after{clear:both;display:block;content:''}.infosummary .datainfo{float:left;line-height:normal}.infosummary .datainfo h4{margin:0;font-size:16px;color:#fff;opacity:0.7}.infosummary span{font-size:11px;line-height:normal;text-transform:uppercase;font-size:10px;opacity:0.4}.infosummary .chart{float:right;margin-top:5px;opacity:0.6}.mainpanel{margin-left:240px;background:#e4e7ea;min-height:1000px}.pageheader{padding:15px;border-bottom:1px solid #d3d7db;border-top:1px solid #eee;background:#f7f7f7;position:relative}.pageheader h2{font-size:28px;color:#1D2939;letter-spacing:-0.5px;margin:0}.pageheader .glyphicon,.pageheader .fa{font-size:24px;margin-right:5px;padding:6px 7px;border:2px solid #1D2939;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.pageheader .fa.fa-pencil{padding:6px 9px}.pageheader .fa.fa-hand-o-up{padding:6px 9px 6px 7px}.pageheader .fa-file-o{padding:6px 10px}.pageheader .fa-user{padding:6px 10px}.pageheader .fa-file-text{padding:6px 10px}.pageheader .fa-map-marker{padding:6px 12px}.pageheader .fa-dollar{padding:6px 12px}.pageheader .fa-clock-o{padding:6px 8px}.pageheader h2 span{font-size:13px;text-transform:none;color:#999;font-style:italic;vertical-align:middle;letter-spacing:0}.pageheader h2 span::before{content:'/';margin:0 10px 0 5px;color:#ccc}.pageheader .breadcrumb-wrapper{position:absolute;top:23px;right:25px}.pageheader .breadcrumb-wrapper .label{color:#999;text-transform:uppercase;font-size:11px;font-weight:normal;display:inline-block}.pageheader .breadcrumb{background:none;display:inline-block;padding:0}.pageheader .breadcrumb li{font-size:12px}.pageheader .breadcrumb li.active{color:#333}.contentpanel{padding:20px;position:relative}.contentpanel::after{clear:both;display:block;content:''}form .form-group:last-child{margin-bottom:0}.row-pad-5{margin-left:-5px;margin-right:-5px}.row-pad-5 [class*="col-lg"],.row-pad-5 [class*="col-md"],.row-pad-5 [class*="col-sm"]{padding-left:5px;padding-right:5px;margin-bottom:10px}.subtitle{font-size:13px;text-transform:uppercase;color:#333;font-family:'LatoBold';margin-bottom:15px;margin-top:0}.subtitle-lined{border-bottom:1px dotted #ddd;padding-bottom:5px}p{margin-bottom:10px}.panel-stat{background:none}.panel-stat .panel-heading{padding:15px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.panel-stat .stat{color:#fff;max-width:250px}.panel-stat .stat img{text-align:center}.panel-stat i{font-size:30px;border:1px solid #fff;padding:15px;border-radius:50px;opacity:0.5}.panel-stat .stat-label{text-transform:uppercase;font-size:11px;opacity:0.75;display:block;line-height:normal;margin-bottom:2px}.panel-stat h1{margin:0;line-height:36px;font-family:'Helvetica Neue', sans-serif;font-size:38px}.panel-stat h4{margin:0;font-family:'Helvetica Neue', sans-serif}.sublabel{display:block;font-size:12px;margin-bottom:2px}.dashboard-datatable .dataTables_filter{float:left}.ckbox,.rdio{position:relative}.ckbox input[type="checkbox"],.rdio input[type="radio"]{opacity:0}.ckbox label,.rdio label{padding-left:10px;cursor:pointer;margin-bottom:7px !important}.ckbox label:before{width:18px;height:18px;position:absolute;top:1px;left:0;content:'';display:inline-block;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border:1px solid #bbb;background:#fff}.ckbox input[type="checkbox"]:disabled+label{color:#999}.ckbox input[type="checkbox"]:disabled+label:before{background-color:#eee}.ckbox input[type="checkbox"]:checked+label::after{font-family:'FontAwesome';content:"\F00C";position:absolute;top:0;left:3.5px;display:inline-block;font-size:11px;width:16px;height:16px;color:#fff}.ckbox-default input[type="checkbox"]:checked+label:before{border-color:#999}.ckbox-default input[type="checkbox"]:checked+label::after{color:#333}.ckbox-primary input[type="checkbox"]:checked+label:before{border-color:#357EBD;background-color:#428BCA}.ckbox-warning input[type="checkbox"]:checked+label:before{border-color:#EEA236;background-color:#F0AD4E}.ckbox-success input[type="checkbox"]:checked+label:before{border-color:#1CAF9A;background-color:#1CAF9A}.ckbox-danger input[type="checkbox"]:checked+label:before{border-color:#D43F3A;background-color:#D9534F}.rdio label:before{width:18px;height:18px;position:absolute;top:1px;left:0;content:'';display:inline-block;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;border:1px solid #bbb;background:#fff}.rdio input[type="radio"]:disabled+label{color:#999}.rdio input[type="radio"]:disabled+label:before{background-color:#eee}.rdio input[type="radio"]:checked+label::after{content:'';position:absolute;top:5px;left:4px;display:inline-block;font-size:11px;width:10px;height:10px;background-color:#444;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.rdio-default input[type="radio"]:checked+label:before{border-color:#999}.rdio-primary input[type="radio"]:checked+label:before{border-color:#428BCA}.rdio-primary input[type="radio"]:checked+label::after{background-color:#428BCA}.rdio-warning input[type="radio"]:checked+label:before{border-color:#F0AD4E}.rdio-warning input[type="radio"]:checked+label::after{background-color:#F0AD4E}.rdio-success input[type="radio"]:checked+label:before{border-color:#1CAF9A}.rdio-success input[type="radio"]:checked+label::after{background-color:#1CAF9A}.rdio-danger input[type="radio"]:checked+label:before{border-color:#D9534F}.rdio-danger input[type="radio"]:checked+label::after{background-color:#D9534F}pre{font-size:12px;color:#C7254E;border:1px solid #ddd;padding:8px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;background:#fff}label.error{color:#B94A48;margin-top:2px}label.error:empty{display:none !important}.asterisk{color:#D9534F}div.error{margin-bottom:20px;display:none;position:relative}div.error label.error{display:block;padding-left:25px;position:relative}div.error label.error:before{font-family:'Glyphicons Halflings';content:'\e101';position:absolute;top:-2px;left:0;font-size:16px;color:#D9534F;display:inline-block}.bootstrap-timepicker .dropdown-menu{top:40px}.editable{padding:10px;border:1px solid #fcfcfc;margin-bottom:20px}.editable:hover{border:1px solid #ccc}.editable h4{color:#333}.basic-wizard .nav li a{background:#e4e7ea;border-bottom:1px solid #ccc;color:#4A535E;border-right:1px solid #ccc;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;opacity:0.75}.basic-wizard .nav li:last-child a{border-right:0}.basic-wizard .nav li a:hover{background-color:#f7f7f7;opacity:1}.basic-wizard .nav li.active a,.basic-wizard .nav li.active a:focus,.basic-wizard .nav li.active a:active{background:#fcfcfc;border-bottom-color:#fcfcfc;color:#333;opacity:1}.basic-wizard ul li a span{font-family:'LatoBold', sans-serif}.basic-wizard .pager{margin:0;border-top:1px solid #ddd;background:#f7f7f7;padding:10px}.basic-wizard .pager li a{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;border-color:#357EBD;background-color:#428BCA;color:#fff}.basic-wizard .pager li a:hover{background-color:#3276B1;border-color:#285E8E}.basic-wizard .pager li.disabled a{background:#eee;color:#999;border-color:#ccc}.basic-wizard .progress{height:12px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.basic-wizard .nav-disabled-click li a:hover,.basic-wizard .nav-disabled-click li a:active,.basic-wizard .nav-disabled-click li a:focus{background-color:#E4E7EA;opacity:0.75;color:#4A535E;cursor:default}.basic-wizard .nav-disabled-click li.active a:hover,.basic-wizard .nav-disabled-click li.active a:active,.basic-wizard .nav-disabled-click li.active a:focus{background:#fcfcfc;color:#333;opacity:1}.basic-wizard .tab-content{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.tab-pane::after{clear:both;display:block;content:''}.btn-demo::after{clear:both;display:block;content:''}.btn-demo .btn{float:left;margin:0 10px 10px 0}.fonticon-list{list-style:none;margin:20px 0;padding:0}.fontawesome-list{list-style:none;padding:0}.fonticon-list li,.fontawesome-list li{display:block;margin-bottom:5px}.fonticon-list li span,.fontawesome-list li span{color:#333;vertical-align:middle;margin-right:8px;min-width:20px;display:inline-block;width:20px}.tooltip-example .btn,.popover-example .btn{margin:0 5px 5px 0}.tooltipflot{background-color:rgba(0,0,0,0.75);font-size:11px;color:#fff;padding:3px 10px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.jqstooltip{min-height:25px;border:0;min-width:30px;height:auto !important;width:auto !important}.tinystat{display:inline-block}.tinystat .chart,.tinystat .datainfo{display:inline-block;vertical-align:middle}.tinystat .chart{margin-right:5px}.tinystat .text-muted{text-transform:uppercase;font-size:10px}.tinystat h4{margin:0;color:#333;font-family:'LatoBold';line-height:normal;font-size:16px}.widget-quick-status-post .nav-tabs>li>a{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.widget-quick-status-post .panel-body{padding:0}.widget-messaging .panel-btns .panel-edit{padding:15px 17px;opacity:0.5;font-size:24px;margin-top:-18px;margin-right:-20px;position:relative}.widget-messaging .panel-btns .panel-edit:hover{opacity:1}.widget-messaging .panel-body{padding:0}.widget-messaging ul{list-style:none;padding:0;margin:0}.widget-messaging ul li{padding:15px;border-top:1px solid #eee;background-color:#fff}.widget-messaging ul li:hover{background-color:#fcfcfc}.widget-messaging ul li:first-child{border-top:0}.widget-messaging .sender{font-size:13px;color:#333;margin:0;font-family:'LatoBold';line-height:normal}.widget-messaging ul li small{line-height:normal}.widget-today .panel-heading,.widget-time .panel-heading{height:115px}.widget-today .glyphicon,.widget-today .fa{font-size:72px;color:#fff;opacity:1}.widget-time .glyphicon,.widget-time .fa{font-size:60px;color:#fff;opacity:1}.widget-today .today,.widget-time .today{line-height:normal;margin:0;color:#333;font-family:'LatoBold';font-size:20px}.widget-photoday .panel-body{padding:0}.widget-photoday .photoday img{width:100%;display:block;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.widget-photoday .photo-details{padding:15px}.widget-photoday .photo-title{color:#333;font-size:16px;margin:0;font-family:'LatoBold';line-height:normal}.widget-photoday .photo-details small{display:block}.widget-photoday .photo-meta{list-style:none;padding:0;margin:0;border-top:1px solid #e3e3e3;background-color:#f7f7f7}.widget-photoday .photo-meta li{display:table-cell;width:1%;text-align:center;border-left:1px solid #e3e3e3}.widget-photoday .photo-meta li:first-child{border-left:0}.widget-photoday .photo-meta li a,.widget-photoday .photo-meta li span{padding:15px 10px;display:block;color:#999;font-size:12px}.widget-photoday .photo-meta li a:hover{color:#666;text-decoration:none}.widget-bloglist .media{border-bottom:1px solid #eee;padding:0}.widget-bloglist .media .thumbnail{margin-bottom:15px}.widget-weather{overflow:hidden}.widget-weather .panel-body{padding:0;background-color:#1D2939}.widget-weather .row{margin:0}.widget-weather .temp,.widget-weather .weather{padding:0}.widget-weather .temp{background-color:#1CAF9A;color:#fff;padding:10px 0}.widget-weather .temp h1{font-size:60px;font-family:'LatoLight'}.widget-weather .temp h1 span{width:20px;height:20px;display:inline-block;margin-left:-10px}.widget-weather .temp h5{text-transform:uppercase}.widget-weather .weather-icon{color:#666;font-size:60px;background-color:#fff;display:block;padding:20px 0}.widget-weather .weather>div{width:50%;text-align:center;color:#fff;font-size:14px;padding-top:10px}.widget-profile .panel-heading{position:relative}.widget-profile .cover{position:absolute;top:0;left:0;height:105px;overflow:hidden;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.widget-profile .cover img{width:100%;display:block}.widget-profile .panel-body{position:relative;padding:0}.widget-profile-img{position:relative;margin-top:30px;margin-left:15px}.widget-profile-title{background:#428BCA;margin-top:-77px;padding:15px 0 15px 120px;color:#fff}.widget-profile-title h4{font-size:18px;margin:0;line-height:normal}.widget-profile-title small{line-height:normal}.widget-profile blockquote{font-size:18px;border-left:0;margin:0;color:#555;padding:15px}.widget-profile-title .fa{margin-right:7px}.widget-profile .row{margin:0}.widget-profile .row>div{padding:0}.widget-profile .row>div>span{display:block;border-right:1px solid rgba(255,255,255,0.15);font-size:14px;padding:15px 10px;text-transform:uppercase;background:#1D2939;color:#fff}.widget-profile .row>div:first-child span{-moz-border-radius:0 0 0 3px;-webkit-border-radius:0 0 0 3px;border-radius:0 0 0 3px}.widget-profile .row>div:last-child span{border-right:0;-moz-border-radius:0 0 3px 0;-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px 0}.widget-todo .panel-btns i{font-size:12px}.widget-todo .todo-list{padding:0;margin:0;list-style:none}.widget-todo .panel-body{padding:0}.widget-todo .todo-list li{border-bottom:1px solid #eee;padding:15px 10px 8px 20px}.widget-todo .todo-list li input:checked+label{text-decoration:line-through}.widget-todo .todo-list .todo-form{padding-bottom:15px}.widget-todo .todo-list li .btn{margin:0;padding:6px 10px}.widget-slider .carousel-control.right,.widget-slider .carousel-control.left{background:none}.widget-slider .carousel-control{width:auto;text-shadow:none;color:#fff;bottom:auto;top:-55px;padding:0;line-height:normal}.widget-slider .carousel-control.left{left:auto;right:25px}.widget-slider .carousel-control span{line-height:normal;font-size:18px}.widget-slider .media{padding-bottom:0}.widget-slider .carousel-indicators{top:-53px;right:0;bottom:auto;left:auto;width:auto}.btn-compose-email{padding:10px 0;margin-bottom:20px}.nav-email>li>a>.badge{margin-top:2px}.nav-email>li>a{color:#444}.nav-email>li>a>i{width:16px;text-align:center;margin-right:10px}.nav-email>li>a:hover{background-color:#d8dcdf}.table-email{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-bottom:1px solid #eee;margin:0;background-color:#f7f7f7}.table-email tr.unread td{background-color:#fff}.table-email tbody>tr>td{vertical-align:middle}.table-email tr:hover{background-color:#eee;cursor:pointer}.table-email tr.selected td{background-color:#eee}.table-email .ckbox{width:18px;height:19px}.table-email .ckbox input[type="checkbox"]:checked+label:after{top:2px}.table-email .star{color:#ccc}.table-email .star-checked{color:#F0AD4E}.table-email td:first-child{width:30px}.table-email td:nth-child(2){width:30px}.table-email .media{margin:0;padding:0}.table-email .media-object{width:35px}.table-email .media h4{margin:0;font-size:14px;line-height:normal;font-family:'LatoBold', sans-serif}.table-email .media-meta{font-size:11px;color:#999}.table-email .email-summary{margin:2px 0 0 0}.table-email .email-summary strong{color:#333}.read-panel{margin-top:10px;border-top:1px solid #eee;padding-top:20px}.read-panel .media-object{width:35px}.read-panel .media h4{margin:2px 0 0 0;font-size:14px;line-height:normal}.read-panel .media-meta{font-size:12px}.email-subject{color:#333}.dataTables_length .chosen-container{min-width:75px}.dataTables_length .chosen-container-single .chosen-single{padding-right:0}.table-action{text-align:center}.table-action-hide a{opacity:0}.table-action a,.table-action-hide a{display:inline-block;margin-right:5px;color:#666}.table-action a:hover,.table-action-hide a:hover{color:#333}.table-action a:last-child,.table-action-hide a:last-child{margin-right:0}.external-event{background:#428BCA;margin-bottom:5px;padding:6px 10px;color:#fff;font-size:13px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.filemanager-options{list-style:none;margin:0;padding:0;margin-bottom:20px;background:#fcfcfc;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03)}.filemanager-options li{display:inline-block;padding:12px 15px;border-right:1px solid #eee;font-size:12px;color:#666}.filemanager-options li a{color:#666}.filemanager-options li a.disabled{opacity:0.5;cursor:default}.filemanager-options li a.disabled:hover{text-decoration:none}.filemanager-options li i{font-size:14px;margin-right:5px;color:#444}.filemanager-options .ckbox label{margin:0 !important}.filemanager-options .filter-type{float:right;border-right:0;border-left:1px solid #eee}.filemanager-options .filter-type a{display:inline-block;margin-right:10px}.filemanager-options .filter-type a:last-child{margin-right:0}.filemanager-options .filter-type a:first-child{margin-left:10px}.filemanager-options .filter-type a.active{text-decoration:underline;color:#2A6496}.filemanager .thmb{border:1px solid #fcfcfc;background:#fcfcfc;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:10px;margin-bottom:20px;position:relative;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03)}.filemanager .thmb.checked{border-color:#ccc}.filemanager .thmb::after{clear:both;display:block;content:''}.filemanager .ckbox{position:absolute;top:15px;left:15px;display:none}.filemanager .fm-group{position:absolute;top:15px;right:15px;display:none}.filemanager .fm-toggle{padding:1px 4px;line-height:normal;background:#fff;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.filemanager .fm-menu{min-width:120px}.filemanager .fm-menu a{font-size:12px;color:#333}.filemanager .fm-menu i{margin-right:7px;color:#999;width:16px;font-size:13px}.filemanager .thmb-prev{background:#eee;overflow:hidden}.filemanager .thmb-prev a{display:block}.filemanager .fm-title{margin-bottom:0;font-size:13px}.filemanager .fm-title a{overflow:hidden;text-overflow:ellipsis;display:block}.fm-sidebar{padding-left:10px}.fm-sidebar .subtitle a{color:#999;font-size:11px}.fm-sidebar .subtitle a:hover{text-decoration:none;color:#333}.folder-list{list-style:none;padding:0;margin:0}.folder-list li{display:block;border-bottom:1px solid #ddd}.folder-list li a{display:block;padding:5px 0;color:#666}.folder-list li a:hover{color:#333;text-decoration:none}.folder-list li i{margin-right:10px;width:16px}.fm-sidebar .tag-list{list-style:none;padding:0;margin:0}.fm-sidebar .tag-list li{float:left;margin-right:5px;margin-bottom:5px}.fm-sidebar .tag-list li a{display:block;padding:2px 7px;font-size:11px;background:#fcfcfc;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;color:#666}.fm-sidebar .tag-list li a:hover{color:#fff;text-decoration:none;background:#428BCA}.profile-name{margin:0;margin-bottom:10px;color:#333}.profile-location,.profile-position{font-size:13px;margin-bottom:3px}.profile-location .fa,.profile-position .fa{width:16px;margin-right:8px;text-align:center}.profile-header{margin-bottom:30px}.profile-header .btn .fa{margin-right:7px}.profile-social-list{list-style:none;margin:0;padding:0}.profile-social-list li{border-bottom:1px solid #ddd;padding:5px 0}.profile-social-list li:first-child{padding-top:0}.profile-social-list li .fa{margin-right:10px;width:16px}.activity-list{padding:20px 10px}.activity-list .act-media{border-bottom:1px solid #eee}.activity-list .act-thumb{width:28px;vertical-align:middle}.activity-list .act-media-body{line-height:16px}.activity-list .media-body p{line-height:21px;font-size:13px}.activity-list .media-title{font-family:'LatoBold';font-size:15px;margin-bottom:0}.activity-list .blog-media{padding-bottom:0}.activity-list .blog-media .media-object{width:120px;margin-right:10px;margin-top:5px}.activity-list .blog-media .media-title{margin:0}.activity-list .img-single img{width:50%}.uploadphoto-list{list-style:none;padding:0;margin:0;margin-top:20px}.uploadphoto-list li{width:20%;float:left}.uploadphoto-list li a{display:block;margin-right:5px}.follower-list{padding:10px}.follower-list .media{border-bottom:1px solid #eee}.follower-list .btn .fa{margin-right:5px}.follower-list .media-object{margin-right:10px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.follower-name{color:#333;margin:0;font-size:18px;margin-bottom:5px}.events{padding:10px}.events .subtitle{margin-bottom:20px}.events .media-object{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.events-list{list-style:none;margin:0;padding:0}.events-list .event-body{font-size:13px}.event-body small{display:block}.event-body small .fa{margin-right:5px;width:14px;text-align:center}.event-body p{margin-top:10px}.event-title{margin:0;margin-bottom:5px;font-size:16px;font-family:'LatoBold';line-height:normal}.blog-item{background:#fcfcfc;margin-bottom:20px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);position:relative}.blog-img img{-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.blog-details{padding:15px}.blog-title{font-family:'LatoBold';margin:0;font-weight:normal}.blog-title a{color:#333}.blog-meta{list-style:none;padding:0;margin:0;margin-top:10px}.blog-meta::after{clear:both;display:block;content:''}.blog-meta li{float:left;padding:0 5px;border-right:1px solid #ddd;line-height:normal;font-size:11px;margin-bottom:5px}.blog-meta li:first-child{padding-left:0}.blog-meta li:last-child{padding-right:0;border-right:0}.blog-summary{font-size:13px}.blog-summary p{margin:10px 0}.blog-summary .btn{margin-top:10px}.blog-quote .quote{margin:0;font-size:18px;line-height:24px}.blog-quote .quote a{padding:15px;background:#1d2939;color:#dadfe6;display:block;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;text-align:center}.blog-quote .quote a:hover{text-decoration:none;background:#2c394c}.blog-quote .quote-author{display:block;font-family:'LatoRegular';opacity:0.5}.blog-quote .blog-meta{margin-top:3px}.blog-video{-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;overflow:hidden;height:0;padding-top:30px;padding-bottom:56.25%;position:relative}.blog-video iframe{position:absolute;width:100%;height:100%;border:0;top:0;left:0}.blog-quote .quote-primary a{background-color:#428BCA}.blog-quote .quote-primary a:hover{background-color:#357EBD}.blog-quote .quote-success a{background-color:#1CAF9A;color:#fff}.blog-quote .quote-success a:hover{background-color:#17A08C}.blog-quote .quote-danger a{background-color:#D9534F;color:#fff}.blog-quote .quote-danger a:hover{background-color:#D43F3A}.panel-blog .blog-img img{width:100%}.blogsingle-title{font-family:'LatoRegular';color:#333;margin:0}.blog-content{max-width:975px}.authorpanel{margin:20px 0;border-top:1px solid #ddd;border-bottom:1px solid #ddd;padding:20px 0}.authorpanel::after{clear:both;display:block;content:''}.authorpanel .media{padding:0}.authorpanel .media-object{margin-right:15px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.authorpanel p{margin-bottom:0;font-size:13px}.blog-sidebar{font-size:13px;padding-left:5px;margin-top:5px}.sidebar-list{list-style:none;padding:0;margin:0}.sidebar-list li{display:block;border-bottom:1px solid #ddd}.sidebar-list li a{padding:7px 0;display:block}.sidebar-list li i{display:inline-block;margin-right:5px}.comment-list .media{border-bottom:1px solid #ddd}.comment-list .media-object{width:60px;margin-right:10px}.comment-list h4{margin:0;color:#333;font-size:16px}.comment-list .media-body{font-size:13px;position:relative}.comment-list .reply{padding:3px 8px;line-height:normal;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.comment-list .media-body p:last-child{margin-bottom:0}.comment-list .media-body .media:last-child{padding-bottom:0;border-bottom:0}.letter-list{list-style:none;padding:0;margin:0;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03)}.letter-list li{border-left:1px solid #eee;display:table-cell;width:1%}.letter-list li:first-child{border-left:0}.letter-list li a{display:block;padding:8px 0;text-align:center;text-transform:uppercase;background:#f7f7f7;-moz-transition:all 0.2s ease-out 0s;-webkit-transition:all 0.2s ease-out 0s;transition:all 0.2s ease-out 0s}.letter-list li:first-child a{-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.letter-list li:last-child a{-moz-border-radius:0 3px 3px 0;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.letter-list li a:hover{color:#fff;background:#428BCA;text-decoration:none;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.people-item{background:#fcfcfc;padding:20px;font-size:13px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);margin-bottom:20px}.people-item .media{padding:0}.people-item .media-object{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;margin-right:10px;width:110px;height:110px}.people-item .fa{margin-right:5px}.person-name{margin:0 0 5px 0;color:#428BCA}.people-item .social-list{margin-top:10px;margin-bottom:0;list-style:none;padding:0}.people-item .social-list::after{clear:both;display:block;content:''}.people-item .social-list li{float:left;margin-right:5px;margin-bottom:5px}.people-item .social-list li a{font-size:16px;border:1px solid #ddd;padding:3px 5px;width:30px;display:block;text-align:center;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;color:#666}.people-item .social-list li a:hover{background-color:#eee;color:#333}.people-item .social-list li a .fa{margin-right:0}.notfoundpanel{text-align:center;margin-top:10%;width:600px;margin:10% auto 0 auto}.notfoundpanel h1{font-size:130px;font-family:'LatoBold', sans-serif;color:#333;margin:0;line-height:130px}.notfoundpanel h3{color:#333;margin:0}.notfound h4{font-size:14px}.notfoundpanel form{width:350px;margin:20px auto 0 auto}.notfoundpanel .form-control{width:250px;float:left}.nav-sr li{border-bottom:1px solid #ddd}.nav-sr li a{padding:5px 0;color:#555}.nav-sr li a:hover{background:none;color:#333}.nav-sr li a i{margin-right:5px}.results-list .media{border-bottom:1px solid #eee}.results-list .media-object{width:125px;margin-right:10px}.results-list .filename{margin:0;font-size:16px}.results-list .media-body{line-height:18px}.table-invoice{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-bottom:1px solid #eee;margin-top:20px}.table-invoice thead>tr>th{background:none}.table-invoice thead>tr>th:last-child,.table-invoice thead>tr>th:nth-child(3),.table-invoice thead>tr>th:nth-child(2){text-align:right}.table-invoice tbody>tr>td:last-child,.table-invoice tbody>tr>td:nth-child(3),.table-invoice tbody>tr>td:nth-child(2){width:15%;text-align:right}.table-total{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;float:right}.table-total>tbody>tr>td{border:0}.table-total>tbody>tr>td:last-child{border-bottom:1px solid #ddd;width:15%;text-align:right}.table-total>tbody>tr>td:first-child{text-align:right;color:#333}.timeline-post .panel-body{padding:0}.timeline-post .form-control{border:0;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;resize:vertical}.timeline-post .form-control:focus{-moz-box-shdow:none;-webkit-box-shadow:none;box-shadow:none}.timeline-post .panel-footer{padding:10px;background:#f7f7f7}.timeline-btns{padding:5px}.timeline-btns a{display:inline-block;font-size:14px;width:20px;height:20px;color:#ccc;text-align:center;margin-right:5px}.timeline-btns a:hover{color:#666}.panel-timeline .panel-heading{padding:10px 10px 6px 10px;border-bottom:0}.panel-timeline .panel-body{padding:0 10px}.panel-timeline .panel-heading .media{margin:0;padding:0}.panel-timeline .panel-heading .media-object,.panel-timeline .panel-footer .media-object{width:32px;border-radius:1px}.panel-timeline .panel-body .media{margin-top:10px;padding-bottom:10px}.panel-timeline .panel-body .media-object{width:150px}.panel-timeline .panel-body h4{font-size:16px;margin-bottom:5px;font-family:'LatoBold', sans-serif}.panel-timeline h4{margin:0;font-size:13px;line-height:normal}.panel-timeline .panel-footer{padding:10px}.panel-timeline .panel-footer .form-control{padding:8px 10px;border-radius:0}.timeline-btns{padding:10px}.timeline-btns:after{clear:both;display:block;content:''}.timeline-video{-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;overflow:hidden;height:0;padding-top:30px;padding-bottom:56.25%;position:relative}.timeline-video iframe{position:absolute;width:100%;height:100%;border:0;top:0;left:0}.lockedpanel{width:250px;margin:10% auto 0 auto;text-align:center}.lockedpanel .loginuser{text-align:center}.lockedpanel .loginuser img{-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;background:rgba(255,255,255,0.4);padding:5px}.lockedpanel .locked{font-size:42px;margin-bottom:20px}.lockedpanel .logged{margin-top:20px}.lockedpanel .logged h4{margin:0;font-size:21px;color:#333}.lockedpanel form{margin-top:20px}.lockedpanel form .btn{display:block;margin-top:10px}.signinpanel{width:780px;margin:10% auto 0 auto}.signinpanel .logopanel{float:none;width:auto;padding:0;background:none}.signinpanel .signin-info ul{list-style:none;padding:0;margin:20px 0}.signinpanel .signin-info a{color:#333}.signinpanel .form-control{display:block;margin-top:15px}.signinpanel .uname{background:#fff url(/images/user.png) no-repeat 95% center}.signinpanel .pword{background:#fff url(/images/locked.png) no-repeat 95% center}.signinpanel .btn{margin-top:15px}.signinpanel form{background:rgba(255,255,255,0.2);border:1px solid #ccc;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.signinpanel form a{color:#666}.signuppanel{margin:5% auto 0 auto;width:780px}.signuppanel .row{margin-left:-5px;margin-right:-5px}.signuppanel .logopanel{float:none;width:auto;padding:0;background:none}.signuppanel .col-sm-6,.signuppanel .col-sm-5,.signuppanel .col-sm-3,.signuppanel .col-sm-4{padding-left:5px;padding-right:5px}.signuppanel .signup-info{padding-right:20px}.signuppanel form{background:rgba(255,255,255,0.2);border:1px solid #ccc;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding:30px}.feat-list{margin-top:20px}.feat-list .fa{font-size:20px;border:2px solid #636e7b;padding:4px 5px;-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;float:left}.feat-list h4{margin-left:45px;padding-top:3px}.feat-list p{margin-left:45px}.signup-footer{border-top:1px solid #ddd;margin-top:30px;padding-top:10px;font-size:12px}.leftpanel-collapsed .logopanel{display:none}.leftpanel-collapsed .headerbar{margin-left:-50px}.leftpanel-collapsed .leftpanel{width:50px;top:50px}.leftpanel-collapsed .leftpanelinner{padding:0}.leftpanel-collapsed .leftpanelinner .sidebartitle{display:none}.leftpanel-collapsed .nav-bracket{margin:5px}.leftpanel-collapsed .nav-bracket li a{text-align:center;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;padding:10px;position:relative}.leftpanel-collapsed .nav-bracket>li>a:hover{border-radius:2px 0 0 2px}.leftpanel-collapsed .nav-bracket>li.nav-parent>a{background-image:none}.leftpanel-collapsed .nav-bracket>li>a>span:last-child{position:absolute;background:#fff;padding:10px 10px 10px 5px;left:40px;top:0;min-width:209px;text-align:left;z-index:100;display:none;-moz-box-shadow:0 3px 0 rgba(12,12,12,0.03);-webkit-box-shadow:0 3px 0 rgba(12,12,12,0.03);box-shadow:0 3px 0 rgba(12,12,12,0.03);-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.leftpanel-collapsed .nav-bracket>li>a .badge{display:none}.leftpanel-collapsed .nav-bracket>li.active>a>span:last-child{-moz-border-radius:0 2px 0 0;-webkit-border-radius:0 2px 0 0;border-radius:0 2px 0 0}.leftpanel-collapsed .nav-bracket ul{display:none}.leftpanel-collapsed .nav-bracket>li.nav-hover>a{background:#fff;color:#1d2939}.leftpanel-collapsed .nav-bracket>li.nav-hover.active>a{background:#1CAF9A;color:#fff}.leftpanel-collapsed .nav-bracket>li.nav-hover>a>span:last-child{display:block}.leftpanel-collapsed .nav-bracket>li.nav-hover.active>a>span:last-child{background:#1CAF9A;color:#fff}.leftpanel-collapsed .nav-bracket li.nav-hover ul{display:block;position:absolute;top:41px;left:45px;margin:0;min-width:204px;background:#1d2939;z-index:100;-moz-border-radius:0 0 2px 0;-webkit-border-radius:0 0 2px 0;border-radius:0 0 2px 0}.leftpanel-collapsed .nav-bracket ul a{text-align:left;padding:6px 10px;padding-left:0}.leftpanel-collapsed .nav-bracket ul a:hover{background:none}.leftpanel-collapsed .nav-bracket li a i{margin-right:0}.leftpanel-collapsed .mainpanel{margin-left:50px}.leftpanel-collapsed .infosummary{display:none}.leftpanel-collapsed .sticky-leftpanel{overflow-y:visible}.leftpanel-collapsed .nav-bracket .children{display:none}.chat-view{margin-right:240px}.rightpanel{width:240px;height:100%;position:fixed;overflow-y:auto;overflow-x:hidden;top:0;right:-240px;display:none}.chat-view .rightpanel{display:block;right:0}.chat-relative-view{right:240px}.chat-relative-view .rightpanel{display:block;right:0}.rightpanel,.rightpanel label{color:#999}.rightpanel .nav-tabs{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;background:#131d29;position:fixed;width:240px}.rightpanel .nav-tabs>li{display:table-cell;width:1%}.rightpanel .nav-tabs>li>a{padding:15px 20px 16px 20px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;color:rgba(255,255,255,0.5)}.rightpanel .nav-tabs>.active>a,.rightpanel .nav-tabs>.active>a:hover,.rightpanel .nav-tabs>.active>a:focus{background:#1D2939;color:#fff}.rightpanel .tab-content{background:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;margin-top:45px}.chatuserlist{list-style:none;padding:0;border-bottom:1px dotted rgba(255,255,255,0.05)}.chatuserlist li{border-top:1px dotted rgba(255,255,255,0.05)}.chatuserlist .media-thumb{-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;border:2px solid #999;padding:3px;display:block}.chatuserlist .media{margin:10px 0;padding:0}.chatuserlist .online .media-thumb{border-color:#1CAF9A}.chatuserlist .media-object{width:30px;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px}.chatuserlist .media-body{line-height:normal;padding-top:7px}.chatuserlist .media-body small{color:#666;display:block}.chatuserlist .media-body strong{color:#bbb;font-size:13px;margin-bottom:4px;display:block}.chatuserlist .badge{margin-top:5px}.rightpanel .pane-settings{font-size:13px}.horizontal-menu{margin:0}.horizontal-menu .menutoggle{display:none}.horizontal-menu .leftpanel{display:none}.horizontal-menu .mainpanel{margin:0;width:100%;overflow:hidden}.horizontal-menu.chat-view .mainpanel{margin-left:-240px}.headerbar .logopanel{float:left;width:240px;border-right:1px solid #eee}.horizontal-menu.chat-view .navhor-bracket{padding:0}.headerbar .topnav{float:left;margin:0}.headerbar .topnav>ul{padding:0;margin:0;float:left}.headerbar .topnav>ul>li{margin:0;float:left}.headerbar .topnav>ul>li>a{padding:15px 15px 12px 15px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;text-transform:uppercase;font-size:12px;color:#666;font-family:'LatoBold', sans-serif}.headerbar .topnav>ul>li>a:hover,.headerbar .topnav>ul>li>a:focus,.headerbar .topnav>ul>li.open>a,.headerbar .topnav>ul>li.active>a{box-shadow:0 3px 0 #1CAF9A;color:#1CAF9A;background:none}.headerbar .topnav>ul>li>a i{margin-right:5px}.headerbar .topnav>ul>li>a .badge{margin-left:10px}.headerbar .topnav>ul>li .dropdown-menu{margin-top:2px;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.headerbar .topnav>ul>li .dropdown-menu>li>a{padding:6px 10px;font-size:13px}.headerbar .topnav>ul>li .dropdown-menu>li>a:hover{background:#1CAF9A;color:#fff}.headerbar .topnav>ul>li .dropdown-menu i{display:none}.fixed{background:#c9cccf}.fixed section{margin:auto;max-width:1050px;position:relative;background:#1D2939}.fixed .rightpanel{background:#1D2939}.fixed-noleft .leftpanel{display:none}.fixed-noleft .mainpanel{margin-left:0}.fixed-noleft.chat-view .headerbar{margin-left:0}.fixed-noleft.chat-view .logopanel{display:block}.fixed-noleft .menutoggle{display:none}.bs-example-modal-panel .modal-content{background:none}.modal-photo-viewer{margin-top:0;margin-bottom:0;top:50%;left:50%;width:auto;position:absolute}.modal-photo-viewer .modal-content{position:relative;width:900px;height:600px;margin-left:-50%;margin-top:-300px}.modal-photo-viewer .modal-photo-left,.modal-photo-viewer .modal-photo-right{padding:0}.modal-photo-viewer .modal-photo-left{background:#000}.modal-photo-viewer .modal-photo{top:50%;position:relative}.modal-photo-viewer .row{margin-left:0;margin-right:0}.modal-photo-viewer .img-responsive{max-height:600px;margin:auto}.media-details{padding:20px}.media-details .categ{font-size:11px}.media-details .media-title{margin:0;margin-bottom:10px;color:#333;font-size:20px}.media-details p{font-size:13px}.media-details .details{margin-top:20px}.media-details .details h4{font-size:12px;color:#333;text-transform:uppercase;font-family:'LatoBold'}.media-details .table{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.media-details .table tr td{padding:3px 0;font-size:13px;background:none}.table-primary thead tr th{background:#428BCA}.table-success thead tr th{background:#1CAF9A}.table-warning thead tr th{background:#F0AD4E}.table-danger thead tr th{background:#D9534F}.table-info thead tr th{background:#5BC0DE}.table-dark thead tr th{background:#1D2939}.table.table-primary thead tr th,.table.table-success thead tr th,.table.table-danger thead tr th,.table.table-warning thead tr th,.table.table-info thead tr th,.table.table-dark thead tr th{color:#fff;border-bottom:0}.table-bordered.table-primary thead tr th,.table-bordered.table-success thead tr th,.table-bordered.table-warning thead tr th,.table-bordered.table-danger thead tr th,.table-bordered.table-info thead tr th,.table-bordered.table-dark thead tr th{border-color:rgba(255,255,255,0.2)}.panel .panel-table{padding:0}.panel-table .table{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;margin:0}.table-buglist thead tr th:first-child,.table-buglist tbody tr td:first-child{text-align:center;width:30px}.table-buglist .fa{cursor:pointer}.table-buglist .fa-bug{color:#D9534F}.table-buglist .fa-magic{color:#1CAF9A}.table-buglist .btn-group{margin:0}.table-buglist .btn-group .dropdown-toggle{color:#999;cursor:pointer}.table-buglist .btn-group .dropdown-toggle:hover{color:#666}.bug-key-title{margin:0;margin-bottom:5px}.dropdown-menu-head{background:#fff}.dropdown-menu-head .title{background:#1d2939;color:#94989d;padding:15px;text-transform:uppercase;font-size:11px;margin:0}.tp-icon{padding:10px 20px;line-height:20px;border-color:#ddd;position:relative}.tp-icon .badge{position:absolute;font-size:10px;font-weight:normal;right:4px;top:10px;line-height:13px;background-color:#D9534F;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;padding:2px 5px}.chosen-container-single .chosen-single div{width:30px;border-left:1px solid #ccc;background:#e4e7ea}.chosen-container-single .chosen-single div b{background:url(/images/dropdown-arrow.png) no-repeat 8px 15px}.chosen-container-active.chosen-with-drop .chosen-single div{width:30px;border-left:0;background:#fff}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:8px -33px}.bootstrap-timepicker-widget.dropdown-menu{width:230px}.colorpicker-input{width:200px;float:left}.colorselector{margin-top:4px}.stickyheader .logopanel{position:fixed;top:0;left:0;width:240px;z-index:100}.stickyheader .leftpanel{top:50px}.stickyheader .sticky-leftpanel{top:0}.stickyheader .sticky-leftpanel .leftpanelinner{margin-top:55px}.stickyheader .headerbar{position:fixed;top:0;left:240px;width:100%;z-index:100;box-shadow:0 1px rgba(0,0,0,0.05)}.stickyheader .mainpanel{padding-top:50px}.stickyheader .header-right{margin-right:240px}.stickyheader.leftpanel-collapsed .headerbar{left:50px}.stickyheader.leftpanel-collapsed .header-right{margin-right:0}.stickyheader.chat-view .headerbar{right:240px;width:auto}.mb5{margin-bottom:5px}.mb10{margin-bottom:10px}.mb15{margin-bottom:15px}.mb20{margin-bottom:20px}.mb30{margin-bottom:30px}.mb40{margin-bottom:40px}.mr5{margin-right:5px}.mr10{margin-right:10px}.mr20{margin-right:20px}.mr30{margin-right:30px}.mt5{margin-top:5px}.mt10{margin-top:10px}.nomargin{margin:0}.noshadow{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.border-right-0{border-right:0}.border-left-0{border-left:0}.nopadding{padding:0 !important}.padding-top-0{padding-top:0}.padding5{padding:5px}.padding10{padding:10px}.serif{font-family:'Georgia, serif'}.italic{font-style:italic}.dark{color:#333}.width100p{width:100%}.width20{width:20px}.width30{width:30px}.inblock{display:inline-block}@media screen and (max-width: 1024px){body{position:relative}.leftpanel{display:none}.mainpanel{margin-left:0;width:100%}.leftpanel-collapsed .leftpanel{display:none}.leftpanel-collapsed .mainpanel{margin-left:0}.leftpanel-collapsed .headerbar{margin-left:0}.leftpanel-show section{overflow-x:hidden}.leftpanel-show .leftpanel{display:block}.leftpanel-show .mainpanel{margin-left:240px}.stickyheader .headerbar{left:0}.stickyheader.leftpanel-show .headerbar{left:240px}.stickyheader.chat-relative-view .headerbar{right:240px;left:auto}.stickyheader .header-right{margin-right:0}.btn-demo{margin-bottom:20px}.leftpanelinner{padding:5px 10px}.leftpanelinner .searchform input{background:#131b26;border:0}.nav-horizontal{position:relative}.horizontal-menu .menutoggle{display:block}.horizontal-menu .headerbar .logopanel{display:none}.nav-horizontal .caret{display:none}.horizontal-menu .header-left,.horizontal-menu .topnav{float:none}.horizontal-menu-sidebar .header-left,.horizontal-menu-sidebar .topnav{float:none}.fixed-noleft .menutoggle{display:block}.fixed-noleft .headerbar .logopanel{display:none}.fixed-noleft .header-left,.fixed-noleft .topnav{float:none}}@media screen and (max-width: 767px){.searchform{position:relative}.headermenu li:nth-child(4){display:none}.leftpanel .searchform,.leftpanel .userlogged{display:block}.breadcrumb-wrapper{display:none}.headermenu .dropdown-menu:after{display:none}.rightpanel .nav-tabs.nav-justified>li>a,.rightpanel .nav-justified>li>a{margin-bottom:0}.panel-email .col-sm-3{display:none}}@media screen and (max-width: 640px){.notfoundpanel{width:auto;padding:0 20px}.notfoundpanel h1{font-size:72px;line-height:72px}.notfoundpanel h3{font-size:14px;line-height:normal}.notfound h4{font-size:12px;line-height:18px}.notfoundpanel form{width:auto}.notfoundpanel .form-control{float:none;width:100%}.notfoundpanel .btn{margin-top:10px;width:100%}.signinpanel,.signuppanel{margin:0 auto;width:480px;padding:20px}.signinpanel form{margin-top:20px}.signup-footer{margin-bottom:10px}.signuppanel .form-control{margin-bottom:10px}.signup-footer .pull-left,.signup-footer .pull-right{float:none !important;text-align:center}.widget-quick-status-post .nav-tabs.nav-justified>li{display:table-cell;width:1%;margin-bottom:-5px}.widget-quick-status-post .nav-tabs.nav-justified>li a{margin:0}.nav-tabs.nav-justified.nav-profile>li{float:none;margin-bottom:0;display:table-cell;width:1%}.nav-tabs.nav-justified.nav-profile>li a{margin:0;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.dataTables_info{float:none !important;text-align:center;margin-bottom:10px}.dataTables_paginate{margin-bottom:10px;text-align:center !important;float:none !important}.paginate_disabled_previous,.paginate_enabled_previous,.paginate_disabled_next,.paginate_enabled_next{float:none !important}.dataTables_filter,.dataTables_length{float:none !important;padding:10px 0 0 10px;margin:auto !important;display:inline-block}.table.dataTable th,.table.dataTable td{font-size:13px;min-width:150px}.paging_full_numbers{min-width:500px;margin:0 0 10px 10px}.paging_full_numbers:after{clear:both;display:block;content:''}}@media screen and (max-width: 480px){.signinpanel,.signuppanel{width:360px}.panel-email .pull-right{float:none !important}.pageheader h2{font-size:18px}.pageheader .glyphicon,.pageheader .fa{font-size:18px}.pageheader h2 span{font-size:11px}.fc-header td{display:block !important;text-align:center;width:100%;border:1px solid #eee;padding:10px !important;margin-top:-1px}.fc-button{padding:2px 5px !important;margin:0 !important}.fc-header-title h2{margin:0 !important}.filemanager-options li{padding:5px 7px}.filemanager-options .filter-type{display:block;float:none;border-top:1px solid #eee}.comment-list .media-object{width:30px;padding:2px}.comment-list .media>.pull-left{margin:0}.comment-list h4{font-size:13px}.comment-list .reply{font-size:10px;padding:2px 5px}.comment-list .media-body{font-size:12px;line-height:18px}.blog-content form{margin-bottom:20px}.letter-list{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.letter-list::after{clear:both;display:block;content:''}.letter-list li{float:left;width:auto;display:inline-block}.letter-list li a{display:block;padding:2px 5px}.btn-invoice:before{display:block;content:'';clear:both}.btn-invoice .btn{display:block;width:100%;margin-top:10px}.nav-tabs.nav-justified.nav-profile>li a{font-size:13px;padding:14px 10px}#bloglist>div{padding:0;margin:0;float:none;width:auto}}@media screen and (max-width: 360px){.pageheader h2 span{display:none}.blog-title{font-size:14px;line-height:18px}.blog-summary{font-size:12px;line-height:18px}.blog-summary .btn{padding:2px 5px;display:block;width:100%}.headermenu li:first-child .dropdown-menu{margin-right:-130px}.headermenu li:nth-child(2) .dropdown-menu{margin-right:-85px}.headermenu li:nth-child(3) .dropdown-menu{margin-right:-37px}.nav-tabs.nav-justified.nav-profile>li{float:none;display:block;width:auto}.blog-media .media-body{overflow:visible}.follower-list .btn{display:block;margin:0 0 5px 0;width:100%}.filemanager-options li{display:block;border-top:1px solid #eee}.filemanager-options li:first-child{border-top:0}.authorpanel .media-object{width:80px;margin-right:10px}.people-item .media-object{width:80px !important;height:80px !important}.pagination{margin-bottom:20px}}@media screen and (max-width: 320px){.signinpanel,.signuppanel{width:310px}}.toggle-slide{overflow:hidden;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;direction:ltr}.toggle-slide .toggle-on,.toggle-slide .toggle-off,.toggle-slide .toggle-blob{float:left}.toggle-slide .toggle-blob{position:relative;z-index:99;cursor:hand;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.toggle-slide{overflow:hidden;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;direction:ltr}.toggle-slide .toggle-on,.toggle-slide .toggle-off,.toggle-slide .toggle-blob{float:left}.toggle-slide .toggle-blob{position:relative;z-index:99;cursor:hand;cursor:grab;cursor:-moz-grab;cursor:-webkit-grab}.toggle-default .toggle-slide{border:1px solid #ccc}.toggle-default .toggle-slide.active{border-color:#999}.toggle-default .toggle-slide .toggle-on,.toggle-default .toggle-slide .toggle-off,.toggle-default .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-default .toggle-slide .toggle-on,.toggle-default .toggle-select .toggle-inner .active{background:#999;color:#fff}.toggle-default .toggle-slide .toggle-off,.toggle-default .toggle-select .toggle-on{color:#666;background:#f7f7f7}.toggle-default .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #ccc}.toggle-default .toggle-slide.active .toggle-blob{border-left:1px solid #999;border-right:0}.toggle-default .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-primary .toggle-slide{border:1px solid #999}.toggle-primary .toggle-slide.active{border-color:#357EBD}.toggle-primary .toggle-slide .toggle-on,.toggle-primary .toggle-slide .toggle-off,.toggle-primary .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-primary .toggle-slide .toggle-on,.toggle-primary .toggle-select .toggle-inner .active{background:#428BCA;color:#fff}.toggle-primary .toggle-slide .toggle-off,.toggle-primary .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-primary .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-primary .toggle-slide.active .toggle-blob{border-left:1px solid #357EBD;border-right:0}.toggle-primary .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-success .toggle-slide{border:1px solid #999}.toggle-success .toggle-slide.active{border-color:#1CAF9A}.toggle-success .toggle-slide .toggle-on,.toggle-success .toggle-slide .toggle-off,.toggle-success .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-success .toggle-slide .toggle-on,.toggle-success .toggle-select .toggle-inner .active{background:#1CAF9A;color:#fff}.toggle-success .toggle-slide .toggle-off,.toggle-success .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-success .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-success .toggle-slide.active .toggle-blob{border-left:1px solid #4CAE4C;border-right:0}.toggle-success .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-warning .toggle-slide{border:1px solid #999}.toggle-warning .toggle-slide.active{border-color:#EEA236}.toggle-warning .toggle-slide .toggle-on,.toggle-warning .toggle-slide .toggle-off,.toggle-warning .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-warning .toggle-slide .toggle-on,.toggle-warning .toggle-select .toggle-inner .active{background:#F0AD4E;color:#fff}.toggle-warning .toggle-slide .toggle-off,.toggle-warning .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-warning .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-warning .toggle-slide.active .toggle-blob{border-left:1px solid #EEA236;border-right:0}.toggle-warning .toggle-slide .toggle-blob:hover{background:#fcfcfc}.toggle-danger .toggle-slide{border:1px solid #999}.toggle-danger .toggle-slide.active{border-color:#D43F3A}.toggle-danger .toggle-slide .toggle-on,.toggle-danger .toggle-slide .toggle-off,.toggle-danger .toggle-slide .toggle-blob{font-size:11px;font-weight:500}.toggle-danger .toggle-slide .toggle-on,.toggle-danger .toggle-select .toggle-inner .active{background:#D9534F;color:#fff}.toggle-danger .toggle-slide .toggle-off,.toggle-danger .toggle-select .toggle-on{color:#fff;background:#bbb}.toggle-danger .toggle-slide .toggle-blob{background:#fff;border-right:1px solid #999}.toggle-danger .toggle-slide.active .toggle-blob{border-left:1px solid #D43F3A;border-right:0}.toggle-danger .toggle-slide .toggle-blob:hover{background:#fcfcfc}.input-group.exclusion{margin-top:4px}.input-group-btn.add-exclusion a:last-child{margin-top:4px}.ipset-contents-editor{min-height:300px}.ui-menu .ui-menu-item a,.ui-menu .ui-menu-item a:active,.ui-menu .ui-menu-item a:focus,.ui-menu .ui-menu-item a:hover{color:#2f4f4f}.ui-autocomplete{max-height:181px;border:1px solid #ccc;overflow-y:auto;overflow-x:hidden;background-color:#fff}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{margin:0px;background:url("/images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;color:#2f4f4f}html{position:absolute;width:100%;height:100%;margin:0;padding:0}body{overflow-y:scroll;width:100%;height:100%;margin:0;padding:0}.start-editing:hover,.stop-editing:hover,.add-object:hover{cursor:pointer;text-decoration:underline}.control-icons .fa{cursor:pointer}.object.is-edited>.form-area{margin-left:-15px;margin-right:-15px;background-color:#f5f5f5;-webkit-border-radius:5px;border-radius:5px}.object.is-edited>.form-area>.row{margin-left:0;margin-right:0}.object.is-edited>.form-area form{margin:15px 0}.object.is-edited>.form-area .control-label{text-align:left}.object.is-edited>.form-area .form-control{font-size:18px}.user .avatar{display:inline-block;vertical-align:middle;width:30px;height:30px;overflow:hidden;-webkit-border-radius:5px;border-radius:5px;margin-right:4px}.user .avatar img{max-width:30px}.user .name{vertical-align:middle}.user .party{vertical-align:middle}.align-middle{vertical-align:middle}.add-objects-wrapper{margin:10px 0}.add-objects-wrapper .results{margin-bottom:15px}.add-objects-wrapper .results .user:hover{cursor:pointer}.add-objects-wrapper .results .user:hover .name{text-decoration:underline}.object.placeholder{background-color:#f0f0f0}.object-list ul li{padding:0}.object-list ul a{display:block;padding:15px 20px}.object-list ul a:hover{text-decoration:none}.object-list ul a:hover .sender{text-decoration:underline}.object-list ul a,.object-list ul a:link,.object-list ul a:visited,.object-list ul a:active{color:#636e7b}.splash-screen .row{margin-top:150px}.splash-screen .error-container{line-height:45px;font-size:16px;padding:0 15px}.equiwidth{min-width:110px}.fake-input-group .input-group-addon{border:1px solid #ccc;-webkit-border-radius:2px;border-radius:2px}.fake-input-group .fake-input{height:42px}.dashed{border-bottom:1px dashed #428bca;text-decoration:none}.dashed:hover{text-decoration:none;border-bottom:1px dashed #2a6496}html{height:auto}body{background-color:#e4e7ea}.navbar-main{background-color:#fff;border:0}.navbar-main .navbar-form{margin-top:7px;margin-bottom:6px}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{background-color:#e4e7ea}.input-group .btn{padding-top:9px;padding-bottom:9px}.input-group .btn-near-select{padding-top:7px;padding-bottom:7px}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span,.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:default}legend{padding-bottom:3px;margin-bottom:10px}.chosen-choices,.chosen-single{padding:4px !important}.chosen-single{padding-left:8px !important;padding-right:8px !important;line-height:32px !important}.chosen-container-single .chosen-single abbr{top:12px;right:34px}.chosen-disabled{opacity:1 !important}.chosen-disabled .chosen-choices{background-color:#eee}.chosen-disabled .chosen-choices li.search-choice{background-color:#dedede}.chosen-disabled .chosen-single{background-color:#eee}.chosen-disabled .chosen-single div{opacity:0.65}div.error{color:#a94442;margin-top:5px;margin-bottom:10px}.nav>li>a{font-family:'LatoBold'}select{-webkit-appearance:menulist-button}.panel-heading p{margin-top:5px}legend{font-size:17px}.signin,.signup{width:320px;padding:10px}.signin .sign-in-with-google,.signup .sign-in-with-google{width:100%}.signin p,.signup p{text-align:center;padding:0;margin:0 0 4px 0}.signin label.error,.signup label.error{color:#e24333 !important;padding:0 8px 4px}.navbar-brand{padding:5px}#nightMode{display:none}#nightMode:not(*:root){display:block}.not-found .pad{width:400px;margin:100px auto}.results>thead>tr>th:first-child,.results>tbody>tr>th:first-child,.results>tfoot>tr>th:first-child,.results>thead>tr>td:first-child,.results>tbody>tr>td:first-child,.results>tfoot>tr>td:first-child{padding-left:15px}.results>thead>tr>th:last-child,.results>tbody>tr>th:last-child,.results>tfoot>tr>th:last-child,.results>thead>tr>td:last-child,.results>tbody>tr>td:last-child,.results>tfoot>tr>td:last-child{padding-right:15px}.results form .form-group:last-child{margin-bottom:15px}.results form .form-group:last-child .btn-group{margin-bottom:0}.results .options-form>*{margin-top:7px;margin-bottom:7px}.results .options-form .controlsForTheHeartOfTheSun+fieldset{margin-top:10px}.results .options-form fieldset+.controlsForTheHeartOfTheSun{margin-top:10px}.results .pager{margin-top:0}.results .dropdown-toggle{cursor:pointer}.results .results-buttons{margin-top:10px;margin-bottom:10px}.results .results-buttons .btn-group{margin:0}.results .fieldset-toggle{cursor:pointer}.results .secondary-controls .interface-toggle-btn-group{display:none}.results *[data-toggle='popover']{margin-left:5px}.query-display{display:block;margin:10px 0;white-space:pre-line}.results-scroller{overflow:visible}.results-table{white-space:nowrap}.results-table>tbody>tr.highlighted>td,.results-table>tbody>tr.highlighted>th{background-color:#f5f5f5}.results-table thead th{cursor:pointer}.display-fields-block .checkbox{width:150px;height:25px;float:left;margin-top:0 !important}.num-recs{width:auto;display:inline;padding:8px;border:1px solid #ddd;color:#636e7b}.extras{margin-bottom:10px;text-align:center}.extras a{margin:0 5px}input-group.bin-time{margin-top:10px}input.stats-radio-input{width:60px}.bin-time{border-left:2px solid #563d7c}.rwstats-parameters .direction-input-group .btn-group{width:100%}.rwstats-parameters .direction-input-group .btn-group .btn{width:50%}.rwstats-parameters .input-group-addon label{vertical-align:top;margin:0 !important}.rwstats-parameters .input-group-addon.equisize-input-group-addon label{min-width:80px;text-align:left}.tuple-contents-editor{min-height:300px}.container-xs-height{display:table;padding-left:0px;padding-right:0px}.row-xs-height{display:table-row}.col-xs-height{display:table-cell;float:none}@media (min-width: 768px){.container-sm-height{display:table;padding-left:0px;padding-right:0px}.row-sm-height{display:table-row}.col-sm-height{display:table-cell;float:none}}@media (min-width: 992px){.container-md-height{display:table;padding-left:0px;padding-right:0px}.row-md-height{display:table-row}.col-md-height{display:table-cell;float:none}}@media (min-width: 1200px){.container-lg-height{display:table;padding-left:0px;padding-right:0px}.row-lg-height{display:table-row}.col-lg-height{display:table-cell;float:none}}.col-top{vertical-align:top}.col-middle{vertical-align:middle}.col-bottom{vertical-align:bottom}.dragtable-drag-handle{cursor:move}.dragtable-drag-wrapper{position:absolute;z-index:1000}.dragtable-drag-wrapper .dragtable-drag-col{opacity:0.7;filter:alpha(opacity=70);cursor:move}.dragtable-col-placeholder{border-left:1px dotted black;border-right:1px dotted black;color:#EFEFEF;background:#EFEFEF !important;visibility:visible !important}table .dragtable-col-placeholder:first{border-top:1px dotted black}.dragtable-col-placeholder *{opacity:0.0;visibility:hidden}.dragtable-col-placeholder{color:transparent !important}html{position:relative;min-height:100%}body{margin-bottom:60px}.footer{position:absolute;bottom:0;width:100%;height:45px}
\ No newline at end of file
diff --git a/private/bundle/programs/web.browser/app/images/logo.png b/private/bundle/programs/web.browser/app/images/logo.png
index d401103..b61e827 100644
Binary files a/private/bundle/programs/web.browser/app/images/logo.png and b/private/bundle/programs/web.browser/app/images/logo.png differ
diff --git a/private/bundle/programs/web.browser/1e322250cb8e06a7df65d83b477136b7bbff504f.js b/private/bundle/programs/web.browser/b55cd89ecbf81d1372b4e1ed02e0e2ca813ec38f.js
similarity index 95%
rename from private/bundle/programs/web.browser/1e322250cb8e06a7df65d83b477136b7bbff504f.js
rename to private/bundle/programs/web.browser/b55cd89ecbf81d1372b4e1ed02e0e2ca813ec38f.js
index 260d81b..f75a265 100644
--- a/private/bundle/programs/web.browser/1e322250cb8e06a7df65d83b477136b7bbff504f.js
+++ b/private/bundle/programs/web.browser/b55cd89ecbf81d1372b4e1ed02e0e2ca813ec38f.js
@@ -196,7 +196,7 @@ Router=Package["iron:router"].Router,RouteController=Package["iron:router"].Rout
!function(){Template.__checkName("controlsForTheHeartOfTheSun"),Template.controlsForTheHeartOfTheSun=new Template("Template.controlsForTheHeartOfTheSun",function(){var a=this;return HTML.DIV({"class":"controlsForTheHeartOfTheSun"},HTML.DIV({"class":"btn-group"},HTML.BUTTON({"class":function(){return["execute"," ","btn"," ","btn-default"," ",Blaze.If(function(){return Spacebars.call(Spacebars.dot(a.lookup(".."),"isDashboard"))},function(){return"btn-xs"})]},type:"submit"},Blaze.If(function(){return Spacebars.call(a.lookup("isOutputStale"))},function(){return HTML.I({"class":["fa"," ","fa-fw"," ","fa-spinner"," ","fa-spin"]})},function(){return HTML.I({"class":["fa"," ","fa-fw"," ","fa-search"]})}),"\n",["Execute ",Blaze.View(function(){return Spacebars.mustache(a.lookup("executingIntervalString"))})]),"\n",HTML.BUTTON({"class":function(){return["btn"," ","btn-default"," ","dropdown-toggle"," ",Blaze.If(function(){return Spacebars.call(Spacebars.dot(a.lookup(".."),"isDashboard"))},function(){return"btn-xs"})]},type:"button","data-toggle":"dropdown"},HTML.Raw(''),"\n",HTML.Raw('Toggle Dropdown')),"\n",HTML.UL({"class":"dropdown-menu",role:"menu"},HTML.Raw('
FlowBAT\n is a graphical flow-based analysis tool. Utilizing the power and versatility of network flow records,\nFlowBAT\n can help provide visibility for network administrators and network security practitioners.
\nWhether you are a seasoned pro at using flow data or brand new to it, FlowBAT provides a user experience that should make it easy to rapidly track connections in to and out of your network. This includes
\nFlowBAT\nTech\nCount\nTech\nInstallation\nInitial Configuration
\n- SiLK Site Configuration File\n- SiLK Root Directory\n- Temporary Storage Directory
\n- Filters\n- Exclusions\n- Stats\n- Count\n- IP Sets\n- Tuple Files\n- PCAP Analysis\n- RWF Analysis
\n- Dashboard\n- Quick Query\n- Saved Queries\n- IP Sets\n- Tuple Files\n- Night Mode\n- Configuration Settings\n- User Administration\n- SiLK Server Administration\n- Help
\nFlowBAT\n is written in Node.js using the Meteor framework. It is designed to work along side an existing\nSiLK\n-based NetFlow system, or to be installed in conjunction with one.\nFlowBAT\n was written with ease of installation and deployment in mind.
\nIf you’re reading this, you probably already succeeded at installing\nFlowBAT\n. However, if you are perhaps not the installer and are looking to check out what went into getting this running, check out the\ninstallation\n documentation. It was probably just two scripts and maybe some manually configuration editing of sensor.conf and silk.conf.
\nThis is the main configuration file that SiLK uses to interpret your sensor deployment. If you’ve installed using the scripts provided at\nFlowBAT\n.com then it is /data/silk.conf
\nThis is the directory where you are storing flow data on the SiLK server. If you’ve installed using the scripts provided at\nFlowBAT\n.com then it is /data/
\nThis is where temporary files, sets, rwf files, and generally anything else that FlowBAT needs to make and use later will be stored. It is easy to want to use /tmp/ as the directory but due to how the filesystem cleans it up regularly, it is not recommended. Instead, create a directory that you can manually control if needed.
\nFlowBAT\n can be used to search for flows, perform stats against user defined bins of flow data, or it can be used to count flows of a certain type and put them in timebased bins for a time based analysis. The record results are presented as a customizable table where columns can be moved around via mouse, and fields can be removed using selection boxes below the table. Single clicking a column will all data on the table in an ascending or descending order based on the column clicked. Every value in the table has a pivot capability when clicked. For instance, timestamps can be used to further customize the filter by adding a “Before/After 1 minute” to the filter simply by clicking and pivoting off of the user selected time in the table. IP addresses have lookup features in Robtex. More sources are being added via updates.\nStats\n and\nCount\n output types can be presented as either a table or a chart.\nStats\n is based on\nrwstats\n and the tables have limited pivoting available for\nStats Fields\n.\nCount\n is based on\nrwcount\n and has static table output as well as line chart output. For more details on\nStats\n and\nCount\n usage, see below.
\nThe most common usage of FlowBAT will be to use filters to search for specific flows from a SiLK datastore. The syntax for a query is implicitly “AND”, meaning that every record in a result will be a match of the combined result of all user provided options in the query. The goal is always to narrow down to smaller results via\nfilters\n, and then you can do more specific carving using\nexclusions\n. Lets say that you are looking for traffic where either address is 192.168.1.15. Your filter will be as simple as:
\n--any-address=192.168.1.15 --type=all
\nThe\nany-address\n option says to look for 192.168.1.15 in source or destination IP address fields. The\ntype\n option is an input option that states that we want to look in all forms of traffic whether it is inbound, outbound, or internal to internal traffic. In this case the\ntype\n is redundant though due to liberties taken in FlowBAT to meet more common user use cases. We default to “all” for the\ntype\n field. See “Other Notes” at the end of this documentation for more detail.
\nExclusions\n are used to narrow a filter’s results. Think of exclusions as doing an equal and opposite feature of filtering. Assume that you have a fair amount of SSH traffic and Google Hangouts traffic that is overwhelming a specific search. Hypothetically the following exclusion would remove records from the results that have [a source IP address of 192.168.1.15 and a source address of port 22] OR [UDP records with some local source IP addresses that looks like Google Hangouts traffic on ports 19302 through 19309]. You could write an exclusion as such:
\n--saddress=192.168.1.15 --sport=22 OR --protocol=17 --scidr=192.168.0.0/16 --dcidr=173.194.0.0/16,74.125.0.0/16 --aport=19302-19309
\nIf you’re wanting to look for large groupings of IP addresses, you’ll want to generate IP sets. Please refer to the “IP Sets” section for more information. When filters alone won’t accomplish some goals of pulling very specific 5-tuple combinations, we allow the creation of 5-tuple files for use in the query builder. See “Tuple Files” for more information.
\nStats\n is based on\nrwstats\n and is used to calculate top-n/bottom-n lists based on user definied fields and stat values.\nStats\n is best explained via examples and the best practice is usually to try to put into words what you are looking for first. For instance, you are looking for the [top 10 sIP-dIP pairs by bytes]. In this case you would specify “Top”, “Count=10”, select Source IP and Dest IP as fields, and select “Bytes” as the\nStats Value\n. Multiple\nStats Values\n can be selected as long as the value does not match the field being searched for. In the event that you are pulling muliple stat values, you’ll want to select the *Primary Stats Value" that is most important to you. The other fields will be supplementary information, but will not be the main values being used to calculate against.
\nTable output allows for pivoting on certain\nstats fields\n but not on\nstats values\n. You can select between bar, column, and pie charts for the chart display. The chart uses a logarithmic scale due to the widely varying values when using multiple\nstats values
\nCount\n is based on\nrwcount\n and is used to summarize flow records over time, grouping record, byte, and packet counts into time bins of a user defined duration. Each row in the table output each data point on the line chart output represents one bin. If the user uses a 60 second bin size (the default is 30 seconds) this means that the total number of records/minute, bytes/minute, and packets/minute. Special considerations need to be taken when making charts with rwcount. If the time range specified is incredible long and the bin size is unreasonably small for that range, the chart will take a long time to create and it will be illegible if it actually appears. This is because you are loading the entire dataset onto one chart.
\nIP Sets\n are user defined lists of IP addresses that can be edited in the “IP Sets” tab in the navbar at the top of the screen. There you will create an IP set that can be IP addresses, CIDR ranges, or combinations of the two. Saving the results will allow you to specify those sets in the query builder under the “host” subheading. As before, selecting\nany IP set\n will add the\nanyset\n option to the query. That option looks for any match from the sets, regardless if they occur as the source or destination IP address.
\nTuple Files\n allow you to specify up to an entire 5-tuple to search for, and by default it will search in any direction. This means that if you choose to only look for communications between two addresses, you can specify them in the file as something like “192.168.1.15,8.8.8.8”. You can save as many tuples as you would like in the file (just as you did in IP Sets), but specifying the options in the query builder is slightly more complex to give you more power in filtering. Under the “additional options” subheading in the query builder you’ll find Tuple File, Tuple Direction, Tuple Delimiter, and Tuple Fields. After selecting the tuple file that you’ve created, the tuple direction refers to what order you wish to search in. Selecting “both” will search for any occurence of the tuple elements regardless of where they appear in the individual record. This is the most common use case as it accomplishes a task that isn’t easily specified in default options. After specifying direction, you need to tell FlowBAT how the tuple file is formatted. Provide the delimiter that you chose (in this example we are using a comma\n,\n), and tell FlowBAT what the elements are in the tuple. In this case, we can say\nsip,dip\n. If we’ve chosen the tuple direction to be both, this really just implies that both of the values are IP addresses. Had we chosen otherwise, the sip,dip would have more meaning. Also, had we provided the full 5-tuple we might have used\nsip,dip,sport,dport,protocol\n to define the tuple fields.
\nPCAP analysis can be performed in FlowBAT by specifying the full path of the file at either the command line FlowBAT interface or the "Additional Options" tab. See the examples at the end of this documentation for more details.
\n/home/jason/badguys.pcap --saddress=192.168.1.15 --aport=31337
\nRWF files are the binary files that SiLK tools operate on. These can also be created at the command line in cases where automation might be desired. If you need to review an rwf file in FlowBAT, simply specify it prior to the rest of the filter.
\n/home/jason/IOT.rwf --type=out,outweb --packets=4- --ack-flag=1
\nFlowBAT\n was created to be a more user-friendly frontend for the SiLK flow analysis tool suite. Seasoned professionals will notice that many tools are not immediately available to use, but instead have been packaged together in an effort to meet the most common SiLK analysis use-cases.\nFlowBAT\n allows the user to search and filter for flow data as well as run statistics based on the outputs. The main FlowBAT Interface is divided into six main sections:
\nIf this is your first time booting up\nFlowBAT\n you might notice that the dashboard is a plain canvas. This is a place to put the output of saved queries. Those outputs might be bandwidth graphs or tables of records with interactions with malicious IP sets, or generally just anything you want. In order to make them actionable in a dashboard, you’ll want to make sure that the outputs are updated, so make sure that the intended queries have rolling times and periodic execution. At the top of the Dashboard is a quick query command interface input. This input allows for running a search spontaneously without navigating manually to other tabs. For the query builder, you will need to go to\nquick query\n or\nsaved queries\n.
\nRunning a quick query is useful when you are just doing some regular hunting or providing situational awareness upon request. If it is something that you don’t think that you will keep, then quick query is the place to go. However, in the event that you just love something you’ve found, you can go ahead and make it a saved query on the fly from the quick query page. In the event that you cannot filter exactly how you want, or perhaps there is an outlier that you also want removed, you can also provide “exclusions” which will remove data from your results. See “Basic Usage and Best Practices”. There is also a query builder that provides individual descriptions and input fields for those not verse in SiLK syntax already. Each input contains a help bubble that can assist in understanding what fields mean. Upon adding fields in the query builder, the full SiLK query itself (in red) is populated below the input parameters. New users can take note of the syntax to ween themselves off of the query builder and opt to make use of quick query for a more streamlined experience.
\nThe\nSaved Queries\n tab shows all queries that you have saved. This tab also provides the actual SiLK queries needed to replicate from the command line on the server itself (useful for those wanting to learn SiLK syntax and run automated tasks against flow data). Query names in this list are referenced when selecting outputs to display on the dashboard.
\nHere you can create an IP set that can be IP addresses, CIDR ranges, or combinations of the two. Saving the results will allow you to specify those sets in the query builder under the “host” subheading. When creating IP sets it is recommended that you leave a note descibing the set and have a unique IP set name. The name will be referenced in the query builder. See “Basic Usage and Best Practices” for more details.
\nHere you can create a tuple file (see “Basic Usage and Best Practices” for more details on these unique files). Saving the results will allow you to specify those tuples in the query builder under the “Additional options” subheading. When creating tuple files it is recommended that you leave a note descibing the file and have a unique name. The name will be referenced in the query builder. See “Basic Usage and Best Practices” for more details.
\nNight Mode changes the visual theme of FlowBAT to make it easier on the eyes in darker environments. Simple click the sun/moon symbol to toggle. Night Mode is only available on webkit enabled browsers (Chrome, Safari, Opera).
\nThese are options available to all users.
\nAdd, remove, or edit users.
\nChange initial FlowBAT configuration options such as silk.conf location, data directory, temporary storage directory, and SSH options. See “Initial Configuration” for more details.
\nYou are here.
\nSearch for all records with IP address 192.168.1.15 as either source IP or dest IP
\nFilter: --any-address=192.168.1.15
\nSearch for 192.168.1.15 but only show outbound flows
\nFilter: --any-address=192.168.1.15 --type=out,outweb
\nLook at the top 10 source-dest ip pairs with stats by bytes
\nFilter: --protocol=0-255\nStats: --top --count=10 --fields=sip,dip --values=bytes
\nLook at the top 10 list of destination country codes for outbound traffic by packets, excluding the United States, Great Britain, and private IP space
\nFilter: --protocol=0-255 --type=out,outweb\nExclusion: --dcc=US,GB,--\nStats: --top --count=10 --fields=dcc --values=packets
\nExamine a pre-made RWF file of IoT traffic to determine how much outbound data is traversing the network.
\nFilter: /home/jason/IOT.rwf --type=out,outweb --packets=4- --ack-flag=1\nCount: --bin-size=60
\nExamine a PCAP file to generate a list of the top talking sip-dip pairs by bytes.
\nFilter: /home/jason/badguys.pcap --protocol=0-255\nStats --top --count=10 --fields=sip,dip --values=bytes
\nFlowBAT\n makes every attempt at keeping most of the standards set by\nSiLK\n and only deviates when it is in the analysts best interest. The most significant change is regarding the\ntype\n default values when creating a filter. If you’re a veteran of SiLK you’ll probably know that SiLK defaults to incoming traffic as per the\nrwfilter\n documentation:
\n\nThe default-type list is determined by the value of CLASS, and the default types generally include only incoming traffic.
In our experience analysts generally intend to start searching by looking through all flows collected and as such\nwe have made “all” the default value for\ntype\n.
\nWe have also provided a script in the support folder of the project that allows the user to quickly set up an nginx proxy for https access. This script is only meant to ensure that connections made to FlowBAT are encrypted, but as with any security measures, you should customize the proxy configuration to your own liking if you desire any more than what is described here.
\nDon’t hesitate to email\nsupport\n if you have any questions or feature requests about\nFlowBAT\n. You can also submit\nissues\n if you feel inclined to submit bugs or requests via github.
\nFor more information on\nSiLK\n please see the [SiLK documentation] and for tool specific documentation, see the following
\n\nRefer to the\nlicense\n on the project page.
'))))))})}(); !function(){Template.__checkName("ipset"),Template.ipset=new Template("Template.ipset",function(){var e=this;return HTML.DIV({"class":["container-fluid"," ","ipset-default"," ","ipset"]},HTML.DIV({"class":"row"},HTML.DIV({"class":"col-xs-12"},Spacebars.With(function(){return Spacebars.call(e.lookup("ipset"))},function(){return HTML.FORM({"class":["panel"," ","panel-default"]},HTML.DIV({"class":"panel-heading"},HTML.DIV({"class":"form-group"},HTML.LABEL("IP Set Name","\n",HTML.I({"class":["fa"," ","fa-question-circle"," ","text-muted"],"data-toggle":"popover",title:"IP Set name","data-content":"This is the name that will be referenced in the query builder."})),"\n",HTML.DIV({"class":"input-group"},Blaze._TemplateWith(function(){return{family:Spacebars.call("ipset"),_id:Spacebars.call(e.lookup("_id")),property:Spacebars.call("name"),value:Spacebars.call(e.lookup("name")),isNew:Spacebars.call(e.lookup("isNew"))}},function(){return Spacebars.include(e.lookupTemplate("input"))}),"\n",HTML.DIV({"class":"input-group-btn"},HTML.BUTTON({"class":["btn"," ","btn-default"," ","dropdown-toggle"],"data-toggle":"dropdown",type:"button"},HTML.SPAN({"class":"caret"})),"\n",HTML.UL({"class":["dropdown-menu"," ","pull-right"]},HTML.LI(HTML.A({"class":"confirm",href:function(){return["/ipset/",Spacebars.mustache(e.lookup("_id")),"/remove"]},"data-confirmation":"Are you sure you want to delete this IP Set?"},HTML.I({"class":["fa"," ","fa-trash-o"]}),"\n","Delete this IP Set"))))))),"\n",HTML.DIV({"class":"panel-body"},HTML.DIV({"class":"form-group"},HTML.LABEL("Note","\n",HTML.I({"class":["fa"," ","fa-question-circle"," ","text-muted"],"data-toggle":"popover",title:"Note","data-content":"These notes are for personal use and can be quickly referenced when examining the list in the IP Sets tab in the navbar."})),"\n",Blaze._TemplateWith(function(){return{family:Spacebars.call("ipset"),_id:Spacebars.call(e.lookup("_id")),property:Spacebars.call("note"),value:Spacebars.call(e.lookup("note")),isNew:Spacebars.call(e.lookup("isNew"))}},function(){return Spacebars.include(e.lookupTemplate("textarea"))})),"\n",HTML.DIV({"class":"form-group"},HTML.LABEL("IP Addresses","\n",HTML.I({"class":["fa"," ","fa-question-circle"," ","text-muted"],"data-toggle":"popover",title:"IP addresses","data-content":"List of IP addresses or CIDR ranges. When sets are specified in the query builder (via Source IP Set, Destination IP Set, or Any IP Set), records that contain matching IP addresses will be displayed."})),"\n",Blaze._TemplateWith(function(){return{family:Spacebars.call("ipset"),_id:Spacebars.call(e.lookup("_id")),property:Spacebars.call("contents"),value:Spacebars.call(e.lookup("contents")),isNew:Spacebars.call(e.lookup("isNew"))}},function(){return Spacebars.include(e.lookupTemplate("textarea"))})),"\n",HTML.DIV({"class":"form-group"},HTML.BUTTON({"class":["btn"," ","btn-primary"],type:"submit"},"Save"),"\n",HTML.SPAN({"class":["save-notice"," ","notice"," ","text-success"]},"Successfully saved"),"\n",HTML.SPAN({"class":["create-notice"," ","notice"," ","text-success"]},"Successfully created")),"\n",Blaze.If(function(){return Spacebars.call(Spacebars.dot(e.lookup("queries"),"count"))},function(){return[HTML.HR(),HTML.H4("Queries using this IP Set"),HTML.UL(Blaze.Each(function(){return Spacebars.call(e.lookup("queries"))},function(){return HTML.LI(HTML.A({href:function(){return Spacebars.mustache(e.lookup("path"))}},Blaze.View(function(){return Spacebars.mustache(e.lookup("displayName"))})))}))]})))}))))})}(); @@ -236,13 +236,13 @@ Router=Package["iron:router"].Router,RouteController=Package["iron:router"].Rout !function(){Template.__checkName("login"),Template.login=new Template("Template.login",function(){var n=this;return[HTML.LI({"class":"dropdown"},HTML.Raw('Sign in\n'),"\n",HTML.UL({"class":"dropdown-menu"},HTML.LI(HTML.DIV({"class":"signin"},HTML.BUTTON({"class":["btn"," ","btn-primary"," ","sign-in-with-google"]},Blaze.If(function(){return Spacebars.call(n.lookup("loggingIn"))},function(){return"Signing in..."},function(){return"Sign in with Google"})),"\n",HTML.Raw("or
"),"\n",HTML.FORM({autocomplete:"off"},HTML.Raw(''),"\n",HTML.Raw(''),"\n",HTML.DIV({"class":["links"," ","clearfix"]},HTML.BUTTON({"class":["btn"," ","btn-default"],type:"submit"},Blaze.If(function(){return Spacebars.call(n.lookup("loggingIn"))},function(){return"Signing in..."},function(){return"Sign in"})),"\n",HTML.A({"class":["forgot-password"," ","pull-right"],href:"#"},Blaze.View(function(){return Spacebars.mustache(n.lookup("t"),"forms.login.passwordForgot.link")})))))))),HTML.LI({"class":"dropdown"},HTML.Raw('Sign up\n'),"\n",HTML.UL({"class":"dropdown-menu"},HTML.LI(HTML.DIV({"class":"signup"},HTML.BUTTON({"class":["btn"," ","btn-primary"," ","sign-in-with-google"]},Blaze.If(function(){return Spacebars.call(n.lookup("loggingIn"))},function(){return"Signing in..."},function(){return"Sign up with Google"})),"\n",HTML.Raw("or
"),"\n",HTML.FORM({autocomplete:"off"},HTML.Raw(''),"\n",HTML.Raw(''),"\n",HTML.Raw(''),"\n",HTML.DIV({"class":["links"," ","clearfix"]},HTML.BUTTON({"class":["btn"," ","btn-default"," ","pull-left"],type:"submit"},Blaze.If(function(){return Spacebars.call(n.lookup("loggingIn"))},function(){return"Signing up..."},function(){return"Sign up"}))))))))]})}(); -!function(){Template.__checkName("navbar"),Template.navbar=new Template("Template.navbar",function(){var a=this;return HTML.NAV({"class":["navbar"," ","navbar-default"," ","navbar-static-top"," ","navbar-main"],role:"navigation"},HTML.DIV({"class":"container-fluid"},HTML.Raw(' '),"\n",HTML.DIV({id:"top-navbar-collapse","class":["collapse"," ","navbar-collapse"]},HTML.UL({"class":["nav"," ","navbar-nav"]},Blaze.If(function(){return Spacebars.call(a.lookup("currentUser"))},function(){return[HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(a.lookup("condition"),a.lookup("currentTemplateName"),"is","dashboard")},function(){return"active"})}},HTML.A({href:"/"},"Dashboard")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(a.lookup("condition"),a.lookup("currentTemplateName"),"in","query")},function(){return Blaze.If(function(){return Spacebars.call(Spacebars.dot(a.lookup("queryObject"),"isQuick"))},function(){return"active"})})}},HTML.A({href:"/query/create/quick"},"Quick Query")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(a.lookup("condition"),a.lookup("currentTemplateName"),"in","queryList","query")},function(){return Blaze.If(function(){return Spacebars.dataMustache(a.lookup("not"),Spacebars.dot(a.lookup("queryObject"),"isQuick"))},function(){return"active"})})}},HTML.A({href:"/query/list"},"Saved Queries")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(a.lookup("condition"),a.lookup("currentTemplateName"),"in","ipsetList","ipset","ipsetCreate")},function(){return"active"})}},HTML.A({href:"/ipset/list"},"IP Sets")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(a.lookup("condition"),a.lookup("currentTemplateName"),"in","tupleList","tuple","tupleCreate")},function(){return"active"})}},HTML.A({href:"/tuple/list"},"Tuple Files"))]})),"\n",HTML.UL({"class":["nav"," ","navbar-nav"," ","navbar-right"]},Blaze.If(function(){return Spacebars.call(a.lookup("currentUser"))},function(){return HTML.LI({"class":"dropdown"},HTML.A({"class":"dropdown-toggle",href:"#","data-toggle":"dropdown"},Blaze.View(function(){return Spacebars.mustache(Spacebars.dot(a.lookup("currentUser"),"profile","name"))}),"\n",HTML.B({"class":"caret"})),"\n",HTML.UL({"class":"dropdown-menu"},HTML.Comment('li: a(href="/user/{{currentUser._id}}") Profile'),"\n",Blaze.If(function(){return Spacebars.dataMustache(a.lookup("currentUserHasRole"),"admin")},function(){return[HTML.LI(HTML.A({href:"/users"},"User administration")),HTML.LI(HTML.A({href:"/config"},"SiLK server configuration"))]},function(){return HTML.LI(HTML.A({href:"/profile"},"Profile"))}),"\n",HTML.LI(HTML.A({href:"/help"},"Help")),"\n",HTML.LI({"class":"divider"}),"\n",HTML.LI(HTML.A({"class":"logout",href:"#"},"Logout"))))},function(){return Spacebars.include(a.lookupTemplate("login"))})))))})}(); +!function(){Template.__checkName("navbar"),Template.navbar=new Template("Template.navbar",function(){var e=this;return HTML.NAV({"class":["navbar"," ","navbar-default"," ","navbar-static-top"," ","navbar-main"],role:"navigation"},HTML.DIV({"class":"container-fluid"},HTML.Raw(' '),"\n",HTML.DIV({id:"top-navbar-collapse","class":["collapse"," ","navbar-collapse"]},HTML.UL({"class":["nav"," ","navbar-nav"]},Blaze.If(function(){return Spacebars.call(e.lookup("currentUser"))},function(){return[HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(e.lookup("condition"),e.lookup("currentTemplateName"),"is","dashboard")},function(){return"active"})}},HTML.A({href:"/"},"Dashboard")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(e.lookup("condition"),e.lookup("currentTemplateName"),"in","query")},function(){return Blaze.If(function(){return Spacebars.call(Spacebars.dot(e.lookup("queryObject"),"isQuick"))},function(){return"active"})})}},HTML.A({href:"/query/create/quick"},"Quick Query")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(e.lookup("condition"),e.lookup("currentTemplateName"),"in","queryList","query")},function(){return Blaze.If(function(){return Spacebars.dataMustache(e.lookup("not"),Spacebars.dot(e.lookup("queryObject"),"isQuick"))},function(){return"active"})})}},HTML.A({href:"/query/list"},"Saved Queries")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(e.lookup("condition"),e.lookup("currentTemplateName"),"in","ipsetList","ipset","ipsetCreate")},function(){return"active"})}},HTML.A({href:"/ipset/list"},"IP Sets")),HTML.LI({"class":function(){return Blaze.If(function(){return Spacebars.dataMustache(e.lookup("condition"),e.lookup("currentTemplateName"),"in","tupleList","tuple","tupleCreate")},function(){return"active"})}},HTML.A({href:"/tuple/list"},"Tuple Files"))]})),"\n",HTML.UL({"class":["nav"," ","navbar-nav"," ","navbar-right"]},Blaze.If(function(){return Spacebars.call(e.lookup("currentUser"))},function(){return HTML.LI({"class":"dropdown"},HTML.A({"class":"dropdown-toggle",href:"#","data-toggle":"dropdown"},Blaze.View(function(){return Spacebars.mustache(Spacebars.dot(e.lookup("currentUser"),"profile","name"))}),"\n",HTML.B({"class":"caret"})),"\n",HTML.UL({"class":"dropdown-menu"},HTML.Comment('li: a(href="/user/{{currentUser._id}}") Profile'),"\n",Blaze.If(function(){return Spacebars.dataMustache(e.lookup("currentUserHasRole"),"admin")},function(){return[HTML.LI(HTML.A({href:"/users"},"User administration")),HTML.LI(HTML.A({href:"/config"},"SiLK server configuration"))]},function(){return HTML.LI(HTML.A({href:"/profile"},"Profile"))}),"\n",HTML.LI(HTML.A({href:"/help"},"Help")),"\n",HTML.LI({"class":"divider"}),"\n",HTML.LI(HTML.A({"class":"logout",href:"#"},"Logout"))))},function(){return Spacebars.include(e.lookupTemplate("login"))})),"\n",HTML.Raw("Page not found