Merge lp:~lmic/maas/maas19+fix-power-query-sm15k into lp:~maas-committers/maas/trunk

Proposed by Larry Michel
Status: Superseded
Proposed branch: lp:~lmic/maas/maas19+fix-power-query-sm15k
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 3635 lines (+2087/-270) (has conflicts)
42 files modified
Makefile (+2/-2)
contrib/maas-http.conf (+1/-1)
docs/changelog.rst (+334/-58)
src/maasserver/api/interfaces.py (+74/-0)
src/maasserver/api/tests/test_devices.py (+135/-0)
src/maasserver/api/tests/test_interfaces.py (+191/-0)
src/maasserver/api/tests/test_vlans.py (+7/-0)
src/maasserver/api/tests/test_volume_groups.py (+7/-0)
src/maasserver/forms_subnet.py (+7/-0)
src/maasserver/models/__init__.py (+23/-0)
src/maasserver/models/interface.py (+54/-22)
src/maasserver/models/staticipaddress.py (+5/-0)
src/maasserver/models/tests/test_filesystemgroup.py (+34/-0)
src/maasserver/models/tests/test_interface.py (+384/-115)
src/maasserver/models/tests/test_node.py (+69/-33)
src/maasserver/models/tests/test_partition.py (+4/-0)
src/maasserver/models/tests/test_partitiontable.py (+21/-0)
src/maasserver/models/tests/test_staticipaddress.py (+23/-0)
src/maasserver/models/tests/test_virtualblockdevice.py (+34/-0)
src/maasserver/static/css/maas-styles.css (+4/-0)
src/maasserver/testing/factory.py (+8/-0)
src/maasserver/tests/test_auth.py (+31/-0)
src/maasserver/tests/test_node_constraint_filter_forms.py (+61/-0)
src/maasserver/tests/test_storage_layouts.py (+80/-0)
src/maasserver/utils/converters.py (+5/-0)
src/maasserver/utils/orm.py (+25/-0)
src/maasserver/utils/tests/test_converters.py (+43/-20)
src/maasserver/websockets/handlers/tests/test_node.py (+60/-17)
src/metadataserver/models/commissioningscript.py (+4/-0)
src/provisioningserver/config.py (+85/-0)
src/provisioningserver/drivers/power/amt.py (+11/-0)
src/provisioningserver/drivers/power/dli.py (+11/-0)
src/provisioningserver/drivers/power/ipmi.py (+32/-1)
src/provisioningserver/drivers/power/seamicro.py (+6/-1)
src/provisioningserver/drivers/power/tests/test_amt.py (+17/-0)
src/provisioningserver/drivers/power/tests/test_ipmi.py (+9/-0)
src/provisioningserver/rpc/dhcp.py (+4/-0)
src/provisioningserver/rpc/tests/test_dhcp.py (+7/-0)
src/provisioningserver/testing/config.py (+5/-0)
src/provisioningserver/tests/test_cluster_config_command.py (+10/-0)
src/provisioningserver/tests/test_config.py (+87/-0)
utilities/remote-reinstall (+73/-0)
Text conflict in docs/changelog.rst
Text conflict in src/maasserver/api/interfaces.py
Text conflict in src/maasserver/api/tests/test_devices.py
Text conflict in src/maasserver/api/tests/test_interfaces.py
Text conflict in src/maasserver/api/tests/test_vlans.py
Text conflict in src/maasserver/api/tests/test_volume_groups.py
Text conflict in src/maasserver/forms_subnet.py
Text conflict in src/maasserver/models/__init__.py
Text conflict in src/maasserver/models/interface.py
Text conflict in src/maasserver/models/staticipaddress.py
Text conflict in src/maasserver/models/tests/test_filesystemgroup.py
Text conflict in src/maasserver/models/tests/test_interface.py
Text conflict in src/maasserver/models/tests/test_node.py
Text conflict in src/maasserver/models/tests/test_partition.py
Text conflict in src/maasserver/models/tests/test_partitiontable.py
Text conflict in src/maasserver/models/tests/test_virtualblockdevice.py
Text conflict in src/maasserver/static/css/maas-styles.css
Text conflict in src/maasserver/testing/factory.py
Text conflict in src/maasserver/tests/test_auth.py
Text conflict in src/maasserver/tests/test_node_constraint_filter_forms.py
Text conflict in src/maasserver/tests/test_storage_layouts.py
Text conflict in src/maasserver/utils/converters.py
Text conflict in src/maasserver/utils/orm.py
Text conflict in src/maasserver/utils/tests/test_converters.py
Text conflict in src/maasserver/websockets/handlers/tests/test_node.py
Text conflict in src/provisioningserver/config.py
Text conflict in src/provisioningserver/drivers/power/amt.py
Text conflict in src/provisioningserver/drivers/power/dli.py
Text conflict in src/provisioningserver/drivers/power/ipmi.py
Text conflict in src/provisioningserver/drivers/power/seamicro.py
Text conflict in src/provisioningserver/drivers/power/tests/test_amt.py
Text conflict in src/provisioningserver/drivers/power/tests/test_ipmi.py
Text conflict in src/provisioningserver/rpc/dhcp.py
Text conflict in src/provisioningserver/rpc/tests/test_dhcp.py
Text conflict in src/provisioningserver/testing/config.py
Text conflict in src/provisioningserver/tests/test_cluster_config_command.py
Text conflict in src/provisioningserver/tests/test_config.py
Text conflict in utilities/remote-reinstall
To merge this branch: bzr merge lp:~lmic/maas/maas19+fix-power-query-sm15k
Reviewer Review Type Date Requested Status
MAAS Maintainers Pending
Review via email: mp+282110@code.launchpad.net

This proposal has been superseded by a proposal from 2016-01-10.

Description of the change

Pass id from context (which is system id from power parameters) into seamicroclient call when querying power.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Makefile'
--- Makefile 2016-01-06 14:43:50 +0000
+++ Makefile 2016-01-10 08:29:39 +0000
@@ -496,8 +496,8 @@
496# this.496# this.
497497
498# Old names.498# Old names.
499PACKAGING := $(abspath ../packaging.trunk)499PACKAGING := $(abspath ../packaging-1.9)
500PACKAGING_BRANCH := lp:~maas-maintainers/maas/packaging500PACKAGING_BRANCH := lp:~maas-maintainers/maas/packaging-1.9
501501
502packaging-tree = $(PACKAGING)502packaging-tree = $(PACKAGING)
503packaging-branch = $(PACKAGING_BRANCH)503packaging-branch = $(PACKAGING_BRANCH)
504504
=== modified file 'contrib/maas-http.conf'
--- contrib/maas-http.conf 2015-06-26 13:07:33 +0000
+++ contrib/maas-http.conf 2016-01-10 08:29:39 +0000
@@ -26,7 +26,7 @@
2626
27<IfModule proxy_module>27<IfModule proxy_module>
28 ProxyPreserveHost on28 ProxyPreserveHost on
29 ProxyPass /MAAS/ws "ws://localhost:5240/MAAS/ws"29 ProxyPass /MAAS/ws "ws://localhost:5240/MAAS/ws" disablereuse=on
30 ProxyPass /MAAS/static/ !30 ProxyPass /MAAS/static/ !
31 ProxyPass /MAAS/ http://localhost:5240/MAAS/31 ProxyPass /MAAS/ http://localhost:5240/MAAS/
32 ProxyPass /MAAS http://localhost:5240/MAAS/32 ProxyPass /MAAS http://localhost:5240/MAAS/
3333
=== modified file 'docs/changelog.rst'
--- docs/changelog.rst 2015-12-07 16:37:36 +0000
+++ docs/changelog.rst 2016-01-10 08:29:39 +0000
@@ -3,64 +3,340 @@
3=========3=========
44
55
61.9.0 (RC3)6<<<<<<< TREE
7=============71.9.0 (RC3)
88=============
9Major bugs fixed in this release9
10--------------------------------10Major bugs fixed in this release
1111--------------------------------
12LP: #1522898 "node-interface" API should just be "interface" - to allow devices to use it12
1313LP: #1522898 "node-interface" API should just be "interface" - to allow devices to use it
14LP: #1519527 Juju 1.25.1 proposed: lxc units all have the same IP address after upgrade from 1.7/1.8.14
1515LP: #1519527 Juju 1.25.1 proposed: lxc units all have the same IP address after upgrade from 1.7/1.8.
16LP: #1522294 MAAS fails to parse some DHCP leases.16
1717LP: #1522294 MAAS fails to parse some DHCP leases.
18LP: #1519090 DHCP interface automatically obtains an IP even when the subnet is unmanaged.18
1919LP: #1519090 DHCP interface automatically obtains an IP even when the subnet is unmanaged.
20LP: #1519077 MAAS assigns IP addresses on unmanaged subnets without consideration for some addresses known to be in use.20
2121LP: #1519077 MAAS assigns IP addresses on unmanaged subnets without consideration for some addresses known to be in use.
22LP: #1519396 MTU field is not exposed over the API for VLAN.22
2323LP: #1519396 MTU field is not exposed over the API for VLAN.
24LP: #1521833 Updating subnet name removes dns_server.24
2525LP: #1521833 Updating subnet name removes dns_server.
26LP: #1519919 CC looks for NICs with kernel module loaded and fall back doesn't check persistent device names.26
2727LP: #1519919 CC looks for NICs with kernel module loaded and fall back doesn't check persistent device names.
28LP: #1522225 Migration 0181 can fail on upgrade if disks across nodes have duplicate serial numbers.28
2929LP: #1522225 Migration 0181 can fail on upgrade if disks across nodes have duplicate serial numbers.
30LP: #1519247 Migration 0146 can fail on upgrade when migrating unmanaged subnets.30
3131LP: #1519247 Migration 0146 can fail on upgrade when migrating unmanaged subnets.
32LP: #1519397 [UI] Once a cache_set is created the UI fails with ERROR.32
3333LP: #1519397 [UI] Once a cache_set is created the UI fails with ERROR.
34LP: #1519918 [UI] "failed to detect a valid IP address" when trying to view node details.34
3535LP: #1519918 [UI] "failed to detect a valid IP address" when trying to view node details.
3636
371.9.0 (RC2)37
38=============381.9.0 (RC2)
3939=============
40Major bugs fixed in this release40
41--------------------------------41Major bugs fixed in this release
4242--------------------------------
43LP: #1513085 Partitioning should align for performance.43
4444LP: #1513085 Partitioning should align for performance.
45LP: #1516815 MAAS creates DNS record against Alias (eth0:1) if alias belongs to the PXE Interface.45
4646LP: #1516815 MAAS creates DNS record against Alias (eth0:1) if alias belongs to the PXE Interface.
47LP: #1515769 Failed to power on SM15k.47
4848LP: #1515769 Failed to power on SM15k.
49LP: #1516722 Fix migration that might affect upgrade from 1.7.49
5050LP: #1516722 Fix migration that might affect upgrade from 1.7.
51LP: #1516065 Failed to power control IPMI BMC that does not support setting the boot order.51
5252LP: #1516065 Failed to power control IPMI BMC that does not support setting the boot order.
53LP: #1517097 Constraints for acquiring interfaces argument should 'AND' key-value pairs for the same label.53
5454LP: #1517097 Constraints for acquiring interfaces argument should 'AND' key-value pairs for the same label.
55LP: #1517687 [UI] Cannot create a partition using the whole disk.55
5656LP: #1517687 [UI] Cannot create a partition using the whole disk.
57LP: #1513258 [UI] CSS Broken for Bond Network Device.57
5858LP: #1513258 [UI] CSS Broken for Bond Network Device.
59LP: #1516173 [UI] Prevent being able to unmount/remove filesystems while node is on.59
6060LP: #1516173 [UI] Prevent being able to unmount/remove filesystems while node is on.
61LP: #1510457 [UI] No error message if there is no boot and/or root disk configured for a node.61
6262LP: #1510457 [UI] No error message if there is no boot and/or root disk configured for a node.
6363
64
65=======
661.9.0
67=====
68
69Important announcements
70-----------------------
71
72**New Networking Concepts and API's: Fabrics, Spaces and Subnets**
73 With the introduction of new MAAS networking concepts, new API's are also
74 been introduced. These are:
75
76 * fabrics
77 * spaces
78 * subnets
79 * vlans
80 * fan-networks
81
82 MAAS 1.9.0 will continue to provide backwards compatibility with the old
83 network API for reading purposes, but moving forward, users are required to
84 use the new API to manipulate fabrics, spaces and subnets.
85
86**Advanced Network and Storage Configuration only available for Ubuntu deployments**
87 Users can now perform advanced network and storage configurations for nodes
88 before deployment. The advanced configuration is only available for Ubuntu
89 deployments. All other deployments using third party OS', including CentOS,
90 RHEL, Windows and Custom Images, won't result in such configuration.
91
92**Re-commissioning required for upgraded MAAS**
93 Now that storage partitioning and advanced configuration is supported natively,
94 VM nodes in MAAS need to be re-commissioned.
95
96 * If upgrading from MAAS 1.8, only VM nodes with VirtIO storage devices need
97 to be re-commissioned.
98
99 * If upgrading from MAAS 1.7, all nodes will need to be re-commissioned in
100 order for MAAS to correctly capture the storage and networking devices.
101
102 This does not affect nodes that are currently deployed.
103
104**Default Storage Partitioning Layout - Flat**
105 With the introduction of custom storage, MAAS has also introduced the concept
106 of partitioning layouts. Partitioning layouts allow the user to quickly
107 auto-configure the disk partitioning scheme after first commissioning or
108 re-commissioning (if selected to do so). The partitioning layouts are set
109 globally on the `Settings` page.
110
111 The current default Partitioning layout is 'Flat', maintaining backwards
112 compatibility with previous MAAS releases. This means MAAS will take the
113 first disk it finds in the system and use it as the root and boot disk.
114
115**Deployment with configured /etc/network/interfaces**
116 Starting with MAAS 1.9, all node deployments will result in writing
117 `/etc/network/interfaces` statically, by default. This increases MAAS'
118 robustness and reliability as users no longer have to depend on DHCP for
119 IP address allocation solely.
120
121 MAAS will continue to provide IP addresses via DHCP, even though interfaces
122 in `/etc/network/interfaces` may have been configured statically.
123
124Major new features
125------------------
126
127**Storage Partitioning and Advanced Configuration**
128 MAAS now supports Storage Partitioning and Advanced Configuration natively.
129 This allows MAAS to deploy machines with different Storage Layouts, as
130 well as different complex partitioning configurations. Storage support
131 includes:
132
133 * LVM
134 * Bcache
135 * Software RAID levels 0, 1, 5, 6, 10.
136 * Advanced partitioning
137
138 Storace configuration is available both via the WebUI and API. For more
139 information refer to :ref:`storage`.
140
141**Advanced Networking (Fabrics, Spaces, Subnetworks) and Node Network Configuration**
142 MAAS now supports Advanced Network configuration, allowing users to not
143 only perform advanced node network configuration, but also allowing users
144 to declare and map their infrastructure in the form of Fabrics, VLANs,
145 Spaces and Subnets.
146
147 **Fabrics, Spaces, Subnets and Fan networks**
148 MAAS now supports the concept of Fabrics, Spaces, Subnets and FANS,
149 which introduce a whole new way of declaring and mapping your network
150 and infrastructure in MAAS.
151
152 The MAAS WebUI allows users to view all the declared Fabrics, Spaces,
153 VLANs inside fabrics and Subnets inside Spaces. The WebUI does not yet
154 support the ability to create new of these, but the API does.
155
156 These new concepts replace the old `Network` concepts from MAAS'
157 earlier versions. For more information, see :ref:`networking`.
158
159 For more information about the API, see :ref:`api`.
160
161 **Advanced Node Networking Configuration**
162 MAAS can now perform the Node's networking configuration. Doing so,
163 results in `/etc/network/interfaces` being written. Advanced
164 configuration includes:
165
166 * Assign subnets, fabrics, and IP to interfaces.
167 * Create VLAN interfaces.
168 * Create bond interfaces.
169 * Change interface names.
170
171 MAAS also allows configuration of node interfaces in different modes:
172
173 * Auto Assign - Node interface will be configured statically
174 and MAAS will auto assign an IP address.
175 * DHCP - The node interface will be configured to DHCP.
176 * Static - The user will be able to specify what IP address the
177 interface will obtain, while MAAS will configure it statically.
178 * Unconfigured - MAAS will leave the interface with LINK UP.
179
180**Curtin & cloud-init status updates**
181 Starting from MAAS 1.9.0, curtin and cloud-init will now send messages
182 to MAAS providing information regarding various of the actions being
183 taken. This information will be displayed in MAAS in the `Node Event Log`.
184
185 Note that this information is only available when using MAAS 1.9.0 and
186 the latest version fo curtin. For cloud-init messages this information
187 is only available when deploying Wily+.
188
189**Fabric and subnet creation**
190 MAAS now auto-creates multiple fabrics per physical interface connected
191 to the Cluster Controller, and will correctly create subnetworks under
192 each fabric, as well as VLAN's, if any of the Cluster Controller
193 interface is a VLAN interface.
194
195**HWE Kernels**
196 MAAS now has a different approach to deploying Hardware Enablement
197 Kernels. Start from MAAS 1.9, the HWE kernels are no longer coupled
198 to subarchitectures of a machine. For each Ubuntu release, users
199 will be able to select any of the available HWE kernels for such
200 release, as well as set the minimum kernel the machine will be
201 deployed with by default.
202
203 For more information, see :ref:`hardware-enablement-kernels`.
204
205**CentOS images can be imported automatically**
206 CentOS Image (CentOS 6 and 7) can now be imported automatically from the
207 MAAS Images page. These images are currently part of the daily streams.
208
209 In order to test this images, you need to use the daily image stream.
210 This can be changed in the `Settings` page under `Boot Images` to
211 `http://maas.ubuntu.com/images/ephemeral-v2/daily/`. Once changed, images
212 can be imported from the MAAS Images page. The CentOS image will be
213 published in the Releases stream shortly.
214
215
216Minor notable changes
217---------------------
218
219**Minimal Config Files for Daemons**
220 Starting from MAAS 1.9, minimal configuration files have been introduced
221 for both, the MAAS Region Controller and the MAAS Cluster Controller daemons.
222
223 * The Region Controller (`maas-regiond`) has now dropped the usage of
224 `/etc/maas/maas_local_settings.py` in favor of `/etc/maas/regiond.conf`.
225 Available configuration options are now `database_host`, `database_name`,
226 `database_user`, `database_pass`, `maas_url`. MAAS will attempt to migrate
227 any configuration on upgrade, otherwise it will use sane defaults.
228
229 * The Cluster Controller (`maas-clusterd`) has now dropped the usage of
230 `/etc/maas/pserv.yaml` and `/etc/maas/maas_cluster.conf` in favor of
231 `/etc/maas/clusterd.conf`. Available configuration options are now `maas_url`
232 and `cluster_uuid` only. MAAS will attempt to migrate any configuration
233 on upgrade, otherwise it will use sane defaults.
234
235**Commissioning Actions**
236 MAAS now supports commissioning actions. These allow the user to specify
237 how commissioning should behave in certain escenarios. The commissioning
238 actions available are:
239
240 * Enable SSH during commissioning & Keep machine ON after commissioning
241 * Keep network configuration after commissioning
242 * Keep storage configuration after commissioning
243
244**Warn users about missing power control tools**
245 MAAS now warns users about the missing power control tools. Each MAAS
246 power driver use a set of power tools that may or may not be installed
247 by default. If these power tools are missing from the system, MAAS will
248 warn users.
249
250**Python Power Drivers**
251 Starting from MAAS 1.9, MAAS is moving away from using shell scripts
252 templates for Power Drivers. These are being migrated to MAAS'
253 internal control as power drivers. Currently supported are APC, MSCM,
254 MSFT OCS, SM15k, UCSM, Virsh, VMWare and IPMI.
255
256 Remaining Power Drivers include AMT, Fence CDU's, Moonshot.
257
258Major bugs fixed in this release
259--------------------------------
260
261See https://launchpad.net/maas/+milestone/1.9.0 for details.
262
263
2641.9.0 (RC4)
265============
266
267Major bugs fixed in this release
268--------------------------------
269
270LP: #1523674 Virsh is reporting ppc64le, not ppc64el.
271
272LP: #1524091 Don't require DHCP to be on if it should be off.
273
274LP: #1523988 No required packages for HMC as it uses pure python paramiko ssh client.
275
276LP: #1524007 Don't hold the cluster configuration lock while reloading boot images.
277
278LP: #1524924 Fix commissioning to correctly identify secondary subnets, VLAN's and fabrics.
279
280
2811.9.0 (RC3)
282=============
283
284Major bugs fixed in this release
285--------------------------------
286
287LP: #1522898 "node-interface" API should just be "interface" - to allow devices to use it
288
289LP: #1519527 Juju 1.25.1 proposed: lxc units all have the same IP address after upgrade from 1.7/1.8.
290
291LP: #1522294 MAAS fails to parse some DHCP leases.
292
293LP: #1519090 DHCP interface automatically obtains an IP even when the subnet is unmanaged.
294
295LP: #1519077 MAAS assigns IP addresses on unmanaged subnets without consideration for some addresses known to be in use.
296
297LP: #1519396 MTU field is not exposed over the API for VLAN.
298
299LP: #1521833 Updating subnet name removes dns_server.
300
301LP: #1519919 CC looks for NICs with kernel module loaded and fall back doesn't check persistent device names.
302
303LP: #1522225 Migration 0181 can fail on upgrade if disks across nodes have duplicate serial numbers.
304
305LP: #1519247 Migration 0146 can fail on upgrade when migrating unmanaged subnets.
306
307LP: #1519397 [UI] Once a cache_set is created the UI fails with ERROR.
308
309LP: #1519918 [UI] "failed to detect a valid IP address" when trying to view node details.
310
311
3121.9.0 (RC2)
313=============
314
315Major bugs fixed in this release
316--------------------------------
317
318LP: #1513085 Partitioning should align for performance.
319
320LP: #1516815 MAAS creates DNS record against Alias (eth0:1) if alias belongs to the PXE Interface.
321
322LP: #1515769 Failed to power on SM15k.
323
324LP: #1516722 Fix migration that might affect upgrade from 1.7.
325
326LP: #1516065 Failed to power control IPMI BMC that does not support setting the boot order.
327
328LP: #1517097 Constraints for acquiring interfaces argument should 'AND' key-value pairs for the same label.
329
330LP: #1517687 [UI] Cannot create a partition using the whole disk.
331
332LP: #1513258 [UI] CSS Broken for Bond Network Device.
333
334LP: #1516173 [UI] Prevent being able to unmount/remove filesystems while node is on.
335
336LP: #1510457 [UI] No error message if there is no boot and/or root disk configured for a node.
337
338
339>>>>>>> MERGE-SOURCE
641.9.0 (RC1)3401.9.0 (RC1)
65=============341=============
66342
67343
=== modified file 'src/maasserver/api/devices.py'
=== modified file 'src/maasserver/api/interfaces.py'
--- src/maasserver/api/interfaces.py 2015-12-16 00:01:56 +0000
+++ src/maasserver/api/interfaces.py 2016-01-10 08:29:39 +0000
@@ -83,8 +83,12 @@
83 return ('interfaces_handler', ["system_id"])83 return ('interfaces_handler', ["system_id"])
8484
85 def read(self, request, system_id):85 def read(self, request, system_id):
86<<<<<<< TREE
86 """List all interfaces belonging to a machine, device, or87 """List all interfaces belonging to a machine, device, or
87 rack controller.88 rack controller.
89=======
90 """List all interfaces belonging to a node or device.
91>>>>>>> MERGE-SOURCE
8892
89 Returns 404 if the node is not found.93 Returns 404 if the node is not found.
90 """94 """
@@ -94,8 +98,12 @@
9498
95 @operation(idempotent=False)99 @operation(idempotent=False)
96 def create_physical(self, request, system_id):100 def create_physical(self, request, system_id):
101<<<<<<< TREE
97 """Create a physical interface on a machine, device, or102 """Create a physical interface on a machine, device, or
98 rack controller.103 rack controller.
104=======
105 """Create a physical interface on a node or device.
106>>>>>>> MERGE-SOURCE
99107
100 :param name: Name of the interface.108 :param name: Name of the interface.
101 :param mac_address: MAC address of the interface.109 :param mac_address: MAC address of the interface.
@@ -110,12 +118,21 @@
110118
111 Returns 404 if the node is not found.119 Returns 404 if the node is not found.
112 """120 """
121<<<<<<< TREE
113 node = Node.objects.get_node_or_404(122 node = Node.objects.get_node_or_404(
114 system_id, request.user, NODE_PERMISSION.EDIT)123 system_id, request.user, NODE_PERMISSION.EDIT)
115 # Machine type nodes require the node needs to be in the correct state.124 # Machine type nodes require the node needs to be in the correct state.
116 if node.node_type == NODE_TYPE.MACHINE:125 if node.node_type == NODE_TYPE.MACHINE:
117 raise_error_for_invalid_state_on_allocated_operations(126 raise_error_for_invalid_state_on_allocated_operations(
118 node, request.user, "create")127 node, request.user, "create")
128=======
129 node = Node.objects.get_node_or_404(
130 system_id, request.user, NODE_PERMISSION.EDIT)
131 # Installable nodes require the node needs to be in the correct state.
132 if node.installable:
133 raise_error_for_invalid_state_on_allocated_operations(
134 node, request.user, "create")
135>>>>>>> MERGE-SOURCE
119 form = PhysicalInterfaceForm(node=node, data=request.data)136 form = PhysicalInterfaceForm(node=node, data=request.data)
120 if form.is_valid():137 if form.is_valid():
121 return form.save()138 return form.save()
@@ -376,12 +393,21 @@
376 Returns 404 if the node or interface is not found.393 Returns 404 if the node or interface is not found.
377 """394 """
378 interface = Interface.objects.get_interface_or_404(395 interface = Interface.objects.get_interface_or_404(
396<<<<<<< TREE
379 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)397 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
380 if interface.get_node().node_type == NODE_TYPE.MACHINE:398 if interface.get_node().node_type == NODE_TYPE.MACHINE:
381 # This node needs to be in the correct state to modify399 # This node needs to be in the correct state to modify
382 # the interface.400 # the interface.
383 raise_error_for_invalid_state_on_allocated_operations(401 raise_error_for_invalid_state_on_allocated_operations(
384 interface.node, request.user, "update interface")402 interface.node, request.user, "update interface")
403=======
404 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
405 if interface.get_node().installable:
406 # This node needs to be in the correct state to modify
407 # the interface.
408 raise_error_for_invalid_state_on_allocated_operations(
409 interface.node, request.user, "update interface")
410>>>>>>> MERGE-SOURCE
385 interface_form = InterfaceForm.get_interface_form(interface.type)411 interface_form = InterfaceForm.get_interface_form(interface.type)
386 # For VLAN interface we cast parents to parent. As a VLAN can only412 # For VLAN interface we cast parents to parent. As a VLAN can only
387 # have one parent.413 # have one parent.
@@ -406,12 +432,21 @@
406 Returns 404 if the node or interface is not found.432 Returns 404 if the node or interface is not found.
407 """433 """
408 interface = Interface.objects.get_interface_or_404(434 interface = Interface.objects.get_interface_or_404(
435<<<<<<< TREE
409 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)436 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
410 if interface.get_node().node_type == NODE_TYPE.MACHINE:437 if interface.get_node().node_type == NODE_TYPE.MACHINE:
411 # This node needs to be in the correct state to modify438 # This node needs to be in the correct state to modify
412 # the interface.439 # the interface.
413 raise_error_for_invalid_state_on_allocated_operations(440 raise_error_for_invalid_state_on_allocated_operations(
414 interface.node, request.user, "delete interface")441 interface.node, request.user, "delete interface")
442=======
443 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
444 if interface.get_node().installable:
445 # This node needs to be in the correct state to modify
446 # the interface.
447 raise_error_for_invalid_state_on_allocated_operations(
448 interface.node, request.user, "delete interface")
449>>>>>>> MERGE-SOURCE
415 interface.delete()450 interface.delete()
416 return rc.DELETED451 return rc.DELETED
417452
@@ -447,6 +482,7 @@
447 Returns 404 if the node or interface is not found.482 Returns 404 if the node or interface is not found.
448 """483 """
449 interface = Interface.objects.get_interface_or_404(484 interface = Interface.objects.get_interface_or_404(
485<<<<<<< TREE
450 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)486 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
451 node = interface.get_node()487 node = interface.get_node()
452 if node.node_type == NODE_TYPE.MACHINE:488 if node.node_type == NODE_TYPE.MACHINE:
@@ -465,6 +501,26 @@
465 allowed_modes = [INTERFACE_LINK_TYPE.STATIC]501 allowed_modes = [INTERFACE_LINK_TYPE.STATIC]
466 form = InterfaceLinkForm(502 form = InterfaceLinkForm(
467 instance=interface, data=request.data, allowed_modes=allowed_modes)503 instance=interface, data=request.data, allowed_modes=allowed_modes)
504=======
505 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
506 node = interface.get_node()
507 if node.installable:
508 # This node needs to be in the correct state to modify
509 # the interface.
510 raise_error_for_invalid_state_on_allocated_operations(
511 interface.node, request.user, "link subnet")
512 allowed_modes = [
513 INTERFACE_LINK_TYPE.AUTO,
514 INTERFACE_LINK_TYPE.DHCP,
515 INTERFACE_LINK_TYPE.STATIC,
516 INTERFACE_LINK_TYPE.LINK_UP,
517 ]
518 else:
519 # Devices can only be set in static IP mode.
520 allowed_modes = [INTERFACE_LINK_TYPE.STATIC]
521 form = InterfaceLinkForm(
522 instance=interface, data=request.data, allowed_modes=allowed_modes)
523>>>>>>> MERGE-SOURCE
468 if form.is_valid():524 if form.is_valid():
469 return form.save()525 return form.save()
470 else:526 else:
@@ -479,12 +535,21 @@
479 Returns 404 if the node or interface is not found.535 Returns 404 if the node or interface is not found.
480 """536 """
481 interface = Interface.objects.get_interface_or_404(537 interface = Interface.objects.get_interface_or_404(
538<<<<<<< TREE
482 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)539 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
483 if interface.get_node().node_type == NODE_TYPE.MACHINE:540 if interface.get_node().node_type == NODE_TYPE.MACHINE:
484 # This node needs to be in the correct state to modify541 # This node needs to be in the correct state to modify
485 # the interface.542 # the interface.
486 raise_error_for_invalid_state_on_allocated_operations(543 raise_error_for_invalid_state_on_allocated_operations(
487 interface.node, request.user, "unlink subnet")544 interface.node, request.user, "unlink subnet")
545=======
546 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
547 if interface.get_node().installable:
548 # This node needs to be in the correct state to modify
549 # the interface.
550 raise_error_for_invalid_state_on_allocated_operations(
551 interface.node, request.user, "unlink subnet")
552>>>>>>> MERGE-SOURCE
488 form = InterfaceUnlinkForm(instance=interface, data=request.data)553 form = InterfaceUnlinkForm(instance=interface, data=request.data)
489 if form.is_valid():554 if form.is_valid():
490 return form.save()555 return form.save()
@@ -506,12 +571,21 @@
506 Returns 404 if the node or interface is not found.571 Returns 404 if the node or interface is not found.
507 """572 """
508 interface = Interface.objects.get_interface_or_404(573 interface = Interface.objects.get_interface_or_404(
574<<<<<<< TREE
509 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)575 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
510 if interface.get_node().node_type == NODE_TYPE.MACHINE:576 if interface.get_node().node_type == NODE_TYPE.MACHINE:
511 # This node needs to be in the correct state to modify577 # This node needs to be in the correct state to modify
512 # the interface.578 # the interface.
513 raise_error_for_invalid_state_on_allocated_operations(579 raise_error_for_invalid_state_on_allocated_operations(
514 interface.node, request.user, "set default gateway")580 interface.node, request.user, "set default gateway")
581=======
582 system_id, interface_id, request.user, NODE_PERMISSION.EDIT)
583 if interface.get_node().installable:
584 # This node needs to be in the correct state to modify
585 # the interface.
586 raise_error_for_invalid_state_on_allocated_operations(
587 interface.node, request.user, "set default gateway")
588>>>>>>> MERGE-SOURCE
515 form = InterfaceSetDefaultGatwayForm(589 form = InterfaceSetDefaultGatwayForm(
516 instance=interface, data=request.data)590 instance=interface, data=request.data)
517 if form.is_valid():591 if form.is_valid():
518592
=== modified file 'src/maasserver/api/tests/test_devices.py'
--- src/maasserver/api/tests/test_devices.py 2015-12-21 21:19:44 +0000
+++ src/maasserver/api/tests/test_devices.py 2016-01-10 08:29:39 +0000
@@ -14,9 +14,14 @@
14 INTERFACE_TYPE,14 INTERFACE_TYPE,
15 IPADDRESS_TYPE,15 IPADDRESS_TYPE,
16 NODE_STATUS,16 NODE_STATUS,
17<<<<<<< TREE
17 NODE_TYPE,18 NODE_TYPE,
18 NODEGROUP_STATUS,19 NODEGROUP_STATUS,
19 NODEGROUPINTERFACE_MANAGEMENT,20 NODEGROUPINTERFACE_MANAGEMENT,
21=======
22 NODEGROUP_STATUS,
23 NODEGROUPINTERFACE_MANAGEMENT,
24>>>>>>> MERGE-SOURCE
20)25)
21from maasserver.models import (26from maasserver.models import (
22 Device,27 Device,
@@ -31,7 +36,11 @@
31)36)
32from maasserver.testing.factory import factory37from maasserver.testing.factory import factory
33from maasserver.testing.orm import reload_object38from maasserver.testing.orm import reload_object
39<<<<<<< TREE
34from maasserver.utils.converters import json_load_bytes40from maasserver.utils.converters import json_load_bytes
41=======
42from mock import patch
43>>>>>>> MERGE-SOURCE
35from testtools.matchers import (44from testtools.matchers import (
36 HasLength,45 HasLength,
37 Not,46 Not,
@@ -286,6 +295,7 @@
286class TestClaimStickyIpAddressAPI(APITestCase):295class TestClaimStickyIpAddressAPI(APITestCase):
287 """Tests for /api/1.0/devices/?op=claim_sticky_ip_address."""296 """Tests for /api/1.0/devices/?op=claim_sticky_ip_address."""
288297
298<<<<<<< TREE
289 def test__claims_ip_address_from_cluster_interface_static_range(self):299 def test__claims_ip_address_from_cluster_interface_static_range(self):
290 ng = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)300 ng = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
291 ngi = factory.make_NodeGroupInterface(301 ngi = factory.make_NodeGroupInterface(
@@ -393,6 +403,95 @@
393 self.assertEqual(403 self.assertEqual(
394 http.client.OK, response.status_code, response.content)404 http.client.OK, response.status_code, response.content)
395 parsed_device = json_load_bytes(response.content)405 parsed_device = json_load_bytes(response.content)
406=======
407 def test__claims_ip_address_from_cluster_interface_static_range(self):
408 ng = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
409 ngi = factory.make_NodeGroupInterface(
410 ng, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS)
411 parent = factory.make_Node_with_Interface_on_Subnet(
412 nodegroup=ng, subnet=ngi.subnet)
413 device = factory.make_Node(
414 installable=False, parent=parent, interface=True,
415 disable_ipv4=False, owner=self.logged_in_user)
416 # Silence 'update_host_maps'.
417 self.patch_autospec(interface_module, "update_host_maps")
418 response = self.client.post(
419 get_device_uri(device), {'op': 'claim_sticky_ip_address'})
420 self.assertEqual(httplib.OK, response.status_code, response.content)
421 parsed_device = json.loads(response.content)
422 [returned_ip] = parsed_device["ip_addresses"]
423 static_ip = StaticIPAddress.objects.filter(ip=returned_ip).first()
424 self.assertIsNotNone(static_ip)
425 self.assertEquals(IPADDRESS_TYPE.STICKY, static_ip.alloc_type)
426
427 def test__claims_ip_address_from_unmanaged_cluster_interface(self):
428 ng = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
429 ngi = factory.make_NodeGroupInterface(
430 ng, management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
431 parent = factory.make_Node_with_Interface_on_Subnet(
432 nodegroup=ng, subnet=ngi.subnet)
433 device = factory.make_Node(
434 installable=False, parent=parent, interface=True,
435 disable_ipv4=False, owner=self.logged_in_user)
436 # Silence 'update_host_maps'.
437 self.patch_autospec(interface_module, "update_host_maps")
438 response = self.client.post(
439 get_device_uri(device), {'op': 'claim_sticky_ip_address'})
440 self.assertEqual(httplib.OK, response.status_code, response.content)
441 parsed_device = json.loads(response.content)
442 [returned_ip] = parsed_device["ip_addresses"]
443 static_ip = StaticIPAddress.objects.filter(ip=returned_ip).first()
444 self.assertIsNotNone(static_ip)
445 self.assertEquals(IPADDRESS_TYPE.STICKY, static_ip.alloc_type)
446
447 def test__claims_ip_address_from_detached_cluster_interface(self):
448 ng = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
449 ngi = factory.make_NodeGroupInterface(
450 ng, management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
451 subnet = ngi.subnet
452 ngi.subnet = None
453 ngi.save()
454 parent = factory.make_Node_with_Interface_on_Subnet(
455 nodegroup=ng, subnet=subnet, unmanaged=True)
456 device = factory.make_Node(
457 installable=False, parent=parent, interface=True,
458 disable_ipv4=False, owner=self.logged_in_user)
459 # Silence 'update_host_maps'.
460 self.patch_autospec(interface_module, "update_host_maps")
461 response = self.client.post(
462 get_device_uri(device), {'op': 'claim_sticky_ip_address'})
463 self.assertEqual(httplib.OK, response.status_code, response.content)
464 parsed_device = json.loads(response.content)
465 [returned_ip] = parsed_device["ip_addresses"]
466 static_ip = StaticIPAddress.objects.filter(ip=returned_ip).first()
467 self.assertIsNotNone(static_ip)
468 self.assertEquals(IPADDRESS_TYPE.STICKY, static_ip.alloc_type)
469
470 def test__claims_ip_address_after_devices_new(self):
471 ng = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
472 ngi = factory.make_NodeGroupInterface(
473 ng, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS)
474 parent = factory.make_Node_with_Interface_on_Subnet(
475 nodegroup=ng, subnet=ngi.subnet)
476 # Run 'devices new', as a sanity check to ensure the object is created
477 # the same way as it is when juju does it.
478 self.client.post(
479 reverse('devices_handler'),
480 {
481 'op': 'new',
482 'hostname': "lxc-1",
483 'mac_addresses': "01:02:03:04:05:06",
484 'parent': parent.system_id,
485 })
486 # Silence 'update_host_maps'.
487 device = Device.objects.first()
488 self.patch_autospec(interface_module, "update_host_maps")
489 response = self.client.post(
490 get_device_uri(device), {'op': 'claim_sticky_ip_address'})
491 self.assertEqual(httplib.OK, response.status_code, response.content)
492 parsed_device = json.loads(response.content)
493 # import pdb; pdb.set_trace()
494>>>>>>> MERGE-SOURCE
396 [returned_ip] = parsed_device["ip_addresses"]495 [returned_ip] = parsed_device["ip_addresses"]
397 static_ip = StaticIPAddress.objects.filter(ip=returned_ip).first()496 static_ip = StaticIPAddress.objects.filter(ip=returned_ip).first()
398 self.assertIsNotNone(static_ip)497 self.assertIsNotNone(static_ip)
@@ -431,6 +530,7 @@
431 (returned_ip, returned_ip, given_ip.alloc_type)530 (returned_ip, returned_ip, given_ip.alloc_type)
432 )531 )
433532
533<<<<<<< TREE
434 def test_503_if_no_subnet_found(self):534 def test_503_if_no_subnet_found(self):
435 device = factory.make_Device(535 device = factory.make_Device(
436 interface=True, disable_ipv4=False, owner=self.logged_in_user)536 interface=True, disable_ipv4=False, owner=self.logged_in_user)
@@ -463,6 +563,41 @@
463 http.client.SERVICE_UNAVAILABLE, response.status_code,563 http.client.SERVICE_UNAVAILABLE, response.status_code,
464 response.content)564 response.content)
465565
566=======
567 def test_503_if_no_subnet_found(self):
568 device = factory.make_Node(
569 installable=False, interface=True, disable_ipv4=False,
570 owner=self.logged_in_user)
571 # Silence 'update_host_maps'.
572 self.patch_autospec(interface_module, "update_host_maps")
573 response = self.client.post(
574 get_device_uri(device),
575 {
576 'op': 'claim_sticky_ip_address',
577 })
578 self.assertEqual(
579 httplib.SERVICE_UNAVAILABLE, response.status_code,
580 response.content)
581
582 @patch.object(Interface, 'claim_static_ips')
583 def test_503_if_no_ip_found(self, claim_static_ips):
584 claim_static_ips.side_effect = [list()]
585
586 device = factory.make_Node(
587 installable=False, interface=True, disable_ipv4=False,
588 owner=self.logged_in_user)
589 # Silence 'update_host_maps'.
590 self.patch_autospec(interface_module, "update_host_maps")
591 response = self.client.post(
592 get_device_uri(device),
593 {
594 'op': 'claim_sticky_ip_address',
595 })
596 self.assertEqual(
597 httplib.SERVICE_UNAVAILABLE, response.status_code,
598 response.content)
599
600>>>>>>> MERGE-SOURCE
466 def test_creates_ip_for_specific_mac(self):601 def test_creates_ip_for_specific_mac(self):
467 requested_address = factory.make_ip_address()602 requested_address = factory.make_ip_address()
468 device = factory.make_Node(603 device = factory.make_Node(
469604
=== modified file 'src/maasserver/api/tests/test_interfaces.py'
--- src/maasserver/api/tests/test_interfaces.py 2015-12-10 01:04:27 +0000
+++ src/maasserver/api/tests/test_interfaces.py 2016-01-10 08:29:39 +0000
@@ -92,6 +92,7 @@
92 ]92 ]
93 self.assertItemsEqual(expected_ids, result_ids)93 self.assertItemsEqual(expected_ids, result_ids)
9494
95<<<<<<< TREE
95 def test_read_on_device(self):96 def test_read_on_device(self):
96 parent = factory.make_Node()97 parent = factory.make_Node()
97 device = factory.make_Device(98 device = factory.make_Device(
@@ -106,6 +107,20 @@
106 self.assertEqual(107 self.assertEqual(
107 interface.id, json_load_bytes(response.content)[0]['id'])108 interface.id, json_load_bytes(response.content)[0]['id'])
108109
110=======
111 def test_read_on_device(self):
112 parent = factory.make_Node()
113 device = factory.make_Node(
114 owner=self.logged_in_user, installable=False, parent=parent)
115 interface = factory.make_Interface(
116 INTERFACE_TYPE.PHYSICAL, node=device)
117 uri = get_interfaces_uri(device)
118 response = self.client.get(uri)
119
120 self.assertEqual(httplib.OK, response.status_code, response.content)
121 self.assertEqual(interface.id, json.loads(response.content)[0]['id'])
122
123>>>>>>> MERGE-SOURCE
109 def test_create_physical(self):124 def test_create_physical(self):
110 self.become_admin()125 self.become_admin()
111 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):126 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):
@@ -139,6 +154,7 @@
139 "enabled": Equals(True),154 "enabled": Equals(True),
140 }))155 }))
141156
157<<<<<<< TREE
142 def test_create_physical_on_device(self):158 def test_create_physical_on_device(self):
143 parent = factory.make_Node()159 parent = factory.make_Node()
144 device = factory.make_Device(160 device = factory.make_Device(
@@ -172,6 +188,41 @@
172 "enabled": Equals(True),188 "enabled": Equals(True),
173 }))189 }))
174190
191=======
192 def test_create_physical_on_device(self):
193 parent = factory.make_Node()
194 device = factory.make_Node(
195 owner=self.logged_in_user, installable=False, parent=parent)
196 mac = factory.make_mac_address()
197 name = factory.make_name("eth")
198 vlan = factory.make_VLAN()
199 tags = [
200 factory.make_name("tag")
201 for _ in range(3)
202 ]
203 uri = get_interfaces_uri(device)
204 response = self.client.post(uri, {
205 "op": "create_physical",
206 "mac_address": mac,
207 "name": name,
208 "vlan": vlan.id,
209 "tags": ",".join(tags),
210 })
211
212 self.assertEqual(
213 httplib.OK, response.status_code, response.content)
214 self.assertThat(json.loads(response.content), ContainsDict({
215 "mac_address": Equals(mac),
216 "name": Equals(name),
217 "vlan": ContainsDict({
218 "id": Equals(vlan.id),
219 }),
220 "type": Equals("physical"),
221 "tags": Equals(tags),
222 "enabled": Equals(True),
223 }))
224
225>>>>>>> MERGE-SOURCE
175 def test_create_physical_disabled(self):226 def test_create_physical_disabled(self):
176 self.become_admin()227 self.become_admin()
177 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):228 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):
@@ -331,6 +382,7 @@
331 parent_2_iface.name,382 parent_2_iface.name,
332 ], parsed_interface['parents'])383 ], parsed_interface['parents'])
333384
385<<<<<<< TREE
334 def test_create_bond_404_on_device(self):386 def test_create_bond_404_on_device(self):
335 parent = factory.make_Node()387 parent = factory.make_Node()
336 device = factory.make_Node(388 device = factory.make_Node(
@@ -343,6 +395,19 @@
343 self.assertEqual(395 self.assertEqual(
344 http.client.NOT_FOUND, response.status_code, response.content)396 http.client.NOT_FOUND, response.status_code, response.content)
345397
398=======
399 def test_create_bond_404_on_device(self):
400 parent = factory.make_Node()
401 device = factory.make_Node(
402 owner=self.logged_in_user, installable=False, parent=parent)
403 uri = get_interfaces_uri(device)
404 response = self.client.post(uri, {
405 "op": "create_bond",
406 })
407 self.assertEqual(
408 httplib.NOT_FOUND, response.status_code, response.content)
409
410>>>>>>> MERGE-SOURCE
346 def test_create_bond_requires_admin(self):411 def test_create_bond_requires_admin(self):
347 node = factory.make_Node()412 node = factory.make_Node()
348 vlan = factory.make_VLAN()413 vlan = factory.make_VLAN()
@@ -447,6 +512,7 @@
447 "tags": Equals(tags),512 "tags": Equals(tags),
448 }))513 }))
449514
515<<<<<<< TREE
450 def test_create_vlan_404_on_device(self):516 def test_create_vlan_404_on_device(self):
451 parent = factory.make_Node()517 parent = factory.make_Node()
452 device = factory.make_Node(518 device = factory.make_Node(
@@ -459,6 +525,19 @@
459 self.assertEqual(525 self.assertEqual(
460 http.client.NOT_FOUND, response.status_code, response.content)526 http.client.NOT_FOUND, response.status_code, response.content)
461527
528=======
529 def test_create_vlan_404_on_device(self):
530 parent = factory.make_Node()
531 device = factory.make_Node(
532 owner=self.logged_in_user, installable=False, parent=parent)
533 uri = get_interfaces_uri(device)
534 response = self.client.post(uri, {
535 "op": "create_vlan",
536 })
537 self.assertEqual(
538 httplib.NOT_FOUND, response.status_code, response.content)
539
540>>>>>>> MERGE-SOURCE
462 def test_create_vlan_requires_admin(self):541 def test_create_vlan_requires_admin(self):
463 node = factory.make_Node()542 node = factory.make_Node()
464 untagged_vlan = factory.make_VLAN()543 untagged_vlan = factory.make_VLAN()
@@ -607,6 +686,7 @@
607 parsed_interface = json_load_bytes(response.content)686 parsed_interface = json_load_bytes(response.content)
608 self.assertEqual(bond0.id, parsed_interface['id'])687 self.assertEqual(bond0.id, parsed_interface['id'])
609688
689<<<<<<< TREE
610 def test_read_device_interface(self):690 def test_read_device_interface(self):
611 parent = factory.make_Node()691 parent = factory.make_Node()
612 device = factory.make_Device(parent=parent)692 device = factory.make_Device(parent=parent)
@@ -619,6 +699,19 @@
619 parsed_interface = json_load_bytes(response.content)699 parsed_interface = json_load_bytes(response.content)
620 self.assertEqual(interface.id, parsed_interface['id'])700 self.assertEqual(interface.id, parsed_interface['id'])
621701
702=======
703 def test_read_device_interface(self):
704 parent = factory.make_Node()
705 device = factory.make_Node(installable=False, parent=parent)
706 interface = factory.make_Interface(
707 INTERFACE_TYPE.PHYSICAL, node=device)
708 uri = get_interface_uri(interface)
709 response = self.client.get(uri)
710 self.assertEqual(httplib.OK, response.status_code, response.content)
711 parsed_interface = json.loads(response.content)
712 self.assertEqual(interface.id, parsed_interface['id'])
713
714>>>>>>> MERGE-SOURCE
622 def test_read_404_when_invalid_id(self):715 def test_read_404_when_invalid_id(self):
623 node = factory.make_Node()716 node = factory.make_Node()
624 uri = reverse(717 uri = reverse(
@@ -666,6 +759,25 @@
666 self.assertEquals(new_name, parsed_interface["name"])759 self.assertEquals(new_name, parsed_interface["name"])
667 self.assertEquals(new_vlan.vid, parsed_interface["vlan"]["vid"])760 self.assertEquals(new_vlan.vid, parsed_interface["vlan"]["vid"])
668761
762 def test_update_device_physical_interface(self):
763 node = factory.make_Node()
764 device = factory.make_Node(
765 owner=self.logged_in_user, installable=False, parent=node)
766 interface = factory.make_Interface(
767 INTERFACE_TYPE.PHYSICAL, node=device)
768 new_name = factory.make_name("name")
769 new_vlan = factory.make_VLAN()
770 uri = get_interface_uri(interface)
771 response = self.client.put(uri, {
772 "name": new_name,
773 "vlan": new_vlan.id,
774 })
775 self.assertEqual(
776 httplib.OK, response.status_code, response.content)
777 parsed_interface = json.loads(response.content)
778 self.assertEquals(new_name, parsed_interface["name"])
779 self.assertEquals(new_vlan.vid, parsed_interface["vlan"]["vid"])
780
669 def test_update_bond_interface(self):781 def test_update_bond_interface(self):
670 self.become_admin()782 self.become_admin()
671 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):783 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):
@@ -750,6 +862,7 @@
750 http.client.NO_CONTENT, response.status_code, response.content)862 http.client.NO_CONTENT, response.status_code, response.content)
751 self.assertIsNone(reload_object(interface))863 self.assertIsNone(reload_object(interface))
752864
865<<<<<<< TREE
753 def test_delete_deletes_device_interface(self):866 def test_delete_deletes_device_interface(self):
754 parent = factory.make_Node()867 parent = factory.make_Node()
755 device = factory.make_Device(868 device = factory.make_Device(
@@ -762,6 +875,20 @@
762 http.client.NO_CONTENT, response.status_code, response.content)875 http.client.NO_CONTENT, response.status_code, response.content)
763 self.assertIsNone(reload_object(interface))876 self.assertIsNone(reload_object(interface))
764877
878=======
879 def test_delete_deletes_device_interface(self):
880 parent = factory.make_Node()
881 device = factory.make_Node(
882 owner=self.logged_in_user, installable=False, parent=parent)
883 interface = factory.make_Interface(
884 INTERFACE_TYPE.PHYSICAL, node=device)
885 uri = get_interface_uri(interface)
886 response = self.client.delete(uri)
887 self.assertEqual(
888 httplib.NO_CONTENT, response.status_code, response.content)
889 self.assertIsNone(reload_object(interface))
890
891>>>>>>> MERGE-SOURCE
765 def test_delete_403_when_not_admin(self):892 def test_delete_403_when_not_admin(self):
766 node = factory.make_Node(interface=True)893 node = factory.make_Node(interface=True)
767 interface = node.get_boot_interface()894 interface = node.get_boot_interface()
@@ -827,6 +954,7 @@
827 "mode": Equals(INTERFACE_LINK_TYPE.DHCP),954 "mode": Equals(INTERFACE_LINK_TYPE.DHCP),
828 }))955 }))
829956
957<<<<<<< TREE
830 def test_link_subnet_creates_link_on_device(self):958 def test_link_subnet_creates_link_on_device(self):
831 parent = factory.make_Node()959 parent = factory.make_Node()
832 device = factory.make_Device(960 device = factory.make_Device(
@@ -867,6 +995,47 @@
867 http.client.BAD_REQUEST, response.status_code,995 http.client.BAD_REQUEST, response.status_code,
868 response.content)996 response.content)
869997
998=======
999 def test_link_subnet_creates_link_on_device(self):
1000 parent = factory.make_Node()
1001 device = factory.make_Node(
1002 owner=self.logged_in_user, installable=False, parent=parent)
1003 interface = factory.make_Interface(
1004 INTERFACE_TYPE.PHYSICAL, node=device)
1005 subnet = factory.make_Subnet(vlan=interface.vlan)
1006 uri = get_interface_uri(interface)
1007 response = self.client.post(uri, {
1008 "op": "link_subnet",
1009 "mode": INTERFACE_LINK_TYPE.STATIC,
1010 "subnet": subnet.id,
1011 })
1012 self.assertEqual(
1013 httplib.OK, response.status_code, response.content)
1014 parsed_response = json.loads(response.content)
1015 self.assertThat(
1016 parsed_response["links"][0], ContainsDict({
1017 "mode": Equals(INTERFACE_LINK_TYPE.STATIC),
1018 }))
1019
1020 def test_link_subnet_on_device_only_allows_static(self):
1021 parent = factory.make_Node()
1022 device = factory.make_Node(
1023 owner=self.logged_in_user, installable=False, parent=parent)
1024 interface = factory.make_Interface(
1025 INTERFACE_TYPE.PHYSICAL, node=device)
1026 for link_type in [
1027 INTERFACE_LINK_TYPE.AUTO,
1028 INTERFACE_LINK_TYPE.DHCP,
1029 INTERFACE_LINK_TYPE.LINK_UP]:
1030 uri = get_interface_uri(interface)
1031 response = self.client.post(uri, {
1032 "op": "link_subnet",
1033 "mode": link_type,
1034 })
1035 self.assertEqual(
1036 httplib.BAD_REQUEST, response.status_code, response.content)
1037
1038>>>>>>> MERGE-SOURCE
870 def test_link_subnet_raises_error(self):1039 def test_link_subnet_raises_error(self):
871 self.become_admin()1040 self.become_admin()
872 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):1041 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):
@@ -942,6 +1111,7 @@
942 http.client.OK, response.status_code, response.content)1111 http.client.OK, response.status_code, response.content)
943 self.assertIsNone(reload_object(dhcp_ip))1112 self.assertIsNone(reload_object(dhcp_ip))
9441113
1114<<<<<<< TREE
945 def test_unlink_subnet_deletes_link_on_device(self):1115 def test_unlink_subnet_deletes_link_on_device(self):
946 parent = factory.make_Node()1116 parent = factory.make_Node()
947 device = factory.make_Device(1117 device = factory.make_Device(
@@ -961,6 +1131,27 @@
961 http.client.OK, response.status_code, response.content)1131 http.client.OK, response.status_code, response.content)
962 self.assertIsNone(reload_object(static_ip))1132 self.assertIsNone(reload_object(static_ip))
9631133
1134=======
1135 def test_unlink_subnet_deletes_link_on_device(self):
1136 parent = factory.make_Node()
1137 device = factory.make_Node(
1138 owner=self.logged_in_user, installable=False, parent=parent)
1139 interface = factory.make_Interface(
1140 INTERFACE_TYPE.PHYSICAL, node=device)
1141 subnet = factory.make_Subnet()
1142 static_ip = factory.make_StaticIPAddress(
1143 alloc_type=IPADDRESS_TYPE.STICKY,
1144 subnet=subnet, interface=interface)
1145 uri = get_interface_uri(interface)
1146 response = self.client.post(uri, {
1147 "op": "unlink_subnet",
1148 "id": static_ip.id,
1149 })
1150 self.assertEqual(
1151 httplib.OK, response.status_code, response.content)
1152 self.assertIsNone(reload_object(static_ip))
1153
1154>>>>>>> MERGE-SOURCE
964 def test_unlink_subnet_raises_error(self):1155 def test_unlink_subnet_raises_error(self):
965 self.become_admin()1156 self.become_admin()
966 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):1157 for status in (NODE_STATUS.READY, NODE_STATUS.BROKEN):
9671158
=== modified file 'src/maasserver/api/tests/test_raid.py'
=== modified file 'src/maasserver/api/tests/test_vlans.py'
--- src/maasserver/api/tests/test_vlans.py 2015-12-03 16:37:58 +0000
+++ src/maasserver/api/tests/test_vlans.py 2016-01-10 08:29:39 +0000
@@ -76,6 +76,7 @@
76 "vid": vid,76 "vid": vid,
77 "mtu": mtu,77 "mtu": mtu,
78 })78 })
79<<<<<<< TREE
79 self.assertEqual(80 self.assertEqual(
80 http.client.OK, response.status_code, response.content)81 http.client.OK, response.status_code, response.content)
81 response_data = json.loads(82 response_data = json.loads(
@@ -83,6 +84,12 @@
83 self.assertEqual(vlan_name, response_data['name'])84 self.assertEqual(vlan_name, response_data['name'])
84 self.assertEqual(vid, response_data['vid'])85 self.assertEqual(vid, response_data['vid'])
85 self.assertEqual(mtu, response_data['mtu'])86 self.assertEqual(mtu, response_data['mtu'])
87=======
88 self.assertEqual(httplib.OK, response.status_code, response.content)
89 self.assertEqual(vlan_name, json.loads(response.content)['name'])
90 self.assertEqual(vid, json.loads(response.content)['vid'])
91 self.assertEqual(mtu, json.loads(response.content)['mtu'])
92>>>>>>> MERGE-SOURCE
8693
87 def test_create_admin_only(self):94 def test_create_admin_only(self):
88 fabric = factory.make_Fabric()95 fabric = factory.make_Fabric()
8996
=== modified file 'src/maasserver/api/tests/test_volume_groups.py'
--- src/maasserver/api/tests/test_volume_groups.py 2015-12-03 16:37:58 +0000
+++ src/maasserver/api/tests/test_volume_groups.py 2016-01-10 08:29:39 +0000
@@ -416,12 +416,19 @@
416 "uuid": vguuid,416 "uuid": vguuid,
417 "size": size,417 "size": size,
418 })418 })
419<<<<<<< TREE
419 self.assertEqual(420 self.assertEqual(
420 http.client.OK, response.status_code, response.content)421 http.client.OK, response.status_code, response.content)
421 logical_volume = json.loads(422 logical_volume = json.loads(
422 response.content.decode(settings.DEFAULT_CHARSET))423 response.content.decode(settings.DEFAULT_CHARSET))
423 expected_size = round_size_to_nearest_block(424 expected_size = round_size_to_nearest_block(
424 size, PARTITION_ALIGNMENT_SIZE, False)425 size, PARTITION_ALIGNMENT_SIZE, False)
426=======
427 self.assertEqual(httplib.OK, response.status_code, response.content)
428 logical_volume = json.loads(response.content)
429 expected_size = round_size_to_nearest_block(
430 size, PARTITION_ALIGNMENT_SIZE, False)
431>>>>>>> MERGE-SOURCE
425 self.assertThat(logical_volume, ContainsDict({432 self.assertThat(logical_volume, ContainsDict({
426 "name": Equals("%s-%s" % (volume_group.name, name)),433 "name": Equals("%s-%s" % (volume_group.name, name)),
427 "uuid": Equals(vguuid),434 "uuid": Equals(vguuid),
428435
=== modified file 'src/maasserver/api/vlans.py'
=== modified file 'src/maasserver/dns/tests/test_config.py'
=== modified file 'src/maasserver/forms.py'
=== modified file 'src/maasserver/forms_interface_link.py'
=== modified file 'src/maasserver/forms_subnet.py'
--- src/maasserver/forms_subnet.py 2015-12-23 17:21:20 +0000
+++ src/maasserver/forms_subnet.py 2016-01-10 08:29:39 +0000
@@ -50,9 +50,16 @@
5050
51 def clean(self):51 def clean(self):
52 cleaned_data = super(SubnetForm, self).clean()52 cleaned_data = super(SubnetForm, self).clean()
53<<<<<<< TREE
53 # The ArrayField form has a bug which leaves out the first entry.54 # The ArrayField form has a bug which leaves out the first entry.
54 if 'dns_servers' in self.data and self.data['dns_servers'] != '':55 if 'dns_servers' in self.data and self.data['dns_servers'] != '':
55 cleaned_data['dns_servers'] = self.data.getlist('dns_servers')56 cleaned_data['dns_servers'] = self.data.getlist('dns_servers')
57=======
58 # The djorm_pgarray.fields.ArrayField form has a bug which leaves out
59 # the first entry.
60 if 'dns_servers' in self.data and self.data['dns_servers'] != '':
61 cleaned_data['dns_servers'] = self.data.getlist('dns_servers')
62>>>>>>> MERGE-SOURCE
56 cleaned_data = self._clean_name(cleaned_data)63 cleaned_data = self._clean_name(cleaned_data)
57 cleaned_data = self._clean_dns_servers(cleaned_data)64 cleaned_data = self._clean_dns_servers(cleaned_data)
58 if self.instance.id is None:65 if self.instance.id is None:
5966
=== modified file 'src/maasserver/management/commands/_config.py'
=== modified file 'src/maasserver/management/commands/tests/test_config.py'
=== modified file 'src/maasserver/migrations/south/migrations/0181_initial_storage_layouts.py'
=== modified file 'src/maasserver/migrations/south/migrations/0182_initial_networking_layout.py'
=== modified file 'src/maasserver/models/__init__.py'
--- src/maasserver/models/__init__.py 2016-01-06 22:39:26 +0000
+++ src/maasserver/models/__init__.py 2016-01-10 08:29:39 +0000
@@ -275,6 +275,7 @@
275 raise NotImplementedError(275 raise NotImplementedError(
276 'Invalid permission check (invalid permission name: %s).' %276 'Invalid permission check (invalid permission name: %s).' %
277 perm)277 perm)
278<<<<<<< TREE
278 elif isinstance(obj, Interface):279 elif isinstance(obj, Interface):
279 if perm == NODE_PERMISSION.VIEW:280 if perm == NODE_PERMISSION.VIEW:
280 # Any registered user can view a interface regardless281 # Any registered user can view a interface regardless
@@ -306,6 +307,28 @@
306 'Invalid permission check (invalid permission name: %s).' %307 'Invalid permission check (invalid permission name: %s).' %
307 perm)308 perm)
308 elif isinstance(obj, (Fabric, FanNetwork, Subnet, Space)):309 elif isinstance(obj, (Fabric, FanNetwork, Subnet, Space)):
310=======
311 elif isinstance(obj, Interface):
312 if perm == NODE_PERMISSION.VIEW:
313 # Any registered user can view a interface regardless
314 # of its state.
315 return True
316 elif perm in NODE_PERMISSION.EDIT:
317 # A device can be editted by its owner a node must be admin.
318 node = obj.get_node()
319 if node is None or node.installable:
320 return user.is_superuser
321 else:
322 return node.owner == user
323 elif perm in NODE_PERMISSION.ADMIN:
324 # Admin permission is solely granted to superusers.
325 return user.is_superuser
326 else:
327 raise NotImplementedError(
328 'Invalid permission check (invalid permission name: %s).' %
329 perm)
330 elif isinstance(obj, (Fabric, FanNetwork, Subnet, Space)):
331>>>>>>> MERGE-SOURCE
309 if perm == NODE_PERMISSION.VIEW:332 if perm == NODE_PERMISSION.VIEW:
310 # Any registered user can view a fabric or interface regardless333 # Any registered user can view a fabric or interface regardless
311 # of its state.334 # of its state.
312335
=== modified file 'src/maasserver/models/blockdevice.py'
=== modified file 'src/maasserver/models/config.py'
=== modified file 'src/maasserver/models/filesystemgroup.py'
=== modified file 'src/maasserver/models/interface.py'
--- src/maasserver/models/interface.py 2016-01-04 20:14:42 +0000
+++ src/maasserver/models/interface.py 2016-01-10 08:29:39 +0000
@@ -1126,10 +1126,17 @@
1126 auto_ip, exclude_addresses)1126 auto_ip, exclude_addresses)
1127 if ngi is not None:1127 if ngi is not None:
1128 affected_nodegroups.add(ngi.nodegroup)1128 affected_nodegroups.add(ngi.nodegroup)
1129<<<<<<< TREE
1129 if assigned_ip is not None:1130 if assigned_ip is not None:
1130 assigned_addresses.append(assigned_ip)1131 assigned_addresses.append(assigned_ip)
1131 exclude_addresses.add(str(assigned_ip.ip))1132 exclude_addresses.add(str(assigned_ip.ip))
1132 self._update_dns_zones()1133 self._update_dns_zones()
1134=======
1135 if assigned_ip is not None:
1136 assigned_addresses.append(assigned_ip)
1137 exclude_addresses.add(unicode(assigned_ip.ip))
1138 self._update_dns_zones(affected_nodegroups)
1139>>>>>>> MERGE-SOURCE
1133 return assigned_addresses1140 return assigned_addresses
11341141
1135 def _claim_auto_ip(self, auto_ip, exclude_addresses=[]):1142 def _claim_auto_ip(self, auto_ip, exclude_addresses=[]):
@@ -1323,28 +1330,53 @@
1323 if ngi is not None and ngi.subnet is not None:1330 if ngi is not None and ngi.subnet is not None:
1324 discovered_subnets.append(ngi.subnet)1331 discovered_subnets.append(ngi.subnet)
13251332
1326 if len(discovered_subnets) == 0:1333<<<<<<< TREE
1327 node = self.node1334 if len(discovered_subnets) == 0:
1328 if parent is not None:1335 node = self.node
1329 node = parent1336 if parent is not None:
1330 if node is None:1337 node = parent
1331 hostname = "<unknown>"1338 if node is None:
1332 else:1339 hostname = "<unknown>"
1333 hostname = "'%s'" % node.hostname1340 else:
1334 log_string = (1341 hostname = "'%s'" % node.hostname
1335 "%s: Attempted to claim a static IP address, but no "1342 log_string = (
1336 "associated subnet could be found. (Recommission node %s "1343 "%s: Attempted to claim a static IP address, but no "
1337 "in order for MAAS to discover the subnet.)" %1344 "associated subnet could be found. (Recommission node %s "
1338 (self.get_log_string(), hostname)1345 "in order for MAAS to discover the subnet.)" %
1339 )1346 (self.get_log_string(), hostname)
1340 maaslog.warning(log_string)1347 )
1341 raise StaticIPAddressExhaustion(log_string)1348 maaslog.warning(log_string)
13421349 raise StaticIPAddressExhaustion(log_string)
1343 # This must be a set because it is highly possible that the parent1350
1344 # has multiple subnets on the same interface or same subnet on multiple1351 # This must be a set because it is highly possible that the parent
1345 # interfaces. We only want to allocate one ip address per subnet.1352 # has multiple subnets on the same interface or same subnet on multiple
1346 discovered_subnets = set(discovered_subnets)1353 # interfaces. We only want to allocate one ip address per subnet.
13471354 discovered_subnets = set(discovered_subnets)
1355
1356=======
1357 # This must be a set because it is highly possible that the parent
1358 # has multiple subnets on the same interface or same subnet on multiple
1359 # interfaces. We only want to allocate one ip address per subnet.
1360 discovered_subnets = set(discovered_subnets)
1361
1362 if len(discovered_subnets) == 0:
1363 node = self.node
1364 if parent is not None:
1365 node = parent
1366 if node is None:
1367 hostname = "<unknown>"
1368 else:
1369 hostname = "'%s'" % node.hostname
1370 log_string = (
1371 "%s: Attempted to claim a static IP address, but no "
1372 "associated subnet could be found. (Recommission node %s "
1373 "in order for MAAS to discover the subnet.)" %
1374 (self.get_log_string(), hostname)
1375 )
1376 maaslog.warning(log_string)
1377 raise StaticIPAddressExhaustion(log_string)
1378
1379>>>>>>> MERGE-SOURCE
1348 if requested_address is None:1380 if requested_address is None:
1349 # No requested address so claim a STATIC IP on all DISCOVERED1381 # No requested address so claim a STATIC IP on all DISCOVERED
1350 # subnets for this interface.1382 # subnets for this interface.
13511383
=== modified file 'src/maasserver/models/migrations/populate_subnets_helper.py'
=== modified file 'src/maasserver/models/node.py'
=== modified file 'src/maasserver/models/nodegroupinterface.py'
=== modified file 'src/maasserver/models/partition.py'
=== modified file 'src/maasserver/models/partitiontable.py'
=== modified file 'src/maasserver/models/staticipaddress.py'
--- src/maasserver/models/staticipaddress.py 2016-01-07 01:45:15 +0000
+++ src/maasserver/models/staticipaddress.py 2016-01-10 08:29:39 +0000
@@ -153,8 +153,13 @@
153 self, network, static_range_low, static_range_high,153 self, network, static_range_low, static_range_high,
154 dynamic_range_low, dynamic_range_high,154 dynamic_range_low, dynamic_range_high,
155 alloc_type=IPADDRESS_TYPE.AUTO, user=None,155 alloc_type=IPADDRESS_TYPE.AUTO, user=None,
156<<<<<<< TREE
156 requested_address=None, subnet=None,157 requested_address=None, subnet=None,
157 exclude_addresses=[], in_use_ipset=set()):158 exclude_addresses=[], in_use_ipset=set()):
159=======
160 requested_address=None, hostname=None, subnet=None,
161 exclude_addresses=[], in_use_ipset=set()):
162>>>>>>> MERGE-SOURCE
158 """Return a new StaticIPAddress.163 """Return a new StaticIPAddress.
159164
160 :param network: The network the address should be allocated in.165 :param network: The network the address should be allocated in.
161166
=== modified file 'src/maasserver/models/subnet.py'
=== modified file 'src/maasserver/models/tests/test_blockdevice.py'
=== modified file 'src/maasserver/models/tests/test_filesystem.py'
=== modified file 'src/maasserver/models/tests/test_filesystemgroup.py'
--- src/maasserver/models/tests/test_filesystemgroup.py 2015-12-04 20:46:31 +0000
+++ src/maasserver/models/tests/test_filesystemgroup.py 2016-01-10 08:29:39 +0000
@@ -330,9 +330,17 @@
330 partition_table = factory.make_PartitionTable(330 partition_table = factory.make_PartitionTable(
331 block_device=block_device)331 block_device=block_device)
332 partition_one = factory.make_Partition(332 partition_one = factory.make_Partition(
333<<<<<<< TREE
333 partition_table=partition_table, size=device_size // 2)334 partition_table=partition_table, size=device_size // 2)
335=======
336 partition_table=partition_table, size=device_size / 2)
337>>>>>>> MERGE-SOURCE
334 partition_two = factory.make_Partition(338 partition_two = factory.make_Partition(
339<<<<<<< TREE
335 partition_table=partition_table, size=device_size // 2)340 partition_table=partition_table, size=device_size // 2)
341=======
342 partition_table=partition_table, size=device_size / 2)
343>>>>>>> MERGE-SOURCE
336 cache_set = factory.make_CacheSet(partition=partition_one)344 cache_set = factory.make_CacheSet(partition=partition_one)
337 filesystem_backing = factory.make_Filesystem(345 filesystem_backing = factory.make_Filesystem(
338 fstype=FILESYSTEM_TYPE.BCACHE_BACKING, partition=partition_two)346 fstype=FILESYSTEM_TYPE.BCACHE_BACKING, partition=partition_two)
@@ -662,9 +670,15 @@
662 fstype=FILESYSTEM_TYPE.LVM_PV, block_device=block_device))670 fstype=FILESYSTEM_TYPE.LVM_PV, block_device=block_device))
663 fsgroup = factory.make_FilesystemGroup(671 fsgroup = factory.make_FilesystemGroup(
664 group_type=FILESYSTEM_GROUP_TYPE.LVM_VG, filesystems=filesystems)672 group_type=FILESYSTEM_GROUP_TYPE.LVM_VG, filesystems=filesystems)
673<<<<<<< TREE
665 # Reserve one extent per filesystem for LVM headers.674 # Reserve one extent per filesystem for LVM headers.
666 extents = (total_size // LVM_PE_SIZE) - 3675 extents = (total_size // LVM_PE_SIZE) - 3
667 self.assertEqual(extents * LVM_PE_SIZE, fsgroup.get_size())676 self.assertEqual(extents * LVM_PE_SIZE, fsgroup.get_size())
677=======
678 # Reserve one extent per filesystem for LVM headers.
679 extents = int(total_size / LVM_PE_SIZE) - 3
680 self.assertEquals(extents * LVM_PE_SIZE, fsgroup.get_size())
681>>>>>>> MERGE-SOURCE
668682
669 def test_get_size_returns_0_if_raid_without_filesystems(self):683 def test_get_size_returns_0_if_raid_without_filesystems(self):
670 fsgroup = FilesystemGroup(group_type=FILESYSTEM_GROUP_TYPE.RAID_0)684 fsgroup = FilesystemGroup(group_type=FILESYSTEM_GROUP_TYPE.RAID_0)
@@ -1315,7 +1329,11 @@
1315 block_device=block_device)1329 block_device=block_device)
1316 # Size should be 50 GB minus one extent per filesystem for LVM headers.1330 # Size should be 50 GB minus one extent per filesystem for LVM headers.
1317 pv_total_size = 50 * 1000 ** 31331 pv_total_size = 50 * 1000 ** 3
1332<<<<<<< TREE
1318 extents = (pv_total_size // LVM_PE_SIZE) - 51333 extents = (pv_total_size // LVM_PE_SIZE) - 5
1334=======
1335 extents = int(pv_total_size / LVM_PE_SIZE) - 5
1336>>>>>>> MERGE-SOURCE
1319 usable_size = extents * LVM_PE_SIZE1337 usable_size = extents * LVM_PE_SIZE
1320 self.assertEqual(usable_size, fsgroup.get_size())1338 self.assertEqual(usable_size, fsgroup.get_size())
13211339
@@ -2050,7 +2068,11 @@
2050 node=node, size=device_size)).add_partition()2068 node=node, size=device_size)).add_partition()
2051 for _ in range(4)2069 for _ in range(4)
2052 ]2070 ]
2071<<<<<<< TREE
2053 uuid = str(uuid4())2072 uuid = str(uuid4())
2073=======
2074 uuid = unicode(uuid4())
2075>>>>>>> MERGE-SOURCE
2054 raid = RAID.objects.create_raid(2076 raid = RAID.objects.create_raid(
2055 name='md0',2077 name='md0',
2056 level=FILESYSTEM_GROUP_TYPE.RAID_6,2078 level=FILESYSTEM_GROUP_TYPE.RAID_6,
@@ -2096,7 +2118,11 @@
2096 node=node, size=device_size)).add_partition()2118 node=node, size=device_size)).add_partition()
2097 for _ in range(10)2119 for _ in range(10)
2098 ]2120 ]
2121<<<<<<< TREE
2099 uuid = str(uuid4())2122 uuid = str(uuid4())
2123=======
2124 uuid = unicode(uuid4())
2125>>>>>>> MERGE-SOURCE
2100 raid = RAID.objects.create_raid(2126 raid = RAID.objects.create_raid(
2101 name='md0',2127 name='md0',
2102 level=FILESYSTEM_GROUP_TYPE.RAID_5,2128 level=FILESYSTEM_GROUP_TYPE.RAID_5,
@@ -2117,7 +2143,11 @@
2117 node=node, size=device_size)).add_partition()2143 node=node, size=device_size)).add_partition()
2118 for _ in range(10)2144 for _ in range(10)
2119 ]2145 ]
2146<<<<<<< TREE
2120 uuid = str(uuid4())2147 uuid = str(uuid4())
2148=======
2149 uuid = unicode(uuid4())
2150>>>>>>> MERGE-SOURCE
2121 raid = RAID.objects.create_raid(2151 raid = RAID.objects.create_raid(
2122 name='md0',2152 name='md0',
2123 level=FILESYSTEM_GROUP_TYPE.RAID_5,2153 level=FILESYSTEM_GROUP_TYPE.RAID_5,
@@ -2241,7 +2271,11 @@
2241 backing_partition = factory.make_PartitionTable(2271 backing_partition = factory.make_PartitionTable(
2242 block_device=factory.make_PhysicalBlockDevice(2272 block_device=factory.make_PhysicalBlockDevice(
2243 node=node, size=backing_size)).add_partition()2273 node=node, size=backing_size)).add_partition()
2274<<<<<<< TREE
2244 uuid = str(uuid4())2275 uuid = str(uuid4())
2276=======
2277 uuid = unicode(uuid4())
2278>>>>>>> MERGE-SOURCE
2245 bcache = Bcache.objects.create_bcache(2279 bcache = Bcache.objects.create_bcache(
2246 name='bcache0',2280 name='bcache0',
2247 uuid=uuid,2281 uuid=uuid,
22482282
=== modified file 'src/maasserver/models/tests/test_interface.py'
--- src/maasserver/models/tests/test_interface.py 2015-12-29 21:52:07 +0000
+++ src/maasserver/models/tests/test_interface.py 2016-01-10 08:29:39 +0000
@@ -1070,6 +1070,38 @@
1070 ngi3.subnet.cidr))),1070 ngi3.subnet.cidr))),
1071 ))1071 ))
10721072
1073 def test__links_interface_to_vlan_on_existing_subnet_with_logging(self):
1074 ng = factory.make_NodeGroup()
1075 fabric2 = factory.make_Fabric()
1076 fabric3 = factory.make_Fabric()
1077 ngi1 = factory.make_NodeGroupInterface(ng)
1078 ngi2 = factory.make_NodeGroupInterface(ng, fabric=fabric2)
1079 ngi3 = factory.make_NodeGroupInterface(ng, fabric=fabric3)
1080 interface1 = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
1081 interface2 = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
1082 interface3 = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
1083 vlan1 = ngi1.subnet.vlan
1084 vlan2 = ngi2.subnet.vlan
1085 vlan3 = ngi3.subnet.vlan
1086 maaslog = self.patch_autospec(interface_module, "maaslog")
1087 interface1.update_ip_addresses([ngi1.subnet.cidr])
1088 interface2.update_ip_addresses([ngi2.subnet.cidr])
1089 interface3.update_ip_addresses([ngi3.subnet.cidr])
1090 self.assertThat(interface1.vlan, Equals(vlan1))
1091 self.assertThat(interface2.vlan, Equals(vlan2))
1092 self.assertThat(interface3.vlan, Equals(vlan3))
1093 self.assertThat(maaslog.info, MockCallsMatch(
1094 call(("%s: Observed connected to %s via %s." % (
1095 interface1.get_log_string(), interface1.vlan.fabric.get_name(),
1096 ngi1.subnet.cidr))),
1097 call(("%s: Observed connected to %s via %s." % (
1098 interface2.get_log_string(), interface2.vlan.fabric.get_name(),
1099 ngi2.subnet.cidr))),
1100 call(("%s: Observed connected to %s via %s." % (
1101 interface3.get_log_string(), interface3.vlan.fabric.get_name(),
1102 ngi3.subnet.cidr))),
1103 ))
1104
1073 def test__deletes_old_discovered_ip_addresses_on_interface(self):1105 def test__deletes_old_discovered_ip_addresses_on_interface(self):
1074 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)1106 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
1075 # Create existing DISCOVERED IP address on the interface. These should1107 # Create existing DISCOVERED IP address on the interface. These should
@@ -2288,60 +2320,150 @@
2288 self.assertEquals(subnet, observed[0].subnet)2320 self.assertEquals(subnet, observed[0].subnet)
2289 self.assertTrue(2321 self.assertTrue(
2290 IPAddress(observed[0].ip) in (2322 IPAddress(observed[0].ip) in (
2291 IPRange(ngi.static_ip_range_low, ngi.static_ip_range_high)),2323<<<<<<< TREE
2292 "Assigned IP address %s should be inside the static range "2324 IPRange(ngi.static_ip_range_low, ngi.static_ip_range_high)),
2293 "on the cluster (%s - %s)." % (2325 "Assigned IP address %s should be inside the static range "
2294 observed[0].ip, ngi.static_ip_range_low,2326 "on the cluster (%s - %s)." % (
2295 ngi.static_ip_range_high))2327 observed[0].ip, ngi.static_ip_range_low,
2296 self.assertThat(2328 ngi.static_ip_range_high))
2297 IPAddress(observed[0].ip), Not(Equals(IPAddress(2329 self.assertThat(
2298 ngi.subnet.gateway_ip))))2330 IPAddress(observed[0].ip), Not(Equals(IPAddress(
22992331 ngi.subnet.gateway_ip))))
2300 def test__claim_fails_if_subnet_missing(self):2332
2301 from maasserver.dns import config2333 def test__claim_fails_if_subnet_missing(self):
2302 self.patch_autospec(interface_module, "update_host_maps")2334 from maasserver.dns import config
2303 self.patch_autospec(config, "dns_update_by_node")2335 self.patch_autospec(interface_module, "update_host_maps")
2304 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)2336 self.patch_autospec(config, "dns_update_by_node")
2305 subnet = factory.make_Subnet(vlan=interface.vlan)2337 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2306 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)2338 subnet = factory.make_Subnet(vlan=interface.vlan)
2307 factory.make_NodeGroupInterface(2339 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2308 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS,2340 factory.make_NodeGroupInterface(
2309 subnet=subnet)2341 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS,
2310 ip = factory.make_StaticIPAddress(2342 subnet=subnet)
2311 alloc_type=IPADDRESS_TYPE.AUTO, ip="",2343 ip = factory.make_StaticIPAddress(
2312 subnet=subnet, interface=interface)2344 alloc_type=IPADDRESS_TYPE.AUTO, ip="",
2313 ip.subnet = None2345 subnet=subnet, interface=interface)
2314 ip.save()2346 ip.subnet = None
2315 maaslog = self.patch_autospec(interface_module, "maaslog")2347 ip.save()
2316 with ExpectedException(StaticIPAddressUnavailable):2348 maaslog = self.patch_autospec(interface_module, "maaslog")
2317 interface.claim_auto_ips()2349 with ExpectedException(StaticIPAddressUnavailable):
2318 self.expectThat(maaslog.error, MockCalledOnceWith(2350 interface.claim_auto_ips()
2319 "Could not find subnet for interface %s." %2351 self.expectThat(maaslog.error, MockCalledOnceWith(
2320 interface.get_log_string()))2352 "Could not find subnet for interface %s." %
23212353 interface.get_log_string()))
2322 def test__claim_fails_if_no_static_range(self):2354
2323 from maasserver.dns import config2355 def test__claim_fails_if_no_static_range(self):
2324 self.patch_autospec(interface_module, "update_host_maps")2356 from maasserver.dns import config
2325 self.patch_autospec(config, "dns_update_by_node")2357 self.patch_autospec(interface_module, "update_host_maps")
2326 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)2358 self.patch_autospec(config, "dns_update_by_node")
2327 subnet = factory.make_Subnet(vlan=interface.vlan)2359 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2328 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)2360 subnet = factory.make_Subnet(vlan=interface.vlan)
2329 ngi = factory.make_NodeGroupInterface(2361 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2330 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS,2362 ngi = factory.make_NodeGroupInterface(
2331 subnet=subnet)2363 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS,
2332 ngi.static_ip_range_low = ""2364 subnet=subnet)
2333 ngi.static_ip_range_high = ""2365 ngi.static_ip_range_low = ""
2334 ngi.save()2366 ngi.static_ip_range_high = ""
2335 factory.make_StaticIPAddress(2367 ngi.save()
2336 alloc_type=IPADDRESS_TYPE.AUTO, ip="",2368 factory.make_StaticIPAddress(
2337 subnet=subnet, interface=interface)2369 alloc_type=IPADDRESS_TYPE.AUTO, ip="",
2338 maaslog = self.patch_autospec(interface_module, "maaslog")2370 subnet=subnet, interface=interface)
2339 with ExpectedException(StaticIPAddressUnavailable):2371 maaslog = self.patch_autospec(interface_module, "maaslog")
2340 interface.claim_auto_ips()2372 with ExpectedException(StaticIPAddressUnavailable):
2341 self.expectThat(maaslog.error, MockCalledOnceWith(2373 interface.claim_auto_ips()
2342 "Found matching NodeGroupInterface, but no static range has "2374 self.expectThat(maaslog.error, MockCalledOnceWith(
2343 "been defined for %s. (did you mean to configure DHCP?) " %2375 "Found matching NodeGroupInterface, but no static range has "
2344 interface.get_log_string()))2376 "been defined for %s. (did you mean to configure DHCP?) " %
2377 interface.get_log_string()))
2378=======
2379 IPRange(ngi.static_ip_range_low, ngi.static_ip_range_high)),
2380 "Assigned IP address %s should be inside the static range "
2381 "on the cluster (%s - %s)." % (
2382 observed[0].ip, ngi.static_ip_range_low,
2383 ngi.static_ip_range_high))
2384
2385 def test__claims_ip_address_in_static_ip_range_skips_gateway_ip(self):
2386 from maasserver.dns import config
2387 self.patch_autospec(interface_module, "update_host_maps")
2388 self.patch_autospec(config, "dns_update_zones")
2389 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2390 subnet = factory.make_Subnet(vlan=interface.vlan)
2391 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2392 ngi = factory.make_NodeGroupInterface(
2393 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS,
2394 subnet=subnet)
2395 # Make it a really small range, just to be safe.
2396 ngi.static_ip_range_high = unicode(
2397 IPAddress(ngi.static_ip_range_low) + 1)
2398 ngi.save()
2399 ngi.subnet.gateway_ip = ngi.static_ip_range_low
2400 ngi.subnet.dns_servers = []
2401 ngi.subnet.save()
2402 factory.make_StaticIPAddress(
2403 alloc_type=IPADDRESS_TYPE.AUTO, ip="",
2404 subnet=subnet, interface=interface)
2405 observed = interface.claim_auto_ips()
2406 self.assertEquals(
2407 1, len(observed),
2408 "Should have 1 AUTO IP addresses with an IP address assigned.")
2409 self.assertEquals(subnet, observed[0].subnet)
2410 self.assertTrue(
2411 IPAddress(observed[0].ip) in (
2412 IPRange(ngi.static_ip_range_low, ngi.static_ip_range_high)),
2413 "Assigned IP address %s should be inside the static range "
2414 "on the cluster (%s - %s)." % (
2415 observed[0].ip, ngi.static_ip_range_low,
2416 ngi.static_ip_range_high))
2417 self.assertThat(
2418 IPAddress(observed[0].ip), Not(Equals(IPAddress(
2419 ngi.subnet.gateway_ip))))
2420
2421 def test__claim_fails_if_subnet_missing(self):
2422 from maasserver.dns import config
2423 self.patch_autospec(interface_module, "update_host_maps")
2424 self.patch_autospec(config, "dns_update_zones")
2425 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2426 subnet = factory.make_Subnet(vlan=interface.vlan)
2427 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2428 factory.make_NodeGroupInterface(
2429 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS,
2430 subnet=subnet)
2431 ip = factory.make_StaticIPAddress(
2432 alloc_type=IPADDRESS_TYPE.AUTO, ip="",
2433 subnet=subnet, interface=interface)
2434 ip.subnet = None
2435 ip.save()
2436 maaslog = self.patch_autospec(interface_module, "maaslog")
2437 with ExpectedException(StaticIPAddressUnavailable):
2438 interface.claim_auto_ips()
2439 self.expectThat(maaslog.error, MockCalledOnceWith(
2440 "Could not find subnet for interface %s." %
2441 interface.get_log_string()))
2442
2443 def test__claim_fails_if_no_static_range(self):
2444 from maasserver.dns import config
2445 self.patch_autospec(interface_module, "update_host_maps")
2446 self.patch_autospec(config, "dns_update_zones")
2447 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2448 subnet = factory.make_Subnet(vlan=interface.vlan)
2449 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2450 ngi = factory.make_NodeGroupInterface(
2451 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP_AND_DNS,
2452 subnet=subnet)
2453 ngi.static_ip_range_low = ""
2454 ngi.static_ip_range_high = ""
2455 ngi.save()
2456 factory.make_StaticIPAddress(
2457 alloc_type=IPADDRESS_TYPE.AUTO, ip="",
2458 subnet=subnet, interface=interface)
2459 maaslog = self.patch_autospec(interface_module, "maaslog")
2460 with ExpectedException(StaticIPAddressUnavailable):
2461 interface.claim_auto_ips()
2462 self.expectThat(maaslog.error, MockCalledOnceWith(
2463 "Found matching NodeGroupInterface, but no static range has "
2464 "been defined for %s. (did you mean to configure DHCP?) " %
2465 interface.get_log_string()))
2466>>>>>>> MERGE-SOURCE
23452467
2346 def test__calls_update_host_maps(self):2468 def test__calls_update_host_maps(self):
2347 from maasserver.dns import config2469 from maasserver.dns import config
@@ -2589,67 +2711,131 @@
2589 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)2711 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2590 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)2712 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2591 network_v4 = factory.make_ipv4_network()2713 network_v4 = factory.make_ipv4_network()
2592 subnet_v4 = factory.make_Subnet(cidr=str(network_v4.cidr))2714<<<<<<< TREE
2593 factory.make_NodeGroupInterface(2715 subnet_v4 = factory.make_Subnet(cidr=str(network_v4.cidr))
2594 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,2716 factory.make_NodeGroupInterface(
2595 subnet=subnet_v4)2717 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2596 factory.make_StaticIPAddress(2718 subnet=subnet_v4)
2597 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",2719 factory.make_StaticIPAddress(
2598 subnet=subnet_v4, interface=interface)2720 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2599 network_v6 = factory.make_ipv6_network()2721 subnet=subnet_v4, interface=interface)
2600 subnet_v6 = factory.make_Subnet(cidr=str(network_v6.cidr))2722 network_v6 = factory.make_ipv6_network()
2601 factory.make_NodeGroupInterface(2723 subnet_v6 = factory.make_Subnet(cidr=str(network_v6.cidr))
2602 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,2724 factory.make_NodeGroupInterface(
2603 subnet=subnet_v6)2725 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2604 factory.make_StaticIPAddress(2726 subnet=subnet_v6)
2605 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",2727 factory.make_StaticIPAddress(
2606 subnet=subnet_v6, interface=interface)2728 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
26072729 subnet=subnet_v6, interface=interface)
2608 mock_link_subnet = self.patch_autospec(interface, "link_subnet")2730
2609 interface.claim_static_ips()2731 mock_link_subnet = self.patch_autospec(interface, "link_subnet")
2610 self.assertThat(2732 interface.claim_static_ips()
2611 mock_link_subnet,2733 self.assertThat(
2612 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))2734 mock_link_subnet,
2613 self.assertThat(2735 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))
2614 mock_link_subnet,2736 self.assertThat(
2615 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))2737 mock_link_subnet,
26162738 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))
2617 def test__without_address_calls_link_subnet_once_per_subnet(self):2739
2618 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)2740 def test__without_address_calls_link_subnet_once_per_subnet(self):
2619 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)2741 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2620 network_v4 = factory.make_ipv4_network()2742 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2621 subnet_v4 = factory.make_Subnet(cidr=str(network_v4.cidr))2743 network_v4 = factory.make_ipv4_network()
2622 factory.make_NodeGroupInterface(2744 subnet_v4 = factory.make_Subnet(cidr=str(network_v4.cidr))
2623 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,2745 factory.make_NodeGroupInterface(
2624 subnet=subnet_v4)2746 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2625 factory.make_StaticIPAddress(2747 subnet=subnet_v4)
2626 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",2748 factory.make_StaticIPAddress(
2627 subnet=subnet_v4, interface=interface)2749 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2628 # Make it have the same subnet twice.2750 subnet=subnet_v4, interface=interface)
2629 factory.make_StaticIPAddress(2751 # Make it have the same subnet twice.
2630 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",2752 factory.make_StaticIPAddress(
2631 subnet=subnet_v4, interface=interface)2753 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2632 network_v6 = factory.make_ipv6_network()2754 subnet=subnet_v4, interface=interface)
2633 subnet_v6 = factory.make_Subnet(cidr=str(network_v6.cidr))2755 network_v6 = factory.make_ipv6_network()
2634 factory.make_NodeGroupInterface(2756 subnet_v6 = factory.make_Subnet(cidr=str(network_v6.cidr))
2635 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,2757 factory.make_NodeGroupInterface(
2636 subnet=subnet_v6)2758 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2637 factory.make_StaticIPAddress(2759 subnet=subnet_v6)
2638 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",2760 factory.make_StaticIPAddress(
2639 subnet=subnet_v6, interface=interface)2761 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2640 # Make it have the same subnet twice.2762 subnet=subnet_v6, interface=interface)
2641 factory.make_StaticIPAddress(2763 # Make it have the same subnet twice.
2642 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",2764 factory.make_StaticIPAddress(
2643 subnet=subnet_v6, interface=interface)2765 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
26442766 subnet=subnet_v6, interface=interface)
2645 mock_link_subnet = self.patch_autospec(interface, "link_subnet")2767
2646 interface.claim_static_ips()2768 mock_link_subnet = self.patch_autospec(interface, "link_subnet")
2647 self.assertThat(2769 interface.claim_static_ips()
2648 mock_link_subnet,2770 self.assertThat(
2649 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))2771 mock_link_subnet,
2650 self.assertThat(2772 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))
2651 mock_link_subnet,2773 self.assertThat(
2652 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))2774 mock_link_subnet,
2775 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))
2776=======
2777 subnet_v4 = factory.make_Subnet(cidr=unicode(network_v4.cidr))
2778 factory.make_NodeGroupInterface(
2779 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2780 subnet=subnet_v4)
2781 factory.make_StaticIPAddress(
2782 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2783 subnet=subnet_v4, interface=interface)
2784 network_v6 = factory.make_ipv6_network()
2785 subnet_v6 = factory.make_Subnet(cidr=unicode(network_v6.cidr))
2786 factory.make_NodeGroupInterface(
2787 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2788 subnet=subnet_v6)
2789 factory.make_StaticIPAddress(
2790 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2791 subnet=subnet_v6, interface=interface)
2792
2793 mock_link_subnet = self.patch_autospec(interface, "link_subnet")
2794 interface.claim_static_ips()
2795 self.assertThat(
2796 mock_link_subnet,
2797 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))
2798 self.assertThat(
2799 mock_link_subnet,
2800 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))
2801
2802 def test__without_address_calls_link_subnet_once_per_subnet(self):
2803 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2804 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
2805 network_v4 = factory.make_ipv4_network()
2806 subnet_v4 = factory.make_Subnet(cidr=unicode(network_v4.cidr))
2807 factory.make_NodeGroupInterface(
2808 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2809 subnet=subnet_v4)
2810 factory.make_StaticIPAddress(
2811 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2812 subnet=subnet_v4, interface=interface)
2813 # Make it have the same subnet twice.
2814 factory.make_StaticIPAddress(
2815 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2816 subnet=subnet_v4, interface=interface)
2817 network_v6 = factory.make_ipv6_network()
2818 subnet_v6 = factory.make_Subnet(cidr=unicode(network_v6.cidr))
2819 factory.make_NodeGroupInterface(
2820 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2821 subnet=subnet_v6)
2822 factory.make_StaticIPAddress(
2823 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2824 subnet=subnet_v6, interface=interface)
2825 # Make it have the same subnet twice.
2826 factory.make_StaticIPAddress(
2827 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2828 subnet=subnet_v6, interface=interface)
2829
2830 mock_link_subnet = self.patch_autospec(interface, "link_subnet")
2831 interface.claim_static_ips()
2832 self.assertThat(
2833 mock_link_subnet,
2834 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))
2835 self.assertThat(
2836 mock_link_subnet,
2837 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))
2838>>>>>>> MERGE-SOURCE
26532839
2654 def test__without_address_does_nothing_if_none_managed(self):2840 def test__without_address_does_nothing_if_none_managed(self):
2655 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)2841 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
@@ -2680,8 +2866,13 @@
2680 StaticIPAddressOutOfRange, interface.claim_static_ips, ip_v6)2866 StaticIPAddressOutOfRange, interface.claim_static_ips, ip_v6)
2681 self.assertEqual(2867 self.assertEqual(
2682 "requested_address '%s' is not in a managed subnet for "2868 "requested_address '%s' is not in a managed subnet for "
2869<<<<<<< TREE
2683 "interface '%s'." % (ip_v6, interface.name),2870 "interface '%s'." % (ip_v6, interface.name),
2684 str(error))2871 str(error))
2872=======
2873 "interface '%s'." % (ip_v6, interface.name),
2874 error.message)
2875>>>>>>> MERGE-SOURCE
26852876
2686 def test__with_address_calls_link_subnet_with_ip_address(self):2877 def test__with_address_calls_link_subnet_with_ip_address(self):
2687 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)2878 interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL)
@@ -2731,6 +2922,7 @@
2731 device_interface.claim_static_ips()2922 device_interface.claim_static_ips()
2732 self.assertThat(2923 self.assertThat(
2733 mock_link_subnet,2924 mock_link_subnet,
2925<<<<<<< TREE
2734 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))2926 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))
2735 self.assertThat(2927 self.assertThat(
2736 mock_link_subnet,2928 mock_link_subnet,
@@ -2779,6 +2971,56 @@
2779 self.assertThat(2971 self.assertThat(
2780 mock_link_subnet,2972 mock_link_subnet,
2781 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))2973 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))
2974=======
2975 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))
2976 self.assertThat(
2977 mock_link_subnet,
2978 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))
2979
2980 def test__device_no_address_calls_link_subnet_once_per_subnet(self):
2981 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
2982 parent = factory.make_Node()
2983 parent_nic0 = factory.make_Interface(
2984 INTERFACE_TYPE.PHYSICAL, node=parent)
2985 parent_nic1 = factory.make_Interface(
2986 INTERFACE_TYPE.PHYSICAL, node=parent)
2987 network_v4 = factory.make_ipv4_network()
2988 subnet_v4 = factory.make_Subnet(cidr=unicode(network_v4.cidr))
2989 factory.make_NodeGroupInterface(
2990 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
2991 subnet=subnet_v4)
2992 factory.make_StaticIPAddress(
2993 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2994 subnet=subnet_v4, interface=parent_nic0)
2995 # Make second interface on the parent have the same subnet.
2996 factory.make_StaticIPAddress(
2997 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
2998 subnet=subnet_v4, interface=parent_nic1)
2999 network_v6 = factory.make_ipv6_network()
3000 subnet_v6 = factory.make_Subnet(cidr=unicode(network_v6.cidr))
3001 factory.make_NodeGroupInterface(
3002 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.DHCP,
3003 subnet=subnet_v6)
3004 factory.make_StaticIPAddress(
3005 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
3006 subnet=subnet_v6, interface=parent_nic0)
3007 # Make second interface on the parent have the same subnet.
3008 factory.make_StaticIPAddress(
3009 alloc_type=IPADDRESS_TYPE.DISCOVERED, ip="",
3010 subnet=subnet_v6, interface=parent_nic1)
3011 device = factory.make_Device(parent=parent)
3012 device_interface = factory.make_Interface(
3013 INTERFACE_TYPE.PHYSICAL, node=device)
3014
3015 mock_link_subnet = self.patch_autospec(device_interface, "link_subnet")
3016 device_interface.claim_static_ips()
3017 self.assertThat(
3018 mock_link_subnet,
3019 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v4))
3020 self.assertThat(
3021 mock_link_subnet,
3022 MockAnyCall(INTERFACE_LINK_TYPE.STATIC, subnet_v6))
3023>>>>>>> MERGE-SOURCE
27823024
2783 def test__device_with_address_calls_link_subnet_with_ip_address(self):3025 def test__device_with_address_calls_link_subnet_with_ip_address(self):
2784 parent = factory.make_Node()3026 parent = factory.make_Node()
@@ -2817,6 +3059,7 @@
2817 self.patch_autospec(iface, "link_subnet")3059 self.patch_autospec(iface, "link_subnet")
2818 claimed_ips = iface.claim_static_ips()3060 claimed_ips = iface.claim_static_ips()
2819 self.assertThat(claimed_ips, HasLength(1))3061 self.assertThat(claimed_ips, HasLength(1))
3062<<<<<<< TREE
28203063
2821 def test__claim_static_fails_if_parent_subnet_cannot_be_found(self):3064 def test__claim_static_fails_if_parent_subnet_cannot_be_found(self):
2822 from maasserver.dns import config3065 from maasserver.dns import config
@@ -2842,3 +3085,29 @@
2842 "subnet could be found. (Recommission node '%s' in order for "3085 "subnet could be found. (Recommission node '%s' in order for "
2843 "MAAS to discover the subnet.)" %3086 "MAAS to discover the subnet.)" %
2844 (interface.get_log_string(), node.hostname)))3087 (interface.get_log_string(), node.hostname)))
3088=======
3089
3090 def test__claim_static_fails_if_parent_subnet_cannot_be_found(self):
3091 from maasserver.dns import config
3092 self.patch_autospec(interface_module, "update_host_maps")
3093 self.patch_autospec(config, "dns_update_zones")
3094 subnet = factory.make_Subnet()
3095 nodegroup = factory.make_NodeGroup(status=NODEGROUP_STATUS.ENABLED)
3096 factory.make_NodeGroupInterface(
3097 nodegroup, management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED,
3098 subnet=subnet)
3099 node = factory.make_Node_with_Interface_on_Subnet(
3100 subnet=subnet, unmanaged=True, status=NODE_STATUS.READY)
3101 # Simulate an unmanaged network without association to a subnet.
3102 # (this could happen after a migration)
3103 StaticIPAddress.objects.all().delete()
3104 interface = node.get_boot_interface()
3105 maaslog = self.patch_autospec(interface_module, "maaslog")
3106 with ExpectedException(StaticIPAddressExhaustion):
3107 interface.claim_static_ips()
3108 self.expectThat(maaslog.warning, MockCalledOnceWith(
3109 "%s: Attempted to claim a static IP address, but no associated "
3110 "subnet could be found. (Recommission node '%s' in order for "
3111 "MAAS to discover the subnet.)" %
3112 (interface.get_log_string(), node.hostname)))
3113>>>>>>> MERGE-SOURCE
28453114
=== modified file 'src/maasserver/models/tests/test_node.py'
--- src/maasserver/models/tests/test_node.py 2016-01-08 05:09:21 +0000
+++ src/maasserver/models/tests/test_node.py 2016-01-10 08:29:39 +0000
@@ -3879,39 +3879,75 @@
3879 node = factory.make_Node(status=NODE_STATUS.ALLOCATED)3879 node = factory.make_Node(status=NODE_STATUS.ALLOCATED)
3880 self.assertFalse(node.on_network())3880 self.assertFalse(node.on_network())
38813881
3882 def test_storage_layout_issues_is_valid_when_flat(self):3882<<<<<<< TREE
3883 node = factory.make_Node()3883 def test_storage_layout_issues_is_valid_when_flat(self):
3884 self.assertEqual([], node.storage_layout_issues())3884 node = factory.make_Node()
38853885 self.assertEqual([], node.storage_layout_issues())
3886 def test_storage_layout_issues_returns_valid_with_boot_and_bcache(self):3886
3887 node = factory.make_Node(with_boot_disk=False)3887 def test_storage_layout_issues_returns_valid_with_boot_and_bcache(self):
3888 boot_partition = factory.make_Partition(node=node)3888 node = factory.make_Node(with_boot_disk=False)
3889 factory.make_Filesystem(partition=boot_partition, mount_point='/boot')3889 boot_partition = factory.make_Partition(node=node)
3890 fs_group = factory.make_FilesystemGroup(3890 factory.make_Filesystem(partition=boot_partition, mount_point='/boot')
3891 node=node, group_type=FILESYSTEM_GROUP_TYPE.BCACHE)3891 fs_group = factory.make_FilesystemGroup(
3892 bcache = fs_group.virtual_device3892 node=node, group_type=FILESYSTEM_GROUP_TYPE.BCACHE)
3893 factory.make_Filesystem(block_device=bcache, mount_point="/")3893 bcache = fs_group.virtual_device
3894 self.assertEqual([], node.storage_layout_issues())3894 factory.make_Filesystem(block_device=bcache, mount_point="/")
38953895 self.assertEqual([], node.storage_layout_issues())
3896 def test_storage_layout_issues_returns_invalid_when_no_disk(self):3896
3897 node = factory.make_Node(with_boot_disk=False)3897 def test_storage_layout_issues_returns_invalid_when_no_disk(self):
3898 self.assertEqual(3898 node = factory.make_Node(with_boot_disk=False)
3899 ["Specify a storage device to be able to deploy this node.",3899 self.assertEqual(
3900 "Mount the root '/' filesystem to be able to deploy this node."],3900 ["Specify a storage device to be able to deploy this node.",
3901 node.storage_layout_issues())3901 "Mount the root '/' filesystem to be able to deploy this node."],
39023902 node.storage_layout_issues())
3903 def test_storage_layout_issues_returns_invalid_when_root_on_bcache(self):3903
3904 node = factory.make_Node(with_boot_disk=False)3904 def test_storage_layout_issues_returns_invalid_when_root_on_bcache(self):
3905 factory.make_Partition(node=node)3905 node = factory.make_Node(with_boot_disk=False)
3906 fs_group = factory.make_FilesystemGroup(3906 factory.make_Partition(node=node)
3907 node=node, group_type=FILESYSTEM_GROUP_TYPE.BCACHE)3907 fs_group = factory.make_FilesystemGroup(
3908 bcache = fs_group.virtual_device3908 node=node, group_type=FILESYSTEM_GROUP_TYPE.BCACHE)
3909 factory.make_Filesystem(block_device=bcache, mount_point="/")3909 bcache = fs_group.virtual_device
3910 self.assertEqual(3910 factory.make_Filesystem(block_device=bcache, mount_point="/")
3911 ["This node cannot be deployed because it cannot boot from a "3911 self.assertEqual(
3912 "bcache volume. Mount /boot on a non-bcache device to be able to "3912 ["This node cannot be deployed because it cannot boot from a "
3913 "deploy this node."], node.storage_layout_issues())3913 "bcache volume. Mount /boot on a non-bcache device to be able to "
39143914 "deploy this node."], node.storage_layout_issues())
3915
3916=======
3917 def test_storage_layout_issues_is_valid_when_flat(self):
3918 node = factory.make_Node()
3919 self.assertEquals([], node.storage_layout_issues())
3920
3921 def test_storage_layout_issues_returns_valid_with_boot_and_bcache(self):
3922 node = factory.make_Node(with_boot_disk=False)
3923 boot_partition = factory.make_Partition(node=node)
3924 factory.make_Filesystem(partition=boot_partition, mount_point='/boot')
3925 fs_group = factory.make_FilesystemGroup(
3926 node=node, group_type=FILESYSTEM_GROUP_TYPE.BCACHE)
3927 bcache = fs_group.virtual_device
3928 factory.make_Filesystem(block_device=bcache, mount_point="/")
3929 self.assertEquals([], node.storage_layout_issues())
3930
3931 def test_storage_layout_issues_returns_invalid_when_no_disk(self):
3932 node = factory.make_Node(with_boot_disk=False)
3933 self.assertEquals(
3934 ["Specify a storage device to be able to deploy this node.",
3935 "Mount the root '/' filesystem to be able to deploy this node."],
3936 node.storage_layout_issues())
3937
3938 def test_storage_layout_issues_returns_invalid_when_root_on_bcache(self):
3939 node = factory.make_Node(with_boot_disk=False)
3940 factory.make_Partition(node=node)
3941 fs_group = factory.make_FilesystemGroup(
3942 node=node, group_type=FILESYSTEM_GROUP_TYPE.BCACHE)
3943 bcache = fs_group.virtual_device
3944 factory.make_Filesystem(block_device=bcache, mount_point="/")
3945 self.assertEquals(
3946 ["This node cannot be deployed because it cannot boot from a "
3947 "bcache volume. Mount /boot on a non-bcache device to be able to "
3948 "deploy this node."], node.storage_layout_issues())
3949
3950>>>>>>> MERGE-SOURCE
39153951
3916class TestNode_Stop(MAASServerTestCase):3952class TestNode_Stop(MAASServerTestCase):
3917 """Tests for Node.stop()."""3953 """Tests for Node.stop()."""
39183954
=== modified file 'src/maasserver/models/tests/test_nodegroupinterface.py'
=== modified file 'src/maasserver/models/tests/test_partition.py'
--- src/maasserver/models/tests/test_partition.py 2015-12-01 18:12:59 +0000
+++ src/maasserver/models/tests/test_partition.py 2016-01-10 08:29:39 +0000
@@ -210,7 +210,11 @@
210 partition.size = PARTITION_ALIGNMENT_SIZE * 4210 partition.size = PARTITION_ALIGNMENT_SIZE * 4
211 partition.size += 1211 partition.size += 1
212 partition.save()212 partition.save()
213<<<<<<< TREE
213 self.assertEqual(PARTITION_ALIGNMENT_SIZE * 4, partition.size)214 self.assertEqual(PARTITION_ALIGNMENT_SIZE * 4, partition.size)
215=======
216 self.assertEquals(PARTITION_ALIGNMENT_SIZE * 4, partition.size)
217>>>>>>> MERGE-SOURCE
214218
215 def test_validate_enough_space_for_new_partition(self):219 def test_validate_enough_space_for_new_partition(self):
216 partition_table = factory.make_PartitionTable()220 partition_table = factory.make_PartitionTable()
217221
=== modified file 'src/maasserver/models/tests/test_partitiontable.py'
--- src/maasserver/models/tests/test_partitiontable.py 2015-12-01 18:12:59 +0000
+++ src/maasserver/models/tests/test_partitiontable.py 2016-01-10 08:29:39 +0000
@@ -35,12 +35,21 @@
3535
36 def test_get_size_returns_block_device_size_minus_initial_offset(self):36 def test_get_size_returns_block_device_size_minus_initial_offset(self):
37 partition_table = factory.make_PartitionTable()37 partition_table = factory.make_PartitionTable()
38<<<<<<< TREE
38 self.assertEqual(39 self.assertEqual(
39 round_size_to_nearest_block(40 round_size_to_nearest_block(
40 partition_table.block_device.size -41 partition_table.block_device.size -
41 PARTITION_TABLE_EXTRA_SPACE,42 PARTITION_TABLE_EXTRA_SPACE,
42 PARTITION_ALIGNMENT_SIZE,43 PARTITION_ALIGNMENT_SIZE,
43 False),44 False),
45=======
46 self.assertEquals(
47 round_size_to_nearest_block(
48 partition_table.block_device.size -
49 PARTITION_TABLE_EXTRA_SPACE,
50 PARTITION_ALIGNMENT_SIZE,
51 False),
52>>>>>>> MERGE-SOURCE
44 partition_table.get_size())53 partition_table.get_size())
4554
46 def test_get_block_size_returns_block_device_block_size(self):55 def test_get_block_size_returns_block_device_block_size(self):
@@ -120,9 +129,15 @@
120 size=MIN_PARTITION_SIZE * 3 + PARTITION_TABLE_EXTRA_SPACE,129 size=MIN_PARTITION_SIZE * 3 + PARTITION_TABLE_EXTRA_SPACE,
121 block_size=block_size)130 block_size=block_size)
122 partition_table = factory.make_PartitionTable(block_device=device)131 partition_table = factory.make_PartitionTable(block_device=device)
132<<<<<<< TREE
123 partition_table.add_partition(size=MIN_PARTITION_SIZE)133 partition_table.add_partition(size=MIN_PARTITION_SIZE)
124 self.assertEqual(134 self.assertEqual(
125 MIN_PARTITION_SIZE * 2, partition_table.get_available_size())135 MIN_PARTITION_SIZE * 2, partition_table.get_available_size())
136=======
137 partition_table.add_partition(size=MIN_PARTITION_SIZE)
138 self.assertEquals(
139 MIN_PARTITION_SIZE * 2, partition_table.get_available_size())
140>>>>>>> MERGE-SOURCE
126141
127 def test_get_available_size_skips_partitions(self):142 def test_get_available_size_skips_partitions(self):
128 block_size = 4096143 block_size = 4096
@@ -134,9 +149,15 @@
134 partition_table.add_partition(size=MIN_PARTITION_SIZE)149 partition_table.add_partition(size=MIN_PARTITION_SIZE)
135 for _ in range(2)150 for _ in range(2)
136 ]151 ]
152<<<<<<< TREE
137 partition_table.add_partition(size=MIN_PARTITION_SIZE)153 partition_table.add_partition(size=MIN_PARTITION_SIZE)
138 self.assertEqual(154 self.assertEqual(
139 MIN_PARTITION_SIZE * 2,155 MIN_PARTITION_SIZE * 2,
156=======
157 partition_table.add_partition(size=MIN_PARTITION_SIZE)
158 self.assertEquals(
159 MIN_PARTITION_SIZE * 2,
160>>>>>>> MERGE-SOURCE
140 partition_table.get_available_size(161 partition_table.get_available_size(
141 ignore_partitions=ignore_partitions))162 ignore_partitions=ignore_partitions))
142163
143164
=== modified file 'src/maasserver/models/tests/test_staticipaddress.py'
--- src/maasserver/models/tests/test_staticipaddress.py 2016-01-09 00:48:25 +0000
+++ src/maasserver/models/tests/test_staticipaddress.py 2016-01-10 08:29:39 +0000
@@ -949,6 +949,29 @@
949 node.domain)949 node.domain)
950 self.assertEqual({node.fqdn: [boot_sip.ip]}, mapping)950 self.assertEqual({node.fqdn: [boot_sip.ip]}, mapping)
951951
952 def test_get_hostname_ip_mapping_prefers_boot_interface_to_alias(self):
953 self.patch_autospec(interface_module, "update_host_maps")
954 subnet = factory.make_Subnet(
955 cidr=unicode(factory.make_ipv4_network().cidr))
956 node = factory.make_Node_with_Interface_on_Subnet(
957 hostname=factory.make_name('host'), subnet=subnet,
958 disable_ipv4=False)
959 iface = node.get_boot_interface()
960 factory.make_StaticIPAddress(
961 alloc_type=IPADDRESS_TYPE.STICKY, interface=iface,
962 subnet=subnet)
963 new_boot_interface = factory.make_Interface(
964 INTERFACE_TYPE.PHYSICAL, node=node)
965 node.boot_interface = new_boot_interface
966 node.save()
967 # IP address should be selected over the other STICKY IP address.
968 boot_sip = factory.make_StaticIPAddress(
969 alloc_type=IPADDRESS_TYPE.AUTO, interface=new_boot_interface,
970 subnet=subnet)
971 mapping = StaticIPAddress.objects.get_hostname_ip_mapping(
972 node.nodegroup)
973 self.assertEqual({node.hostname: [boot_sip.ip]}, mapping)
974
952 def test_get_hostname_ip_mapping_prefers_physical_interfaces_to_vlan(self):975 def test_get_hostname_ip_mapping_prefers_physical_interfaces_to_vlan(self):
953 self.patch_autospec(interface_module, "update_host_maps")976 self.patch_autospec(interface_module, "update_host_maps")
954 subnet = factory.make_Subnet(977 subnet = factory.make_Subnet(
955978
=== modified file 'src/maasserver/models/tests/test_virtualblockdevice.py'
--- src/maasserver/models/tests/test_virtualblockdevice.py 2015-12-01 18:12:59 +0000
+++ src/maasserver/models/tests/test_virtualblockdevice.py 2016-01-10 08:29:39 +0000
@@ -150,6 +150,7 @@
150 def test_save_doesnt_overwrite_uuid(self):150 def test_save_doesnt_overwrite_uuid(self):
151 uuid = uuid4()151 uuid = uuid4()
152 block_device = factory.make_VirtualBlockDevice(uuid=uuid)152 block_device = factory.make_VirtualBlockDevice(uuid=uuid)
153<<<<<<< TREE
153 self.assertEqual('%s' % uuid, block_device.uuid)154 self.assertEqual('%s' % uuid, block_device.uuid)
154155
155 def test_get_parents_finds_devices(self):156 def test_get_parents_finds_devices(self):
@@ -181,3 +182,36 @@
181 self.assertItemsEqual(182 self.assertItemsEqual(
182 [fs.block_device_id for fs in volume_group.filesystems.all()],183 [fs.block_device_id for fs in volume_group.filesystems.all()],
183 [parent.id for parent in logical_volume.get_parents()])184 [parent.id for parent in logical_volume.get_parents()])
185=======
186 self.assertEquals('%s' % uuid, block_device.uuid)
187
188 def test_get_parents_finds_devices(self):
189 node = factory.make_Node()
190 factory.make_FilesystemGroup(
191 node=node,
192 group_type=factory.pick_enum(
193 FILESYSTEM_GROUP_TYPE, but_not=FILESYSTEM_GROUP_TYPE.LVM_VG))
194 fs_group_disks = [block_device.blockdevice_ptr
195 for block_device in
196 node.physicalblockdevice_set.all()
197 if not block_device.is_boot_disk()]
198 virtualblockdevice = node.virtualblockdevice_set.first()
199 self.assertEqual(
200 len(fs_group_disks), len(virtualblockdevice.get_parents()))
201
202 def test_get_parents_handles_cache_set(self):
203 # Regression test for lp1519397
204 node = factory.make_Node(with_boot_disk=False)
205 volume_group = factory.make_VolumeGroup(node=node)
206 name = factory.make_name()
207 vguuid = "%s" % uuid4()
208 size = random.randint(MIN_BLOCK_DEVICE_SIZE, volume_group.get_size())
209 logical_volume = volume_group.create_logical_volume(
210 name=name, uuid=vguuid, size=size)
211 logical_volume = reload_object(logical_volume)
212 sdb = factory.make_PhysicalBlockDevice(node=node)
213 factory.make_CacheSet(block_device=sdb, node=node)
214 self.assertItemsEqual(
215 [fs.block_device_id for fs in volume_group.filesystems.all()],
216 [parent.id for parent in logical_volume.get_parents()])
217>>>>>>> MERGE-SOURCE
184218
=== modified file 'src/maasserver/models/virtualblockdevice.py'
=== modified file 'src/maasserver/node_constraint_filter_forms.py'
=== modified file 'src/maasserver/static/css/maas-styles.css'
--- src/maasserver/static/css/maas-styles.css 2015-12-07 17:37:46 +0000
+++ src/maasserver/static/css/maas-styles.css 2016-01-10 08:29:39 +0000
@@ -1,1 +1,5 @@
1<<<<<<< TREE
1.fake{display:none}body{font-size:14px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;clear:none;display:inline-block;float:none;margin-right:2.12766%;margin-bottom:20px;position:relative;width:100%}.twelve-col .one-col,.twelve-col .two-col,.twelve-col .three-col,.twelve-col .four-col,.twelve-col .five-col,.twelve-col .six-col,.twelve-col .seven-col,.twelve-col .eight-col,.twelve-col .nine-col,.twelve-col .ten-col,.twelve-col .eleven-col{width:100%}.last-col,.last{margin-right:0}.clearfix:after,.container:after{clear:both;content:"\0020";display:block;height:0;overflow:hidden;visibility:hidden}.clear{clear:both}.clearfix{display:block}@media only screen and (min-width: 768px){body{font-size:15px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{float:left}.one-col{width:6.38297%}.two-col{width:14.89361%}.three-col{width:23.40425%}.four-col{width:31.91489%}.five-col{width:40.42553%}.six-col{width:48.93617%}.seven-col{width:57.4468%}.eight-col{width:65.95744%}.nine-col{width:74.46808%}.ten-col{width:82.97872%}.eleven-col{width:91.48936%}.twelve-col{width:100%;margin-right:0}.twelve-col .one-col{width:6.3053%;margin-right:2.21238%}.twelve-col .two-col{width:14.823%;margin-right:2.21238%}.twelve-col .three-col{width:23.3407%;margin-right:2.21238%}.twelve-col .three-col{width:48.8938%;margin-right:2.21238%}.twelve-col .four-col{width:31.8584%;margin-right:2.21238%}.twelve-col .five-col{width:40.3761%;margin-right:2.21238%}.twelve-col .six-col{width:48.8938%;margin-right:2.21238%}.twelve-col .seven-col{width:57.4115%;margin-right:2.21238%}.twelve-col .eight-col{width:65.9292%;margin-right:2.21238%}.twelve-col .nine-col{width:74.4469%;margin-right:2.21238%}.twelve-col .ten-col{width:82.9646%;margin-right:2.21238%}.twelve-col .eleven-col{width:91.4823%;margin-right:2.21238%}.twelve-col .twelve-col{width:100%;margin-right:0}.eleven-col .one-col{width:6.89238%;margin-right:2.41837%}.eleven-col .two-col{width:16.20314%;margin-right:2.41837%}.eleven-col .three-col{width:25.5139%;margin-right:2.41837%}.eleven-col .four-col{width:34.82466%;margin-right:2.41837%}.eleven-col .five-col{width:44.13542%;margin-right:2.41837%}.eleven-col .six-col{width:53.44619%;margin-right:2.41837%}.eleven-col .seven-col{width:62.75695%;margin-right:2.41837%}.eleven-col .eight-col{width:72.06771%;margin-right:2.41837%}.eleven-col .nine-col{width:81.37847%;margin-right:2.41837%}.eleven-col .ten-col{width:90.68923%;margin-right:2.41837%}.eleven-col .eleven-col{width:100%;margin-right:0}.ten-col .one-col{width:7.6%;margin-right:2.66666%}.ten-col .two-col{width:17.86666%;margin-right:2.66666%}.ten-col .three-col{width:28.13333%;margin-right:2.66666%}.ten-col .four-col{width:38.4%;margin-right:2.66666%}.ten-col .five-col{width:48.66666%;margin-right:2.66666%}.ten-col .six-col{width:58.93333%;margin-right:2.66666%}.ten-col .seven-col{width:69.19999%;margin-right:2.66666%}.ten-col .eight-col{width:79.46666%;margin-right:2.66666%}.ten-col .nine-col{width:89.73333%;margin-right:2.66666%}.ten-col .ten-col{width:100%;margin-right:0}.nine-col .one-col{width:8.46953%;margin-right:2.97176%}.nine-col .two-col{width:19.91084%;margin-right:2.97176%}.nine-col .three-col{width:31.35215%;margin-right:2.97176%}.nine-col .four-col{width:42.79346%;margin-right:2.97176%}.nine-col .five-col{width:54.23476%;margin-right:2.97176%}.nine-col .six-col{width:65.67607%;margin-right:2.97176%}.nine-col .seven-col{width:77.11738%;margin-right:2.97176%}.nine-col .eight-col{width:88.55869%;margin-right:2.97176%}.nine-col .nine-col{width:100%;margin-right:0}.eight-col .one-col{width:9.56375%;margin-right:3.3557%}.eight-col .two-col{width:22.48322%;margin-right:3.3557%}.eight-col .three-col{width:35.40268%;margin-right:3.3557%}.eight-col .four-col{width:48.32214%;margin-right:3.3557%}.eight-col .five-col{width:61.24161%;margin-right:3.3557%}.eight-col .six-col{width:74.16107%;margin-right:3.3557%}.eight-col .seven-col{width:87.08053%;margin-right:3.3557%}.eight-col .eight-col{width:100%;margin-right:0}.seven-col .one-col{width:10.98265%;margin-right:3.85356%}.seven-col .two-col{width:25.81888%;margin-right:3.85356%}.seven-col .three-col{width:40.6551%;margin-right:3.85356%}.seven-col .four-col{width:55.49132%;margin-right:3.85356%}.seven-col .five-col{width:70.32755%;margin-right:3.85356%}.seven-col .six-col{width:85.16377%;margin-right:3.85356%}.seven-col .seven-col{width:100%;margin-right:0}.six-col .one-col{width:12.89592%;margin-right:4.52488%}.six-col .two-col{width:30.31674%;margin-right:4.52488%}.six-col .three-col{width:47.73755%;margin-right:4.52488%}.six-col .four-col{width:65.15837%;margin-right:4.52488%}.six-col .five-col{width:82.57918%;margin-right:4.52488%}.six-col .six-col{width:100%;margin-right:0}.five-col .one-col{width:15.61643%;margin-right:5.47945%}.five-col .two-col{width:36.71232%;margin-right:5.47945%}.five-col .three-col{width:57.80821%;margin-right:5.47945%}.five-col .four-col{width:78.9041%;margin-right:5.47945%}.five-col .five-col{width:100%;margin-right:0}.four-col .one-col{width:19.79166%;margin-right:6.94444%}.four-col .two-col{width:46.52777%;margin-right:6.94444%}.four-col .three-col{width:73.26388%;margin-right:6.94444%}.four-col .four-col{width:100%;margin-right:0}.three-col .one-col{width:27.01421%;margin-right:9.47867%}.three-col .two-col{width:63.5071%;margin-right:9.47867%}.three-col .three-col{width:100%;margin-right:0}.two-col .one-col{width:42.53731%;margin-right:14.92537%}.two-col .two-col{width:100%;margin-right:0}.one-col .one-col{width:100%;margin-right:0}.twelve-col .last-col{margin-right:0}.eleven-col .last-col{margin-right:0}.ten-col .last-col{margin-right:0}.nine-col .last-col{margin-right:0}.eight-col .last-col{margin-right:0}.seven-col .last-col{margin-right:0}.six-col .last-col{margin-right:0}.five-col .last-col{margin-right:0}.four-col .last-col{margin-right:0}.three-col .last-col{margin-right:0}.two-col .last-col{margin-right:0}.one-col .last-col{margin-right:0}.row,#context-footer{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin:0;padding:40px 40px 20px}.row:after{content:".";visibility:hidden;display:block;height:0;clear:both}.row-feature{background:none}.container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:20px 20px 0;width:100%}.append-one{margin-right:8.51063%}.append-two{margin-right:17.02127%}.append-three{margin-right:25.53191%}.append-four{margin-right:34.04255%}.append-five{margin-right:42.55319%}.append-six{margin-right:51.06383%}.append-seven{margin-right:59.57446%}.append-eight{margin-right:68.0851%}.append-nine{margin-right:76.59574%}.append-ten{margin-right:85.10638%}.append-eleven{margin-right:93.61702%}.prepend-one{margin-left:8.51063%}.prepend-two{margin-left:17.02127%}.prepend-three{margin-left:25.53191%}.prepend-four{margin-left:34.04255%}.prepend-five{margin-left:42.55319%}.prepend-six{margin-left:51.06383%}.prepend-seven{margin-left:59.57446%}.prepend-eight{margin-left:68.0851%}.prepend-nine{margin-left:76.59574%}.prepend-ten{margin-left:85.10638%}.prepend-eleven{margin-left:93.61702%}.push-one{margin-left:57px}.pull-one,.pull-two,.pull-three,.pull-four,.pull-five,.pull-six,.pull-seven,.pull-eight,.pull-nine,.pull-ten,.pull-eleven{float:left;position:relative}.pull-one{margin-left:-6.38297%}.pull-two{margin-left:-17.02127%}.pull-three{margin-left:-25.53191%}.pull-four{margin-left:-34.04255%}.pull-five{margin-left:-34.04255%}.pull-six{margin-left:-51.06383%}.pull-seven{margin-left:-59.57446%}.pull-eight{margin-left:-68.0851%}.pull-nine{margin-left:-76.59574%}.pull-ten{margin-left:-85.10638%}.pull-eleven{margin-left:-93.61702%}.push-1,.push-two,.push-three,.push-four,.push-five,.push-six,.push-seven,.push-eight,.push-nine,.push-ten,.push-eleven{float:left;position:relative}.push-one{margin:0 -8.51063% 0 8.51063%}.push-two{margin:0 -19.14893% 0 19.14893%}.push-three{margin:0 -27.65957% 0 27.65957%}.push-four{margin:0 -36.17021% 0 36.17021%}.push-five{margin:0 -36.17021% 0 36.17021%}.push-six{margin:0 -53.19149% 0 53.19149%}.push-seven{margin:0 -61.70212% 0 61.70212%}.push-eight{margin:0 -70.21276% 0 70.21276%}.push-nine{margin:0 -78.7234% 0 78.7234%}.push-ten{margin:0 -87.23404% 0 87.23404%}.push-eleven{margin:0 -95.74468% 0 95.74468%}}@media only screen and (min-width: 984px){body{font-size:16px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{float:left}.one-col{width:6.38297%}.two-col{width:14.89361%}.three-col{width:23.40425%}.four-col{width:31.91489%}.five-col{width:40.42553%}.six-col{width:48.93617%}.seven-col{width:57.4468%}.eight-col{width:65.95744%}.nine-col{width:74.46808%}.ten-col{width:82.97872%}.eleven-col{width:91.48936%}.three-col:nth-child(1):nth-last-child(4),.three-col:nth-child(2):nth-last-child(3),.three-col:nth-child(3):nth-last-child(2),.three-col:nth-child(4):nth-last-child(1){width:23.36%}.three-col:nth-of-type(2){margin-right:2.21238%}.twelve-col{width:100%;margin-right:0}.twelve-col .one-col{width:6.3053%;margin-right:2.21238%}.twelve-col .two-col{width:14.823%;margin-right:2.21238%}.twelve-col .three-col{width:23.3407%;margin-right:2.21238%}.twelve-col .three-col:nth-child(1):nth-last-child(4),.twelve-col .three-col:nth-child(2):nth-last-child(3),.twelve-col .three-col:nth-child(3):nth-last-child(2),.twelve-col .three-col:nth-child(4):nth-last-child(1){width:23.3407%}.twelve-col .three-col:nth-of-type(2){margin-right:2.21238%}.twelve-col .four-col{width:31.8584%;margin-right:2.21238%}.twelve-col .five-col{width:40.3761%;margin-right:2.21238%}.twelve-col .six-col{width:48.8938%;margin-right:2.21238%}.twelve-col .seven-col{width:57.4115%;margin-right:2.21238%}.twelve-col .eight-col{width:65.9292%;margin-right:2.21238%}.twelve-col .nine-col{width:74.4469%;margin-right:2.21238%}.twelve-col .ten-col{width:82.9646%;margin-right:2.21238%}.twelve-col .eleven-col{width:91.4823%;margin-right:2.21238%}.twelve-col .twelve-col{width:100%;margin-right:0}.eleven-col .one-col{width:6.89238%;margin-right:2.41837%}.eleven-col .two-col{width:16.20314%;margin-right:2.41837%}.eleven-col .three-col{width:25.5139%;margin-right:2.41837%}.eleven-col .four-col{width:34.82466%;margin-right:2.41837%}.eleven-col .five-col{width:44.13542%;margin-right:2.41837%}.eleven-col .six-col{width:53.44619%;margin-right:2.41837%}.eleven-col .seven-col{width:62.75695%;margin-right:2.41837%}.eleven-col .eight-col{width:72.06771%;margin-right:2.41837%}.eleven-col .nine-col{width:81.37847%;margin-right:2.41837%}.eleven-col .ten-col{width:90.68923%;margin-right:2.41837%}.eleven-col .eleven-col{width:100%;margin-right:0}.ten-col .one-col{width:7.6%;margin-right:2.66666%}.ten-col .two-col{width:17.86666%;margin-right:2.66666%}.ten-col .three-col{width:28.13333%;margin-right:2.66666%}.ten-col .four-col{width:38.4%;margin-right:2.66666%}.ten-col .five-col{width:48.66666%;margin-right:2.66666%}.ten-col .six-col{width:58.93333%;margin-right:2.66666%}.ten-col .seven-col{width:69.19999%;margin-right:2.66666%}.ten-col .eight-col{width:79.46666%;margin-right:2.66666%}.ten-col .nine-col{width:89.73333%;margin-right:2.66666%}.ten-col .ten-col{width:100%;margin-right:0}.nine-col .one-col{width:8.46953%;margin-right:2.97176%}.nine-col .two-col{width:19.91084%;margin-right:2.97176%}.nine-col .three-col{width:31.35215%;margin-right:2.97176%}.nine-col .four-col{width:42.79346%;margin-right:2.97176%}.nine-col .five-col{width:54.23476%;margin-right:2.97176%}.nine-col .six-col{width:65.67607%;margin-right:2.97176%}.nine-col .seven-col{width:77.11738%;margin-right:2.97176%}.nine-col .eight-col{width:88.55869%;margin-right:2.97176%}.nine-col .nine-col{width:100%;margin-right:0}.eight-col .one-col{width:9.56375%;margin-right:3.3557%}.eight-col .two-col{width:22.48322%;margin-right:3.3557%}.eight-col .three-col{width:35.40268%;margin-right:3.3557%}.eight-col .four-col{width:48.32214%;margin-right:3.3557%}.eight-col .five-col{width:61.24161%;margin-right:3.3557%}.eight-col .six-col{width:74.16107%;margin-right:3.3557%}.eight-col .seven-col{width:87.08053%;margin-right:3.3557%}.eight-col .eight-col{width:100%;margin-right:0}.seven-col .one-col{width:10.98265%;margin-right:3.85356%}.seven-col .two-col{width:25.81888%;margin-right:3.85356%}.seven-col .three-col{width:40.6551%;margin-right:3.85356%}.seven-col .four-col{width:55.49132%;margin-right:3.85356%}.seven-col .five-col{width:70.32755%;margin-right:3.85356%}.seven-col .six-col{width:85.16377%;margin-right:3.85356%}.seven-col .seven-col{width:100%;margin-right:0}.six-col .one-col{width:12.89592%;margin-right:4.52488%}.six-col .two-col{width:30.31674%;margin-right:4.52488%}.six-col .three-col{width:47.73755%;margin-right:4.52488%}.six-col .four-col{width:65.15837%;margin-right:4.52488%}.six-col .five-col{width:82.57918%;margin-right:4.52488%}.six-col .six-col{width:100%;margin-right:0}.five-col .one-col{width:15.61643%;margin-right:5.47945%}.five-col .two-col{width:36.71232%;margin-right:5.47945%}.five-col .three-col{width:57.80821%;margin-right:5.47945%}.five-col .four-col{width:78.9041%;margin-right:5.47945%}.five-col .five-col{width:100%;margin-right:0}.four-col .one-col{width:19.79166%;margin-right:6.94444%}.four-col .two-col{width:46.52777%;margin-right:6.94444%}.four-col .three-col{width:73.26388%;margin-right:6.94444%}.four-col .four-col{width:100%;margin-right:0}.three-col .one-col{width:27.01421%;margin-right:9.47867%}.three-col .two-col{width:63.5071%;margin-right:9.47867%}.three-col .three-col{width:100%;margin-right:0}.two-col .one-col{width:42.53731%;margin-right:14.92537%}.two-col .two-col{width:100%;margin-right:0}.one-col .one-col{width:100%;margin-right:0}.twelve-col .last-col{margin-right:0}.eleven-col .last-col{margin-right:0}.ten-col .last-col{margin-right:0}.nine-col .last-col{margin-right:0}.eight-col .last-col{margin-right:0}.seven-col .last-col{margin-right:0}.six-col .last-col{margin-right:0}.five-col .last-col{margin-right:0}.four-col .last-col{margin-right:0}.three-col .last-col{margin-right:0}.two-col .last-col{margin-right:0}.one-col .last-col{margin-right:0}.row,#context-footer{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin:0;padding:40px 40px 20px}.row:after{content:".";visibility:hidden;display:block;height:0;clear:both}.row-feature{background:none}.container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:20px 20px 0;width:100%}.append-one{margin-right:8.51063%}.append-two{margin-right:17.02127%}.append-three{margin-right:25.53191%}.append-four{margin-right:34.04255%}.append-five{margin-right:42.55319%}.append-six{margin-right:51.06383%}.append-seven{margin-right:59.57446%}.append-eight{margin-right:68.0851%}.append-nine{margin-right:76.59574%}.append-ten{margin-right:85.10638%}.append-eleven{margin-right:93.61702%}.prepend-one{margin-left:8.51063%}.prepend-two{margin-left:17.02127%}.prepend-three{margin-left:25.53191%}.prepend-four{margin-left:34.04255%}.prepend-five{margin-left:42.55319%}.prepend-six{margin-left:51.06383%}.prepend-seven{margin-left:59.57446%}.prepend-eight{margin-left:68.0851%}.prepend-nine{margin-left:76.59574%}.prepend-ten{margin-left:85.10638%}.prepend-eleven{margin-left:93.61702%}.push-one{margin-left:57px}.pull-one,.pull-two,.pull-three,.pull-four,.pull-five,.pull-six,.pull-seven,.pull-eight,.pull-nine,.pull-ten,.pull-eleven{float:left;position:relative}.pull-one{margin-left:-6.38297%}.pull-two{margin-left:-17.02127%}.pull-three{margin-left:-25.53191%}.pull-four{margin-left:-34.04255%}.pull-five{margin-left:-34.04255%}.pull-six{margin-left:-51.06383%}.pull-seven{margin-left:-59.57446%}.pull-eight{margin-left:-68.0851%}.pull-nine{margin-left:-76.59574%}.pull-ten{margin-left:-85.10638%}.pull-eleven{margin-left:-93.61702%}.push-1,.push-two,.push-three,.push-four,.push-five,.push-six,.push-seven,.push-eight,.push-nine,.push-ten,.push-eleven{float:left;position:relative}.push-one{margin:0 -8.51063% 0 8.51063%}.push-two{margin:0 -19.14893% 0 19.14893%}.push-three{margin:0 -27.65957% 0 27.65957%}.push-four{margin:0 -36.17021% 0 36.17021%}.push-five{margin:0 -36.17021% 0 36.17021%}.push-six{margin:0 -53.19149% 0 53.19149%}.push-seven{margin:0 -61.70212% 0 61.70212%}.push-eight{margin:0 -70.21276% 0 70.21276%}.push-nine{margin:0 -78.7234% 0 78.7234%}.push-ten{margin:0 -87.23404% 0 87.23404%}.push-eleven{margin:0 -95.74468% 0 95.74468%}}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,ol,ul,li,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:300;src:url("../fonts/ubuntu-l-webfont.eot");src:url("../fonts/ubuntu-l-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-l-webfont.woff") format("woff"),url("../fonts/ubuntu-l-webfont.ttf") format("truetype"),url("../fonts/ubuntu-l-webfont.svg#ubuntulight") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:400;src:local("Ubuntu");src:url("../fonts/ubuntu-r-webfont.eot");src:url("../fonts/ubuntu-r-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-r-webfont.woff") format("woff"),url("../fonts/ubuntu-r-webfont.ttf") format("truetype"),url("../fonts/ubuntu-r-webfont.svg#ubunturegular") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:500;src:url("../fonts/ubuntu-m-webfont.eot");src:local("Ubuntu Medium"),local("Ubuntu-Medium"),url("../fonts/ubuntu-m-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-m-webfont.woff") format("woff"),url("../fonts/ubuntu-m-webfont.ttf") format("truetype"),url("../fonts/ubuntu-m-webfont.svg#ubuntumedium") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:700;src:url("../fonts/ubuntu-b-webfont.eot");src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url("../fonts/ubuntu-b-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-b-webfont.woff") format("woff"),url("../fonts/ubuntu-b-webfont.ttf") format("truetype"),url("../fonts/ubuntu-b-webfont.svg#ubuntubold") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:300;src:url("../fonts/ubuntu-li-webfont.eot");src:local("Ubuntu Light Italic"),local("Ubuntu-LightItalic"),url("../fonts/ubuntu-li-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-li-webfont.woff") format("woff"),url("../fonts/ubuntu-li-webfont.ttf") format("truetype"),url("../fonts/ubuntu-li-webfont.svg#ubuntulight_italic") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:400;src:local("Ubuntu Italic"),local("Ubuntu-Italic"),url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/GZMdC02DTXXx8AdUvU2etw.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:500;src:url("../fonts/ubuntu-mi-webfont.eot");src:local("Ubuntu Medium Italic"),local("Ubuntu-MediumItalic"),url("../fonts/ubuntu-mi-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-mi-webfont.woff") format("woff"),url("../fonts/ubuntu-mi-webfont.ttf") format("truetype"),url("../fonts/ubuntu-mi-webfont.svg#ubuntumedium_italic") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:700;src:local("Ubuntu Bold Italic"),local("Ubuntu-BoldItalic"),url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/pqisLQoeO9YTDCNnlQ9bfz8E0i7KZn-EPnyo3HZu7kw.woff") format("woff")}html{font-size:100%}body{color:#333;font-family:Ubuntu, Arial, "libra sans", sans-serif;font-weight:300}blockquote,q{quotes:none}blockquote{margin:28px 20px}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}legend{border:0;*margin-left:-7px}figure{margin:0}abbr,acronym{cursor:help}a:focus{outline:thin dotted}a:hover,a:active{outline:0}a:link,a:visited{color:#dd4814;text-decoration:none}a:hover,a:active,a:focus{text-decoration:underline}a.link-arrow:after{content:"\0000a0›"}nav ul li h2 a:after{content:"\0000a0›"}nav ul li a:after,.carousel ul li a:after,ul li p a:after{content:""}ol,ul{margin-left:20px;margin-bottom:20px}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}nav ul,nav ol{list-style:none;list-style-image:none}svg:not(:root){overflow:hidden}img{border:0;height:auto;max-width:100%}img.left{margin-right:20px}img.right{margin-left:20px}.middle img{vertical-align:middle;margin-top:4em}h1,h2,h3,h4,h5,h6{font-weight:300;line-height:1.3}h1{font-size:1.625em;margin-bottom:.5em}h2{font-size:1.438em;margin-bottom:.5em}h3{font-size:1.219em;margin-bottom:.522em}h4{font-size:1.25em;font-weight:400;margin-bottom:.615em}h5{font-size:1em;font-weight:700;margin-bottom:1em}h6{font-size:.723em;font-weight:400;margin-bottom:1em;letter-spacing:.1em;text-transform:uppercase}p,li{font-size:1em;line-height:1.5;margin:0;margin-bottom:.75em;padding:0}h2 span,h1 span{display:block}p+h2,ul+h2,ol+h2,pre+h2{margin-top:0.5625em}header nav a:link{font-weight:normal}p+h3,ul+h3,ol+h3,pre+h3{margin-top:0.78261em}p+h4,ul+h4,ol+h4,pre+h4{margin-top:1.39286em}ol+h2,p+h2,pre+h2,ul+h2{margin-top:.563em}ol+h3,p+h3,pre+h3,ul+h3{margin-top:.783em}ol+h4,p+h4,pre+h4,ul+h4{margin-top:1.219em}li{margin-bottom:.4em}li:last-of-type{margin-bottom:0}ins{background:#fffbeb;text-decoration:none}small,.smaller{font-size:13px}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{vertical-align:text-top}sub{vertical-align:text-bottom}dfn{font-style:italic}mark{background:#ff0;color:#000}code,pre{font-family:"Ubuntu Mono", "Consolas", "Monaco", "Lucida Console", "Courier New", Courier, monospace}pre{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fdf6f2;padding:.6em 1em;white-space:pre-wrap;word-wrap:break-word}blockquote{margin:0}blockquote>p{font-size:0.92857em;margin-bottom:0.92308em;font-weight:100;margin:0 0 .4em 0}blockquote small{font-size:.813em;line-height:1.4}button,input,select,textarea{font-family:Ubuntu,Arial,"libra sans",sans-serif;margin:0;vertical-align:baseline;*vertical-align:middle}select{font-size:1em;font-weight:300}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-box-sizing:content-box;-webkit-appearance:none;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-weight:300;outline:none;padding:0.6956522em 0.869565em}input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}form fieldset{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-repeat:no-repeat;background-color:#EFEEEC;background-position:-15px -15px;border:0;margin-bottom:8px;padding:15px 20px}form fieldset h3{border-bottom:1px dotted #dfdcd9;margin-bottom:9px;padding-bottom:10px}form fieldset li:first-child{margin-top:0}form input[type="text"],form input[type="email"],form input[type="tel"],form textarea{-webkit-appearance:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#fff;border:1px solid #999;display:block;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;padding:0.6956522em 0.869565em}form input:focus,form textarea:focus{border:1px solid #dd4814}form textarea[readonly='readonly']{color:#999}form input[type="checkbox"],form input[type="radio"]{margin:0;width:auto}form input[type="checkbox"]+label,form input[type="radio"]+label{display:inline;margin-left:5px;vertical-align:middle;width:auto}form input[type="submit"]{font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#dd4814;background-image:-moz-linear-gradient(#f26120, #dd4814);background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#f26120), to(#dd4814));background-image:-webkit-linear-gradient(#f26120, #dd4814);background-image:-o-linear-gradient(#f26120, #dd4814);-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border:0;color:#fff;display:block;padding:10px 14px;text-shadow:none;width:auto;margin-bottom:0}form input[type="submit"]:hover{background:#dd4814}form label{cursor:pointer;display:block;margin-bottom:4px}form label span{color:#df382c}form ul{margin-left:0}form li{list-style:none outside none;margin-top:14px}form button[type="submit"]{border:0;display:inline-block;font-family:Ubuntu, Arial, "libra sans", sans-serif;text-decoration:none;font-weight:300}form input[type="reset"]{display:none}table{border-collapse:collapse;border-spacing:0;overflow-x:scroll;margin-bottom:20px;margin:0 0 2.85714em 0;width:100%}table th,table td{padding:15px 10px;background:#f0edea;border:1px dotted #888}table td{text-align:center;vertical-align:middle}table thead th{border-collapse:separate;border-spacing:0 10px;background:#fee3d2;color:#333333;font-weight:normal}table tbody th{text-align:left;font-weight:normal;font-weight:300}table th[scope="col"]{text-align:center}table thead th:first-of-type{text-align:left}@media only screen and (max-width: 768px){table{display:block}}@media only screen and (min-width: 984px){form fieldset{padding:15px 20px}img{max-width:none}}.audience-consumer{color:#333}.audience-consumer .row-box,.audience-consumer .main-content{color:#333}.audience-consumer .inner-wrapper{background:#fff}.audience-consumer .quote-right-top{padding:60px 60px 0 40px;background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-br-287x287.png") no-repeat;height:287px;position:absolute;right:-40px;text-align:left;top:-90px;width:31.91489%}.audience-consumer .quote-right-top p{font-size:1.14286em;margin-bottom:0.75em;margin:0.769em;padding-bottom:0;color:#fff}.audience-consumer .quote-right-top p cite{font-size:0.85714em;margin-bottom:1em;color:#fff;padding:0}.audience-consumer .quote-right-top p a,.audience-consumer .quote-right p a{color:#fff}.audience-consumer .quote-right{font-size:1.28571em;margin-bottom:0.66667em;color:#fff;padding:50px 100px 0 50px;text-indent:-6px;background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-bl-287x287.png") no-repeat;min-height:287px;position:absolute;right:-20px;text-align:left;top:-90px;width:21.2006% em}.audience-consumer .quote-right cite{font-style:normal;margin-left:6px}.audience-consumer .quote-right-alt{background:url(/sites/ubuntu/latest/u/img/patterns/quote-white-br-360x360.png) 0 -100px no-repeat;color:#dd4814;padding:50px 50px 0 50px}.audience-consumer .quote-right-right{background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-br-287x287.png") no-repeat}.audience-enterprise h1{margin:0 0 18px 0}.audience-enterprise td{background:#fff}.audience-enterprise th,.audience-enterprise td{padding:6px 10px;background:#fff}.audience-enterprise th[scope="col"]{background:#E2D4DC;color:#772953}.audience-enterprise tbody th[rowspan]{background:#F7F2F6}.audience-enterprise tfoot th[rowspan]{background:#dfdcd9}.audience-enterprise tfoot td,.audience-enterprise tfoot th{font-weight:normal;background:#dfdcd9}.audience-enterprise .inner-wrapper{background:#2c001e;color:#fff}.audience-enterprise .row-box{background:#fff;color:#333}.row-enterprise{background:#772953;color:#fff;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.row-enterprise .box,.row-enterprise div{background:#772953;color:#fff}.row-enterprise a{color:#fff}.enterprise-dot-pattern{background:url("/sites/ubuntu/latest/u/img/patterns/enterprise-dot-pattern.png")}.developer-dot-pattern{background:url("/sites/ubuntu/latest/u/img/patterns/developer-dot-pattern.png")}.wrapper,header.banner .nav-primary,nav div.footer-a div,.inline-lists ul,.legal{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:auto}.inner-wrapper{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;clear:both;display:block;float:left;width:100%;margin:0;padding-bottom:20px;position:relative;z-index:1}@media only screen and (min-width: 768px){.med-six-col .three-col{width:48%}.med-six-col .three-col:nth-of-type(2n){margin-right:0}}@media only screen and (min-width: 769px){.inner-wrapper{border-radius:4px;padding-bottom:20px}}@media only screen and (min-width: 984px){.wrapper{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;margin:0 auto;position:relative;text-align:left;width:984px}.inner-wrapper{-moz-box-shadow:0 0 3px #c9c9c9;-webkit-box-shadow:0 0 3px #c9c9c9;box-shadow:0 0 3px #c9c9c9;margin:10px 0 30px}.three-col,.med-six-col .three-col{width:23.30%}.three-col.last-col:nth-of-type(2n){margin-right:0}.med-six-col .three-col:nth-of-type(2n){margin-right:20px}.med-six-col .three-col.last-col{margin-right:0}}.left{float:left}.right{float:right}.caps{text-transform:uppercase}img{border:0 none;height:auto;max-width:100%}img.left{margin-right:0}img.touch-border{margin-bottom:-3px}.accessibility-aid,.off-left{position:absolute;left:-999em}a.external{-moz-background-size:0.7em 0.7em;-webkit-background-size:0.7em 0.7em;-o-background-size:0.7em 0.7em;background-size:0.7em 0.7em;padding-right:.9em;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/external-link-orange.svg");background-position:right 1px;background-repeat:no-repeat}.opera-mini a.external,.no-svg a.external{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/external-link-orange.png")}.text-center,.align-center{text-align:center}.no-margin{margin:0}.no-margin-bottom{margin-bottom:0}.no-padding-bottom{padding-bottom:0}.pull-left-20{margin-left:-20px}.pull-right-20{margin-right:-20px}.pull-left-40{margin-left:-40px}.pull-right-40{margin-right:-41px}.no-border{border:0}.link-top{font-size:1em;margin-bottom:0.85714em;clear:both;margin-bottom:40px;margin-top:-40px}.link-top a{background:#fff;margin-right:10px;margin-top:-17px;padding:5px;float:right}.pull-bottom-right{position:absolute;right:0;bottom:0;left:auto}.box .pull-bottom-right{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0}.pull-bottom-left{margin-left:-20px;margin-bottom:-21px}.pull-top-right{margin-left:-20px;margin-top:-21px}div.box-image-centered span img.priority-0,div.row-image-centered span img.priority-0,div.row.row-image-centered span img.priority-0,img.priority-0{position:absolute;left:-999em}.priority-0,.not-for-small{position:absolute;left:-999em}.video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.video-container+h3,.video-container+.video-title{margin-top:20px}@media only screen and (max-width: 768px){.pull-right-40{margin-right:-30px}.pull-bottom-right,.pull-bottom-left{position:static}img.pull-bottom-left{margin-bottom:0;margin-left:0}}@media only screen and (min-width: 768px){div.box-image-centered span img.priority-0,div.row-image-centered span img.priority-0,div.row.row-image-centered span img.priority-0,img.priority-0{position:relative;left:auto}.priority-0,.not-for-small{position:relative;left:auto}.for-mobile,.for-small{position:absolute;left:-999em}.pull-right{float:right;margin-right:-30px}img.pull-left{margin-left:-30px}img.touch-border{float:left;margin-bottom:-30px}}@media only screen and (min-width: 769px){img.left{margin-right:20px}}@media only screen and (min-width: 984px){img.touch-border{float:left;margin-bottom:-40px}img.pull-left{margin-left:-40px}.pull-right{float:right;margin-right:-40px}.for-tablet,.for-medium{display:none}.no-border{border:0}}.caps-centered,.muted-heading{font-size:.875em;margin-bottom:20px;text-align:center;text-transform:uppercase}p.intro{font-size:1.14286em;margin-bottom:0.75em;line-height:1.4}.row div p:last-child,.row div ul:last-child{margin-bottom:0}.four-col p:last-child{margin-bottom:0}.note{color:#888;font-size:.813em}@media only screen and (min-width: 768px){p.intro{font-size:1.13333em}}@media only screen and (min-width: 984px){h1{font-size:2.8125em}h2{font-size:2em;margin-bottom:.375em}h3{font-size:1.438em;margin-bottom:.522em}h4{font-size:1em;margin-bottom:.75em}h5{font-size:1em}p,li,code,pre{font-size:16px;line-height:1.5;margin-bottom:.75em}p.intro{font-size:1.25em}}header.banner{border-top:0;min-width:100%;width:auto;background:#dd4814;display:block;position:relative;z-index:2}header.banner .nav-primary{border:0;margin:0 auto;overflow:hidden}header.banner .nav-primary ul{border-right:1px solid #ed6637;float:left;margin:0;position:relative}header.banner .nav-primary ul li{border-left:1px solid #c64012;float:left;list-style-image:none;margin:0;text-indent:0;vertical-align:bottom}header.banner .nav-primary ul li:last-child{border-right:1px solid #c64012}header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited{font-size:14px;border-left:1px solid #ec5b29;color:#fff;display:block;margin-bottom:0;padding:14px 14px 13px;position:relative;text-align:center;text-decoration:none;-webkit-font-smoothing:subpixel-antialiased;-moz-font-smoothing:subpixel-antialiased;-o-font-smoothing:subpixel-antialiased;font-smoothing:subpixel-antialiased}header.banner .nav-primary ul a.active{background:#B83A10;border-left:1px solid #ec5b29}header.banner .nav-primary ul li a:hover{background:#e1662f;border-top:0;-moz-box-shadow:inset 0 2px 2px -2px #777;-webkit-box-shadow:inset 0 2px 2px -2px #777;box-shadow:inset 0 2px 2px -2px #777}#main-navigation-link{display:none}header.banner .nav-toggle{position:absolute;right:0;display:block;width:48px;height:48px;text-indent:-99999px;background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg);-moz-background-size:25px auto;-webkit-background-size:25px auto;-o-background-size:25px auto;background-size:25px auto;background-repeat:no-repeat;background-position:center center;cursor:pointer}header.banner .no-script{display:none}.opera-mini header.banner .nav-toggle,.no-svg header.banner .nav-toggle{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.png)}header.banner nav ul{background-color:#f0f0f0;display:none;float:left}header.banner .nav-primary.active{-moz-box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);-webkit-box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);padding:0;border-bottom:1px solid #d4d7d4}header nav ul.active{display:block}header.banner .nav-primary ul li,header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:active{display:block;padding:0;margin:0;border:none}header.banner .nav-primary ul li a:hover{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background-color:#d0d0d0}header.banner .nav-primary ul li a.active{background-color:#ddd}header.banner .nav-primary ul li{border-bottom:1px solid #F2F2F4;font-size:16px}header.banner .nav-primary ul li:last-child{border:0}header.banner nav.nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{padding:14px 14px 13px;text-align:left}header.banner nav.nav-primary ul.active li ul{display:none}#menu.active:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-arrow.svg);background-repeat:no-repeat;background-position:50% 26px;content:"";display:block;height:23px;margin-left:0;padding-bottom:17px;position:relative;top:-3px;width:48px;z-index:999}html.no-svg #menu.active:after,.opera-mini #menu.active:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-arrow.png)}.nav-secondary{border-bottom:1px solid #dfdcd9;margin-bottom:0}.nav-secondary ul{float:left;margin-bottom:10px;margin-left:2px}.nav-secondary ul li{float:left;margin-top:16px;font-size:14px;margin-right:15px}.nav-secondary ul li a:link,.nav-secondary ul li a:visited{color:#333;font-size:14px;float:left}.nav-secondary ul li a:hover,.nav-secondary ul li a:active{color:#dd4814;text-decoration:none}.nav-secondary ul li,.nav-secondary ul li.active a:link,.nav-secondary ul li.active a:visited{color:#dd4814;text-decoration:none}.nav-secondary ul.breadcrumb{margin-left:20px}.nav-secondary ul.breadcrumb li,.nav-secondary ul.breadcrumb li a:link,.nav-secondary ul.breadcrumb li a:visited{color:#888;margin-right:8px}.nav-secondary ul.breadcrumb li.active a:link,.nav-secondary ul.breadcrumb li.active a:visited{color:#dd4814}header.banner h2{font-size:1.78571em;margin-bottom:0.48em;display:block;left:4px;margin-bottom:0;position:relative;text-transform:lowercase;top:14px}header.banner h2 a:link,header.banner h2 a:visited,header.banner a{color:#fff;float:left;text-decoration:none}header.banner .logo{border-left:0;float:left;height:48px;overflow:hidden}header.banner .logo-ubuntu{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/ubuntu-logo.png") no-repeat scroll 0 10px transparent;font-size:18px;margin-bottom:0;position:relative;text-transform:lowercase;float:left;margin:0;display:inline-block;height:32px;min-width:128px;margin-right:-20px;margin-left:10px;padding:7px 14px 9px 0}header.banner .logo-ubuntu img{margin-right:8px;position:absolute;left:-999em}header.banner .logo-ubuntu span{float:left;font-size:23px;font-weight:300;padding-left:122px;padding-right:20px;position:relative;top:5px}header.banner .nav-primary.nav-left .logo-ubuntu{float:right}header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-white.svg");background-size:107px 25px;float:left}html.no-svg header.banner .nav-primary.nav-right .logo-ubuntu,.opera-mini header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-white.png")}@media only screen and (max-width: 295px){header.banner .nav-primary.nav-right .logo-ubuntu,header.banner .logo-ubuntu{-moz-background-size:20px 20px;-webkit-background-size:20px 20px;-o-background-size:20px 20px;background-size:20px 20px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu_cof-white_orange-hex.svg") 0 50% no-repeat;min-width:0;width:38px}header.banner .logo-ubuntu span{padding-left:38px}}html.no-svg header.banner .logo-ubuntu,.opera-mini header.banner .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu_cof-white_orange-hex.png")}@media only screen and (max-width: 768px){header.banner .nav-primary{-moz-box-shadow:0 1px 2px 1px rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 2px 1px rgba(0,0,0,0.2);box-shadow:0 1px 2px 1px rgba(0,0,0,0.2)}header.banner .nav-primary.active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;padding:0}header nav ul.active{float:left}header nav ul.active li:last-child a:link,header nav ul.active li:last-child a:visited{border-bottom:0}header.banner .nav-primary ul{position:relative;width:100%}header.banner .nav-primary ul li.active a:link,header.banner .nav-primary ul li.active a:visited{color:#333;font-weight:700}header.banner .nav-primary ul li,header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:active{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:transparent;border:none;display:block;font-weight:300;margin:0;padding:0;width:100%}header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{background-color:#f0f0f0;border-bottom:1px solid #d4d7d4;color:#333333;font-size:1em}header.banner .nav-primary ul li:nth-last-child(-n+2) a:link,header.banner .nav-primary ul li:nth-last-child(-n+2) a:visited{border:0}header.banner .nav-primary ul li a:hover{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background:#f8f8f8}header.banner .nav-primary ul li a.active{background-color:#ddd}header.banner nav.nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{padding:8px 10px;text-align:left}header.banner .nav-primary ul li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:transparent;border-bottom:0;border-right:1px solid #d4d7d4;float:left;width:50%}.nav-secondary{background:#fff}.nav-secondary ul.second-level-nav{border-top:1px solid #d4d7d4;display:none;margin-bottom:0;margin-left:0;padding-bottom:10px;padding-top:10px;width:100%}.nav-secondary ul.second-level-nav li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;margin:0;float:left}.nav-secondary ul.second-level-nav li a,.nav-secondary ul.second-level-nav li a:link,.nav-secondary ul.second-level-nav li a:visited{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;height:100%;padding:10px 10px 10px 20px;width:100%}.nav-secondary ul.second-level-nav li.active a,.nav-secondary ul.second-level-nav li.active a:link,.nav-secondary ul.second-level-nav li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.third-level-nav{display:none;margin-bottom:0;width:100%;padding-bottom:20px}.nav-secondary ul.third-level-nav li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;margin:0;float:left;padding-left:30px}.nav-secondary ul.third-level-nav li a,.nav-secondary ul.third-level-nav li a:link,.nav-secondary ul.third-level-nav li a:visited{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px 10px 10px 0;display:block;width:100%;height:100%}.nav-secondary ul.third-level-nav li.active a,.nav-secondary ul.third-level-nav li.active a:link,.nav-secondary ul.third-level-nav li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.third-level-nav li.single-link{width:100%}.nav-secondary ul.third-level-nav li:only-child{width:100%}.nav-secondary ul.breadcrumb{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;margin-left:0;margin-bottom:0}.nav-secondary ul.breadcrumb li:first-of-type{border-bottom:1px solid #d4d7d4;margin-bottom:-1px}.nav-secondary ul.breadcrumb li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#fff;width:100%;display:block;height:40px;margin:0}.nav-secondary ul.breadcrumb li a,.nav-secondary ul.breadcrumb li a:link,.nav-secondary ul.breadcrumb li a:visited{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:16px;width:100%;color:#333333;display:block;margin-right:0;text-decoration:none;padding:8px 10px 0 10px}.nav-secondary ul.breadcrumb li.active{margin-top:12px}.nav-secondary ul.breadcrumb li.active a,.nav-secondary ul.breadcrumb li.active a:link,.nav-secondary ul.breadcrumb li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.breadcrumb li:nth-of-type(2n){margin-top:12px}.nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.svg);background-position:center center;background-repeat:no-repeat;background-size:18px;float:right;height:18px;margin-right:-5px;margin-top:-6px;padding:10px;position:relative;right:0;top:0;width:18px}.nav-secondary ul.breadcrumb li+li{display:none}.nav-secondary ul.breadcrumb li+li a:link,.nav-secondary ul.breadcrumb li+li a:active,.nav-secondary ul.breadcrumb li+li a:visited{padding-left:20px}.nav-secondary ul.breadcrumb li+li a.after{background-image:none}.nav-secondary.open ul.breadcrumb li a:after,.nav-secondary.open ul.breadcrumb li a:link:after,.nav-secondary.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.svg)}.nav-secondary.open ul.breadcrumb li+li a.after{background-image:none}.nav-secondary.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.svg);margin-top:-7px}.nav-secondary.open ul.second-level-nav,.nav-secondary.open ul.third-level-nav,.nav-secondary.open ul.breadcrumb li+li{display:block}.no-js .nav-secondary ul.second-level-nav{display:block}.no-js #main-navigation-link{position:absolute;right:10px;top:12px;width:20px;height:28px;z-index:999;text-indent:-999em;display:block}.no-js #main-navigation-link a{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;display:block;width:28px;height:28px;position:absolute}html.no-svg .nav-secondary ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg header.banner .nav-primary #google-appliance-search-form button[type="submit"],.opera-mini header.banner .nav-primary #google-appliance-search-form button[type="submit"]{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.png")}html.no-svg .nav-secondary ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg header.banner .nav-primary #google-appliance-search-form button[type="submit"],.opera-mini header.banner .nav-primary #google-appliance-search-form button[type="submit"]{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.png")}header.banner .nav-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;cursor:pointer;display:block;height:48px;position:absolute;right:0;text-indent:-99999px;width:48px}html.no-svg header.banner .nav-toggle,.opera-mini header.banner .nav-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.png")}}@media only screen and (min-width: 768px){header.banner .nav-primary ul li{border-bottom:0}}@media only screen and (min-width: 769px){header.banner{-moz-box-shadow:0 2px 2px -2px #777777 inset, 2px 1px #FFFFFF;-webkit-box-shadow:0 2px 2px -2px #777777 inset, 2px 1px #FFFFFF;box-shadow:0 2px 2px -2px #777777 inset, 2px 1px #FFFFFF}header.banner nav.nav-primary{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-bottom:0}header.banner .nav-toggle{display:none}header.banner nav ul{background-color:transparent;display:block}header.banner .nav-primary ul li{border-left:1px solid #C64012}header.banner .nav-primary ul li a:active,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:visited,header.banner nav.nav-primary ul li a:link{border-left:1px solid #EC5B29}header.banner .nav-primary ul li:last-child{border-right:1px solid #C64012;border-left:1px solid #C64012}header.banner .nav-primary ul li a.active{background-color:#B83A10}header.banner .nav-primary ul li a:hover{background-color:#E1662F}.nav-secondary ul:last-child li:last-child{padding-bottom:10px}.nav-secondary ul.breadcrumb li,.nav-secondary ul.second-level-nav li,.nav-secondary ul.third-level-nav li{margin-right:15px}.nav-secondary ul.breadcrumb{float:left}.nav-secondary ul.breadcrumb li{margin-bottom:10px}.nav-secondary ul{float:none;margin-bottom:0}.nav-secondary ul li{margin-bottom:5px}}@media only screen and (min-width: 984px){header.banner{margin-bottom:20px}header.banner nav.nav-primary ul{display:block}header.banner .nav-primary,#nav-global .nav-global-wrapper{width:984px}header.banner .nav-primary.nav-right .logo-ubuntu{margin-left:0}}header.banner .nav-primary ul{position:static}header.banner .nav-primary li ul{-moz-box-shadow:0 2px 2px -1px #777;-webkit-box-shadow:0 2px 2px -1px #777;box-shadow:0 2px 2px -1px #777;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background:#f7f7f7;border:1px solid #d5d5d5;display:none;float:none;margin:0;padding:5px 0;position:absolute;top:51px;width:200px}header.banner .nav-primary li:hover ul:after{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-up-smaller.png") no-repeat;content:'';display:block;height:8px;left:20px;position:relative;top:-13px;width:200px;z-index:999}.no-generatedcontent header.banner .nav-primary li ul{-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px;top:48px}header.banner .nav-primary li ul .arrow-up{display:none}header.banner .nav-primary li ul li{border:0;float:none}header.banner .nav-primary li ul li a:link,header.banner .nav-primary li ul li a:visited{border:0;color:#333333;padding:0 0 11px 14px;text-align:left;width:170px}header.banner .nav-primary li ul li a:hover{background:none repeat scroll 0 0 transparent;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;color:#DD4814}header.banner .nav-primary li ul li.first a:link,header.banner .nav-primary li ul li.first a:visited,header.banner .nav-primary li ul li:first-of-type a:link{padding:10px 14px}header.banner .nav-primary li ul li.active a:link,header.banner .nav-primary li ul li.active a:visited{background:none repeat scroll 0 0 transparent !important}header.banner .nav-primary li ul .promo{border-top:1px solid #D5D5D5;float:left;margin-top:5px;padding:15px 0 0}header.banner .nav-primary li ul .promo a:link,header.banner .nav-primary li ul .promo a:visited{background:none repeat scroll 0 0 transparent;border-left:0 none;color:#333333;height:auto;padding:0;text-align:left}header.banner .nav-primary li ul .promo p{margin:0 10px}header.banner .nav-primary li ul .promo a:hover{box-shadow:none;color:#DD4814}header.banner .nav-primary li ul .promo img{margin-top:14px;margin-bottom:-6px;-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px;position:relative;top:1px}header.banner .nav-primary li ul .promo .category{color:#888;font-size:11px;margin:0 10px;text-transform:uppercase}header.banner .nav-primary li:hover ul{display:block}html.lt-ie8 header.banner .nav-primary li:hover ul{display:none}.header-search,#box-search{padding:7px 0 7px 14px;overflow:hidden}.header-search input[type="search"],.header-search input[type="text"],#box-search input[type="search"],#box-search input[type="text"]{-webkit-appearance:none;-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;-ms-transition:all 0.5s ease-out;-o-transition:all 0.5s ease-out;transition:all 0.5s ease-out;background-color:#be3d00;border:none;color:#fff;display:block;float:left;font-size:16px;height:2.1em;margin-bottom:0;padding:0.5em 2.5em 0.5em 0.5em;width:100%}.header-search ::-webkit-input-placeholder,#box-search ::-webkit-input-placeholder{color:white;opacity:0.4}.header-search ::-webkit-input-placeholder,#box-search ::-webkit-input-placeholder{color:white;opacity:0.4}.header-search ::-moz-placeholder,#box-search ::-moz-placeholder{color:white;opacity:0.4}.header-search :-ms-input-placeholder,#box-search :-ms-input-placeholder{color:white;opacity:0.4}.header-search input:-moz-placeholder,#box-search input:-moz-placeholder{color:white;opacity:0.4}.header-search ::placeholder,#box-search ::placeholder{color:white;opacity:0.4}.header-search input[type="search"]:focus,#box-search input[type="search"]:focus{background-color:#a63603}.header-search button[type=submit],#box-search button[type=submit]{padding:3px 2px;line-height:0;float:left;margin-left:-40px;display:block;background:none;overflow:visible}.header-search button[type=submit]:hover,#box-search button[type=submit]:hover{background:none}.header-search button[type=submit] img,#box-search button[type=submit] img{height:28px;width:28px}header.banner .search-toggle{-moz-background-size:20px 20px;-webkit-background-size:20px 20px;-o-background-size:20px 20px;background-size:20px 20px;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search_icon_white_64.png");background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search.svg");background-position:center center;background-repeat:no-repeat;display:block;height:48px;outline:none;overflow:hidden;position:absolute;right:58px;text-indent:-999em;top:0;width:24px}.search-toggle:link,.search-toggle:active{outline:none}#box-search,.header-search{background:#f0f0f0;border:0;display:none;float:left;margin-bottom:0;position:relative;margin:0 0 -1px 0;padding:0;width:100%;z-index:3}#box-search.active,.header-search.active,.header-search.open{display:block}#box-search div,.header-search div{-moz-box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);-webkit-box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);background:#f0f0f0;margin:10px;position:relative;z-index:1}#box-search form input[type="search"],.header-search form input[type="search"]{font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:4px 4px 4px 4px;-moz-border-radius:4px 4px 4px 4px;border-radius:4px 4px 4px 4px;-moz-box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;border:0;color:#333;font-size:16px;height:auto;margin:0;float:left;padding:9px 10px;width:100%}.yes-js .header-inner #box-search,.yes-js .header-inner .header-search{display:none}.yes-js .header-inner #box-search form,.yes-js .header-inner .header-search form{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0;margin-right:0;overflow:hidden;padding:10px;top:0;z-index:999;position:relative;width:100%}@media only screen and (max-width: 768px){header.banner .search-toggle{right:48px}html.no-svg .search-toggle,.opera-mini .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-white.png")}}@media only screen and (min-width: 768px){header.banner .search-toggle{display:none}}@media only screen and (min-width: 960px){#box-search,.header-search{background:none;overflow:hidden;padding:7px 0 7px 14px;border-right:0 none;float:right;margin-bottom:0;padding-bottom:5px;padding-right:0;padding-top:7px;max-width:220px}#box-search form input[type="text"],#box-search form input[type="search"],.header-search form input[type="text"],.header-search form input[type="search"]{-moz-box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-search.png") no-repeat scroll 5px center,none repeat scroll 0 0 #BE3D00;border:6px solid #DE6532;border-width:0 0 1px;color:#fff;font-size:0.813em;height:24px;margin-bottom:0;padding:4px 4px 4px 30px;transition:all 0.5s ease 0s;width:86px}}@media only screen and (max-width: 960px){header.banner nav.nav-primary .header-search{padding:0;position:relative;top:0;width:100%}header.banner nav.nav-primary .header-search input[type="search"]{border-radius:0;background:#f7f7f7;color:#333}header.banner nav.nav-primary .header-search button[type="submit"]{width:32px;height:38px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.svg") no-repeat scroll center center transparent;background-size:28px 28px}header.banner nav.nav-primary .header-search button[type="submit"] img{max-width:none;display:none}header.banner nav.nav-primary .header-search.open{display:block}header.banner .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-white.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;cursor:pointer;right:0;display:block;height:48px;position:absolute;text-indent:-99999px;width:48px}html.no-svg header.banner .search-toggle,.opera-mini header.banner .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/img/search-white.png")}.opera-mini x:-o-prefocus,.opera-mini header.banner .search-toggle{-o-background-size:25px auto;background-size:25px auto}}@media only screen and (min-width: 984px){#box-search,.header-search{display:block;margin-right:0}#box-search form input[type="text"]:focus,.header-search form input[type="text"]:focus{width:160px}}@media only screen and (max-width: 768px){header.banner .search-toggle{right:48px}}body.ubuntu-search .nav-secondary,body.search-results .nav-secondary,body.search-no-results .nav-secondary{display:none}body.ubuntu-search section>h1,body.ubuntu-search section article h1,body.search-results section>h1,body.search-results section article h1,body.search-no-results section>h1,body.search-no-results section article h1{padding-bottom:10px;font-size:1.438em;margin-bottom:0}body.ubuntu-search section>h1,body.search-results section>h1,body.search-no-results section>h1{border-bottom:1px dotted #dfdcd9}body.ubuntu-search .main-search,body.search-results .main-search,body.search-no-results .main-search{padding:20px 0;margin:0 0 20px 0;background-color:transparent}body.ubuntu-search .main-search input[type="search"],body.search-results .main-search input[type="search"],body.search-no-results .main-search input[type="search"]{float:left;width:100%;font-size:2em;border:1px solid #999;-moz-box-sizing:border-box;box-sizing:border-box;padding:0.2em 65px 0.2em 0.2em}body.ubuntu-search .main-search button[type=submit],body.search-results .main-search button[type=submit],body.search-no-results .main-search button[type=submit]{padding:4px;line-height:0;float:left;margin-left:-53px;display:block;background:none;overflow:visible;width:auto;margin-top:-4px}body.ubuntu-search .main-search button[type=submit]:hover,body.search-results .main-search button[type=submit]:hover,body.search-no-results .main-search button[type=submit]:hover{background:none}body.ubuntu-search .main-search button[type=submit] img,body.search-results .main-search button[type=submit] img,body.search-no-results .main-search button[type=submit] img{height:45px;width:45px}body.ubuntu-search .search-result h1 .title-main,body.search-results .search-result h1 .title-main,body.search-no-results .search-result h1 .title-main{margin-right:20px}body.ubuntu-search .search-result h1 .result-url,body.search-results .search-result h1 .result-url,body.search-no-results .search-result h1 .result-url{color:#999;overflow:hidden;text-overflow:ellipsis;display:block;vertical-align:bottom;padding-bottom:2px}body.ubuntu-search .search-result h1 .result-url a,body.search-results .search-result h1 .result-url a,body.search-no-results .search-result h1 .result-url a{color:#999}body.ubuntu-search .search-result p,body.search-results .search-result p,body.search-no-results .search-result p{margin-bottom:0}body.ubuntu-search .num-results,body.search-results .num-results,body.search-no-results .num-results{display:inline-block;margin-left:20px}body.ubuntu-search .bottom-results-total,body.search-results .bottom-results-total,body.search-no-results .bottom-results-total{text-align:center;width:100%;overflow:visible;padding-top:20px;margin:0}body.ubuntu-search .bottom-nav,body.search-results .bottom-nav,body.search-no-results .bottom-nav{overflow:hidden;margin-top:-26px}body.ubuntu-search .bottom-nav ul,body.search-results .bottom-nav ul,body.search-no-results .bottom-nav ul{margin-bottom:0;margin-left:0;padding:0;overflow:hidden}body.ubuntu-search .bottom-nav li,body.search-results .bottom-nav li,body.search-no-results .bottom-nav li{float:left;margin-left:15px}body.ubuntu-search .bottom-nav li:first-child,body.search-results .bottom-nav li:first-child,body.search-no-results .bottom-nav li:first-child{margin-left:0}body.ubuntu-search .nav-back,body.search-results .nav-back,body.search-no-results .nav-back{float:left}body.ubuntu-search .nav-back li:before,body.search-results .nav-back li:before,body.search-no-results .nav-back li:before{content:"\2039";color:#dd4814;margin-right:5px}body.ubuntu-search .nav-back li.item-extreme:before,body.search-results .nav-back li.item-extreme:before,body.search-no-results .nav-back li.item-extreme:before{content:"\2039\2039"}body.ubuntu-search .nav-forward,body.search-results .nav-forward,body.search-no-results .nav-forward{float:right}body.ubuntu-search .nav-forward li:after,body.search-results .nav-forward li:after,body.search-no-results .nav-forward li:after{content:"\203A";color:#dd4814;margin-left:5px}body.ubuntu-search .nav-forward li.item-extreme:after,body.search-results .nav-forward li.item-extreme:after,body.search-no-results .nav-forward li.item-extreme:after{content:"\203A\203A"}body.ubuntu-search .error-notification,body.search-results .error-notification,body.search-no-results .error-notification{background-color:#fdffdc;color:#333;padding:20px;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:20px;display:block}body.ubuntu-search .result-line,body.search-results .result-line,body.search-no-results .result-line{color:#ada69e}body.ubuntu-search .results-top,body.search-results .results-top,body.search-no-results .results-top{border-bottom:1px dotted #dfdcd9;padding-bottom:0.5em}body.ubuntu-search .search-container,body.search-results .search-container,body.search-no-results .search-container{padding-bottom:0}@media only screen and (min-width: 768px){.ubuntu-search .main-search button[type=submit]{margin-left:-60px;margin-top:0}}body footer.global #nav-global li:first-of-type a{margin-left:0}footer.global{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-moz-box-shadow:inset 0 2px 2px -1px #d3d3d3;-webkit-box-shadow:inset 0 2px 2px -1px #d3d3d3;box-shadow:inset 0 2px 2px -1px #d3d3d3;background:none;border-top:0;clear:both;display:block;padding:30px 10px 20px;position:relative;width:100%}footer.global .legal{margin:0 auto;width:100%}footer.global .legal{background-image:none;position:relative;clear:both;min-height:40px}footer.global .legal p,footer.global .legal ul{padding-left:0}footer.global h2{font-size:0.75em;line-height:1.4;margin-bottom:0;padding-bottom:0.5em}footer.global h2,footer.global h2 a:link,footer.global h2 a:visited{color:#333;font-weight:normal}footer.global nav ul li h2 a:after{content:""}footer.global ul{margin:0}footer.global nav ul li.two-col{display:inline-block;min-height:10em;vertical-align:top}footer.global nav ul li li{font-size:0.85714em;margin-bottom:1em;font-size:0.75em;margin-bottom:0}footer.global ul li li a:link,footer.global ul li li a:visited{color:#333;margin-bottom:0}footer.global ul li li a:hover,footer.global ul li li a:active,footer.global h2 a:hover,footer.global h2 a:active{color:#dd4814}footer.global .inline li{display:inline}footer.global p,footer.global ul.inline li a{color:#333;font-size:12px;margin-bottom:0}footer.global ul.inline li a:hover{color:#dd4814}footer.global ul.inline li:after{color:#888;content:"\00b7";vertical-align:middle;margin:0 5px}footer.global ul.inline li:last-child{width:120px}footer.global ul.inline li:last-child:after{content:""}footer.global .inline li{float:none;margin-bottom:0}footer.global .top-link{-moz-box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;-webkit-box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;background:none repeat scroll 0 0 transparent;border:0 none;float:left;font-size:0.75em;letter-spacing:0.05em;margin:0 0 0 -10px;padding-right:20px;text-transform:uppercase;width:100%}footer.global .top-link a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-upload-warmgrey.svg");background-position:10px center;background-repeat:no-repeat;background-size:14px 14px;border-bottom:0 none;color:#888888;display:block;float:none;font-weight:400;padding:12px 0 12px 28px}html.no-svg footer.global .top-link a,.opera-mini footer.global .top-link a{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-upload-warmgrey.png")}@media only screen and (max-width: 768px){footer.no-global .legal{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;box-shadow:0 2px 2px -1px #D3D3D3 inset;padding-top:10px;margin-left:-10px;padding-left:10px;padding-right:10px}#livechat-eye-catcher{display:block}}@media only screen and (min-width: 768px){footer.global .inline li{display:inline;float:left}}@media only screen and (min-width: 769px){footer.global .top-link{display:none}footer.global .footer-b h2 a i{font-style:normal;display:inline}}@media only screen and (min-width: 984px){footer.global .legal{width:984px}footer.global{padding:30px 0 20px}footer.global .legal{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-grey.png") 100% 0 no-repeat}footer.global .footer-a{display:block}}#context-footer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1em;margin-bottom:0.85714em;border-bottom:0;clear:both;padding-bottom:1px;padding-top:0;position:relative;margin-bottom:0;margin-left:0;margin-right:0;width:100%}#context-footer hr{-moz-box-shadow:inset 0 2px 2px -2px #333;-webkit-box-shadow:inset 0 2px 2px -2px #333;box-shadow:inset 0 2px 2px -2px #333;background:#dd4814;height:14px;margin:0 0 10px;border:0;clear:both}#context-footer div.twelve-col{display:table;float:none;margin-bottom:7px}#context-footer div div{display:block;padding-left:0;margin-bottom:20px}#context-footer div div div{display:block;padding-left:0;margin-bottom:0}#context-footer div div.feature-one{padding-left:0}#context-footer div div.feature-four{margin-bottom:0;margin-right:0}#context-footer>div{padding-left:10px;padding-right:10px}#context-footer ul{margin-bottom:5px}#context-footer li.active{display:none}#context-footer h3{font-size:1.14286em;margin-bottom:0.75em;font-weight:normal}#context-footer .list a:after,#context-footer a.link-arrow:after,#context-footer nav ul li h2 a:after{content:' \203A'}@media only screen and (min-width: 768px){#context-footer{margin-bottom:12px;padding-left:30px;padding-right:30px}#context-footer div+div{width:31%}#context-footer div div.feature-four{padding-bottom:20px}#context-footer hr{margin:0 -30px 40px}#context-footer>div{padding-left:0;padding-right:0}}@media only screen and (min-width: 984px){#context-footer{padding:0 40px 10px}#context-footer div div{display:table-cell;float:none;padding-left:20px;margin-bottom:0}#context-footer hr{margin:0 -40px 40px}}a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#dd4814;color:#fff;text-decoration:none;display:inline-block;margin:0;font-family:Ubuntu, Arial, 'libra sans', sans-serif;font-weight:300;-webkit-font-smoothing:subpixel-antialiased;-moz-font-smoothing:subpixel-antialiased;-o-font-smoothing:subpixel-antialiased;font-smoothing:subpixel-antialiased;padding:8px 14px;width:100%;text-align:center}a.cta-large,button.cta-large{font-size:1.28571em;margin-bottom:0.66667em;padding:10px 20px}a.link-cta-canonical,button.cta-canonical,form button.cta-canonical[type="submit"],form input.cta-canonical[type="submit"]{background:#772953;color:#fff}a.link-cta-inverted,button.cta-inverted{background:#fff;color:#333}.row-enterprise a.link-cta-canonical,.row-enterprise button.link-cta-canonical{background:#fff;color:#772953}a.link-cta-ubuntu:hover,a.link-cta-ubuntu:hover,button.cta-ubuntu:hover,form button[type="submit"]:hover,form input[type="submit"]:hover{background:#c03f11;text-decoration:none}a.link-cta-canonical:hover,button.cta-canonical:hover{background:#5f2143;text-decoration:none}a.link-cta-inverted:hover,.row-enterprise a.link-cta-canonical:hover,button.cta-inverted:hover,.row-enterprise button.cta-canonical:hover{background:#fff;text-decoration:underline}a.cta-deactivated,a.cta-deactivated:hover,button.cta-deactivated,button.cta-deactivated:hover{background:#efefef;color:#fff;cursor:not-allowed}@media only screen and (min-width: 768px){a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{width:auto}}@media only screen and (min-width: 984px){a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{width:auto}}form input,form select,form textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}form .fieldset-submit ul{margin-bottom:0}form fieldset .mktError,form fieldset .errMsg,form fieldset .reqMark{color:#df382c}form fieldset .mktFormMsg{clear:both;display:block}.row{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:1px dotted #888;clear:both;padding:20px 10px 0;position:relative}.row br{display:none}.row.no-padding-bottom{padding-bottom:0 !important}.row-grey{background:#f7f7f7}.no-border{border:0}#main-content .row-hero{margin-top:20px;padding-top:0}.row-background{color:#fff;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/backgrounds/image-background-wallpaper.jpg") no-repeat scroll 50% 50% #4b1827}.row-background a.alternate{color:#fff;text-decoration:underline}.row-background a.alternate:hover{color:rgba(255,255,255,0.6)}@media only screen and (min-width: 768px){.row-background{background-position:center 50%;background-size:100% auto}}.strip{width:100%;display:block}.strip-dark{background-color:#2c001e;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/backgrounds/background-grid.png");background-repeat:repeat;color:#fff}.strip-dark .list-ubuntu li{border:0}.strip-dark .resource{color:#333;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.strip-dark .resource:before{border-right-color:#2c001e}#main-content .strip-dark .resource:before{border-bottom-width:29px;right:-2px;top:-1px}#main-content .strip-dark .resource:hover:before{border-bottom-width:34px}#main-content .strip-dark .resource h2{padding-right:20px}.row-aux{background-color:rgba(255,255,255,0.6);text-align:center}.row-aux h2,.row-aux p{text-align:left}.row-aux a p{color:#333;margin-bottom:30px}.row-step h2{position:relative;top:5px}.row-step .step{position:relative;top:-5px;height:32px;width:32px;border-radius:50%;border:3px solid #dd4814;color:#dd4814;line-height:32px;text-align:center;background-color:#fff;font-size:23px;font-weight:400}@media only screen and (min-width: 768px){.row{padding:30px}#main-content .row-hero{margin-top:40px}}@media only screen and (min-width: 769px){.row-step .step{height:42px;width:42px;line-height:42px}.row br{display:block}}@media only screen and (min-width: 984px){.row br{display:block}.row{padding:60px 40px 40px}.no-border{border:0}}.box,.box-grey{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1.333em 20px}.box{background:#fff;border:1px solid #dfdcd9}.box-grey{background:#f7f7f7;color:#333}.box-orange{background:#dd4814;color:#fff}.box-highlight{-moz-box-shadow:0 2px 2px 0 #c2c2c2;-webkit-box-shadow:0 2px 2px 0 #c2c2c2;box-shadow:0 2px 2px 0 #c2c2c2;border:1px solid #f7f7f7}.box-textured{-moz-box-shadow:0 2px 2px 0 #c2c2c2;-webkit-box-shadow:0 2px 2px 0 #c2c2c2;box-shadow:0 2px 2px 0 #c2c2c2;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/grey-textured-background.jpg");border:0}.box-padded{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#efefef;border:0;margin-bottom:20px;padding:6px 5px}.box-padded h3{font-size:1.39286em;margin-bottom:0.61538em;margin-left:5px;margin-top:5px}.box-padded li h3{font-size:1.39286em;margin-bottom:0.61538em;margin:0}.box-padded div{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;overflow:hidden;padding:8px 8px 2px}.box-padded-feature{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/soft-centre-bkg.gif") repeat scroll 0 0 #a09f9f;border:0;margin-bottom:20px;padding:11px 5px 6px}.box-padded-feature h3{color:#fff;margin-left:5px;font-size:1.39286em;margin-bottom:0.61538em}.box-padded-feature h4{font-size:1.14286em;margin-bottom:0.75em;font-weight:normal}.box-padded-feature>div{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;overflow:hidden;padding:20px 8px}.box-padded-feature div div{margin-bottom:0}.box-padded-feature .inline-icons{display:table;width:100%;margin:0;text-align:center}.box-padded-feature .inline-icons li{display:table-cell;text-align:left;float:none}.box-padded-feature .one-col{width:48px;float:left}.resource{cursor:pointer;padding-bottom:40px;position:relative;-moz-transition:background .2s ease-out;-webkit-transition:background .2s ease-out;transition:background .2s ease-out}.resource h2{padding-right:20px}.resource.five-col h2 a:link,.resource.five-col h2 a:visited,.resource.four-col h2 a:link,.resource.four-col h2 a:visited{font-size:inherit !important}.resource.four-col h2 a:link,.resource.four-col h2 a:visited{font-size:1.125em}.resource.twelve-col h2 a:link,.resource.twelve-col h2 a:visited{font-size:1.40625em}.resource:hover{background-color:#fafafa}.resource:after{-moz-box-shadow:0 -1px 2px 0 #ddd;-webkit-box-shadow:0 -1px 2px 0 #ddd;box-shadow:0 -1px 2px 0 #ddd;content:'';height:1px;position:absolute;right:-6px;top:14px;-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);-moz-transition:all .2s ease-out;-webkit-transition:all .2s ease-out;transition:all .2s ease-out;width:41px;z-index:2}.resource:hover:after{right:-9px;top:18px;width:48px}.resource:before{content:'';position:absolute;-moz-transition:border-width .2s ease-out;-webkit-transition:border-width .2s ease-out;transition:border-width .2s ease-out;top:-2px;right:-3px;width:0;height:0;border-bottom:30px solid #fdfdfd;border-right:30px solid #fff;-webkit-box-shadow:-2px 2px 2px rgba(176,176,176,0.4);-moz-box-shadow:-2px 2px 2px rgba(176,176,176,0.4);box-shadow:-2px 2px 2px rgba(176,176,176,0.4);z-index:2;-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0}.resource:hover:before{border-bottom-width:35px;border-right-width:35px}.resource:last-of-type{margin-bottom:30px}.resource .content-cat{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-resource-hub-icon-document.png") left center no-repeat;color:#aea79f;font-size:14px;letter-spacing:1px;margin:0;padding-left:20px;padding:0;position:absolute;text-transform:uppercase}.resource .content-cat-webinar{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-resource-hub-webinar.png") left center no-repeat}.resource.box-image-centered div+span img{margin-top:40px}html.yui3-js-enabled .resource:hover a{text-decoration:underline}.row-grey .resource:before{border-right-color:#f7f7f7}@media only screen and (max-width: 768px){.box-padded-feature .inline-icons li{float:left;display:block}.box-padded-feature .one-col{width:48px;float:left}}.arrow-up,.arrow-down,.arrow-right,.arrow-left{height:11px;position:absolute;width:18px}.arrow-up{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-up.png") 0 0 no-repeat;left:20px;top:-11px}.arrow-down{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-down.png") 0 0 no-repeat;bottom:-11px;right:20px}.arrow-right{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-right.png") 0 0 no-repeat;height:18px;right:-11px;top:20px;width:11px}.arrow-left{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-left.png") 0 0 no-repeat;bottom:20px;height:18px;left:-11px;width:11px}div>.arrow-left{left:-10px}@media only screen and (min-width: 769px){html.yui3-js-enabled .arrow{visibility:visible}}.list,.list-ubuntu,.list-canonical{list-style:none;margin-left:0}.list li,.list-ubuntu li,.list-canonical li{border-bottom:1px dotted #888;margin-bottom:0;padding:10px 0}.list li:last-of-type,.list li.last-item,.list-ubuntu li:last-of-type,.list-ubuntu li.last-item,.list-canonical li:last-of-type,.list-canonical li.last-item{border:0;padding-bottom:0}.list article{border-bottom:1px dotted #888;margin-bottom:0;padding:10px 0}.list-spaced article,.list-spaced li{padding:30px 0}nav .list a{display:block}.list-ubuntu li,.list-canonical li{background-repeat:no-repeat;background-position:0 1em;padding-left:25px}.list-ubuntu li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-orange.svg")}.list-canonical li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-midaubergine.svg")}.list-warm li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-warmgrey.svg")}.list-dark li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-darkaubergine.svg")}.vertical-divider .list-canonical li,.vertical-divider .list-ubuntu li{padding-left:25px}html.no-svg .list-ubuntu li,.opera-mini .list-ubuntu li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-orange.png")}html.no-svg .list-canonical li,.opera-mini .list-canonical li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-midaubergine.png")}html.no-svg .list-warm li,.opera-mini .list-warm li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-warmgrey.png")}html.no-svg .list-dark li,.opera-mini .list-dark li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-darkaubergine.png")}.no-bullets{list-style:none;margin-left:0}.row .combined-list ul,.row .combined-list div{margin-bottom:0}.row .combined-list li.last-item{border-bottom:1px dotted #888;padding-bottom:10px}.row .combined-list div.last-col,.row .combined-list ul.last-col{margin-bottom:20px}.row .combined-list div.last-col li.last-item,.row .combined-list ul.last-col li.last-item{border-bottom:0;padding-bottom:0}.inline{margin-left:0}.inline li{display:inline;list-style:none;margin-left:0;float:left}@media only screen and (min-width: 768px){.row .combined-list ul,.row .combined-list div{margin-bottom:20px}.row .combined-list li.last-item{border-bottom:0;padding-bottom:0}}ul.inline-logos{float:left;margin-left:0;padding:0;text-align:center;width:100%}ul.inline-logos li{clear:none;display:inline-block;float:none;margin:10px 20px;padding:0}ul.inline-logos li.clear-row{clear:left}ul.inline-logos li.last-item{border:0}ul.inline-logos img{-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;-ms-transition:all 0.5s ease-out;-o-transition:all 0.5s ease-out;transition:all 0.5s ease-out;vertical-align:middle;max-width:115px;max-height:32px}.inline-icons{margin:0 0 20px}.inline-icons li{margin-right:20px;margin-bottom:20px;text-align:left;display:inline-block}.inline-icons li.last-item{margin-right:0}.inline-icons.no-margin-bottom li{margin-bottom:0}.inline-icons img{vertical-align:middle;max-width:115px;max-height:32px}@media only screen and (max-width: 768px){ul.inline-logos img{max-width:172px;max-height:48px}}@media only screen and (min-width: 769px){ul.inline-logos li{clear:none;display:inline-block;height:auto;margin:20px 0;line-height:60px;padding:0 40px}ul.inline-logos li img{float:none;vertical-align:middle;max-width:200px;max-height:45px}}@media only screen and (min-width: 984px){.inline-icons{text-align:left;margin-bottom:20px}}blockquote.pull-quote{text-indent:0}blockquote.pull-quote p{color:#333;padding-left:10px;padding-right:10px;font-size:1.77379em;margin-bottom:0.48323em;text-indent:-.4em;margin-left:.4em;line-height:1.3}blockquote.pull-quote p span{font-weight:bold;color:#dd4814;line-height:0;position:relative;left:-5px}blockquote.pull-quote p span+span{left:5px}blockquote.pull-quote p cite{margin:10px 0 0;font-weight:300;display:block;font-size:.75em;text-indent:0}blockquote.pull-quote.js{padding-left:60px;display:table-cell}blockquote.quote-canonical,blockquote.quote-canonical-white{font-size:1.14286em;margin-bottom:0.75em;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-white-360x360.png") no-repeat 20px -130px;color:#772953;float:right;font-size:1em;height:215px;margin-top:0;padding:20px 60px 0;position:relative;width:236px}blockquote.quote-canonical-white{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-aubergine-345x345.png") no-repeat 0 0;color:#fff;padding:80px 60px 0;height:265px}blockquote.quote p:first-child{font-size:1.28571em;margin-bottom:0.66667em;line-height:1.3;text-indent:-7px}blockquote.quote-right-bottom{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-quote-orange.svg");background-repeat:no-repeat;background-size:287px 286px;color:#fff;height:167px;padding:60px 40px;position:static;right:-40px;top:-90px;width:207px}blockquote.quote-right-bottom p{color:#fff}blockquote.quote-grey{font-size:2.57143em;margin-bottom:0.33333em;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-grey-br-211x211.png") no-repeat scroll 0 0 transparent;color:#fff;height:152px;line-height:40px;margin-left:20px;padding:60px 0 0;text-align:center;width:211px}blockquote.quote-bottom-left{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-orange-bl-287x287.png") no-repeat;color:#fff;height:167px;padding:55px 40px 70px 45px;width:225px}html.no-svg blockquote.quote-right-bottom,.opera-mini blockquote.quote-right-bottom{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-quote-orange.png")}.row-quote{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.row-quote blockquote{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;margin:0;padding:0}.row-quote blockquote p{margin-bottom:.75em;line-height:1.3;color:#333;padding-left:10px;padding-right:10px;text-indent:0}.row-quote blockquote span{font-weight:bold;color:#dd4814;line-height:0;position:relative;left:-5px}.row-quote blockquote span+span{left:5px}.row-quote blockquote cite{color:#333;font-style:normal;margin-bottom:0;font-size:.75em;text-indent:-14px;text-indent:0}.row-quote .quote-twitter{background:#fcece7 url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/pictogram-twitter-115x139.png") 20px bottom no-repeat;padding:20px 20px 20px 23.40425%}.row-quote .quote-twitter-small{background:#fcece7 url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/pictogram-twitter-54x63.png") 99% bottom no-repeat;padding:20px 20px 20px 80px}.row-quote .quote-twitter-small p{margin:0;padding:0}blockquote.quote-canonical,blockquote.quote-canonical-white{background:none;color:#333;width:auto;height:auto;padding:0 30px;margin-top:20px}@media only screen and (min-width: 768px){.row-quote blockquote{text-indent:-7px}.pull-quote{text-indent:-.4em}.row-quote blockquote p{font-size:1.77357em;margin-bottom:0.48329em}blockquote.pull-quote p,.row-quote blockquote p{padding-left:0;padding-right:0;text-indent:-.7em}blockquote.pull-quote p span,.row-quote blockquote p span{font-size:1.391304348em}blockquote.pull-quote p cite,.row-quote blockquote p cite{margin-left:0;text-indent:0}blockquote.pull-quote p span,.row-quote blockquote p span{top:5px}}@media only screen and (min-width: 769px){.row-quote blockquote p{font-size:1.77357em;margin-bottom:0.48329em;text-indent:-.4em}}@media only screen and (min-width: 984px){.row-quote blockquote{padding:0 80px 20px;text-indent:-10px}blockquote.pull-quote p span,.row-quote blockquote p span{top:10px}}html.js .tabbed-content .accordion-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:auto;padding-bottom:.6em;padding-right:20px}html.yui3-js-enabled .tabbed-menu{display:none;padding-bottom:20px;padding-top:20px}html.yui3-js-enabled .arrow{display:none;position:absolute;visibility:hidden}html.yui3-js-enabled .tabbed-content{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:8px 8px 0;background:#f7f7f7;margin-bottom:8px}html.yui3-js-enabled .tabbed-content.hide{display:block;opacity:1 !important}html.yui3-js-enabled .tabbed-content .title{display:none}html.yui3-js-enabled .tabbed-content div{display:none}html.yui3-js-enabled .tabbed-content .accordion-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-down.svg") no-repeat scroll right 3px #f7f7f7;color:#333;display:block;font-size:16px;padding-bottom:.6em;padding-right:20px;width:100%}html.yui3-js-enabled .tabbed-content.open .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-up.svg");margin-bottom:10px}html.yui3-js-enabled .tabbed-content.open div{display:block}html.yui3-js-enabled html.yui3-js-enabled.opera-mini .tabbed-content .accordion-button,html.yui3-js-enabled html.yui3-js-enabled.no-svg .tabbed-content .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-right.png")}html.yui3-js-enabled html.yui3-js-enabled.opera-mini .tabbed-content.open .accordion-button,html.yui3-js-enabled html.yui3-js-enabled.no-svg .tabbed-content.open .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-up.png")}html.yui3-js-enabled html.yui3-js-enabled.opera-mini.tabbed-content .accordion-button{background-image:none;margin-bottom:10px}html.yui3-js-enabled html.yui3-js-enabled.opera-mini.tabbed-content div{display:block}@media only screen and (min-width: 768px){html.yui3-js-enabled .tabbed-menu{display:block}html.yui3-js-enabled .tabbed-content{margin-bottom:20px;padding:40px}html.yui3-js-enabled .tabbed-content.hide{display:none;opacity:0 !important}html.yui3-js-enabled .tabbed-content .title{display:block}html.yui3-js-enabled .tabbed-content div{display:block}html.yui3-js-enabled .tabbed-content .vertical-divider div{display:table-cell}html.yui3-js-enabled .tabbed-content .accordion-button{display:none}}html.yui3-js-enabled .accordion-button.active{background-color:transparent}@media only screen and (min-width: 768px){.tabbed-menu{-moz-box-shadow:0 -1px 10px #cfcfcf inset;-webkit-box-shadow:0 -1px 10px #cfcfcf inset;box-shadow:0 -1px 10px #cfcfcf inset;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;background:none repeat scroll 0 0 #f7f7f7;padding-bottom:20px;padding-top:20px;position:relative}.tabbed-menu ul{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:table;margin-bottom:0;padding:0;position:relative;table-layout:fixed;width:100%}.tabbed-menu li{text-align:center;display:table-cell}.tabbed-menu a{color:#666;display:block;outline:none}.tabbed-menu a .active{color:#772953;text-decoration:none}.tabbed-menu a:hover{text-decoration:none}.tabbed-menu .arrow{bottom:0;position:absolute}.tabbed-content{*zoom:1;padding:20px 40px 0}.tabbed-content:before,.tabbed-content:after{content:"";display:table}.tabbed-content:after{clear:both}.tabbed-content .row{padding-left:0;padding-right:0}.tabbed-content .main-content{padding-bottom:40px}html.yui3-js-enabled .tabbed-content.hide{display:none;opacity:0}.tabbed-content-bg{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;margin-left:20px;margin-right:20px}.tabbed-content-bg .row-box{padding-left:0;padding-right:0}html.yui3-js-enabled .arrow{visibility:visible}}.row.vertical-divider{padding-bottom:40px}.vertical-divider div,.vertical-divider li{border-right:0;display:block;padding-left:0;padding-right:0}.vertical-divider-full{padding-bottom:0}.vertical-divider-full>div{padding-bottom:40px}.row.vertical-divider-full{padding-bottom:0}@media only screen and (max-width: 767px){.vertical-divider>div,.vertical-divider>li{border-bottom:1px dotted #888;padding-bottom:20px}.vertical-divider div:last-of-type,.vertical-divider li:last-of-type,.inline-icons li:last-of-type{border-bottom:0;padding-bottom:5px}.row.vertical-divider{padding-bottom:0}.equal-height div,.equal-height li{height:auto !important}}@media only screen and (min-width: 984px){.row.vertical-divider{padding-bottom:60px}.vertical-divider>div,.vertical-divider>li{border-right:1px dotted #888;display:table-cell;float:none;margin-right:0;padding-left:20px;padding-right:20px;vertical-align:top}.vertical-divider>div:last-child,.vertical-divider>li:last-child,.vertical-divider>div.last-col,.vertical-divider>li.last-col,.vertical-divider>div:last-of-type,.vertical-divider>li:last-of-type{border-right:0;padding-right:0}.vertical-divider>div:first-child,.vertical-divider>li:first-child,.vertical-divider>div.first-col,.vertical-divider>li.first-col,.vertical-divider>div:first-of-type,.vertical-divider>li:first-of-type{padding-left:0}}.slider{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#f7f7f7;padding-top:40px}.slider .slide-window{overflow:hidden;position:relative;height:450px;-moz-transition:left 1s;-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s}.slider .slide-container{position:absolute;width:2800 px;-moz-transition:left 1s;-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s;left:0}.slider .slider-dots ul{position:absolute;top:550px;left:220px;z-index:5}.slider .slider-dots li{background-position:0 -8px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/sprite-pager.png") no-repeat;float:left;height:7px;list-style-type:none;margin-right:.75em;text-indent:-9999em;width:7px}.slider .slider-dots li.active{background-position:0 0}.slider .slider-dots a{display:block;outline:0}.slider .slide{float:right;width:700px}.slider .slide h3{margin-top:65px;display:inline-block}.slider .slide p{width:350px}.slider .arrow-prev,.slider .arrow-next{font-size:5em;margin-top:150px;display:block;color:#888;outline:0}.slider .arrow-prev:hover,.slider .arrow-next:hover{text-decoration:none;color:#333}.slider .arrow-prev:active,.slider .arrow-next:active{padding-top:1px;text-decoration:none}.slider .arrow-prev:focus,.slider .arrow-next:focus{text-decoration:none}.yui3-tooltip-hidden{display:none}.yui3-tooltip-content{-moz-box-shadow:0 2px 8px rgba(0,0,0,0.2);-webkit-box-shadow:0 2px 8px rgba(0,0,0,0.2);box-shadow:0 2px 8px rgba(0,0,0,0.2);background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/grey-textured-background.jpg") repeat scroll 0 0 transparent;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border:1px solid #e3e3e3;color:#333;margin-top:-30px;max-width:520px;position:relative}.yui3-tooltip .yui3-widget-bd{padding:20px;width:320px}.yui3-tooltip .yui3-widget-bd *{max-width:100%}.yui3-tooltip .yui3-widget-bd h5{margin-bottom:10px;font-size:22px;font-weight:300}.yui3-tooltip .yui3-widget-bd img{float:left;margin-right:10px}.yui3-tooltip .yui3-widget-bd q{border-bottom:1px dotted #888;border-top:1px dotted #888;display:block;font-size:16px;font-style:italic;margin-bottom:0;margin-top:20px;padding:10px 0}.yui3-tooltip .yui3-widget-bd p:last-child{margin-bottom:0}.yui3-tooltip .yui3-widget-ft,.yui3-tooltip .yui3-widget-ft div{position:absolute;width:0;height:0;border-style:solid;line-height:0;font-size:0}.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft,.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft div{top:-10px;left:50%;margin:0 0 0 -10px;border-width:0 10px 10px;border-color:#efefef transparent}.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft div{top:0;border-color:#efefef transparent}.tooltip-label{-moz-box-shadow:3px 3px 6px rgba(0,0,0,0.3);-webkit-box-shadow:3px 3px 6px rgba(0,0,0,0.3);box-shadow:3px 3px 6px rgba(0,0,0,0.3);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;border:1px solid #dfdcd9;display:none;font-size:13px;line-height:1;margin:0;padding:6px 5px;position:absolute;top:-20px;white-space:nowrap;z-index:1000}body,a:link,a:visited{-webkit-font-smoothing:antialiased}code,pre,p{line-height:1.5}body{font-size:16px}@media only screen and (min-width: 768px){code,pre,p{line-height:1.6}body{font-size:16px}}@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi){body{font-size:18px}}.not-for-medium{display:none}@media only screen and (min-width: 985px){.not-for-medium{display:block}}header.banner{background:#000;-moz-box-shadow:inset 0 2px 2px -2px #000;-webkit-box-shadow:inset 0 2px 2px -2px #000;box-shadow:inset 0 2px 2px -2px #000;margin-bottom:0}header.banner .nav-primary{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;*zoom:1}header.banner .nav-primary:before,header.banner .nav-primary:after{content:"";display:table}header.banner .nav-primary:after{clear:both}header.banner nav.nav-primary{border-bottom:1px solid #262626;overflow:visible}header.banner nav.nav-primary .user-nav{float:right;margin-right:20px}header.banner nav.nav-primary .user-dropdown:hover ul:after{display:none}header.banner nav.nav-primary .user-dropdown .menu-link img{margin-right:10px}header.banner nav.nav-primary .user-dropdown .menu-link img.hover{display:none}header.banner nav.nav-primary .user-dropdown .menu-link img.normal{display:inline-block}header.banner nav.nav-primary .user-dropdown .open .menu-link img.hover,header.banner nav.nav-primary .user-dropdown .menu-link:hover img.hover{display:inline-block}header.banner nav.nav-primary .user-dropdown .open .menu-link img.normal,header.banner nav.nav-primary .user-dropdown .menu-link:hover img.normal{display:none}header.banner nav.nav-primary .user-dropdown ul{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;margin-top:-2px;background-color:#fff;border-width:0}header.banner nav.nav-primary .user-dropdown ul a:hover{background-color:transparent}header.banner nav.nav-primary #user-dropdown .dropdown ul{width:auto}header.banner .nav-primary.nav-right .logo-ubuntu{-moz-background-size:73px 30px;-webkit-background-size:73px 30px;-o-background-size:73px 30px;background-size:73px 30px;background-image:url(../img/logos/logo.svg);background-position:20px;background-repeat:no-repeat;min-width:120px;padding-top:6px;margin-left:0}body.no-svg header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url(../img/logos/logo.png)}input[type=text]::-ms-reveal,input[type=text]::-ms-clear{display:none;width:0;height:0}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-results-button,input[type="search"]::-webkit-search-results-decoration{display:none}.contextual-bar{overflow:hidden;background-color:#fff;border-bottom:1px solid #d4d4d4}form.search-form{overflow:hidden;float:right;width:100%;position:relative}form.search-form input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:0;border-left:0;margin:0;width:100%;height:50px;float:left;font-size:1em;padding-top:0;padding-bottom:0;padding-right:30px;background-color:transparent;-webkit-appearance:none}form.search-form input:focus{border-color:#dd4814}form.search-form button[type=submit],form.search-form button[type=submit]:hover{position:absolute;top:10px;right:10px;display:block;height:30px;width:30px;padding:0;line-height:0;-webkit-appearance:none;background:transparent}form.search-form button img{height:16px}.contextual-nav{border:0;display:block;margin:0;padding-left:10px;background-color:transparent;overflow:hidden;float:left}.contextual-nav li,.contextual-nav li:last-child{font-size:0.875em;float:left;list-style-type:none;margin:0;margin-left:5px}.contextual-nav li a:link,.contextual-nav li a:visited,.contextual-nav .contextual-nav__label{display:block;color:#333;font-weight:300;text-align:center;padding:16px 10px 10px 10px;border-bottom:3px solid transparent}.contextual-nav .contextual-nav__label{color:#cdcdcd}.contextual-nav li a:hover{border-bottom-color:#dd4814;text-decoration:none;color:#dd4814}.contextual-nav li a.active{border-bottom:3px solid #dd4814}.opera-mini header.banner .logo-ubuntu,.no-svg header.banner .logo-ubuntu{background-image:url(../img/logos/logo.png)}@media only screen and (min-width: 769px){header.banner .nav-primary ul li,header.banner .nav-primary ul li:last-child{border-bottom:0;width:auto}header.banner nav.nav-primary li a:link,header.banner nav.nav-primary li a:visited{border-left:1px solid #262626;font-weight:400}header.banner nav.nav-primary ul li a.active{padding-bottom:10px;background-color:#0e0c0b;border-bottom:3px solid #dd4814;border-left:1px solid #262626}header.banner nav.nav-primary ul li{border-left:1px solid #262626}header.banner nav.nav-primary ul li a:hover{background-color:#dd4814}header.banner nav.nav-primary ul{background-color:transparent;border-right:1px solid #262626;display:block}header.banner nav.nav-primary ul li:last-child{border-left:1px solid #262626;border-right:0}header.banner .nav-primary ul li a:active,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:visited,header.banner nav.nav-primary ul li a:link{border-left:0}header.banner .nav-primary ul li a.external:hover{background-image:url("../img/icons/external-link-grey.png")}form.search-form{width:325px}form.search-form input{border-left:1px solid #d4d4d4;margin:0 20px;width:250px;font-size:0.875em}}@media only screen and (min-width: 1030px){header.banner{height:48px;overflow:hidden}header.banner .nav-primary{width:100%}}body{background-repeat:repeat}.row{border:0;background-color:rgba(255,255,255,0.6)}@media only screen and (min-width: 769px){.append-one{margin-right:10.6%}.row{padding:50px 40px 30px}}.inner-wrapper{*zoom:1;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background-color:transparent;background-image:none;margin:0 auto;padding-bottom:0;float:none}.inner-wrapper:before,.inner-wrapper:after{content:"";display:table}.inner-wrapper:after{clear:both}.wrapper{position:static;background:transparent;width:100%;overflow:hidden}img.touch-border{margin-bottom:-50px}.inner-wrapper,footer.global .legal{max-width:1030px;width:auto;padding-left:0;padding-right:0}.touch-top{margin-top:-50px}@media only screen and (max-width: 1030px){.inner-wrapper,footer.global .legal{padding-left:8px;padding-right:8px;width:auto}}.footer-cta{background:#fff;padding-bottom:20px}.footer-wrapper.strip-light{background-color:#fff}.solutions-cta{height:60px;background-color:#dd4814;line-height:60px;text-align:center}.solutions-cta a{color:#fff;font-size:1.25em}footer.global{background-color:white;box-shadow:none;padding-top:0}footer.global .row{padding:10px 0 0}footer.global .two-col{width:46%;float:left;display:inline-block;min-height:200px}footer.global h2{padding-bottom:0;color:#888;font-size:16px}footer.global nav .canonlist ul li,footer.global nav .additional-info ul li{min-height:0;width:48%;float:left}footer.global ul.bullets li:after{line-height:1;color:#888;content:"•";vertical-align:middle;margin:0 5px}footer.global ul.inline li:last-child{width:auto}footer.global a.external{background-image:url("../img/icons/external-link-dark.png")}footer.global .top-link{margin-bottom:10px}footer.global a{color:#333}footer.global a:hover{color:#dd4814}footer.global .legal{background-image:none}footer.global .legal.has-cookie{padding-bottom:70px}footer.global .inner-wrapper{overflow:visible}footer.global a.link-cta-positive,footer.global a.link-cta-negative{width:auto;margin-top:10px;padding-left:20px;padding-right:20px;color:#fff;font-size:14px}footer.global .section__title{background:none;cursor:default}.legal-inner{clear:both;overflow:hidden;float:left;width:100%;padding:20px 10px 0;margin:-3px -10px 0}.social,.social--right{margin-left:0}.social .social__item,.social--right .social__item{display:inline;float:left;padding-right:1em}.social .social__google,.social .social__facebook,.social .social__twitter,.social--right .social__google,.social--right .social__facebook,.social--right .social__twitter{background-image:url("../img/icons/icon-social.png");display:block;width:45px;height:44px}.social .social__google.social__twitter:hover,.social .social__facebook.social__twitter:hover,.social .social__twitter.social__twitter:hover,.social--right .social__google.social__twitter:hover,.social--right .social__facebook.social__twitter:hover,.social--right .social__twitter.social__twitter:hover{background-position:0 -45px}.social .social__google.social__facebook,.social .social__facebook.social__facebook,.social .social__twitter.social__facebook,.social--right .social__google.social__facebook,.social--right .social__facebook.social__facebook,.social--right .social__twitter.social__facebook{background-position:90px 0}.social .social__google.social__facebook:hover,.social .social__facebook.social__facebook:hover,.social .social__twitter.social__facebook:hover,.social--right .social__google.social__facebook:hover,.social--right .social__facebook.social__facebook:hover,.social--right .social__twitter.social__facebook:hover{background-position:90px -45px}.social .social__google.social__google,.social .social__facebook.social__google,.social .social__twitter.social__google,.social--right .social__google.social__google,.social--right .social__facebook.social__google,.social--right .social__twitter.social__google{background-position:135px 0}.social .social__google.social__google:hover,.social .social__facebook.social__google:hover,.social .social__twitter.social__google:hover,.social--right .social__google.social__google:hover,.social--right .social__facebook.social__google:hover,.social--right .social__twitter.social__google:hover{background-position:135px -45px}@media only screen and (min-width: 768px){.social--right{float:right}}#additional-info{border-bottom:0}#additional-info h2:before{background-image:url("../img/icons/external-link-grey.svg"),none;background-repeat:no-repeat;background-size:14px 14px;content:"";display:inline-block;height:15px;margin-right:3px;position:relative;top:3px;width:15px}#additional-info div li{border-left:1px solid #d4d7d4;box-sizing:border-box;display:block;float:left;margin:0;padding:0;width:50%}#additional-info div li a{border-bottom:1px solid #d4d7d4;box-sizing:border-box;color:#333333;display:block;float:left;margin:0;overflow:hidden;padding:8px 10px;text-align:left;white-space:normal;width:100%}#additional-info .section__title{border-bottom:1px solid #d4d7d4;background-position:100% .1em}html.opera-mini footer #nav-global h2:before,html.opera-mini footer #additional-info h2:before,html.no-svg footer #nav-global h2:before,html.no-svg footer #additional-info h2:before{background-image:url("../img/icons/external-link-grey.png")}@media only screen and (min-width: 769px){.footer-wrapper.strip-light{white-space:nowrap}footer.global{padding-top:40px;padding-bottom:40px}footer.global .two-col{width:14.89361%;display:inline-block;min-height:0}footer.global .section{min-height:160px;margin-right:40px;padding-bottom:0;border-right:1px dotted #aaa;border-bottom:0}footer.global .section:last-child{margin-right:0;border-right:0}footer.global li{display:inline;float:left}footer.global ul.no-bullets li{border-right:1px dotted #aaa;padding-right:15px;padding-left:15px}footer.global ul.no-bullets li a{font-size:16px}footer.global ul.no-bullets li a:hover{color:#dd4814}footer.global ul.no-bullets li:last-child{border-right:none}footer.global ul.no-bullets li:first-child{padding-left:0px}#additional-info .section__title{border-bottom:0}#additional-info div li,#additional-info div a:link{width:100%;border:0}}.actions .actions__social-item--twitter,.actions .actions__social-item--google-plus{text-indent:-99999px;background-image:url("../img/icons/icon-social.svg");background-repeat:no-repeat;height:44px;width:44px;overflow:hidden;display:block}.actions .actions__social-item--twitter{background-position:0 0}.actions .actions__social-item--twitter:hover{background-position:0 -45px}.actions .actions__social-item--google-plus{background-position:-45px 0}.actions .actions__social-item--google-plus:hover{background-position:-45px -45px}.anchor{display:inline-block;margin-left:3px;opacity:.0;position:relative;top:1px;width:1em;height:1em;background:url("../img/icons/anchor_16.svg") 0 80% no-repeat;background-size:16px;-moz-transition:opacity .1s;-webkit-transition:opacity .1s;transition:opacity .1s}h1:hover .anchor,h2:hover .anchor,h3:hover .anchor,h4:hover .anchor,dt:hover .anchor,li:hover .anchor{opacity:1}.box{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;display:block;margin-bottom:0;border-top:0;border-left:0;border-right:0;padding-left:0;padding-right:0}.box-dim{background-color:#fafafa}@media only screen and (min-width: 768px){.box{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-moz-box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);-webkit-box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);display:inline-block;margin-bottom:20px;padding-left:20px;padding-right:20px;border:0}}a.indent{-moz-box-shadow:inset 0 1px 2px 0 #333;-webkit-box-shadow:inset 0 1px 2px 0 #333;box-shadow:inset 0 1px 2px 0 #333;background:rgba(0,0,0,0.1);padding:10px 30px;text-weight:normal}a.indent:hover{background:rgba(0,0,0,0.2)}a.link-cta-positive,a.link-cta-negative{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#dd4814;color:#fff;display:inline-block;font-size:1.14286em;font-weight:300;text-decoration:none;margin:0;padding:8px 14px;text-align:center;-moz-transition:background .2s;-webkit-transition:background .2s;transition:background .2s;width:100%}a.link-cta-positive:hover,a.link-cta-negative:hover{background-color:#ae3910}a.link-cta-positive .external,a.link-cta-negative .external{padding-right:1em;background-image:url("../img/icons/external-link-white.svg");background-repeat:no-repeat;background-size:11px;background-position:right top}@media only screen and (min-width: 769px){a.link-cta-positive .external,a.link-cta-negative .external{padding-right:.7em}}a.link-cta-negative{background-color:#b2b2b2}a.link-cta-negative:hover{background-color:#888}.charms__list{list-style:none;margin-bottom:1em;margin-left:0;border-bottom:1px dotted #d4d4d4}.charms__list .charms__list--config{display:none}.charms__list .charms__list--toggle{display:block}.charms__list .charms__list--toggle.is-open+.charms__list--config{display:block}.charms__list .charms__list--config-name{border-top:0}.charms__list--item{font-size:1em;border-top:1px dotted #d4d4d4;padding:10px 0 0 10px;margin-bottom:10px}.charms__list--item:last-of-type{margin-bottom:10px}.charms__list--icon{margin-right:.4em;width:25px;height:25px}.charms__list--toggle{background:url("../img/shared/icon-arrow-down.svg") no-repeat center center;width:16px;height:100%;float:right;text-indent:-99999px;margin-right:20px}.charms__list--toggle.is-open{background-image:url("../img/shared/icon-arrow-up.svg");background-size:14px}.charms__list--config{padding-left:35px;padding-bottom:20px}.charms__list--config-name{font-size:1em;margin-top:15px;padding-top:15px;font-weight:400;border-top:1px dotted #d4d4d4}.charms__list--config-name:first-of-type{border-top:0}.charms__list--config-type{font-weight:400}.charms__list--config-description,.charms__list--config-setting{margin-left:30px;margin-top:8px}.charms__list--config-setting{font-size:0.875em;color:#888;font-family:"Ubuntu Mono","Consolas","Monaco","Lucida Console","Courier New",Courier,monospace}body.no-svg .charms__list .charms__list--toggle{background-image:url("../img/shared/icon-arrow-down.png")}body.no-svg .charms__list .charms__list--toggle.is-open{background-image:url("../img/shared/icon-arrow-up.png")}pre{background:transparent;border:1px solid #888;margin:0 0 1.5em 0}pre:not(:first-child){margin-top:1.5em}code.language-bash .comment{color:#888}.cookie-policy{-moz-box-shadow:0 -1px 2px rgba(0,0,0,0.2);-webkit-box-shadow:0 -1px 2px rgba(0,0,0,0.2);box-shadow:0 -1px 2px rgba(0,0,0,0.2);background-color:#fae4dc;bottom:0;position:fixed;width:100%;z-index:100}.cookie-policy p{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:13px;margin-bottom:0;margin-left:0;padding:8px 0;width:100%}.cookie-policy .link-cta{background-image:url(../img/icons/close-orange.svg);background-repeat:no-repeat;color:#fff;float:right;font-size:1em;height:15px;margin:12px 0;margin-top:12px;padding:0;text-decoration:none;text-indent:-9999px;width:16px}html.no-svg .cookie-policy .link-cta,html.opera-mini .cookie-policy .link-cta{background-image:url(../img/icons/close-orange.png)}html.opera-mini .cookie-policy{position:relative;top:0}.deploy-command{margin-bottom:10px;position:relative}.deploy-command .deploy-command__field{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 4px 4px;-moz-border-radius:4px 4px 4px 4px;border-radius:4px 4px 4px 4px;-moz-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);-webkit-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);background-image:url("../img/icons/code-snippet_16.svg");background-repeat:no-repeat;background-position:5px center;background-color:#fff;background-size:1.142857143em;width:100%;height:37px;border:1px solid #c1c1c1;padding:.6em;color:#888;padding-left:2em;font-size:0.875em;white-space:nowrap;overflow:hidden;cursor:text}.deploy-command .command2clipboard__clip{cursor:pointer;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;line-height:1;position:absolute;right:1px;top:1px;background-color:#fff;padding:9px 8px 7px;border-left:1px solid #b2b2b2;display:none}.deploy-command .command2clipboard__clip.zeroclipboard-is-hover{background-color:#eee}@media only screen and (min-width: 1030px){.deploy-command .command2clipboard__clip{display:inline-block}}.dropdown-menu{position:relative;display:block}.dropdown-menu.open .menu-link{background-color:#000}.dropdown-menu.open .dropdown{display:block}.dropdown-menu .menu-link .border-box{display:block;color:#f2f2f4}.dropdown-menu .dropdown{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;display:none;position:absolute;z-index:1000;top:0;left:0;right:0;width:auto;background-color:#fff;box-shadow:0 1px 5px rgba(0,0,0,0.2)}.dropdown-menu .dropdown.right{left:auto;right:0;text-align:right}.dropdown-menu .dropdown.narrow{min-width:140px;width:auto}.dropdown-menu .dropdown a,.dropdown-menu .dropdown p,.dropdown-menu .dropdown li{color:#333}.dropdown-menu .dropdown p{padding:11px 20px}.dropdown-menu .dropdown header,.dropdown-menu .dropdown footer{background-color:#fff}.dropdown-menu .dropdown header{padding:11px 20px;color:#f2f2f4;font-size:16px;font-weight:300}.dropdown-menu .dropdown footer{padding:20px}.dropdown-menu .dropdown ul{width:auto;left:0;right:0}.dropdown-menu .dropdown ul li a{width:auto;display:block;padding:15px 20px}.files .files__list{list-style:none;margin-bottom:1em;border-left:1px solid #cbcbcb;margin-left:1em}@media only screen and (min-width: 768px){.files .files__list{margin-left:0}}.files .files__list li{position:relative}.files .files__list li a:link,.files .files__list li a:visited{color:#333;text-decoration:none}.files .files__list li:before{content:'';width:12px;height:1px;background:#d4d4d4;display:inline-block;position:relative;top:-4px;margin-right:5px}.files .files__list li:last-child:after{content:'';width:4px;height:1em;position:absolute;display:block;left:-2px;top:.85em;background:#fff}.files .files__list ul:last-child>li a:after{content:'';width:4px;height:3em;position:absolute;display:block;left:-1.8em;top:-1.45em;background:white;cursor:default}.files .files__list .files__list{margin-left:1.3em}.files .files__list .files__list--item,.files .files__list .files__list--item-folder{font-size:0.875em;margin-bottom:0.75em}.files .files__list .files__list--item-folder{background-position:center right;background-size:12px;cursor:pointer}.files .files__list .files__list--item-folder:after{font-size:14px;display:block;content:"-";position:absolute;left:-7px;top:4px;padding:0 4px;line-height:0.9em;background:#fff;border:1px solid #888}.files .files__list .files__list--item-folder.is-closed+ul{display:none}.files .files__list .files__list--item-folder.is-closed:after{content:"+";padding:0 2px}.files .files__actions--launchpad{background:url("../img/icons/icon-launchpad.svg") no-repeat;padding-left:1.4em}#main-content .row-hero{padding-top:20px;margin-top:0}#main-content .row-hero .intro{font-size:16px}@media only screen and (min-width: 769px){#main-content .row-hero{padding-top:60px}#main-content .row-hero .intro{font-size:1.4375em;margin-bottom:40px}}.how-to div div img{float:left;margin:0 20px 20px 0}header.banner a.external,header.banner a.external:hover{background-image:url("../img/icons/external-link-grey.png")}a.external,a.external:hover,header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background-repeat:no-repeat}a.external,a.external:hover header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background-position:right 14px top 14px;padding-right:35px;background-size:auto}@media only screen and (max-width: 769px){header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background:none}header.banner nav.nav-primary ul li a.external:after{display:inline-block;width:11px;height:11px;margin-left:0.25em;background-image:url("../img/icons/external-link-dark.png");vertical-align:text-top}}.list__icons{margin-left:0;margin-bottom:5px}.list__icons li{list-style:none;float:left;padding:8px 8px 0 0;margin-bottom:0}.list__icons li img{width:24px;height:24px;vertical-align:top}.list__tick{list-style-image:url("../img/icons/tick.png")}.list__middot{margin-left:0;list-style:none}.list__middot li{display:inline}.list__middot li:after{content:"•";color:#888;margin:0 5px 0 8px;vertical-align:middle}.list__middot li.files__actions--last:after{content:""}.combined-list .list li{border-bottom:1px dotted #888;padding:10px 0}@media only screen and (max-width: 767px){.combined-list .last-col .list li:last-of-type{border-bottom:0;padding-bottom:0}}@media only screen and (min-width: 768px){.combined-list .list li:last-of-type{border-bottom:0;padding-bottom:0}}.events-list li{position:relative;padding-bottom:20px}.events-list dd{margin-left:0;background-position:0 center;background-repeat:no-repeat;background-size:20px 20px;padding:6px 20px 6px 24px}.events-list .event-map{display:none}.events-list .event-date{background-image:url("../img/icons/calendar.svg")}.events-list .location{background-image:url("../img/icons/location.svg")}@media only screen and (min-width: 769px){.events-list .event-details-wrapper{padding-left:120px}.events-list .event-map{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;position:absolute;left:0;top:0;height:100px;width:100px;float:left;margin-right:10px;margin-top:5px;overflow:hidden;display:block}}body.no-svg .events-list .event-date{background-image:url("../img/icons/calendar.png")}body.no-svg .events-list .location{background-image:url("../img/icons/location.png")}.maintainers .maintainer__email{display:block}.ratings ul{margin-left:2px;margin-bottom:0}.ratings ul li{margin-bottom:0}.ratings ul li img{vertical-align:text-top}.ratings ul li:first-of-type{margin-left:0}.revisions__list{list-style:none;margin-left:0}.revisions__list .revisions__list-item{margin-bottom:1em}.revisions__list .revisions__list_meta{color:#888;margin-bottom:.2em}.revisions__list .revisions__list_meta_date{float:right}.section{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;padding-bottom:20px;padding-top:20px}.section .section__title{background:url(../img/shared/icon-arrow-up.svg) no-repeat center right;cursor:pointer;margin-bottom:1em}.section.is-closed{height:60px}.section.is-closed .section__title{background-image:url(../img/shared/icon-arrow-down.svg)}.no-svg .row.section .section__title{background:url(../img/shared/icon-arrow-up.png)}.no-svg .row.section.is-closed .section__title{background:url(../img/shared/icon-arrow-down.png)}footer .section{margin-bottom:1em;padding-bottom:1em}footer .section.is-closed{height:auto;padding-bottom:0}footer .section.is-closed ul{display:none}@media only screen and (min-width: 769px){.row .section .section__title{background-image:none;cursor:auto}.row .section.is-closed{height:auto}}.list--concealed .list-item{display:none}.list--concealed .list-item:first-of-type{display:list-item}.list--concealed.list--visible-6 .list-item:nth-child(-n+6){display:list-item}.list--concealed.list--visible-4 .list-item:nth-child(-n+4){display:list-item}.list--concealed.list--visible-2 .list-item:nth-child(-n+2){display:list-item}.list--concealed a.btn__see--less{display:none}.list--concealed a.btn__see--more{display:inline}.list--revealed .list__controls,.list--concealed .list__controls{display:block;margin-top:2em}.list--revealed .list--item{display:list-item}.list--revealed a.btn__see--less{display:inline}.list--revealed a.btn__see--more{display:none}a.btn__see--more,a.btn__see--less{-moz-transition:background .2s;-webkit-transition:background .2s;transition:background .2s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:#333;border-radius:2px;border:1px solid #b2b2b2;background:#fff;padding:0.384615385em 1.153846154em}a.btn__see--more:hover,a.btn__see--less:hover{background:#eee;text-decoration:none}.strip-dark,.strip-light{clear:both}.strip-dark{background-color:#2c001e;background-image:none;background-repeat:repeat;color:#fff}.strip-dark.solid{background-image:none;background-color:#2c001e}.strip-dark ul,.strip-dark ol{margin:0;padding:0}.strip-dark .icon,.strip-dark ol span{-moz-background-size:40px 40px;-webkit-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;background-image:url(../img/icons/list-icon-background.png);background-repeat:no-repeat;display:block;margin:0 20px 20px 0;padding:24px;float:left;width:16px;height:16px;padding:12px}.strip-light .icon,.strip-dark .icon{position:absolute}.strip-light{background-color:rgba(255,255,255,0.6)}.strip-dark ol,.strip-dark ul{padding:20px 0}.strip-light .icon{display:block;background-image:url(../img/icons/list-icon-background.png);padding:24px;margin:0 auto 48px}.strip-dark .connected-list li,.strip-light .connected-list li{margin-bottom:10px;min-height:52px}.strip-dark .connected-list li p,.strip-light .connected-list li p,.strip-dark .connected-list li h3,.strip-light .connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li p .strip-dark ol.connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li span{float:left;font-size:22px;font-weight:normal;height:26px;margin-left:0;margin-right:20px;padding-top:2px;position:absolute;text-align:center;width:16px}.strip-white{background:#fff}.strip-trans{background:transparent}.strip-green{background-image:linear-gradient(to right, #6fad23 0%, #7cc227 100%);overflow:hidden}.strip-green,.strip-green a{color:#fff}.strip-blue{background-image:linear-gradient(to right, #1076a2 0%, #359fcd 100%);overflow:hidden}.strip-blue,.strip-blue a{color:#fff}.tag-list{list-style:none;margin:0}.tag-list--item{display:inline-block;text-transform:lowercase}.tag-list--item a:link,.tag-list--item a:visited{color:#333}.tag-list--item a:after{content:','}.tag-list--item:last-child a:after{content:''}#twitter-feed,#blog-feed{margin:35px 0}#twitter-feed>ul,#blog-feed>ul{list-style:none;margin-left:0}#twitter-feed>ul li,#blog-feed>ul li{position:relative;margin-bottom:30px}#twitter-feed .user,#blog-feed .user{font-size:0.875em;margin-bottom:0.5em}#twitter-feed .user img,#blog-feed .user img{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;width:24px;height:24px;vertical-align:middle;margin-right:5px}#twitter-feed .user a:link,#twitter-feed .user a:visited,#twitter-feed .user a:hover,#blog-feed .user a:link,#blog-feed .user a:visited,#blog-feed .user a:hover{text-decoration:none}#twitter-feed .user span[data-scribe="element:name"],#blog-feed .user span[data-scribe="element:name"]{color:#333}#twitter-feed .tweet,#blog-feed .tweet{padding-left:33px;margin-bottom:.3em}#twitter-feed .timePosted,#blog-feed .timePosted{padding-left:33px;font-size:0.875em}#twitter-feed .interact,#blog-feed .interact{padding-left:33px}#twitter-feed .interact a:link,#twitter-feed .interact a:visited,#blog-feed .interact a:link,#blog-feed .interact a:visited{margin-right:20px}@media only screen and (min-width: 769px){#twitter-feed .timePosted{position:absolute;top:0;right:0;padding-left:0}}.spaced-segment{margin-bottom:50px}.spaced-segment h3{margin-bottom:1.3em}.strip-dark,.strip-light{clear:both}.strip-dark{background-color:#2c001e;background-image:none;background-repeat:repeat;color:#fff}.strip-dark.solid{background-image:none;background-color:#2c001e}.strip-dark ul,.strip-dark ol{margin:0;padding:0}.strip-dark .icon,.strip-dark ol span{-moz-background-size:40px 40px;-webkit-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;background-image:url(../img/icons/list-icon-background.png);background-repeat:no-repeat;display:block;margin:0 20px 20px 0;padding:24px;float:left;width:16px;height:16px;padding:12px}.strip-light .icon,.strip-dark .icon{position:absolute}.strip-light{background-color:rgba(255,255,255,0.6)}.strip-dark ol,.strip-dark ul{padding:20px 0}.strip-light .icon{display:block;background-image:url(../img/icons/list-icon-background.png);padding:24px;margin:0 auto 48px}.strip-dark .connected-list li,.strip-light .connected-list li{margin-bottom:10px;min-height:52px}.strip-dark .connected-list li p,.strip-light .connected-list li p,.strip-dark .connected-list li h3,.strip-light .connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li p .strip-dark ol.connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li span{float:left;font-size:22px;font-weight:normal;height:26px;margin-left:0;margin-right:20px;padding-top:2px;position:absolute;text-align:center;width:16px}.strip-white{background:#fff}.strip-trans{background:transparent}.strip-green{background-image:linear-gradient(to right, #6fad23 0%, #7cc227 100%);overflow:hidden}.strip-green,.strip-green a{color:#fff}.strip-blue{background-image:linear-gradient(to right, #1076a2 0%, #359fcd 100%);overflow:hidden}.strip-blue,.strip-blue a{color:#fff}@media only screen and (min-width: 769px){.tip,.command2clipboard__clip{position:relative;display:inline-block}.tip .tip-content,.command2clipboard__clip .tip-content{position:absolute;z-index:98;left:-1000px;right:-1000px;top:-30px;font-weight:300;margin:auto;display:block;text-align:center;white-space:nowrap}.tip:hover .tip-content:after,.command2clipboard__clip.zeroclipboard-is-hover .tip-content:after{display:table;z-index:98;margin:auto;color:#fff;border-radius:3px;background:#000;box-shadow:none;font-size:12px;content:attr(data-tooltip);padding:4px 6px;white-space:nowrap;text-align:center}.tip:hover .tip-content:before,.command2clipboard__clip.zeroclipboard-is-hover .tip-content:before{position:absolute;top:100%;left:50%;margin-left:-5px;content:'';border:solid transparent;border-width:5px;border-top-color:#000}}.fake{display:block}*{-webkit-backface-visibility:hidden;margin:0}html{height:100%}body{height:100%;font-size:1.0em;font-family:'Ubuntu', Arial, 'libra sans', sans-serif;font-weight:300}hr{border:none;background:#B2B2B2;width:100%;height:1px;display:block;width:100%;float:left;margin-bottom:20px}ul,ol{margin-left:0}a.alt{color:#333}a.alt:hover{color:#dd4814}a:active,a:focus{outline:none}::selection{color:#FFF;background:#dd4814}::-moz-selection{color:#FFF;background:#dd4814}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:300;src:url("../fonts/ubuntu-l-webfont.eot?") format("eot"),url("../fonts/ubuntu-l-webfont.woff") format("woff"),url("../fonts/ubuntu-l-webfont.ttf") format("truetype"),url("../fonts/ubuntu-l-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:italic;font-weight:300;src:url("../fonts/ubuntu-li-webfont.eot?") format("eot"),url("../fonts/ubuntu-li-webfont.woff2") format("woff2"),url("../fonts/ubuntu-li-webfont.woff") format("woff"),url("../fonts/ubuntu-li-webfont.ttf") format("truetype"),url("../fonts/ubuntu-li-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:url("../fonts/ubuntu-r-webfont.eot?") format("eot"),url("../fonts/ubuntu-r-webfont.woff") format("woff"),url("../fonts/ubuntu-r-webfont.ttf") format("truetype"),url("../fonts/ubuntu-r-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:500;src:url("../fonts/ubuntu-m-webfont.eot?") format("eot"),url("../fonts/ubuntu-m-webfont.woff") format("woff"),url("../fonts/ubuntu-m-webfont.ttf") format("truetype"),url("../fonts/ubuntu-m-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:italic;font-weight:500;src:url("../fonts/ubuntu-mi-webfont.eot?") format("eot"),url("../fonts/ubuntu-mi-webfont.woff2") format("woff2"),url("../fonts/ubuntu-mi-webfont.woff") format("woff"),url("../fonts/ubuntu-mi-webfont.ttf") format("truetype"),url("../fonts/ubuntu-mi-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:url("../fonts/ubuntu-b-webfont.eot?") format("eot"),url("../fonts/ubuntu-b-webfont.woff2") format("woff2"),url("../fonts/ubuntu-b-webfont.woff") format("woff"),url("../fonts/ubuntu-b-webfont.ttf") format("truetype"),url("../fonts/ubuntu-b-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:400;src:url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/GZMdC02DTXXx8AdUvU2etw.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:700;src:url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/pqisLQoeO9YTDCNnlQ9bfz8E0i7KZn-EPnyo3HZu7kw.woff") format("woff")}.accordion{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);margin-bottom:40px}.disabled .accordion{opacity:.5;pointer-events:none}.accordion .accordion__title{border-bottom:1px dotted #B2B2B2;padding:13px 20px 12px;margin:0;font-size:1.3em}.accordion .accordion__tab{border-bottom:1px dotted #B2B2B2}.accordion .accordion__tab:last-of-type{border:none}.accordion .accordion__tab .accordion__tab-title{padding:12px 20px;margin:0;color:#888;cursor:pointer;background:transparent url("../img/icons/accordion-open.svg") top 20px right 20px no-repeat}.accordion .accordion__tab .accordion__tab-title.active{background-image:url("../img/icons/accordion-close.svg")}.accordion .accordion__tab .accordion__tab-title.active+.accordion__tab-content{max-height:3000px;transition:max-height .5s ease-in}.accordion .accordion__tab .accordion__tab-content{max-height:0;transition:max-height .5s ease-out;overflow:hidden}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list{list-style-type:none;padding:0 20px 14px;margin:0}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item{margin-bottom:0.15em}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#333;width:100%;display:inline-block;padding-right:20px}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link:hover{color:#dd4814;text-decoration:none}.disabled .accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link{color:#333}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active{font-weight:400}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active .accordion__tab-link{background:transparent url("../img/icons/cross.svg") top 7px right 0px no-repeat}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active:hover{color:#dd4814}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active:hover .accordion__tab-link{color:#dd4814;background-image:url("../img/icons/cross-orange.svg")}.cta-group .cta-group__link{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;border-radius:3px 0px 0px 3px;display:inline-block;padding:10px 14px;text-align:center;color:#fff;background-color:#dd4814}.cta-group .cta-group__link:hover{cursor:pointer;text-decoration:none;background-color:#c03f11}.cta-group.secondary .cta-group__link{color:#dd4814;border:1px solid #b2b2b2;background-color:#FFF;line-height:1}.cta-group.secondary .cta-group__link:hover{cursor:pointer;background-color:#F2F2F2}a.link-cta-ubuntu,button.cta-ubuntu,input[type='submit'],form button[type='submit'],form input[type='submit']{font-size:1em;border:none;max-height:37px}a.link-cta-ubuntu[disabled],a.link-cta-ubuntu.disabled,button.cta-ubuntu[disabled],button.cta-ubuntu.disabled,input[type='submit'][disabled],input[type='submit'].disabled,form button[type='submit'][disabled],form button[type='submit'].disabled,form input[type='submit'][disabled],form input[type='submit'].disabled{cursor:default;opacity:.5}a.link-cta-ubuntu.clear,button.cta-ubuntu.clear,input[type='submit'].clear,form button[type='submit'].clear,form input[type='submit'].clear{background:none;color:#333}a.link-cta-ubuntu.secondary,button.cta-ubuntu.secondary,input[type='submit'].secondary,form button[type='submit'].secondary,form input[type='submit'].secondary{color:#dd4814;border:1px solid #b2b2b2;background:#FFF}a.link-cta-ubuntu.secondary.external,button.cta-ubuntu.secondary.external,input[type='submit'].secondary.external,form button[type='submit'].secondary.external,form input[type='submit'].secondary.external{background-image:url("../img/external-link-black.svg");background-size:16px 16px;background-repeat:no-repeat;background-position:top 8px right 8px}a.link-cta-ubuntu.secondary:hover,button.cta-ubuntu.secondary:hover,input[type='submit'].secondary:hover,form button[type='submit'].secondary:hover,form input[type='submit'].secondary:hover{background-color:#F2F2F2;cursor:pointer}a.link-cta-ubuntu.secondary[disabled],a.link-cta-ubuntu.secondary.disabled,button.cta-ubuntu.secondary[disabled],button.cta-ubuntu.secondary.disabled,input[type='submit'].secondary[disabled],input[type='submit'].secondary.disabled,form button[type='submit'].secondary[disabled],form button[type='submit'].secondary.disabled,form input[type='submit'].secondary[disabled],form input[type='submit'].secondary.disabled{cursor:default;color:#f5ae95;border:1px solid #ddd;background:#FFF;opacity:1}a.link-cta-ubuntu.secondary[disabled]:hover,a.link-cta-ubuntu.secondary.disabled:hover,button.cta-ubuntu.secondary[disabled]:hover,button.cta-ubuntu.secondary.disabled:hover,input[type='submit'].secondary[disabled]:hover,input[type='submit'].secondary.disabled:hover,form button[type='submit'].secondary[disabled]:hover,form button[type='submit'].secondary.disabled:hover,form input[type='submit'].secondary[disabled]:hover,form input[type='submit'].secondary.disabled:hover{background:#FFF}a.link-cta-ubuntu.text-button,button.cta-ubuntu.text-button,input[type='submit'].text-button,form button[type='submit'].text-button,form input[type='submit'].text-button{background-color:transparent;color:#333}a.link-cta-ubuntu.text-button:hover,button.cta-ubuntu.text-button:hover,input[type='submit'].text-button:hover,form button[type='submit'].text-button:hover,form input[type='submit'].text-button:hover{text-decoration:underline}a.link-cta-ubuntu.full,button.cta-ubuntu.full,input[type='submit'].full,form button[type='submit'].full,form input[type='submit'].full{display:block;width:100%}@media screen and (max-width: 768px){a.link-cta-ubuntu,button.cta-ubuntu,input[type='submit'],form button[type='submit'],form input[type='submit']{margin-bottom:20px}}a.link-cta-ubuntu{line-height:20px}.cta-group{float:left;width:auto;clear:both;position:relative;overflow:hidden}.cta-group .cta-group__link{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-height:36px;padding-right:49px;width:100%;line-height:1.2;position:relative;margin:0;text-align:left}.cta-group .cta-group__link:after{-webkit-border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;border-radius:0px 3px 3px 0px;content:'';display:block;height:36px;width:34px;background:red;position:absolute;top:0;right:0;background-image:url("../img/chevron-white.svg");background-color:#dd4814;background-repeat:no-repeat;background-position:center}.cta-group .cta-group__link:hover{background-color:#dd4814}.cta-group .cta-group__link:hover:after{background-color:#c03f11}.cta-group .cta-group__dropdown{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;right:0;list-style:none;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);z-index:20;max-height:1000px;transition:max-height 0.3s ease-in;overflow:hidden;position:relative;clear:both}.cta-group .cta-group__dropdown.ng-hide{display:block !important;max-height:0;overflow:hidden;transition:max-height 0.3s ease-out}.cta-group .cta-group__dropdown .cta-group__item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;clear:both;padding:5px 10px;margin:0}.cta-group .cta-group__dropdown .cta-group__item a{color:#333;cursor:pointer;width:100%;float:left;margin:0}.cta-group .cta-group__dropdown .cta-group__item a:hover{color:#dd4814;text-decoration:none}.cta-group.secondary .cta-group__link{float:left;max-height:36px;width:100%}.cta-group.secondary .cta-group__link:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-image:url("../img/icons/accordion-open.svg");background-repeat:no-repeat;background-color:#fff;border:1px solid #b2b2b2;border-left:none;top:-1px;right:-1px}.cta-group.secondary .cta-group__link:hover{background-color:#FFF}.cta-group.secondary .cta-group__link:hover:after{background-color:#F2F2F2}.flash-messages{margin:0px auto;padding:0;max-width:1440px}@media screen and (max-width: 1030px){.flash-messages{margin:0px 10px 20px}}.flash-messages .flash-messages__item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.flash-messages .flash-messages__item.info{background-image:url("../img/icons/info.png");background-image:url("../img/icons/info.svg"),none}.flash-messages .flash-messages__item.success{background-image:url("../img/icons/success.png");background-image:url("../img/icons/success.svg"),none}.flash-messages .flash-messages__item.warning{background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}.flash-messages .flash-messages__item.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none}form input[type='text'],form input[type='number'],form input[type='search'],form input[type='password'],form input[type='email'],form input[type='url'],form textarea,form select,tags-input .tags .input,.accounts .api li input[type='text']{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;background:#FFF;color:#333;border:1px solid #D2D2D2;display:block;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;padding:0px 13px}form input[type='text']:active,form input[type='number']:active,form input[type='search']:active,form input[type='password']:active,form input[type='email']:active,form input[type='url']:active,form textarea:active,form select:active,tags-input .tags .input:active,.accounts .api li input[type='text']:active{border-color:#B2B2B2;outline:none}form input[type='text']:focus,form input[type='number']:focus,form input[type='search']:focus,form input[type='password']:focus,form input[type='email']:focus,form input[type='url']:focus,form textarea:focus,form select:focus,tags-input .tags .input:focus,.accounts .api li input[type='text']:focus{border-color:#B2B2B2;outline:none}form input.invalid[type='text'],form input.invalid[type='number'],form input.invalid[type='search'],form input.invalid[type='password'],form input.invalid[type='email'],form input.invalid[type='url'],form textarea.invalid,form select.invalid,tags-input .tags .invalid.input,.accounts .api li input.invalid[type='text'],form input.ng-invalid[type='text'],form input.ng-invalid[type='number'],form input.ng-invalid[type='search'],form input.ng-invalid[type='password'],form input.ng-invalid[type='email'],form input.ng-invalid[type='url'],form textarea.ng-invalid,form select.ng-invalid,tags-input .tags .ng-invalid.input,.accounts .api li input.ng-invalid[type='text']{border-color:#d90000}form input[disabled="disabled"][type='text'],form input[disabled="disabled"][type='number'],form input[disabled="disabled"][type='search'],form input[disabled="disabled"][type='password'],form input[disabled="disabled"][type='email'],form input[disabled="disabled"][type='url'],form textarea[disabled="disabled"],form select[disabled="disabled"],tags-input .tags [disabled="disabled"].input,.accounts .api li input[disabled="disabled"][type='text']{-webkit-text-fill-color:#333;border-color:#D2D2D2;background-color:transparent}label{position:relative}.disabled label{cursor:default}form li.help-msg{margin-bottom:1em}form li.help-msg .help{color:#888;font-size:0.875em}form label span{color:#333}form input[type='text'],form input[type='number'],form input[type='search'],form input[type='password'],form input[type='email'],form input[type='url']{padding:7px 10px}form input[type='text']::-webkit-input-placeholder,form input[type='number']::-webkit-input-placeholder,form input[type='search']::-webkit-input-placeholder,form input[type='password']::-webkit-input-placeholder,form input[type='email']::-webkit-input-placeholder,form input[type='url']::-webkit-input-placeholder{color:#888}form input[type='text']:-moz-placeholder,form input[type='number']:-moz-placeholder,form input[type='search']:-moz-placeholder,form input[type='password']:-moz-placeholder,form input[type='email']:-moz-placeholder,form input[type='url']:-moz-placeholder{color:#888}form input[type='text']::-moz-placeholder,form input[type='number']::-moz-placeholder,form input[type='search']::-moz-placeholder,form input[type='password']::-moz-placeholder,form input[type='email']::-moz-placeholder,form input[type='url']::-moz-placeholder{color:#888}form input[type='text']:-ms-input-placeholder,form input[type='number']:-ms-input-placeholder,form input[type='search']:-ms-input-placeholder,form input[type='password']:-ms-input-placeholder,form input[type='email']:-ms-input-placeholder,form input[type='url']:-ms-input-placeholder{color:#888}form input[type='number']{padding-right:15px}form input[type='search']{-webkit-appearance:textfield}form input[type='search']::-webkit-search-decoration,form input[type='search']::-webkit-search-cancel-button{-webkit-appearance:none}form input[type='radio'],form input[type='image']{display:inline-block;margin-right:10px}form textarea{overflow:auto;height:auto;min-height:175px;padding:7px 10px;vertical-align:top}form select{display:block;clear:both;cursor:pointer;margin:0;background-image:url("../img/icons/accordion-open.svg");background-repeat:no-repeat;background-position:top 16px right 10px;padding:6px 30px 6px 10px;-moz-appearance:none;text-indent:0.01px;text-overflow:''}form select[multiple],form select[size]{height:auto;background-image:none;padding-top:10px}form select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}form select[disabled]{color:#888;background-image:none}form select::-ms-expand{display:none}form fieldset{background:none;margin-left:0;padding:0}.checkbox{visibility:hidden;width:0;height:0;margin-right:0;position:absolute}.checkbox+.checkbox-label{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-left:20px;position:relative}.checkbox+.checkbox-label:before{content:"";display:inline-block;width:20px;height:20px;position:absolute;top:0;left:0;background:url("../img/checkbox.svg") no-repeat;background-size:13px 13px;background-position:0px 3px}.checkbox:checked+.checkbox-label:before{background:url("../img/checkbox-checked.svg") no-repeat;background-position:0px 3px}.checkbox[disabled="disabled"]+.checkbox-label:before{cursor:default;opacity:0.5}.field-error,.errors{color:#DF382C}.field-error .errorlist,.errors .errorlist{margin:0}.field-error .errorlist li,.errors .errorlist li{margin:0 0 14px 0}.inline{display:inline-block;width:100%;font-size:0;margin-bottom:10px}.inline.error{background-color:#fdf5f5;box-shadow:0px 0px 0px 5px #fdf5f5}.inline.error .ng-invalid{border-color:#D2D2D2}.inline:last-of-type{margin-bottom:0}.inline label{display:inline-block;float:none;font-size:16px;margin:0}.inline input[type='submit'],.inline input[type='text'],.inline input[type='number'],.inline input[type='search'],.inline input[type='password'],.inline input[type='email'],.inline input[type='checkbox'],.inline select{display:inline-block;clear:none;margin:0;float:none;font-size:16px}.inline input[type='submit']:invalid,.inline input[type='text']:invalid,.inline input[type='number']:invalid,.inline input[type='search']:invalid,.inline input[type='password']:invalid,.inline input[type='email']:invalid,.inline input[type='checkbox']:invalid,.inline select:invalid{-moz-box-shadow:none}.inline input[type='submit']:-moz-submit-invalid,.inline input[type='text']:-moz-submit-invalid,.inline input[type='number']:-moz-submit-invalid,.inline input[type='search']:-moz-submit-invalid,.inline input[type='password']:-moz-submit-invalid,.inline input[type='email']:-moz-submit-invalid,.inline input[type='checkbox']:-moz-submit-invalid,.inline select:-moz-submit-invalid{box-shadow:none}.inline input[type='submit']:-moz-ui-invalid,.inline input[type='text']:-moz-ui-invalid,.inline input[type='number']:-moz-ui-invalid,.inline input[type='search']:-moz-ui-invalid,.inline input[type='password']:-moz-ui-invalid,.inline input[type='email']:-moz-ui-invalid,.inline input[type='checkbox']:-moz-ui-invalid,.inline select:-moz-ui-invalid{box-shadow:none}.inline div{float:none;margin:0}.inline input.cta-ubuntu,.inline a.link-cta-ubuntu,.inline button.cta-ubuntu{font-size:16px}.inline .icon{position:absolute;top:11px;right:10px;cursor:pointer}.inline .error-message{font-size:12px;color:#e85232;margin-top:10px;margin-bottom:10px;font-weight:normal}.form-inline label,.form-inline button,.form-inline input[type='submit'],.form-inline input[type='text'],.form-inline input[type='number'],.form-inline input[type='search'],.form-inline input[type='password'],.form-inline input[type='email'],.form-inline input[type='checkbox'],.form-inline select{display:inline-block;width:auto;vertical-align:middle;margin-bottom:0}.form-inline input,.form-inline input[type='submit'] input[type='text'],.form-inline input[type='number'],.form-inline input[type='search'],.form-inline input[type='password'],.form-inline input[type='email'],.form-inline input[type='checkbox'],.form-inline select{margin-left:20px}.form-inline fieldset{width:auto;display:inline-block;margin:0 40px 0 0}.controls{position:absolute;top:0;right:20px}.controls a,.controls button{margin-left:20px}.icon{background-size:16px 16px;width:16px;height:16px;padding:0;display:inline-block}.icon.icon__loading{background:url("../img/in_progress.png") no-repeat;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear}a.icon{cursor:pointer}dl dt{clear:left}dl dd{color:#888;margin-left:0}dl dt,dl dd{display:inline-block;float:left;line-height:37px;margin-bottom:10px !important}tags-input{outline:none}tags-input .host:focus{outline:none}tags-input .tags:focus,tags-input .tags.focused{outline:none}tags-input .tags .tag-list{margin:4px 0 0;padding:0;list-style-type:none;width:100%;float:left}tags-input .tags .tag-item{display:inline-block;float:left;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;height:30px;line-height:30px;cursor:default;color:#000;padding-right:15px;position:relative;margin:0 11px 0 0}tags-input .tags .tag-item .remove-button{display:inline-block;width:12px;height:12px;text-indent:-999em;background:url("../img/icons/cross.svg") no-repeat;background-size:12px 12px;position:absolute;right:0;top:9px;cursor:pointer}tags-input .tags .tag-item .remove-button:hover{text-decoration:none}tags-input .tags .input{padding:7px 10px;width:100% !important;float:left;position:relative !important;left:0}tags-input .tags .input::-ms-clear{display:none}tags-input .autocomplete{float:left;width:100%}tags-input .autocomplete .suggestion-list{background:#FFF;padding:10px 8px;border:1px solid #D2D2D2;border-top:0;border-radius:0 0 2px 2px}tags-input .autocomplete .suggestion-list li:hover{background:#EEE;cursor:pointer}tags-input[disabled] .host:focus{outline:none}tags-input[disabled] .tags{cursor:default}tags-input[disabled] .tags .tag-item .remove-button{cursor:default}tags-input[disabled] .tags .input{cursor:default}.tag-link{margin-right:10px}.tag-link:last-of-type:after{content:''}.table__data tags-input .tags{margin-top:-10px}.table__data tags-input .tags input{margin-left:0;width:50% !important;float:left}.pagination{margin:10px 0;text-align:center}.pagination .inactive{color:#AEA79F}.pagination a,.pagination span{margin:0 5px}.search{position:relative;padding-bottom:20px}.search input[type='search']{-webkit-appearance:textfield}.search .search__input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;list-style:none;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);width:100%;border:none;padding:13px 20px;font-size:1.25em}.search .search__input::-webkit-input-placeholder{color:#000 !important}.search .search__input:-moz-placeholder{color:#000 !important}.search .search__input::-moz-placeholder{color:#000 !important}.search .search__input:-ms-input-placeholder{color:#000 !important}.search .search__input[disabled="disabled"]{background-color:#fff;opacity:.5;pointer-events:none}.search .search__input[disabled="disabled"]+.search__submit.close{pointer-events:none;opacity:.5}.search .search__submit{position:absolute;top:15px;right:25px;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat;text-indent:-999em;display:block;width:21px;height:20px;overflow:hidden;outline:none;padding:0;border:none}.search .search__submit:hover{background-color:transparent;background-image:url("../img/search-icon.svg")}.search .search__submit.close{background-image:url("../img/icons/cross.svg");background-size:21px;margin-top:2px}.search .search__submit.close:hover{background-image:url("../img/icons/cross.svg")}.spinner-col{width:10px}.spinner{float:left;margin:0 auto;text-indent:-9999em}.spinner.spin{background:url("../img/in_progress.png") no-repeat;background-size:16px 16px;width:16px;height:16px;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear;padding:0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}table{text-align:left;width:100%;margin-bottom:40px;border-collapse:separate;border-spacing:0;font-size:16px}table th,table td{background:transparent;text-align:left;padding:13px 10px}table th .checkbox+.checkbox-label::before,table td .checkbox+.checkbox-label::before{top:-2px}table thead th{background:transparent;color:#888;border:none;border-bottom:1px solid #B2B2B2}table tbody tr:hover .icon-controls a{opacity:1}table tbody td{border:none;border-bottom:1px dotted #B2B2B2;position:relative}table tbody td.icon-controls{text-align:right}table tbody td.icon-controls a{opacity:0}table tbody td input[type="text"]{position:absolute;left:10px;top:6px;width:80%}.table-listing{text-align:left;width:100%;margin:0 0 40px 0;border-collapse:separate;border-spacing:0}.table-listing .table-listing__row:hover .table-listing__cell{background-color:#FFF}.table-listing .table-listing__row.error{background-color:#F3E3E2}.table-listing .table-listing__row.error .status{color:#DD3832}.table-listing .table-listing__row.progress{background-color:rgba(25,182,238,0.1)}.table-listing .table-listing__row.selected{background-color:#FFF}.table-listing .table-listing__header{background:transparent;color:#888;border:none;border-bottom:1px solid #B2B2B2}.table-listing .table-listing__header .table-listing__header-link{background-repeat:no-repeat;background-position:top 8px right 0;color:#888}.table-listing .table-listing__header .table-listing__header-link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.table-listing .table-listing__header .table-listing__header-link:focus,.table-listing .table-listing__header .table-listing__header-link:active,.table-listing .table-listing__header .table-listing__header-link:visited{text-decoration:none}.table-listing .table-listing__header .table-listing__header-link.active{color:#333}.table-listing .table-listing__header .table-listing__header-link.sort{border-bottom:1px solid #333}.table-listing .table-listing__header .divide{width:1px;display:inline-block;background:#D2D2D2 none repeat scroll 0% 0%;height:10px;padding:0px;margin:0px 5px}.table-listing .table-listing__cell{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;border-bottom:1px dotted #B2B2B2;position:relative}.table-listing .table-listing__cell.icon-controls{text-align:right;opacity:0}.table-listing .table-listing__cell input,.table-listing .table-listing__cell select{position:absolute;left:10px;top:5px;width:80%}.table-listing .fixed{max-width:200px;min-width:200px;width:200px;padding-left:0}.table-listing__header .table-listing .fixed{padding-left:0}.table-listing.no-hover .table-listing__row:hover .table-listing__cell,.table-listing.no-hover .table-listing__row:hover td{background-color:transparent}.t1{width:1%}.t2{width:2%}.t3{width:3%}.t4{width:4%}.t5{width:5%}.t6{width:6%}.t7{width:7%}.t8{width:8%}.t9{width:9%}.t10{width:10%}.t11{width:11%}.t12{width:12%}.t13{width:13%}.t14{width:14%}.t15{width:15%}.t16{width:16%}.t17{width:17%}.t18{width:18%}.t19{width:19%}.t20{width:20%}.t21{width:21%}.t22{width:22%}.t23{width:23%}.t24{width:24%}.t25{width:25%}.t26{width:26%}.t27{width:27%}.t28{width:28%}.t29{width:29%}.t30{width:30%}.t31{width:31%}.t32{width:32%}.t33{width:33%}.t34{width:34%}.t35{width:35%}.t36{width:36%}.t37{width:37%}.t38{width:38%}.t39{width:39%}.t40{width:40%}.t41{width:41%}.t42{width:42%}.t43{width:43%}.t44{width:44%}.t45{width:45%}.t46{width:46%}.t47{width:47%}.t48{width:48%}.t49{width:49%}.t50{width:50%}.t51{width:51%}.t52{width:52%}.t53{width:53%}.t54{width:54%}.t55{width:55%}.t56{width:56%}.t57{width:57%}.t58{width:58%}.t59{width:59%}.t60{width:60%}.t61{width:61%}.t62{width:62%}.t63{width:63%}.t64{width:64%}.t65{width:65%}.t66{width:66%}.t67{width:67%}.t68{width:68%}.t69{width:69%}.t70{width:70%}.t71{width:71%}.t72{width:72%}.t73{width:73%}.t74{width:74%}.t75{width:75%}.t76{width:76%}.t77{width:77%}.t78{width:78%}.t79{width:79%}.t80{width:80%}.t81{width:81%}.t82{width:82%}.t83{width:83%}.t84{width:84%}.t85{width:85%}.t86{width:86%}.t87{width:87%}.t88{width:88%}.t89{width:89%}.t90{width:90%}.t91{width:91%}.t92{width:92%}.t93{width:93%}.t94{width:94%}.t95{width:95%}.t96{width:96%}.t97{width:97%}.t98{width:98%}.t99{width:99%}.t100{width:100%}.table__column--1{width:1%}.table__column--2{width:2%}.table__column--3{width:3%}.table__column--4{width:4%}.table__column--5{width:5%}.table__column--6{width:6%}.table__column--7{width:7%}.table__column--8{width:8%}.table__column--9{width:9%}.table__column--10{width:10%}.table__column--11{width:11%}.table__column--12{width:12%}.table__column--13{width:13%}.table__column--14{width:14%}.table__column--15{width:15%}.table__column--16{width:16%}.table__column--17{width:17%}.table__column--18{width:18%}.table__column--19{width:19%}.table__column--20{width:20%}.table__column--21{width:21%}.table__column--22{width:22%}.table__column--23{width:23%}.table__column--24{width:24%}.table__column--25{width:25%}.table__column--26{width:26%}.table__column--27{width:27%}.table__column--28{width:28%}.table__column--29{width:29%}.table__column--30{width:30%}.table__column--31{width:31%}.table__column--32{width:32%}.table__column--33{width:33%}.table__column--34{width:34%}.table__column--35{width:35%}.table__column--36{width:36%}.table__column--37{width:37%}.table__column--38{width:38%}.table__column--39{width:39%}.table__column--40{width:40%}.table__column--41{width:41%}.table__column--42{width:42%}.table__column--43{width:43%}.table__column--44{width:44%}.table__column--45{width:45%}.table__column--46{width:46%}.table__column--47{width:47%}.table__column--48{width:48%}.table__column--49{width:49%}.table__column--50{width:50%}.table__column--51{width:51%}.table__column--52{width:52%}.table__column--53{width:53%}.table__column--54{width:54%}.table__column--55{width:55%}.table__column--56{width:56%}.table__column--57{width:57%}.table__column--58{width:58%}.table__column--59{width:59%}.table__column--60{width:60%}.table__column--61{width:61%}.table__column--62{width:62%}.table__column--63{width:63%}.table__column--64{width:64%}.table__column--65{width:65%}.table__column--66{width:66%}.table__column--67{width:67%}.table__column--68{width:68%}.table__column--69{width:69%}.table__column--70{width:70%}.table__column--71{width:71%}.table__column--72{width:72%}.table__column--73{width:73%}.table__column--74{width:74%}.table__column--75{width:75%}.table__column--76{width:76%}.table__column--77{width:77%}.table__column--78{width:78%}.table__column--79{width:79%}.table__column--80{width:80%}.table__column--81{width:81%}.table__column--82{width:82%}.table__column--83{width:83%}.table__column--84{width:84%}.table__column--85{width:85%}.table__column--86{width:86%}.table__column--87{width:87%}.table__column--88{width:88%}.table__column--89{width:89%}.table__column--90{width:90%}.table__column--91{width:91%}.table__column--92{width:92%}.table__column--93{width:93%}.table__column--94{width:94%}.table__column--95{width:95%}.table__column--96{width:96%}.table__column--97{width:97%}.table__column--98{width:98%}.table__column--99{width:99%}.table__column--100{width:100%}#commissioning_scripts .script-content.slider{overflow:hidden}#commissioning_scripts .script-content.slider pre{margin-top:20px}.table{display:table;border-color:#B2B2B2;border-collapse:collapse;border-spacing:0;overflow-x:scroll;margin-bottom:20px;margin:0 0 2.5em;width:100%}.table .table__row{float:left;width:100%;display:table-row;border-bottom:1px dotted #B2B2B2}.table .table__row:hover{background-color:#FFF}.table .table__row:hover .table__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row:hover .table__input.invalid{border-color:#D90000}.table .table__row:hover .table__input[disabled]{border-color:transparent;color:#333}.table .table__row:hover .table__controls{z-index:1;opacity:1}.table .table__row:hover .table__controls--secondary{z-index:1;opacity:1}.table .table__row.table__row--no-hover:hover{background-color:transparent}.table .table__row.active{background-color:#FFF}.table .table__row.active .table__dropdown .table__data,.table .table__row.active .table__dropdown .table__input{color:#333}.table .table__row.active:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.active:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.active:hover .table__dropdown .table__input{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input.editible{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input[disabled]{border-color:transparent;color:#333}.table .table__row.active .table__dropdown{max-height:3000px}.table .table__row.selected .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.selected:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.selected:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.selected:hover .table__dropdown .table__input{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.disabled>.table__data{color:#888;pointer-events:none}.table .table__row.disabled>.table__data>.table__input{color:#888;pointer-events:none}.table .table__row.disabled .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.disabled:hover .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.disabled:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.disabled:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.noEdit .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.noEdit:hover .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.noEdit:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.noEdit:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__header,.table .table__data{font-size:16px;display:table-cell;padding:13px 10px;box-sizing:border-box;height:100%;background:none;border:0;text-align:left;float:left}.table .table__header a,.table .table__data a{color:#dd4814}.table .table__header a:hover,.table .table__data a:hover{cursor:pointer}.table .table__head{display:table-head;width:100%;box-sizing:border-box}.table .table__head .table__row{border-bottom:1px solid #B2B2B2}.table .table__head .table__row:hover{background-color:transparent}.table .table__head .table__header{font-size:13px;background:none;color:#888}.table .table__head a,.table .table__head .table__header-link{color:#888}.table .table__head a:hover,.table .table__head .table__header-link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.table .table__head a.active,.table .table__head .table__header-link.active{color:#333;text-decoration:none}.table .table__head a.sort,.table .table__head .table__header-link.sort{border-bottom:1px solid inherit}.table .table__head .divide{width:1px;display:inline-block;background:#888;height:10px;margin:0 5px}.table .table__body{display:table-row-group}.table .table__footer{display:table-footer-group}.table .table__label{clear:both;display:block;margin-top:11px;color:#BCBCBC}.table .table__label a{color:#BCBCBC}.table .table__label a:hover{color:#dd4814}.table .table__label.active a{color:#dd4814}.table .table__controls{width:100%;text-align:right;opacity:0;z-index:-1000}.table .table__controls--secondary{opacity:0;z-index:-1000;width:auto;text-align:left}.table .table__tags .table__tag{display:inline-block;margin-right:5px}.table .table__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:transparent;border-color:transparent;background-position:-9999px -9999px}.table .table__input.invalid{border-color:transparent}.table .table__input.invalid:focus{border-color:#D90000}.table .table__input[disabled]{border-color:transparent;color:#333}.table .table__input:focus{background-color:#FFF;border-color:#D2D2D2}.table label{font-size:13px;color:#BCBCBC}.table input,.table select{margin:0 0 0 -14px}.table input[type="radio"]{margin-left:0}.table ul li{margin:0;margin-top:14px}.table ul li:first-of-type{margin-top:0}.table .table__dropdown{width:100%;max-height:0;overflow-y:hidden}.table .table__dropdown .table__dropdown-row{border-bottom:0;position:relative;max-height:0;transition:max-height 0.10s ease-out;overflow:hidden}.table .table__dropdown .table__dropdown-row.active{max-height:500px;transition:max-height 0.25s ease-in}.table .table__dropdown .table__dropdown-row:before{display:block;margin:0 auto;width:calc(100% - 20px);border-top:1px dotted #B2B2B2;position:absolute;height:1px;content:'';top:0;left:10px}.table .table__dropdown .table__dropdown-row.table__dropdown-row--head{border-bottom:0}.table .table__dropdown .table__dropdown-row.table__dropdown-row--head .table__header{color:#BCBCBC;font-size:13px}.table .table__dropdown .table__dropdown-row.no-border{border:0}.table .table__dropdown .table__dropdown-row.no-border:before{border:0}.table .table__dropdown .table__dropdown-row .table__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__dropdown--info{width:100%;max-height:0;background-color:transparent}.table .table__dropdown--info .table__dropdown-row--info{border-bottom:0;position:relative;max-height:0;transition:max-height 0.10s ease-out;overflow:hidden}.table .table__dropdown--info .table__dropdown-row--info.active{max-height:500px;transition:max-height 0.25s ease-in}.table .table__dropdown--info .table__dropdown-row--info .table__data{color:#BCBCBC}h1 span,h2 span,h3 span,h4 span,h5 span{color:#888;font-size:75%;padding-left:20px}h4{font-size:20px;font-weight:300}pre{border:0;background-color:#FFF;border-radius:2px}pre code{counter-reset:line-numbering}pre code .line{float:left}pre code .line::before{content:counter(line-numbering);counter-increment:line-numbering;padding-right:1em;width:1.5em;text-align:right;opacity:0.5;pointer-events:none;user-select:none}.yui3-node-add-widget{width:65.9292%;margin-right:2.21238%}@media screen and (max-width: 768px){.yui3-node-add-widget{width:100%;margin:0}}.yui3-node-add-widget .buttons{margin-top:30px}.yui3-node-add-widget .add-link img.icon{margin-right:6px}.yui3-overlay{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;background-color:#fff;-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,0.5);box-shadow:0 0 10px 0 rgba(0,0,0,0.5)}.yui3-overlay ul{padding:5px 0}.yui3-overlay li{float:none}.yui3-overlay li:last-child a{border-bottom:none}.yui3-overlay a{display:block;padding:6px 20px;color:#dd4814 !important;border-bottom:1px solid #e5e2e0}.yui3-overlay a:focus,.yui3-overlay a:hover{background-color:#f2f2f2}.yui3-overlay-hidden{display:none}.yui3-widget-mask{background-color:#000;opacity:0.3}.yui3-panel{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;background-color:#FFF;padding:50px 80px 50px 80px;-webkit-box-shadow:0 0 15px 0 #000;box-shadow:0 0 15px 0 #000}.yui3-panel .yui3-button{float:right}.yui3-panel .yui3-button.link-button{float:left;padding-left:0;padding-right:0;color:#dd4814;border:none;background:none;-webkit-box-shadow:none;box-shadow:none;font-size:13px}.yui3-widget-hd{margin-bottom:30px;font-size:24px}.yui3-widget-ft{margin-top:50px}.yui3-widget-button-wrapper{width:100%}.icon{margin-left:5px;width:16px;height:16px;display:inline-block;text-indent:999em;background-repeat:no-repeat;background-size:16px 16px;vertical-align:middle}.icon.info{background-image:url("../img/icons/info.png");background-image:url("../img/icons/info.svg"),none}.icon.edit{background-image:url("../img/icons/edit.png");background-image:url("../img/icons/edit.svg"),none}.icon.delete{background-image:url("../img/icons/delete.png");background-image:url("../img/icons/delete.svg"),none}.icon.remove{background-image:url("../img/icons/filter-remove.svg"),none}.icon.warning{background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}.icon.debug{background-image:url("../img/icons/debug.png");background-image:url("../img/icons/debug.svg"),none}.icon.success,.icon.tick{background-image:url("../img/icons/success.png");background-image:url("../img/icons/success.svg"),none}.icon.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none}.icon.partition{background-image:url("../img/icons/partition.svg")}.icon.add{background-image:url("../img/icons/add.svg")}.icon.tags{background-image:url("../img/icons/tags.svg")}.icon.mount{background-image:url("../img/icons/mount.svg")}.icon.unmount{background-image:url("../img/icons/unmount.svg")}.clear{clear:both}.hidden{display:none}.align-right{text-align:right}.align-center{text-align:center}.align-left{text-align:left}.right{float:right !important}.left{float:left !important}.border{border-top:1px dotted #B2B2B2}.border.bottom{border-bottom:1px dotted #B2B2B2}.border.solid{border-style:solid}.vertical-align{position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.margin-top{margin-top:20px}.margin-top--five{margin-top:5px}.margin-top--ten{margin-top:10px}.margin-right{margin-right:20px !important}.margin-right--ten{margin-right:10px !important}.margin-bottom{margin-bottom:20px}.margin-left{margin-left:20px !important}.margin-left--ten{margin-left:10px !important}.margin-left--thirty{margin-left:30px !important}.padding-top{padding-top:20px}.padding-top--ten{padding-top:10px !important}.padding-right{padding-right:20px}.padding-bottom{padding-bottom:20px !important}.padding-bottom--ten{padding-bottom:10px !important}.padding-left{padding-left:20px !important}.padding-left--30,.padding-left--thirty{padding-left:30px !important}.padding-left--35{padding-left:35px !important}.padding-left--45{padding-left:45px !important}.padding-left--50{padding-left:50px !important}.border-top{border-top:1px dotted #888}.add-machine__list .add-machine__details,.border-bottom{border-bottom:1px dotted #888}.no-margin{margin:0}.no-margin-top{margin-top:0 !important}.no-padding{padding:0}.no-padding-top{padding-top:0 !important}.no-padding-left{padding-left:0}.no-padding-bottom{padding-bottom:0 !important}.no-margin-bottom{margin-bottom:0}.width--auto{width:auto}.width--half{width:50%}.width--full{width:100%}.tooltip{position:relative}.tooltip::before{content:attr(data-tooltip);font-size:13px;font-weight:400;position:absolute;z-index:999;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);background:#333;color:#FFF;padding:10px;text-indent:0;opacity:0;transition:opacity 0.4s ease-out;border-radius:5px;box-shadow:0px 1px 3px 0 rgba(51,51,51,0.2);top:-9999em}.tooltip::after{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);content:'';width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;z-index:1000;transition:opacity 0.4s ease-out;border-top:5px solid #333;opacity:0;top:-9999em}.tooltip:hover::before{opacity:1 !important;top:-47px}.tooltip:hover::after{opacity:1 !important;top:-10px}.link-cta-ubuntu.tooltip:hover::before,.cta-ubuntu.tooltip:hover::before{top:-50px}.footer-wrapper{border-top:1px dotted #b2b2b2}.footer-wrapper footer.global{background-color:transparent;padding-top:0px;padding-right:20px;padding-left:20px;background-image:url("../img/logos/logo-ubuntu-orange.png");background-image:url("../img/logos/logo-ubuntu-orange.svg"),none;background-size:107px 25px;background-position:top 20px right 20px;background-repeat:no-repeat;max-width:1480px}.footer-wrapper footer.global p{font-size:0.875em}.footer-wrapper footer.global a{margin:0 5px;color:#dd4814}.footer-wrapper footer.global .version{font-weight:500;margin-right:5px}.footer-wrapper footer.global .copy{margin-top:10px}.footer-wrapper footer.global .legal{max-width:1440px}.wrapper{min-height:100%;height:auto !important;height:100%;margin:0 auto -112px;position:relative;background:rgba(255,255,255,0.6);padding-top:172px}.wrapper:after{content:'';position:absolute;display:block;top:0;right:0;bottom:0;left:0;background:url("../img/backgrounds/image-background-paper.png");height:100%;width:100%;z-index:-1}.inner-wrapper{max-width:1480px;padding:0px 20px;margin:0 auto;position:relative}.push,.footer-wrapper{height:112px}.row{background-color:transparent;border-bottom:1px dotted #CCC}.row:last-child{border-bottom:none}header.banner{overflow:visible;z-index:20;position:fixed;top:0}header.banner .logo{padding-left:15px}header.banner nav.nav-primary{border-bottom:none}header.banner .nav-primary.nav-right .logo-ubuntu{-moz-background-size:100px 30px;-webkit-background-size:100px 30px;-o-background-size:100px 30px;background-size:100px 30px;background-position:5px 9px;background-image:url("../img/logos/logo.png");background-image:url("../img/logos/logo.svg"),none}header.banner .nav-primary li:hover ul:after{display:none}@media screen and (max-width: 768px){header.banner .nav-primary ul{border-right:none}}header.banner #right-nav{float:right;margin-right:20px}@media screen and (max-width: 768px){header.banner #right-nav{margin-right:0}}header.banner #user-link{position:relative}@media screen and (max-width: 768px){header.banner #user-link{border-top:1px solid #d4d7d4;width:100%}}header.banner #user-link>a{padding-bottom:12px}@media screen and (max-width: 768px){header.banner #user-link>a{display:none}}header.banner #user-link .normal,header.banner #user-link .hover{margin-right:7px}@media screen and (max-width: 768px){header.banner #user-link .normal,header.banner #user-link .hover{display:none}}header.banner #user-link .hover{display:none}header.banner #user-link .nav{-webkit-border-radius:0px 0px 4px 4px;-moz-border-radius:0px 0px 4px 4px;border-radius:0px 0px 4px 4px;background-color:#FFF;border:none;display:none;position:absolute;right:0;top:48px;box-shadow:0px 2px 4px rgba(0,0,0,0.15)}@media screen and (min-width: 769px){header.banner #user-link .nav a.active{background:none;border:none}}header.banner #user-link .nav a:hover{background-color:transparent}@media screen and (max-width: 768px){header.banner #user-link .nav a:hover{background-color:#F8F8F8;color:#333}}@media screen and (max-width: 768px){header.banner #user-link .nav{background:none;position:relative;top:inherit;width:100%;box-shadow:none;float:left;padding:0}header.banner #user-link .nav li{border-bottom:1px solid #d4d7d4;width:100%;float:left}header.banner #user-link .nav li a{padding:10px 14px;width:100%}}@media screen and (max-width: 768px){header.banner #user-link:hover>a{background-color:transparent}}header.banner #user-link:hover .normal{display:none}header.banner #user-link:hover .hover{display:inline-block}@media screen and (max-width: 768px){header.banner #user-link:hover .hover{display:none}}header.banner #user-link:hover .nav{display:block}header.banner .nav-toggle{background-image:url("../img/icons/navigation-menu-plain.png");background-image:url("../img/icons/navigation-menu-plain.svg"),none;top:0}@media screen and (max-width: 768px){header.banner .nav-toggles .open{display:block}header.banner .nav-toggles .close{display:none}header.banner #canonlist:target ul{display:block}header.banner #canonlist:target+.nav-toggles .open{display:none}header.banner #canonlist:target+.nav-toggles .close{display:block}}.page-header{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);width:100%;float:left;position:fixed;z-index:10;top:48px}.page-header .page-header__nav{position:absolute;top:10px;z-index:1000}.page-header .page-header__nav a{font-weight:300}.page-header .page-header__title{font-size:2em;width:auto;padding:31px 0;margin:0;float:left;font-size:32px}.page-header .page-header__title [contenteditable="true"]{display:inline-block;padding:8px 10px;width:auto;box-sizing:border-box;border:1px solid transparent;margin:-10px 0 -10px -10px;border-radius:2px;color:#333;cursor:default;font-size:32px}.page-header .page-header__title [contenteditable="true"].editable:hover{border:1px solid #D2D2D2;cursor:text}.page-header .page-header__title [contenteditable="true"]:active,.page-header .page-header__title [contenteditable="true"]:focus{outline:none;background-color:#FFF;border:1px solid #B2B2B2}.page-header .page-header__title [contenteditable="true"].invalid,.page-header .page-header__title [contenteditable="true"].invalid:hover,.page-header .page-header__title [contenteditable="true"].invalid:active,.page-header .page-header__title [contenteditable="true"].invalid:focus{border-color:#d90000}.page-header .page-header__title [contenteditable="true"] br{display:none}.page-header .page-header__title .icon{vertical-align:3px;margin-right:10px}.page-header .page-header__title .page-header__title--identicator{font-size:0.6em;width:auto;display:inline-block;position:relative;top:0px;padding-left:20px;margin-left:10px}.page-header .page-header__title .page-header__title--identicator a{color:#888}.page-header .page-header__title .page-header__title--identicator a:hover{text-decoration:none;border-bottom:3px solid #888}.page-header .page-header__title .page-header__title--identicator a:focus,.page-header .page-header__title .page-header__title--identicator a:active{text-decoration:none}.page-header .page-header__title .page-header__title--identicator a.active{color:#333;border-bottom:3px solid #dd4814}.page-header .page-header__title .page-header__title--identicator a.active:hover{text-decoration:none;cursor:default}.page-header .page-header__title .page-header__title--identicator .divide{width:1px;display:inline-block;background:#D2D2D2;height:11px;padding:0;margin:0 5px}.page-header .page-header__title .page-header__title--identicator .page-header__title-loadmore{font-size:14px;margin-left:10px}.page-header .page-header__title .page-header__title--identicator .page-header__title-loadmore:hover{border:0;text-decoration:underline}.page-header .page-header__title .link-cta-ubuntu,.page-header .page-header__title .alt{font-size:16px;margin-left:20px;position:relative;vertical-align:middle;margin-top:-5px}.page-header .page-header__actions{float:right;padding:34px 0;margin-bottom:0}.page-header .page-header__actions .page-header__cta{float:right;position:relative;height:auto;max-height:36px}.page-header .page-header__actions .page-header__cta .cta-group{float:right}.page-header .page-header__actions .page-header__cta .page-header__cta-feedback{display:inline-block;position:relative;line-height:36px;text-align:right;color:#dd4814;margin-right:20px;cursor:pointer}.page-header .page-header__actions .page-header__cta .page-header__cta-feedback:hover{text-decoration:underline}.page-header .page-header__dropdown{float:left;width:100%;max-height:1000px;transition:max-height 0.3s ease-in;overflow:hidden;border-color:#888 !important}.page-header .page-header__dropdown.ng-hide{display:block !important;max-height:0;overflow:hidden;transition:max-height 0.3s ease-out;border-top:none}.page-header .page-header__dropdown .page-header__feedback{border-top:1px dotted #888;display:inline-block;width:100%;padding:20px 0}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;background-position:top 3px left 0px;background-repeat:no-repeat;padding:6px 0 5px 25px;width:auto;display:inline-block;position:relative}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.info,.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none;background-position:0px 9px}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.info.progress,.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.error.progress{width:100%}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.progress{padding-left:0}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.progress .loader{position:relative;top:1px}.title .title__indicator .title__link{color:#888;font-size:20px}.title .title__indicator .title__link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.title .title__indicator .title__link:focus,.title .title__indicator .title__link:active{text-decoration:none}.title .title__indicator .title__link.active{color:#333;border-bottom:1px #dd4814 solid}.title .title__indicator .divide{width:1px;display:inline-block;background:#D2D2D2;height:11px;padding:0;margin:0 5px}.accounts .logout .divide{padding:0 20px 0 30px;display:inline-block}.accounts .api li{position:relative}.accounts .api li input[type='text']{line-height:30px;padding-right:30px;width:100%}.accounts .api li input[type='text']::-webkit-input-placeholder{color:#333}.accounts .api li input[type='text']:-moz-placeholder{color:#333}.accounts .api li input[type='text']::-moz-placeholder{color:#333}.accounts .api li input[type='text']:-ms-input-placeholder{color:#333}.accounts .api li .delete-link{position:absolute;top:7px;right:7px}form.page-title-form{margin-bottom:30px}form.page-title-form input{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;border:1px solid transparent;background-color:transparent;font-size:36px;line-height:26px;color:#333;margin:6px 10px;padding:4px;height:auto;box-shadow:none}form.page-title-form input:hover{outline:none;background:#FFF;border-color:#D2D2D2;box-shadow:inset 0 1px 1px rgba(0,0,0,0.1)}form.page-title-form input:focus{border:1px solid #dd4814;background-color:#fff;outline:none}.small-icon{width:12px}.images-info{text-align:center;padding:10px}.images-warning{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 10px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}#loader{width:10px;margin:16px auto 0 auto}#importing{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 10px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;position:relative}#importing .spinner{position:absolute;left:15px}.importing-dot{opacity:0;-webkit-animation:dot 1.3s infinite;animation:dot 1.3s infinite}.selector{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;padding:20px;background:#FFF;margin:0 0 20px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;width:100%;float:left}.selector h2{font-size:1em;font-weight:300}.selector h2 img{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;background:url("../img/icons/help.svg") no-repeat;width:16px;height:16px;padding-left:16px;margin-left:5px}.selector .selector-available,.selector .selector-chosen{width:46%;float:left;margin:0;text-align:left}@media screen and (max-width: 768px){.selector .selector-available,.selector .selector-chosen{width:100%}}.selector .selector-available h2,.selector .selector-chosen h2{background:none;border:none}.selector .selector-available select,.selector .selector-chosen select{margin-bottom:10px}.selector ul.selector-chooser{width:8%;float:left;margin:20% 0 0}@media screen and (max-width: 768px){.selector ul.selector-chooser{width:100%;margin:0 0 10px;text-align:center}}.selector ul.selector-chooser li{width:100%;text-align:center}@media screen and (max-width: 768px){.selector ul.selector-chooser li{width:auto;display:inline-block;height:16px;width:16px;margin:0 20px}}.selector ul.selector-chooser li a{display:block;text-indent:999em;width:16px;height:16px;overflow:hidden;margin:0 auto}.selector ul.selector-chooser li a.selector-add{background-image:url("../img/icons/chevron_right.svg")}@media screen and (max-width: 768px){.selector ul.selector-chooser li a.selector-add{background-image:url("../img/icons/chevron_down.svg")}}.selector ul.selector-chooser li a.selector-remove{background-image:url("../img/icons/chevron_left.svg")}@media screen and (max-width: 768px){.selector ul.selector-chooser li a.selector-remove{background-image:url("../img/icons/chevron_up.svg")}}.selector .selector-filter img{display:none}.selector .selector-filter input{background-image:url("../img/search-orange.png");background-repeat:no-repeat;background-position:top 7px right 8px}.selector select#id_mac_addresses_to.filtered{height:269px !important}.nodes{position:relative}.nodes .search{position:absolute;right:0}.nodes .search input[type='submit']{position:absolute;top:8px;right:12px;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat;text-indent:-999em;display:block;width:21px;height:20px;overflow:hidden;outline:none;padding:0}.nodes .search input[type='submit']:hover{color:transparent;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat}@media screen and (max-width: 768px){.nodes .search{position:relative}}@media screen and (max-width: 768px){.nodes .actions select{width:100%;margin-bottom:20px}.nodes .actions input{position:absolute;right:0;top:0}}.powerstates{width:14px;height:15px;display:inline-block}.powerstates.power-on{background:transparent url("../img/icons/power-on.svg") left top no-repeat}.powerstates.power-off{background:transparent url("../img/icons/power-off.svg") left top no-repeat}.powerstates.power-unknown{background:none}.powerstates.power-error{background:transparent url("../img/icons/power-error.svg") left top no-repeat}.powerstates.power-check-ok{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:10px;height:10px;color:#33CC00}.powerstates.power-check-error{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:10px;height:10px;color:#FF0000}.node-actions .link-cta-ubuntu,.node-actions .cta-ubuntu{margin-bottom:10px;float:left;font-size:16px}.buttons{margin-top:30px}#network-interfaces li{list-style-type:none}#content-discovery-data{padding-top:20px;margin-top:20px;border-top:1px dotted #B2B2B2}#content-discovery-data .slider{height:0;overflow:hidden}.slider{padding-top:0 !important}.slider .content{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#FFF;border:1px solid #EEE;border-top:none;padding:20px}.slider .content pre{margin:0}.slider .tabs{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;padding:8px 20px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;border:1px solid #EEE}.add-machine__list{padding:13px 0 20px;border-top:1px dotted #888;margin-bottom:0}.add-machine__list .add-machine__details{background:transparent url("../img/icons/accordion-open.svg") top 12px right 10px no-repeat}.add-machine__list .add-machine__details>div{margin-bottom:0}.add-machine__list .add-machine__details .add-machine__details-form{display:none}.add-machine__list .add-machine__details.active{background-image:url("../img/icons/accordion-close.svg")}.add-machine__list .add-machine__details.active .add-machine__details-form{display:block}.power-status{display:inline-block;font-size:100%;padding-left:0}.power-status--power{display:inline-block;margin-left:20px;position:relative;font-size:100%}.power-status--power.checking{color:#2AB7EC;background:url("../img/status_in_progress.svg");padding-left:20px}.power-status--power.on{padding-left:20px;color:#38B44A;background:transparent url("../img/icons/power-on.svg") left top 4px no-repeat}.power-status--power.off{padding-left:20px;color:#D2D2D2;background:transparent url("../img/icons/power-off.svg") left top 4px no-repeat}.power-status--power.error{padding-left:20px;color:#DB3832;background:transparent url("../img/icons/power-error.svg") left top 4px no-repeat}.power-status--power .power-check{font-size:0.75em;color:#D2D2D2;display:inline-block;padding:0}.power-status--power .power-check .power-check__link{color:#888;text-decoration:none;margin-left:5px}.power-status--power .power-check .power-check__link:hover{border-bottom:0 !important;text-decoration:underline !important}.loading,.loader{background:url("../img/in_progress.png") no-repeat;background-size:16px 16px;width:16px;height:16px;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear;padding:0;display:inline-block}.details__used{color:#BCBCBC}.details .details__label{clear:both;display:block;margin-top:11px;color:#BCBCBC}.details .details__label a{color:#BCBCBC}.details .details__label a:hover{color:#dd4814}.details .details__label.active a{color:#dd4814}.details .details__controls{width:100%;text-align:right;opacity:0;z-index:-1000}.details .details__controls--secondary{opacity:0;z-index:-1000;width:auto;text-align:left}.details .table-row .details__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:transparent;border-color:transparent;background-position:-9999px -9999px}.details .table-row .details__text{line-height:37px}.details .table-row:hover .details__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.details .table-row:hover .details__controls{z-index:1;opacity:1}.details .table-row:hover .details__controls--secondary{z-index:1;opacity:1}.details .table-row.active:hover .details__input{background-color:transparent;border-color:transparent;pointer-events:none;background-position:-9999px -9999px}.details .table-row.active:hover .details__controls{opacity:0;z-index:-1000;pointer-events:none}.details .table-row.active:hover .details__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.details .table-row label{font-size:13px;color:#BCBCBC}.details .table-row input,.details .table-row select{margin:0 0 0 -14px}.details .table-row input[type="radio"]{margin-left:0}.details .details__dropdown .details__row{border-bottom:0;position:relative}.details .details__dropdown .details__row:before{display:block;margin:0 auto;width:calc(100% - 20px);border-top:1px dotted #B2B2B2;position:relative;height:1px;content:''}.details .details__dropdown .details__row.details__row--head{border-bottom:0}.details .details__dropdown .details__row.details__row--head .table-cell{color:#BCBCBC;font-size:13px}.details .details__dropdown .details__row.no-border{border:0}.details .details__dropdown .details__row.no-border:before{border:0}.details .details__dropdown--info .table-row{border-bottom:0}.details .details__dropdown--info .table-cell{color:#BCBCBC}2.fake{display:none}body{font-size:14px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;clear:none;display:inline-block;float:none;margin-right:2.12766%;margin-bottom:20px;position:relative;width:100%}.twelve-col .one-col,.twelve-col .two-col,.twelve-col .three-col,.twelve-col .four-col,.twelve-col .five-col,.twelve-col .six-col,.twelve-col .seven-col,.twelve-col .eight-col,.twelve-col .nine-col,.twelve-col .ten-col,.twelve-col .eleven-col{width:100%}.last-col,.last{margin-right:0}.clearfix:after,.container:after{clear:both;content:"\0020";display:block;height:0;overflow:hidden;visibility:hidden}.clear{clear:both}.clearfix{display:block}@media only screen and (min-width: 768px){body{font-size:15px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{float:left}.one-col{width:6.38297%}.two-col{width:14.89361%}.three-col{width:23.40425%}.four-col{width:31.91489%}.five-col{width:40.42553%}.six-col{width:48.93617%}.seven-col{width:57.4468%}.eight-col{width:65.95744%}.nine-col{width:74.46808%}.ten-col{width:82.97872%}.eleven-col{width:91.48936%}.twelve-col{width:100%;margin-right:0}.twelve-col .one-col{width:6.3053%;margin-right:2.21238%}.twelve-col .two-col{width:14.823%;margin-right:2.21238%}.twelve-col .three-col{width:23.3407%;margin-right:2.21238%}.twelve-col .three-col{width:48.8938%;margin-right:2.21238%}.twelve-col .four-col{width:31.8584%;margin-right:2.21238%}.twelve-col .five-col{width:40.3761%;margin-right:2.21238%}.twelve-col .six-col{width:48.8938%;margin-right:2.21238%}.twelve-col .seven-col{width:57.4115%;margin-right:2.21238%}.twelve-col .eight-col{width:65.9292%;margin-right:2.21238%}.twelve-col .nine-col{width:74.4469%;margin-right:2.21238%}.twelve-col .ten-col{width:82.9646%;margin-right:2.21238%}.twelve-col .eleven-col{width:91.4823%;margin-right:2.21238%}.twelve-col .twelve-col{width:100%;margin-right:0}.eleven-col .one-col{width:6.89238%;margin-right:2.41837%}.eleven-col .two-col{width:16.20314%;margin-right:2.41837%}.eleven-col .three-col{width:25.5139%;margin-right:2.41837%}.eleven-col .four-col{width:34.82466%;margin-right:2.41837%}.eleven-col .five-col{width:44.13542%;margin-right:2.41837%}.eleven-col .six-col{width:53.44619%;margin-right:2.41837%}.eleven-col .seven-col{width:62.75695%;margin-right:2.41837%}.eleven-col .eight-col{width:72.06771%;margin-right:2.41837%}.eleven-col .nine-col{width:81.37847%;margin-right:2.41837%}.eleven-col .ten-col{width:90.68923%;margin-right:2.41837%}.eleven-col .eleven-col{width:100%;margin-right:0}.ten-col .one-col{width:7.6%;margin-right:2.66666%}.ten-col .two-col{width:17.86666%;margin-right:2.66666%}.ten-col .three-col{width:28.13333%;margin-right:2.66666%}.ten-col .four-col{width:38.4%;margin-right:2.66666%}.ten-col .five-col{width:48.66666%;margin-right:2.66666%}.ten-col .six-col{width:58.93333%;margin-right:2.66666%}.ten-col .seven-col{width:69.19999%;margin-right:2.66666%}.ten-col .eight-col{width:79.46666%;margin-right:2.66666%}.ten-col .nine-col{width:89.73333%;margin-right:2.66666%}.ten-col .ten-col{width:100%;margin-right:0}.nine-col .one-col{width:8.46953%;margin-right:2.97176%}.nine-col .two-col{width:19.91084%;margin-right:2.97176%}.nine-col .three-col{width:31.35215%;margin-right:2.97176%}.nine-col .four-col{width:42.79346%;margin-right:2.97176%}.nine-col .five-col{width:54.23476%;margin-right:2.97176%}.nine-col .six-col{width:65.67607%;margin-right:2.97176%}.nine-col .seven-col{width:77.11738%;margin-right:2.97176%}.nine-col .eight-col{width:88.55869%;margin-right:2.97176%}.nine-col .nine-col{width:100%;margin-right:0}.eight-col .one-col{width:9.56375%;margin-right:3.3557%}.eight-col .two-col{width:22.48322%;margin-right:3.3557%}.eight-col .three-col{width:35.40268%;margin-right:3.3557%}.eight-col .four-col{width:48.32214%;margin-right:3.3557%}.eight-col .five-col{width:61.24161%;margin-right:3.3557%}.eight-col .six-col{width:74.16107%;margin-right:3.3557%}.eight-col .seven-col{width:87.08053%;margin-right:3.3557%}.eight-col .eight-col{width:100%;margin-right:0}.seven-col .one-col{width:10.98265%;margin-right:3.85356%}.seven-col .two-col{width:25.81888%;margin-right:3.85356%}.seven-col .three-col{width:40.6551%;margin-right:3.85356%}.seven-col .four-col{width:55.49132%;margin-right:3.85356%}.seven-col .five-col{width:70.32755%;margin-right:3.85356%}.seven-col .six-col{width:85.16377%;margin-right:3.85356%}.seven-col .seven-col{width:100%;margin-right:0}.six-col .one-col{width:12.89592%;margin-right:4.52488%}.six-col .two-col{width:30.31674%;margin-right:4.52488%}.six-col .three-col{width:47.73755%;margin-right:4.52488%}.six-col .four-col{width:65.15837%;margin-right:4.52488%}.six-col .five-col{width:82.57918%;margin-right:4.52488%}.six-col .six-col{width:100%;margin-right:0}.five-col .one-col{width:15.61643%;margin-right:5.47945%}.five-col .two-col{width:36.71232%;margin-right:5.47945%}.five-col .three-col{width:57.80821%;margin-right:5.47945%}.five-col .four-col{width:78.9041%;margin-right:5.47945%}.five-col .five-col{width:100%;margin-right:0}.four-col .one-col{width:19.79166%;margin-right:6.94444%}.four-col .two-col{width:46.52777%;margin-right:6.94444%}.four-col .three-col{width:73.26388%;margin-right:6.94444%}.four-col .four-col{width:100%;margin-right:0}.three-col .one-col{width:27.01421%;margin-right:9.47867%}.three-col .two-col{width:63.5071%;margin-right:9.47867%}.three-col .three-col{width:100%;margin-right:0}.two-col .one-col{width:42.53731%;margin-right:14.92537%}.two-col .two-col{width:100%;margin-right:0}.one-col .one-col{width:100%;margin-right:0}.twelve-col .last-col{margin-right:0}.eleven-col .last-col{margin-right:0}.ten-col .last-col{margin-right:0}.nine-col .last-col{margin-right:0}.eight-col .last-col{margin-right:0}.seven-col .last-col{margin-right:0}.six-col .last-col{margin-right:0}.five-col .last-col{margin-right:0}.four-col .last-col{margin-right:0}.three-col .last-col{margin-right:0}.two-col .last-col{margin-right:0}.one-col .last-col{margin-right:0}.row,#context-footer{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin:0;padding:40px 40px 20px}.row:after{content:".";visibility:hidden;display:block;height:0;clear:both}.row-feature{background:none}.container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:20px 20px 0;width:100%}.append-one{margin-right:8.51063%}.append-two{margin-right:17.02127%}.append-three{margin-right:25.53191%}.append-four{margin-right:34.04255%}.append-five{margin-right:42.55319%}.append-six{margin-right:51.06383%}.append-seven{margin-right:59.57446%}.append-eight{margin-right:68.0851%}.append-nine{margin-right:76.59574%}.append-ten{margin-right:85.10638%}.append-eleven{margin-right:93.61702%}.prepend-one{margin-left:8.51063%}.prepend-two{margin-left:17.02127%}.prepend-three{margin-left:25.53191%}.prepend-four{margin-left:34.04255%}.prepend-five{margin-left:42.55319%}.prepend-six{margin-left:51.06383%}.prepend-seven{margin-left:59.57446%}.prepend-eight{margin-left:68.0851%}.prepend-nine{margin-left:76.59574%}.prepend-ten{margin-left:85.10638%}.prepend-eleven{margin-left:93.61702%}.push-one{margin-left:57px}.pull-one,.pull-two,.pull-three,.pull-four,.pull-five,.pull-six,.pull-seven,.pull-eight,.pull-nine,.pull-ten,.pull-eleven{float:left;position:relative}.pull-one{margin-left:-6.38297%}.pull-two{margin-left:-17.02127%}.pull-three{margin-left:-25.53191%}.pull-four{margin-left:-34.04255%}.pull-five{margin-left:-34.04255%}.pull-six{margin-left:-51.06383%}.pull-seven{margin-left:-59.57446%}.pull-eight{margin-left:-68.0851%}.pull-nine{margin-left:-76.59574%}.pull-ten{margin-left:-85.10638%}.pull-eleven{margin-left:-93.61702%}.push-1,.push-two,.push-three,.push-four,.push-five,.push-six,.push-seven,.push-eight,.push-nine,.push-ten,.push-eleven{float:left;position:relative}.push-one{margin:0 -8.51063% 0 8.51063%}.push-two{margin:0 -19.14893% 0 19.14893%}.push-three{margin:0 -27.65957% 0 27.65957%}.push-four{margin:0 -36.17021% 0 36.17021%}.push-five{margin:0 -36.17021% 0 36.17021%}.push-six{margin:0 -53.19149% 0 53.19149%}.push-seven{margin:0 -61.70212% 0 61.70212%}.push-eight{margin:0 -70.21276% 0 70.21276%}.push-nine{margin:0 -78.7234% 0 78.7234%}.push-ten{margin:0 -87.23404% 0 87.23404%}.push-eleven{margin:0 -95.74468% 0 95.74468%}}@media only screen and (min-width: 984px){body{font-size:16px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{float:left}.one-col{width:6.38297%}.two-col{width:14.89361%}.three-col{width:23.40425%}.four-col{width:31.91489%}.five-col{width:40.42553%}.six-col{width:48.93617%}.seven-col{width:57.4468%}.eight-col{width:65.95744%}.nine-col{width:74.46808%}.ten-col{width:82.97872%}.eleven-col{width:91.48936%}.three-col:nth-child(1):nth-last-child(4),.three-col:nth-child(2):nth-last-child(3),.three-col:nth-child(3):nth-last-child(2),.three-col:nth-child(4):nth-last-child(1){width:23.36%}.three-col:nth-of-type(2){margin-right:2.21238%}.twelve-col{width:100%;margin-right:0}.twelve-col .one-col{width:6.3053%;margin-right:2.21238%}.twelve-col .two-col{width:14.823%;margin-right:2.21238%}.twelve-col .three-col{width:23.3407%;margin-right:2.21238%}.twelve-col .three-col:nth-child(1):nth-last-child(4),.twelve-col .three-col:nth-child(2):nth-last-child(3),.twelve-col .three-col:nth-child(3):nth-last-child(2),.twelve-col .three-col:nth-child(4):nth-last-child(1){width:23.3407%}.twelve-col .three-col:nth-of-type(2){margin-right:2.21238%}.twelve-col .four-col{width:31.8584%;margin-right:2.21238%}.twelve-col .five-col{width:40.3761%;margin-right:2.21238%}.twelve-col .six-col{width:48.8938%;margin-right:2.21238%}.twelve-col .seven-col{width:57.4115%;margin-right:2.21238%}.twelve-col .eight-col{width:65.9292%;margin-right:2.21238%}.twelve-col .nine-col{width:74.4469%;margin-right:2.21238%}.twelve-col .ten-col{width:82.9646%;margin-right:2.21238%}.twelve-col .eleven-col{width:91.4823%;margin-right:2.21238%}.twelve-col .twelve-col{width:100%;margin-right:0}.eleven-col .one-col{width:6.89238%;margin-right:2.41837%}.eleven-col .two-col{width:16.20314%;margin-right:2.41837%}.eleven-col .three-col{width:25.5139%;margin-right:2.41837%}.eleven-col .four-col{width:34.82466%;margin-right:2.41837%}.eleven-col .five-col{width:44.13542%;margin-right:2.41837%}.eleven-col .six-col{width:53.44619%;margin-right:2.41837%}.eleven-col .seven-col{width:62.75695%;margin-right:2.41837%}.eleven-col .eight-col{width:72.06771%;margin-right:2.41837%}.eleven-col .nine-col{width:81.37847%;margin-right:2.41837%}.eleven-col .ten-col{width:90.68923%;margin-right:2.41837%}.eleven-col .eleven-col{width:100%;margin-right:0}.ten-col .one-col{width:7.6%;margin-right:2.66666%}.ten-col .two-col{width:17.86666%;margin-right:2.66666%}.ten-col .three-col{width:28.13333%;margin-right:2.66666%}.ten-col .four-col{width:38.4%;margin-right:2.66666%}.ten-col .five-col{width:48.66666%;margin-right:2.66666%}.ten-col .six-col{width:58.93333%;margin-right:2.66666%}.ten-col .seven-col{width:69.19999%;margin-right:2.66666%}.ten-col .eight-col{width:79.46666%;margin-right:2.66666%}.ten-col .nine-col{width:89.73333%;margin-right:2.66666%}.ten-col .ten-col{width:100%;margin-right:0}.nine-col .one-col{width:8.46953%;margin-right:2.97176%}.nine-col .two-col{width:19.91084%;margin-right:2.97176%}.nine-col .three-col{width:31.35215%;margin-right:2.97176%}.nine-col .four-col{width:42.79346%;margin-right:2.97176%}.nine-col .five-col{width:54.23476%;margin-right:2.97176%}.nine-col .six-col{width:65.67607%;margin-right:2.97176%}.nine-col .seven-col{width:77.11738%;margin-right:2.97176%}.nine-col .eight-col{width:88.55869%;margin-right:2.97176%}.nine-col .nine-col{width:100%;margin-right:0}.eight-col .one-col{width:9.56375%;margin-right:3.3557%}.eight-col .two-col{width:22.48322%;margin-right:3.3557%}.eight-col .three-col{width:35.40268%;margin-right:3.3557%}.eight-col .four-col{width:48.32214%;margin-right:3.3557%}.eight-col .five-col{width:61.24161%;margin-right:3.3557%}.eight-col .six-col{width:74.16107%;margin-right:3.3557%}.eight-col .seven-col{width:87.08053%;margin-right:3.3557%}.eight-col .eight-col{width:100%;margin-right:0}.seven-col .one-col{width:10.98265%;margin-right:3.85356%}.seven-col .two-col{width:25.81888%;margin-right:3.85356%}.seven-col .three-col{width:40.6551%;margin-right:3.85356%}.seven-col .four-col{width:55.49132%;margin-right:3.85356%}.seven-col .five-col{width:70.32755%;margin-right:3.85356%}.seven-col .six-col{width:85.16377%;margin-right:3.85356%}.seven-col .seven-col{width:100%;margin-right:0}.six-col .one-col{width:12.89592%;margin-right:4.52488%}.six-col .two-col{width:30.31674%;margin-right:4.52488%}.six-col .three-col{width:47.73755%;margin-right:4.52488%}.six-col .four-col{width:65.15837%;margin-right:4.52488%}.six-col .five-col{width:82.57918%;margin-right:4.52488%}.six-col .six-col{width:100%;margin-right:0}.five-col .one-col{width:15.61643%;margin-right:5.47945%}.five-col .two-col{width:36.71232%;margin-right:5.47945%}.five-col .three-col{width:57.80821%;margin-right:5.47945%}.five-col .four-col{width:78.9041%;margin-right:5.47945%}.five-col .five-col{width:100%;margin-right:0}.four-col .one-col{width:19.79166%;margin-right:6.94444%}.four-col .two-col{width:46.52777%;margin-right:6.94444%}.four-col .three-col{width:73.26388%;margin-right:6.94444%}.four-col .four-col{width:100%;margin-right:0}.three-col .one-col{width:27.01421%;margin-right:9.47867%}.three-col .two-col{width:63.5071%;margin-right:9.47867%}.three-col .three-col{width:100%;margin-right:0}.two-col .one-col{width:42.53731%;margin-right:14.92537%}.two-col .two-col{width:100%;margin-right:0}.one-col .one-col{width:100%;margin-right:0}.twelve-col .last-col{margin-right:0}.eleven-col .last-col{margin-right:0}.ten-col .last-col{margin-right:0}.nine-col .last-col{margin-right:0}.eight-col .last-col{margin-right:0}.seven-col .last-col{margin-right:0}.six-col .last-col{margin-right:0}.five-col .last-col{margin-right:0}.four-col .last-col{margin-right:0}.three-col .last-col{margin-right:0}.two-col .last-col{margin-right:0}.one-col .last-col{margin-right:0}.row,#context-footer{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin:0;padding:40px 40px 20px}.row:after{content:".";visibility:hidden;display:block;height:0;clear:both}.row-feature{background:none}.container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:20px 20px 0;width:100%}.append-one{margin-right:8.51063%}.append-two{margin-right:17.02127%}.append-three{margin-right:25.53191%}.append-four{margin-right:34.04255%}.append-five{margin-right:42.55319%}.append-six{margin-right:51.06383%}.append-seven{margin-right:59.57446%}.append-eight{margin-right:68.0851%}.append-nine{margin-right:76.59574%}.append-ten{margin-right:85.10638%}.append-eleven{margin-right:93.61702%}.prepend-one{margin-left:8.51063%}.prepend-two{margin-left:17.02127%}.prepend-three{margin-left:25.53191%}.prepend-four{margin-left:34.04255%}.prepend-five{margin-left:42.55319%}.prepend-six{margin-left:51.06383%}.prepend-seven{margin-left:59.57446%}.prepend-eight{margin-left:68.0851%}.prepend-nine{margin-left:76.59574%}.prepend-ten{margin-left:85.10638%}.prepend-eleven{margin-left:93.61702%}.push-one{margin-left:57px}.pull-one,.pull-two,.pull-three,.pull-four,.pull-five,.pull-six,.pull-seven,.pull-eight,.pull-nine,.pull-ten,.pull-eleven{float:left;position:relative}.pull-one{margin-left:-6.38297%}.pull-two{margin-left:-17.02127%}.pull-three{margin-left:-25.53191%}.pull-four{margin-left:-34.04255%}.pull-five{margin-left:-34.04255%}.pull-six{margin-left:-51.06383%}.pull-seven{margin-left:-59.57446%}.pull-eight{margin-left:-68.0851%}.pull-nine{margin-left:-76.59574%}.pull-ten{margin-left:-85.10638%}.pull-eleven{margin-left:-93.61702%}.push-1,.push-two,.push-three,.push-four,.push-five,.push-six,.push-seven,.push-eight,.push-nine,.push-ten,.push-eleven{float:left;position:relative}.push-one{margin:0 -8.51063% 0 8.51063%}.push-two{margin:0 -19.14893% 0 19.14893%}.push-three{margin:0 -27.65957% 0 27.65957%}.push-four{margin:0 -36.17021% 0 36.17021%}.push-five{margin:0 -36.17021% 0 36.17021%}.push-six{margin:0 -53.19149% 0 53.19149%}.push-seven{margin:0 -61.70212% 0 61.70212%}.push-eight{margin:0 -70.21276% 0 70.21276%}.push-nine{margin:0 -78.7234% 0 78.7234%}.push-ten{margin:0 -87.23404% 0 87.23404%}.push-eleven{margin:0 -95.74468% 0 95.74468%}}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,ol,ul,li,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:300;src:url("../fonts/ubuntu-l-webfont.eot");src:url("../fonts/ubuntu-l-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-l-webfont.woff") format("woff"),url("../fonts/ubuntu-l-webfont.ttf") format("truetype"),url("../fonts/ubuntu-l-webfont.svg#ubuntulight") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:400;src:local("Ubuntu");src:url("../fonts/ubuntu-r-webfont.eot");src:url("../fonts/ubuntu-r-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-r-webfont.woff") format("woff"),url("../fonts/ubuntu-r-webfont.ttf") format("truetype"),url("../fonts/ubuntu-r-webfont.svg#ubunturegular") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:500;src:url("../fonts/ubuntu-m-webfont.eot");src:local("Ubuntu Medium"),local("Ubuntu-Medium"),url("../fonts/ubuntu-m-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-m-webfont.woff") format("woff"),url("../fonts/ubuntu-m-webfont.ttf") format("truetype"),url("../fonts/ubuntu-m-webfont.svg#ubuntumedium") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:700;src:url("../fonts/ubuntu-b-webfont.eot");src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url("../fonts/ubuntu-b-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-b-webfont.woff") format("woff"),url("../fonts/ubuntu-b-webfont.ttf") format("truetype"),url("../fonts/ubuntu-b-webfont.svg#ubuntubold") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:300;src:url("../fonts/ubuntu-li-webfont.eot");src:local("Ubuntu Light Italic"),local("Ubuntu-LightItalic"),url("../fonts/ubuntu-li-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-li-webfont.woff") format("woff"),url("../fonts/ubuntu-li-webfont.ttf") format("truetype"),url("../fonts/ubuntu-li-webfont.svg#ubuntulight_italic") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:400;src:local("Ubuntu Italic"),local("Ubuntu-Italic"),url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/GZMdC02DTXXx8AdUvU2etw.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:500;src:url("../fonts/ubuntu-mi-webfont.eot");src:local("Ubuntu Medium Italic"),local("Ubuntu-MediumItalic"),url("../fonts/ubuntu-mi-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-mi-webfont.woff") format("woff"),url("../fonts/ubuntu-mi-webfont.ttf") format("truetype"),url("../fonts/ubuntu-mi-webfont.svg#ubuntumedium_italic") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:700;src:local("Ubuntu Bold Italic"),local("Ubuntu-BoldItalic"),url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/pqisLQoeO9YTDCNnlQ9bfz8E0i7KZn-EPnyo3HZu7kw.woff") format("woff")}html{font-size:100%}body{color:#333;font-family:Ubuntu, Arial, "libra sans", sans-serif;font-weight:300}blockquote,q{quotes:none}blockquote{margin:28px 20px}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}legend{border:0;*margin-left:-7px}figure{margin:0}abbr,acronym{cursor:help}a:focus{outline:thin dotted}a:hover,a:active{outline:0}a:link,a:visited{color:#dd4814;text-decoration:none}a:hover,a:active,a:focus{text-decoration:underline}a.link-arrow:after{content:"\0000a0›"}nav ul li h2 a:after{content:"\0000a0›"}nav ul li a:after,.carousel ul li a:after,ul li p a:after{content:""}ol,ul{margin-left:20px;margin-bottom:20px}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}nav ul,nav ol{list-style:none;list-style-image:none}svg:not(:root){overflow:hidden}img{border:0;height:auto;max-width:100%}img.left{margin-right:20px}img.right{margin-left:20px}.middle img{vertical-align:middle;margin-top:4em}h1,h2,h3,h4,h5,h6{font-weight:300;line-height:1.3}h1{font-size:1.625em;margin-bottom:.5em}h2{font-size:1.438em;margin-bottom:.5em}h3{font-size:1.219em;margin-bottom:.522em}h4{font-size:1.25em;font-weight:400;margin-bottom:.615em}h5{font-size:1em;font-weight:700;margin-bottom:1em}h6{font-size:.723em;font-weight:400;margin-bottom:1em;letter-spacing:.1em;text-transform:uppercase}p,li{font-size:1em;line-height:1.5;margin:0;margin-bottom:.75em;padding:0}h2 span,h1 span{display:block}p+h2,ul+h2,ol+h2,pre+h2{margin-top:0.5625em}header nav a:link{font-weight:normal}p+h3,ul+h3,ol+h3,pre+h3{margin-top:0.78261em}p+h4,ul+h4,ol+h4,pre+h4{margin-top:1.39286em}ol+h2,p+h2,pre+h2,ul+h2{margin-top:.563em}ol+h3,p+h3,pre+h3,ul+h3{margin-top:.783em}ol+h4,p+h4,pre+h4,ul+h4{margin-top:1.219em}li{margin-bottom:.4em}li:last-of-type{margin-bottom:0}ins{background:#fffbeb;text-decoration:none}small,.smaller{font-size:13px}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{vertical-align:text-top}sub{vertical-align:text-bottom}dfn{font-style:italic}mark{background:#ff0;color:#000}code,pre{font-family:"Ubuntu Mono", "Consolas", "Monaco", "Lucida Console", "Courier New", Courier, monospace}pre{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fdf6f2;padding:.6em 1em;white-space:pre-wrap;word-wrap:break-word}blockquote{margin:0}blockquote>p{font-size:0.92857em;margin-bottom:0.92308em;font-weight:100;margin:0 0 .4em 0}blockquote small{font-size:.813em;line-height:1.4}button,input,select,textarea{font-family:Ubuntu,Arial,"libra sans",sans-serif;margin:0;vertical-align:baseline;*vertical-align:middle}select{font-size:1em;font-weight:300}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-box-sizing:content-box;-webkit-appearance:none;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-weight:300;outline:none;padding:0.6956522em 0.869565em}input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}form fieldset{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-repeat:no-repeat;background-color:#EFEEEC;background-position:-15px -15px;border:0;margin-bottom:8px;padding:15px 20px}form fieldset h3{border-bottom:1px dotted #dfdcd9;margin-bottom:9px;padding-bottom:10px}form fieldset li:first-child{margin-top:0}form input[type="text"],form input[type="email"],form input[type="tel"],form textarea{-webkit-appearance:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#fff;border:1px solid #999;display:block;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;padding:0.6956522em 0.869565em}form input:focus,form textarea:focus{border:1px solid #dd4814}form textarea[readonly='readonly']{color:#999}form input[type="checkbox"],form input[type="radio"]{margin:0;width:auto}form input[type="checkbox"]+label,form input[type="radio"]+label{display:inline;margin-left:5px;vertical-align:middle;width:auto}form input[type="submit"]{font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#dd4814;background-image:-moz-linear-gradient(#f26120, #dd4814);background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#f26120), to(#dd4814));background-image:-webkit-linear-gradient(#f26120, #dd4814);background-image:-o-linear-gradient(#f26120, #dd4814);-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border:0;color:#fff;display:block;padding:10px 14px;text-shadow:none;width:auto;margin-bottom:0}form input[type="submit"]:hover{background:#dd4814}form label{cursor:pointer;display:block;margin-bottom:4px}form label span{color:#df382c}form ul{margin-left:0}form li{list-style:none outside none;margin-top:14px}form button[type="submit"]{border:0;display:inline-block;font-family:Ubuntu, Arial, "libra sans", sans-serif;text-decoration:none;font-weight:300}form input[type="reset"]{display:none}table{border-collapse:collapse;border-spacing:0;overflow-x:scroll;margin-bottom:20px;margin:0 0 2.85714em 0;width:100%}table th,table td{padding:15px 10px;background:#f0edea;border:1px dotted #888}table td{text-align:center;vertical-align:middle}table thead th{border-collapse:separate;border-spacing:0 10px;background:#fee3d2;color:#333333;font-weight:normal}table tbody th{text-align:left;font-weight:normal;font-weight:300}table th[scope="col"]{text-align:center}table thead th:first-of-type{text-align:left}@media only screen and (max-width: 768px){table{display:block}}@media only screen and (min-width: 984px){form fieldset{padding:15px 20px}img{max-width:none}}.audience-consumer{color:#333}.audience-consumer .row-box,.audience-consumer .main-content{color:#333}.audience-consumer .inner-wrapper{background:#fff}.audience-consumer .quote-right-top{padding:60px 60px 0 40px;background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-br-287x287.png") no-repeat;height:287px;position:absolute;right:-40px;text-align:left;top:-90px;width:31.91489%}.audience-consumer .quote-right-top p{font-size:1.14286em;margin-bottom:0.75em;margin:0.769em;padding-bottom:0;color:#fff}.audience-consumer .quote-right-top p cite{font-size:0.85714em;margin-bottom:1em;color:#fff;padding:0}.audience-consumer .quote-right-top p a,.audience-consumer .quote-right p a{color:#fff}.audience-consumer .quote-right{font-size:1.28571em;margin-bottom:0.66667em;color:#fff;padding:50px 100px 0 50px;text-indent:-6px;background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-bl-287x287.png") no-repeat;min-height:287px;position:absolute;right:-20px;text-align:left;top:-90px;width:21.2006% em}.audience-consumer .quote-right cite{font-style:normal;margin-left:6px}.audience-consumer .quote-right-alt{background:url(/sites/ubuntu/latest/u/img/patterns/quote-white-br-360x360.png) 0 -100px no-repeat;color:#dd4814;padding:50px 50px 0 50px}.audience-consumer .quote-right-right{background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-br-287x287.png") no-repeat}.audience-enterprise h1{margin:0 0 18px 0}.audience-enterprise td{background:#fff}.audience-enterprise th,.audience-enterprise td{padding:6px 10px;background:#fff}.audience-enterprise th[scope="col"]{background:#E2D4DC;color:#772953}.audience-enterprise tbody th[rowspan]{background:#F7F2F6}.audience-enterprise tfoot th[rowspan]{background:#dfdcd9}.audience-enterprise tfoot td,.audience-enterprise tfoot th{font-weight:normal;background:#dfdcd9}.audience-enterprise .inner-wrapper{background:#2c001e;color:#fff}.audience-enterprise .row-box{background:#fff;color:#333}.row-enterprise{background:#772953;color:#fff;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.row-enterprise .box,.row-enterprise div{background:#772953;color:#fff}.row-enterprise a{color:#fff}.enterprise-dot-pattern{background:url("/sites/ubuntu/latest/u/img/patterns/enterprise-dot-pattern.png")}.developer-dot-pattern{background:url("/sites/ubuntu/latest/u/img/patterns/developer-dot-pattern.png")}.wrapper,header.banner .nav-primary,nav div.footer-a div,.inline-lists ul,.legal{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:auto}.inner-wrapper{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;clear:both;display:block;float:left;width:100%;margin:0;padding-bottom:20px;position:relative;z-index:1}@media only screen and (min-width: 768px){.med-six-col .three-col{width:48%}.med-six-col .three-col:nth-of-type(2n){margin-right:0}}@media only screen and (min-width: 769px){.inner-wrapper{border-radius:4px;padding-bottom:20px}}@media only screen and (min-width: 984px){.wrapper{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;margin:0 auto;position:relative;text-align:left;width:984px}.inner-wrapper{-moz-box-shadow:0 0 3px #c9c9c9;-webkit-box-shadow:0 0 3px #c9c9c9;box-shadow:0 0 3px #c9c9c9;margin:10px 0 30px}.three-col,.med-six-col .three-col{width:23.30%}.three-col.last-col:nth-of-type(2n){margin-right:0}.med-six-col .three-col:nth-of-type(2n){margin-right:20px}.med-six-col .three-col.last-col{margin-right:0}}.left{float:left}.right{float:right}.caps{text-transform:uppercase}img{border:0 none;height:auto;max-width:100%}img.left{margin-right:0}img.touch-border{margin-bottom:-3px}.accessibility-aid,.off-left{position:absolute;left:-999em}a.external{-moz-background-size:0.7em 0.7em;-webkit-background-size:0.7em 0.7em;-o-background-size:0.7em 0.7em;background-size:0.7em 0.7em;padding-right:.9em;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/external-link-orange.svg");background-position:right 1px;background-repeat:no-repeat}.opera-mini a.external,.no-svg a.external{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/external-link-orange.png")}.text-center,.align-center{text-align:center}.no-margin{margin:0}.no-margin-bottom{margin-bottom:0}.no-padding-bottom{padding-bottom:0}.pull-left-20{margin-left:-20px}.pull-right-20{margin-right:-20px}.pull-left-40{margin-left:-40px}.pull-right-40{margin-right:-41px}.no-border{border:0}.link-top{font-size:1em;margin-bottom:0.85714em;clear:both;margin-bottom:40px;margin-top:-40px}.link-top a{background:#fff;margin-right:10px;margin-top:-17px;padding:5px;float:right}.pull-bottom-right{position:absolute;right:0;bottom:0;left:auto}.box .pull-bottom-right{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0}.pull-bottom-left{margin-left:-20px;margin-bottom:-21px}.pull-top-right{margin-left:-20px;margin-top:-21px}div.box-image-centered span img.priority-0,div.row-image-centered span img.priority-0,div.row.row-image-centered span img.priority-0,img.priority-0{position:absolute;left:-999em}.priority-0,.not-for-small{position:absolute;left:-999em}.video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.video-container+h3,.video-container+.video-title{margin-top:20px}@media only screen and (max-width: 768px){.pull-right-40{margin-right:-30px}.pull-bottom-right,.pull-bottom-left{position:static}img.pull-bottom-left{margin-bottom:0;margin-left:0}}@media only screen and (min-width: 768px){div.box-image-centered span img.priority-0,div.row-image-centered span img.priority-0,div.row.row-image-centered span img.priority-0,img.priority-0{position:relative;left:auto}.priority-0,.not-for-small{position:relative;left:auto}.for-mobile,.for-small{position:absolute;left:-999em}.pull-right{float:right;margin-right:-30px}img.pull-left{margin-left:-30px}img.touch-border{float:left;margin-bottom:-30px}}@media only screen and (min-width: 769px){img.left{margin-right:20px}}@media only screen and (min-width: 984px){img.touch-border{float:left;margin-bottom:-40px}img.pull-left{margin-left:-40px}.pull-right{float:right;margin-right:-40px}.for-tablet,.for-medium{display:none}.no-border{border:0}}.caps-centered,.muted-heading{font-size:.875em;margin-bottom:20px;text-align:center;text-transform:uppercase}p.intro{font-size:1.14286em;margin-bottom:0.75em;line-height:1.4}.row div p:last-child,.row div ul:last-child{margin-bottom:0}.four-col p:last-child{margin-bottom:0}.note{color:#888;font-size:.813em}@media only screen and (min-width: 768px){p.intro{font-size:1.13333em}}@media only screen and (min-width: 984px){h1{font-size:2.8125em}h2{font-size:2em;margin-bottom:.375em}h3{font-size:1.438em;margin-bottom:.522em}h4{font-size:1em;margin-bottom:.75em}h5{font-size:1em}p,li,code,pre{font-size:16px;line-height:1.5;margin-bottom:.75em}p.intro{font-size:1.25em}}header.banner{border-top:0;min-width:100%;width:auto;background:#dd4814;display:block;position:relative;z-index:2}header.banner .nav-primary{border:0;margin:0 auto;overflow:hidden}header.banner .nav-primary ul{border-right:1px solid #ed6637;float:left;margin:0;position:relative}header.banner .nav-primary ul li{border-left:1px solid #c64012;float:left;list-style-image:none;margin:0;text-indent:0;vertical-align:bottom}header.banner .nav-primary ul li:last-child{border-right:1px solid #c64012}header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited{font-size:14px;border-left:1px solid #ec5b29;color:#fff;display:block;margin-bottom:0;padding:14px 14px 13px;position:relative;text-align:center;text-decoration:none;-webkit-font-smoothing:subpixel-antialiased;-moz-font-smoothing:subpixel-antialiased;-o-font-smoothing:subpixel-antialiased;font-smoothing:subpixel-antialiased}header.banner .nav-primary ul a.active{background:#B83A10;border-left:1px solid #ec5b29}header.banner .nav-primary ul li a:hover{background:#e1662f;border-top:0;-moz-box-shadow:inset 0 2px 2px -2px #777;-webkit-box-shadow:inset 0 2px 2px -2px #777;box-shadow:inset 0 2px 2px -2px #777}#main-navigation-link{display:none}header.banner .nav-toggle{position:absolute;right:0;display:block;width:48px;height:48px;text-indent:-99999px;background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg);-moz-background-size:25px auto;-webkit-background-size:25px auto;-o-background-size:25px auto;background-size:25px auto;background-repeat:no-repeat;background-position:center center;cursor:pointer}header.banner .no-script{display:none}.opera-mini header.banner .nav-toggle,.no-svg header.banner .nav-toggle{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.png)}header.banner nav ul{background-color:#f0f0f0;display:none;float:left}header.banner .nav-primary.active{-moz-box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);-webkit-box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);padding:0;border-bottom:1px solid #d4d7d4}header nav ul.active{display:block}header.banner .nav-primary ul li,header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:active{display:block;padding:0;margin:0;border:none}header.banner .nav-primary ul li a:hover{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background-color:#d0d0d0}header.banner .nav-primary ul li a.active{background-color:#ddd}header.banner .nav-primary ul li{border-bottom:1px solid #F2F2F4;font-size:16px}header.banner .nav-primary ul li:last-child{border:0}header.banner nav.nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{padding:14px 14px 13px;text-align:left}header.banner nav.nav-primary ul.active li ul{display:none}#menu.active:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-arrow.svg);background-repeat:no-repeat;background-position:50% 26px;content:"";display:block;height:23px;margin-left:0;padding-bottom:17px;position:relative;top:-3px;width:48px;z-index:999}html.no-svg #menu.active:after,.opera-mini #menu.active:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-arrow.png)}.nav-secondary{border-bottom:1px solid #dfdcd9;margin-bottom:0}.nav-secondary ul{float:left;margin-bottom:10px;margin-left:2px}.nav-secondary ul li{float:left;margin-top:16px;font-size:14px;margin-right:15px}.nav-secondary ul li a:link,.nav-secondary ul li a:visited{color:#333;font-size:14px;float:left}.nav-secondary ul li a:hover,.nav-secondary ul li a:active{color:#dd4814;text-decoration:none}.nav-secondary ul li,.nav-secondary ul li.active a:link,.nav-secondary ul li.active a:visited{color:#dd4814;text-decoration:none}.nav-secondary ul.breadcrumb{margin-left:20px}.nav-secondary ul.breadcrumb li,.nav-secondary ul.breadcrumb li a:link,.nav-secondary ul.breadcrumb li a:visited{color:#888;margin-right:8px}.nav-secondary ul.breadcrumb li.active a:link,.nav-secondary ul.breadcrumb li.active a:visited{color:#dd4814}header.banner h2{font-size:1.78571em;margin-bottom:0.48em;display:block;left:4px;margin-bottom:0;position:relative;text-transform:lowercase;top:14px}header.banner h2 a:link,header.banner h2 a:visited,header.banner a{color:#fff;float:left;text-decoration:none}header.banner .logo{border-left:0;float:left;height:48px;overflow:hidden}header.banner .logo-ubuntu{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/ubuntu-logo.png") no-repeat scroll 0 10px transparent;font-size:18px;margin-bottom:0;position:relative;text-transform:lowercase;float:left;margin:0;display:inline-block;height:32px;min-width:128px;margin-right:-20px;margin-left:10px;padding:7px 14px 9px 0}header.banner .logo-ubuntu img{margin-right:8px;position:absolute;left:-999em}header.banner .logo-ubuntu span{float:left;font-size:23px;font-weight:300;padding-left:122px;padding-right:20px;position:relative;top:5px}header.banner .nav-primary.nav-left .logo-ubuntu{float:right}header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-white.svg");background-size:107px 25px;float:left}html.no-svg header.banner .nav-primary.nav-right .logo-ubuntu,.opera-mini header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-white.png")}@media only screen and (max-width: 295px){header.banner .nav-primary.nav-right .logo-ubuntu,header.banner .logo-ubuntu{-moz-background-size:20px 20px;-webkit-background-size:20px 20px;-o-background-size:20px 20px;background-size:20px 20px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu_cof-white_orange-hex.svg") 0 50% no-repeat;min-width:0;width:38px}header.banner .logo-ubuntu span{padding-left:38px}}html.no-svg header.banner .logo-ubuntu,.opera-mini header.banner .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu_cof-white_orange-hex.png")}@media only screen and (max-width: 768px){header.banner .nav-primary{-moz-box-shadow:0 1px 2px 1px rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 2px 1px rgba(0,0,0,0.2);box-shadow:0 1px 2px 1px rgba(0,0,0,0.2)}header.banner .nav-primary.active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;padding:0}header nav ul.active{float:left}header nav ul.active li:last-child a:link,header nav ul.active li:last-child a:visited{border-bottom:0}header.banner .nav-primary ul{position:relative;width:100%}header.banner .nav-primary ul li.active a:link,header.banner .nav-primary ul li.active a:visited{color:#333;font-weight:700}header.banner .nav-primary ul li,header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:active{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:transparent;border:none;display:block;font-weight:300;margin:0;padding:0;width:100%}header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{background-color:#f0f0f0;border-bottom:1px solid #d4d7d4;color:#333333;font-size:1em}header.banner .nav-primary ul li:nth-last-child(-n+2) a:link,header.banner .nav-primary ul li:nth-last-child(-n+2) a:visited{border:0}header.banner .nav-primary ul li a:hover{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background:#f8f8f8}header.banner .nav-primary ul li a.active{background-color:#ddd}header.banner nav.nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{padding:8px 10px;text-align:left}header.banner .nav-primary ul li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:transparent;border-bottom:0;border-right:1px solid #d4d7d4;float:left;width:50%}.nav-secondary{background:#fff}.nav-secondary ul.second-level-nav{border-top:1px solid #d4d7d4;display:none;margin-bottom:0;margin-left:0;padding-bottom:10px;padding-top:10px;width:100%}.nav-secondary ul.second-level-nav li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;margin:0;float:left}.nav-secondary ul.second-level-nav li a,.nav-secondary ul.second-level-nav li a:link,.nav-secondary ul.second-level-nav li a:visited{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;height:100%;padding:10px 10px 10px 20px;width:100%}.nav-secondary ul.second-level-nav li.active a,.nav-secondary ul.second-level-nav li.active a:link,.nav-secondary ul.second-level-nav li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.third-level-nav{display:none;margin-bottom:0;width:100%;padding-bottom:20px}.nav-secondary ul.third-level-nav li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;margin:0;float:left;padding-left:30px}.nav-secondary ul.third-level-nav li a,.nav-secondary ul.third-level-nav li a:link,.nav-secondary ul.third-level-nav li a:visited{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px 10px 10px 0;display:block;width:100%;height:100%}.nav-secondary ul.third-level-nav li.active a,.nav-secondary ul.third-level-nav li.active a:link,.nav-secondary ul.third-level-nav li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.third-level-nav li.single-link{width:100%}.nav-secondary ul.third-level-nav li:only-child{width:100%}.nav-secondary ul.breadcrumb{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;margin-left:0;margin-bottom:0}.nav-secondary ul.breadcrumb li:first-of-type{border-bottom:1px solid #d4d7d4;margin-bottom:-1px}.nav-secondary ul.breadcrumb li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#fff;width:100%;display:block;height:40px;margin:0}.nav-secondary ul.breadcrumb li a,.nav-secondary ul.breadcrumb li a:link,.nav-secondary ul.breadcrumb li a:visited{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:16px;width:100%;color:#333333;display:block;margin-right:0;text-decoration:none;padding:8px 10px 0 10px}.nav-secondary ul.breadcrumb li.active{margin-top:12px}.nav-secondary ul.breadcrumb li.active a,.nav-secondary ul.breadcrumb li.active a:link,.nav-secondary ul.breadcrumb li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.breadcrumb li:nth-of-type(2n){margin-top:12px}.nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.svg);background-position:center center;background-repeat:no-repeat;background-size:18px;float:right;height:18px;margin-right:-5px;margin-top:-6px;padding:10px;position:relative;right:0;top:0;width:18px}.nav-secondary ul.breadcrumb li+li{display:none}.nav-secondary ul.breadcrumb li+li a:link,.nav-secondary ul.breadcrumb li+li a:active,.nav-secondary ul.breadcrumb li+li a:visited{padding-left:20px}.nav-secondary ul.breadcrumb li+li a.after{background-image:none}.nav-secondary.open ul.breadcrumb li a:after,.nav-secondary.open ul.breadcrumb li a:link:after,.nav-secondary.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.svg)}.nav-secondary.open ul.breadcrumb li+li a.after{background-image:none}.nav-secondary.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.svg);margin-top:-7px}.nav-secondary.open ul.second-level-nav,.nav-secondary.open ul.third-level-nav,.nav-secondary.open ul.breadcrumb li+li{display:block}.no-js .nav-secondary ul.second-level-nav{display:block}.no-js #main-navigation-link{position:absolute;right:10px;top:12px;width:20px;height:28px;z-index:999;text-indent:-999em;display:block}.no-js #main-navigation-link a{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;display:block;width:28px;height:28px;position:absolute}html.no-svg .nav-secondary ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg header.banner .nav-primary #google-appliance-search-form button[type="submit"],.opera-mini header.banner .nav-primary #google-appliance-search-form button[type="submit"]{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.png")}html.no-svg .nav-secondary ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg header.banner .nav-primary #google-appliance-search-form button[type="submit"],.opera-mini header.banner .nav-primary #google-appliance-search-form button[type="submit"]{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.png")}header.banner .nav-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;cursor:pointer;display:block;height:48px;position:absolute;right:0;text-indent:-99999px;width:48px}html.no-svg header.banner .nav-toggle,.opera-mini header.banner .nav-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.png")}}@media only screen and (min-width: 768px){header.banner .nav-primary ul li{border-bottom:0}}@media only screen and (min-width: 769px){header.banner{-moz-box-shadow:0 2px 2px -2px #777777 inset, 2px 1px #FFFFFF;-webkit-box-shadow:0 2px 2px -2px #777777 inset, 2px 1px #FFFFFF;box-shadow:0 2px 2px -2px #777777 inset, 2px 1px #FFFFFF}header.banner nav.nav-primary{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-bottom:0}header.banner .nav-toggle{display:none}header.banner nav ul{background-color:transparent;display:block}header.banner .nav-primary ul li{border-left:1px solid #C64012}header.banner .nav-primary ul li a:active,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:visited,header.banner nav.nav-primary ul li a:link{border-left:1px solid #EC5B29}header.banner .nav-primary ul li:last-child{border-right:1px solid #C64012;border-left:1px solid #C64012}header.banner .nav-primary ul li a.active{background-color:#B83A10}header.banner .nav-primary ul li a:hover{background-color:#E1662F}.nav-secondary ul:last-child li:last-child{padding-bottom:10px}.nav-secondary ul.breadcrumb li,.nav-secondary ul.second-level-nav li,.nav-secondary ul.third-level-nav li{margin-right:15px}.nav-secondary ul.breadcrumb{float:left}.nav-secondary ul.breadcrumb li{margin-bottom:10px}.nav-secondary ul{float:none;margin-bottom:0}.nav-secondary ul li{margin-bottom:5px}}@media only screen and (min-width: 984px){header.banner{margin-bottom:20px}header.banner nav.nav-primary ul{display:block}header.banner .nav-primary,#nav-global .nav-global-wrapper{width:984px}header.banner .nav-primary.nav-right .logo-ubuntu{margin-left:0}}header.banner .nav-primary ul{position:static}header.banner .nav-primary li ul{-moz-box-shadow:0 2px 2px -1px #777;-webkit-box-shadow:0 2px 2px -1px #777;box-shadow:0 2px 2px -1px #777;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background:#f7f7f7;border:1px solid #d5d5d5;display:none;float:none;margin:0;padding:5px 0;position:absolute;top:51px;width:200px}header.banner .nav-primary li:hover ul:after{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-up-smaller.png") no-repeat;content:'';display:block;height:8px;left:20px;position:relative;top:-13px;width:200px;z-index:999}.no-generatedcontent header.banner .nav-primary li ul{-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px;top:48px}header.banner .nav-primary li ul .arrow-up{display:none}header.banner .nav-primary li ul li{border:0;float:none}header.banner .nav-primary li ul li a:link,header.banner .nav-primary li ul li a:visited{border:0;color:#333333;padding:0 0 11px 14px;text-align:left;width:170px}header.banner .nav-primary li ul li a:hover{background:none repeat scroll 0 0 transparent;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;color:#DD4814}header.banner .nav-primary li ul li.first a:link,header.banner .nav-primary li ul li.first a:visited,header.banner .nav-primary li ul li:first-of-type a:link{padding:10px 14px}header.banner .nav-primary li ul li.active a:link,header.banner .nav-primary li ul li.active a:visited{background:none repeat scroll 0 0 transparent !important}header.banner .nav-primary li ul .promo{border-top:1px solid #D5D5D5;float:left;margin-top:5px;padding:15px 0 0}header.banner .nav-primary li ul .promo a:link,header.banner .nav-primary li ul .promo a:visited{background:none repeat scroll 0 0 transparent;border-left:0 none;color:#333333;height:auto;padding:0;text-align:left}header.banner .nav-primary li ul .promo p{margin:0 10px}header.banner .nav-primary li ul .promo a:hover{box-shadow:none;color:#DD4814}header.banner .nav-primary li ul .promo img{margin-top:14px;margin-bottom:-6px;-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px;position:relative;top:1px}header.banner .nav-primary li ul .promo .category{color:#888;font-size:11px;margin:0 10px;text-transform:uppercase}header.banner .nav-primary li:hover ul{display:block}html.lt-ie8 header.banner .nav-primary li:hover ul{display:none}.header-search,#box-search{padding:7px 0 7px 14px;overflow:hidden}.header-search input[type="search"],.header-search input[type="text"],#box-search input[type="search"],#box-search input[type="text"]{-webkit-appearance:none;-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;-ms-transition:all 0.5s ease-out;-o-transition:all 0.5s ease-out;transition:all 0.5s ease-out;background-color:#be3d00;border:none;color:#fff;display:block;float:left;font-size:16px;height:2.1em;margin-bottom:0;padding:0.5em 2.5em 0.5em 0.5em;width:100%}.header-search ::-webkit-input-placeholder,#box-search ::-webkit-input-placeholder{color:white;opacity:0.4}.header-search ::-webkit-input-placeholder,#box-search ::-webkit-input-placeholder{color:white;opacity:0.4}.header-search ::-moz-placeholder,#box-search ::-moz-placeholder{color:white;opacity:0.4}.header-search :-ms-input-placeholder,#box-search :-ms-input-placeholder{color:white;opacity:0.4}.header-search input:-moz-placeholder,#box-search input:-moz-placeholder{color:white;opacity:0.4}.header-search ::placeholder,#box-search ::placeholder{color:white;opacity:0.4}.header-search input[type="search"]:focus,#box-search input[type="search"]:focus{background-color:#a63603}.header-search button[type=submit],#box-search button[type=submit]{padding:3px 2px;line-height:0;float:left;margin-left:-40px;display:block;background:none;overflow:visible}.header-search button[type=submit]:hover,#box-search button[type=submit]:hover{background:none}.header-search button[type=submit] img,#box-search button[type=submit] img{height:28px;width:28px}header.banner .search-toggle{-moz-background-size:20px 20px;-webkit-background-size:20px 20px;-o-background-size:20px 20px;background-size:20px 20px;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search_icon_white_64.png");background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search.svg");background-position:center center;background-repeat:no-repeat;display:block;height:48px;outline:none;overflow:hidden;position:absolute;right:58px;text-indent:-999em;top:0;width:24px}.search-toggle:link,.search-toggle:active{outline:none}#box-search,.header-search{background:#f0f0f0;border:0;display:none;float:left;margin-bottom:0;position:relative;margin:0 0 -1px 0;padding:0;width:100%;z-index:3}#box-search.active,.header-search.active,.header-search.open{display:block}#box-search div,.header-search div{-moz-box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);-webkit-box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);background:#f0f0f0;margin:10px;position:relative;z-index:1}#box-search form input[type="search"],.header-search form input[type="search"]{font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:4px 4px 4px 4px;-moz-border-radius:4px 4px 4px 4px;border-radius:4px 4px 4px 4px;-moz-box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;border:0;color:#333;font-size:16px;height:auto;margin:0;float:left;padding:9px 10px;width:100%}.yes-js .header-inner #box-search,.yes-js .header-inner .header-search{display:none}.yes-js .header-inner #box-search form,.yes-js .header-inner .header-search form{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0;margin-right:0;overflow:hidden;padding:10px;top:0;z-index:999;position:relative;width:100%}@media only screen and (max-width: 768px){header.banner .search-toggle{right:48px}html.no-svg .search-toggle,.opera-mini .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-white.png")}}@media only screen and (min-width: 768px){header.banner .search-toggle{display:none}}@media only screen and (min-width: 960px){#box-search,.header-search{background:none;overflow:hidden;padding:7px 0 7px 14px;border-right:0 none;float:right;margin-bottom:0;padding-bottom:5px;padding-right:0;padding-top:7px;max-width:220px}#box-search form input[type="text"],#box-search form input[type="search"],.header-search form input[type="text"],.header-search form input[type="search"]{-moz-box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-search.png") no-repeat scroll 5px center,none repeat scroll 0 0 #BE3D00;border:6px solid #DE6532;border-width:0 0 1px;color:#fff;font-size:0.813em;height:24px;margin-bottom:0;padding:4px 4px 4px 30px;transition:all 0.5s ease 0s;width:86px}}@media only screen and (max-width: 960px){header.banner nav.nav-primary .header-search{padding:0;position:relative;top:0;width:100%}header.banner nav.nav-primary .header-search input[type="search"]{border-radius:0;background:#f7f7f7;color:#333}header.banner nav.nav-primary .header-search button[type="submit"]{width:32px;height:38px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.svg") no-repeat scroll center center transparent;background-size:28px 28px}header.banner nav.nav-primary .header-search button[type="submit"] img{max-width:none;display:none}header.banner nav.nav-primary .header-search.open{display:block}header.banner .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-white.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;cursor:pointer;right:0;display:block;height:48px;position:absolute;text-indent:-99999px;width:48px}html.no-svg header.banner .search-toggle,.opera-mini header.banner .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/img/search-white.png")}.opera-mini x:-o-prefocus,.opera-mini header.banner .search-toggle{-o-background-size:25px auto;background-size:25px auto}}@media only screen and (min-width: 984px){#box-search,.header-search{display:block;margin-right:0}#box-search form input[type="text"]:focus,.header-search form input[type="text"]:focus{width:160px}}@media only screen and (max-width: 768px){header.banner .search-toggle{right:48px}}body.ubuntu-search .nav-secondary,body.search-results .nav-secondary,body.search-no-results .nav-secondary{display:none}body.ubuntu-search section>h1,body.ubuntu-search section article h1,body.search-results section>h1,body.search-results section article h1,body.search-no-results section>h1,body.search-no-results section article h1{padding-bottom:10px;font-size:1.438em;margin-bottom:0}body.ubuntu-search section>h1,body.search-results section>h1,body.search-no-results section>h1{border-bottom:1px dotted #dfdcd9}body.ubuntu-search .main-search,body.search-results .main-search,body.search-no-results .main-search{padding:20px 0;margin:0 0 20px 0;background-color:transparent}body.ubuntu-search .main-search input[type="search"],body.search-results .main-search input[type="search"],body.search-no-results .main-search input[type="search"]{float:left;width:100%;font-size:2em;border:1px solid #999;-moz-box-sizing:border-box;box-sizing:border-box;padding:0.2em 65px 0.2em 0.2em}body.ubuntu-search .main-search button[type=submit],body.search-results .main-search button[type=submit],body.search-no-results .main-search button[type=submit]{padding:4px;line-height:0;float:left;margin-left:-53px;display:block;background:none;overflow:visible;width:auto;margin-top:-4px}body.ubuntu-search .main-search button[type=submit]:hover,body.search-results .main-search button[type=submit]:hover,body.search-no-results .main-search button[type=submit]:hover{background:none}body.ubuntu-search .main-search button[type=submit] img,body.search-results .main-search button[type=submit] img,body.search-no-results .main-search button[type=submit] img{height:45px;width:45px}body.ubuntu-search .search-result h1 .title-main,body.search-results .search-result h1 .title-main,body.search-no-results .search-result h1 .title-main{margin-right:20px}body.ubuntu-search .search-result h1 .result-url,body.search-results .search-result h1 .result-url,body.search-no-results .search-result h1 .result-url{color:#999;overflow:hidden;text-overflow:ellipsis;display:block;vertical-align:bottom;padding-bottom:2px}body.ubuntu-search .search-result h1 .result-url a,body.search-results .search-result h1 .result-url a,body.search-no-results .search-result h1 .result-url a{color:#999}body.ubuntu-search .search-result p,body.search-results .search-result p,body.search-no-results .search-result p{margin-bottom:0}body.ubuntu-search .num-results,body.search-results .num-results,body.search-no-results .num-results{display:inline-block;margin-left:20px}body.ubuntu-search .bottom-results-total,body.search-results .bottom-results-total,body.search-no-results .bottom-results-total{text-align:center;width:100%;overflow:visible;padding-top:20px;margin:0}body.ubuntu-search .bottom-nav,body.search-results .bottom-nav,body.search-no-results .bottom-nav{overflow:hidden;margin-top:-26px}body.ubuntu-search .bottom-nav ul,body.search-results .bottom-nav ul,body.search-no-results .bottom-nav ul{margin-bottom:0;margin-left:0;padding:0;overflow:hidden}body.ubuntu-search .bottom-nav li,body.search-results .bottom-nav li,body.search-no-results .bottom-nav li{float:left;margin-left:15px}body.ubuntu-search .bottom-nav li:first-child,body.search-results .bottom-nav li:first-child,body.search-no-results .bottom-nav li:first-child{margin-left:0}body.ubuntu-search .nav-back,body.search-results .nav-back,body.search-no-results .nav-back{float:left}body.ubuntu-search .nav-back li:before,body.search-results .nav-back li:before,body.search-no-results .nav-back li:before{content:"\2039";color:#dd4814;margin-right:5px}body.ubuntu-search .nav-back li.item-extreme:before,body.search-results .nav-back li.item-extreme:before,body.search-no-results .nav-back li.item-extreme:before{content:"\2039\2039"}body.ubuntu-search .nav-forward,body.search-results .nav-forward,body.search-no-results .nav-forward{float:right}body.ubuntu-search .nav-forward li:after,body.search-results .nav-forward li:after,body.search-no-results .nav-forward li:after{content:"\203A";color:#dd4814;margin-left:5px}body.ubuntu-search .nav-forward li.item-extreme:after,body.search-results .nav-forward li.item-extreme:after,body.search-no-results .nav-forward li.item-extreme:after{content:"\203A\203A"}body.ubuntu-search .error-notification,body.search-results .error-notification,body.search-no-results .error-notification{background-color:#fdffdc;color:#333;padding:20px;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:20px;display:block}body.ubuntu-search .result-line,body.search-results .result-line,body.search-no-results .result-line{color:#ada69e}body.ubuntu-search .results-top,body.search-results .results-top,body.search-no-results .results-top{border-bottom:1px dotted #dfdcd9;padding-bottom:0.5em}body.ubuntu-search .search-container,body.search-results .search-container,body.search-no-results .search-container{padding-bottom:0}@media only screen and (min-width: 768px){.ubuntu-search .main-search button[type=submit]{margin-left:-60px;margin-top:0}}body footer.global #nav-global li:first-of-type a{margin-left:0}footer.global{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-moz-box-shadow:inset 0 2px 2px -1px #d3d3d3;-webkit-box-shadow:inset 0 2px 2px -1px #d3d3d3;box-shadow:inset 0 2px 2px -1px #d3d3d3;background:none;border-top:0;clear:both;display:block;padding:30px 10px 20px;position:relative;width:100%}footer.global .legal{margin:0 auto;width:100%}footer.global .legal{background-image:none;position:relative;clear:both;min-height:40px}footer.global .legal p,footer.global .legal ul{padding-left:0}footer.global h2{font-size:0.75em;line-height:1.4;margin-bottom:0;padding-bottom:0.5em}footer.global h2,footer.global h2 a:link,footer.global h2 a:visited{color:#333;font-weight:normal}footer.global nav ul li h2 a:after{content:""}footer.global ul{margin:0}footer.global nav ul li.two-col{display:inline-block;min-height:10em;vertical-align:top}footer.global nav ul li li{font-size:0.85714em;margin-bottom:1em;font-size:0.75em;margin-bottom:0}footer.global ul li li a:link,footer.global ul li li a:visited{color:#333;margin-bottom:0}footer.global ul li li a:hover,footer.global ul li li a:active,footer.global h2 a:hover,footer.global h2 a:active{color:#dd4814}footer.global .inline li{display:inline}footer.global p,footer.global ul.inline li a{color:#333;font-size:12px;margin-bottom:0}footer.global ul.inline li a:hover{color:#dd4814}footer.global ul.inline li:after{color:#888;content:"\00b7";vertical-align:middle;margin:0 5px}footer.global ul.inline li:last-child{width:120px}footer.global ul.inline li:last-child:after{content:""}footer.global .inline li{float:none;margin-bottom:0}footer.global .top-link{-moz-box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;-webkit-box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;background:none repeat scroll 0 0 transparent;border:0 none;float:left;font-size:0.75em;letter-spacing:0.05em;margin:0 0 0 -10px;padding-right:20px;text-transform:uppercase;width:100%}footer.global .top-link a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-upload-warmgrey.svg");background-position:10px center;background-repeat:no-repeat;background-size:14px 14px;border-bottom:0 none;color:#888888;display:block;float:none;font-weight:400;padding:12px 0 12px 28px}html.no-svg footer.global .top-link a,.opera-mini footer.global .top-link a{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-upload-warmgrey.png")}@media only screen and (max-width: 768px){footer.no-global .legal{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;box-shadow:0 2px 2px -1px #D3D3D3 inset;padding-top:10px;margin-left:-10px;padding-left:10px;padding-right:10px}#livechat-eye-catcher{display:block}}@media only screen and (min-width: 768px){footer.global .inline li{display:inline;float:left}}@media only screen and (min-width: 769px){footer.global .top-link{display:none}footer.global .footer-b h2 a i{font-style:normal;display:inline}}@media only screen and (min-width: 984px){footer.global .legal{width:984px}footer.global{padding:30px 0 20px}footer.global .legal{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-grey.png") 100% 0 no-repeat}footer.global .footer-a{display:block}}#context-footer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1em;margin-bottom:0.85714em;border-bottom:0;clear:both;padding-bottom:1px;padding-top:0;position:relative;margin-bottom:0;margin-left:0;margin-right:0;width:100%}#context-footer hr{-moz-box-shadow:inset 0 2px 2px -2px #333;-webkit-box-shadow:inset 0 2px 2px -2px #333;box-shadow:inset 0 2px 2px -2px #333;background:#dd4814;height:14px;margin:0 0 10px;border:0;clear:both}#context-footer div.twelve-col{display:table;float:none;margin-bottom:7px}#context-footer div div{display:block;padding-left:0;margin-bottom:20px}#context-footer div div div{display:block;padding-left:0;margin-bottom:0}#context-footer div div.feature-one{padding-left:0}#context-footer div div.feature-four{margin-bottom:0;margin-right:0}#context-footer>div{padding-left:10px;padding-right:10px}#context-footer ul{margin-bottom:5px}#context-footer li.active{display:none}#context-footer h3{font-size:1.14286em;margin-bottom:0.75em;font-weight:normal}#context-footer .list a:after,#context-footer a.link-arrow:after,#context-footer nav ul li h2 a:after{content:' \203A'}@media only screen and (min-width: 768px){#context-footer{margin-bottom:12px;padding-left:30px;padding-right:30px}#context-footer div+div{width:31%}#context-footer div div.feature-four{padding-bottom:20px}#context-footer hr{margin:0 -30px 40px}#context-footer>div{padding-left:0;padding-right:0}}@media only screen and (min-width: 984px){#context-footer{padding:0 40px 10px}#context-footer div div{display:table-cell;float:none;padding-left:20px;margin-bottom:0}#context-footer hr{margin:0 -40px 40px}}a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#dd4814;color:#fff;text-decoration:none;display:inline-block;margin:0;font-family:Ubuntu, Arial, 'libra sans', sans-serif;font-weight:300;-webkit-font-smoothing:subpixel-antialiased;-moz-font-smoothing:subpixel-antialiased;-o-font-smoothing:subpixel-antialiased;font-smoothing:subpixel-antialiased;padding:8px 14px;width:100%;text-align:center}a.cta-large,button.cta-large{font-size:1.28571em;margin-bottom:0.66667em;padding:10px 20px}a.link-cta-canonical,button.cta-canonical,form button.cta-canonical[type="submit"],form input.cta-canonical[type="submit"]{background:#772953;color:#fff}a.link-cta-inverted,button.cta-inverted{background:#fff;color:#333}.row-enterprise a.link-cta-canonical,.row-enterprise button.link-cta-canonical{background:#fff;color:#772953}a.link-cta-ubuntu:hover,a.link-cta-ubuntu:hover,button.cta-ubuntu:hover,form button[type="submit"]:hover,form input[type="submit"]:hover{background:#c03f11;text-decoration:none}a.link-cta-canonical:hover,button.cta-canonical:hover{background:#5f2143;text-decoration:none}a.link-cta-inverted:hover,.row-enterprise a.link-cta-canonical:hover,button.cta-inverted:hover,.row-enterprise button.cta-canonical:hover{background:#fff;text-decoration:underline}a.cta-deactivated,a.cta-deactivated:hover,button.cta-deactivated,button.cta-deactivated:hover{background:#efefef;color:#fff;cursor:not-allowed}@media only screen and (min-width: 768px){a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{width:auto}}@media only screen and (min-width: 984px){a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{width:auto}}form input,form select,form textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}form .fieldset-submit ul{margin-bottom:0}form fieldset .mktError,form fieldset .errMsg,form fieldset .reqMark{color:#df382c}form fieldset .mktFormMsg{clear:both;display:block}.row{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:1px dotted #888;clear:both;padding:20px 10px 0;position:relative}.row br{display:none}.row.no-padding-bottom{padding-bottom:0 !important}.row-grey{background:#f7f7f7}.no-border{border:0}#main-content .row-hero{margin-top:20px;padding-top:0}.row-background{color:#fff;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/backgrounds/image-background-wallpaper.jpg") no-repeat scroll 50% 50% #4b1827}.row-background a.alternate{color:#fff;text-decoration:underline}.row-background a.alternate:hover{color:rgba(255,255,255,0.6)}@media only screen and (min-width: 768px){.row-background{background-position:center 50%;background-size:100% auto}}.strip{width:100%;display:block}.strip-dark{background-color:#2c001e;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/backgrounds/background-grid.png");background-repeat:repeat;color:#fff}.strip-dark .list-ubuntu li{border:0}.strip-dark .resource{color:#333;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.strip-dark .resource:before{border-right-color:#2c001e}#main-content .strip-dark .resource:before{border-bottom-width:29px;right:-2px;top:-1px}#main-content .strip-dark .resource:hover:before{border-bottom-width:34px}#main-content .strip-dark .resource h2{padding-right:20px}.row-aux{background-color:rgba(255,255,255,0.6);text-align:center}.row-aux h2,.row-aux p{text-align:left}.row-aux a p{color:#333;margin-bottom:30px}.row-step h2{position:relative;top:5px}.row-step .step{position:relative;top:-5px;height:32px;width:32px;border-radius:50%;border:3px solid #dd4814;color:#dd4814;line-height:32px;text-align:center;background-color:#fff;font-size:23px;font-weight:400}@media only screen and (min-width: 768px){.row{padding:30px}#main-content .row-hero{margin-top:40px}}@media only screen and (min-width: 769px){.row-step .step{height:42px;width:42px;line-height:42px}.row br{display:block}}@media only screen and (min-width: 984px){.row br{display:block}.row{padding:60px 40px 40px}.no-border{border:0}}.box,.box-grey{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1.333em 20px}.box{background:#fff;border:1px solid #dfdcd9}.box-grey{background:#f7f7f7;color:#333}.box-orange{background:#dd4814;color:#fff}.box-highlight{-moz-box-shadow:0 2px 2px 0 #c2c2c2;-webkit-box-shadow:0 2px 2px 0 #c2c2c2;box-shadow:0 2px 2px 0 #c2c2c2;border:1px solid #f7f7f7}.box-textured{-moz-box-shadow:0 2px 2px 0 #c2c2c2;-webkit-box-shadow:0 2px 2px 0 #c2c2c2;box-shadow:0 2px 2px 0 #c2c2c2;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/grey-textured-background.jpg");border:0}.box-padded{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#efefef;border:0;margin-bottom:20px;padding:6px 5px}.box-padded h3{font-size:1.39286em;margin-bottom:0.61538em;margin-left:5px;margin-top:5px}.box-padded li h3{font-size:1.39286em;margin-bottom:0.61538em;margin:0}.box-padded div{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;overflow:hidden;padding:8px 8px 2px}.box-padded-feature{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/soft-centre-bkg.gif") repeat scroll 0 0 #a09f9f;border:0;margin-bottom:20px;padding:11px 5px 6px}.box-padded-feature h3{color:#fff;margin-left:5px;font-size:1.39286em;margin-bottom:0.61538em}.box-padded-feature h4{font-size:1.14286em;margin-bottom:0.75em;font-weight:normal}.box-padded-feature>div{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;overflow:hidden;padding:20px 8px}.box-padded-feature div div{margin-bottom:0}.box-padded-feature .inline-icons{display:table;width:100%;margin:0;text-align:center}.box-padded-feature .inline-icons li{display:table-cell;text-align:left;float:none}.box-padded-feature .one-col{width:48px;float:left}.resource{cursor:pointer;padding-bottom:40px;position:relative;-moz-transition:background .2s ease-out;-webkit-transition:background .2s ease-out;transition:background .2s ease-out}.resource h2{padding-right:20px}.resource.five-col h2 a:link,.resource.five-col h2 a:visited,.resource.four-col h2 a:link,.resource.four-col h2 a:visited{font-size:inherit !important}.resource.four-col h2 a:link,.resource.four-col h2 a:visited{font-size:1.125em}.resource.twelve-col h2 a:link,.resource.twelve-col h2 a:visited{font-size:1.40625em}.resource:hover{background-color:#fafafa}.resource:after{-moz-box-shadow:0 -1px 2px 0 #ddd;-webkit-box-shadow:0 -1px 2px 0 #ddd;box-shadow:0 -1px 2px 0 #ddd;content:'';height:1px;position:absolute;right:-6px;top:14px;-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);-moz-transition:all .2s ease-out;-webkit-transition:all .2s ease-out;transition:all .2s ease-out;width:41px;z-index:2}.resource:hover:after{right:-9px;top:18px;width:48px}.resource:before{content:'';position:absolute;-moz-transition:border-width .2s ease-out;-webkit-transition:border-width .2s ease-out;transition:border-width .2s ease-out;top:-2px;right:-3px;width:0;height:0;border-bottom:30px solid #fdfdfd;border-right:30px solid #fff;-webkit-box-shadow:-2px 2px 2px rgba(176,176,176,0.4);-moz-box-shadow:-2px 2px 2px rgba(176,176,176,0.4);box-shadow:-2px 2px 2px rgba(176,176,176,0.4);z-index:2;-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0}.resource:hover:before{border-bottom-width:35px;border-right-width:35px}.resource:last-of-type{margin-bottom:30px}.resource .content-cat{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-resource-hub-icon-document.png") left center no-repeat;color:#aea79f;font-size:14px;letter-spacing:1px;margin:0;padding-left:20px;padding:0;position:absolute;text-transform:uppercase}.resource .content-cat-webinar{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-resource-hub-webinar.png") left center no-repeat}.resource.box-image-centered div+span img{margin-top:40px}html.yui3-js-enabled .resource:hover a{text-decoration:underline}.row-grey .resource:before{border-right-color:#f7f7f7}@media only screen and (max-width: 768px){.box-padded-feature .inline-icons li{float:left;display:block}.box-padded-feature .one-col{width:48px;float:left}}.arrow-up,.arrow-down,.arrow-right,.arrow-left{height:11px;position:absolute;width:18px}.arrow-up{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-up.png") 0 0 no-repeat;left:20px;top:-11px}.arrow-down{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-down.png") 0 0 no-repeat;bottom:-11px;right:20px}.arrow-right{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-right.png") 0 0 no-repeat;height:18px;right:-11px;top:20px;width:11px}.arrow-left{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-left.png") 0 0 no-repeat;bottom:20px;height:18px;left:-11px;width:11px}div>.arrow-left{left:-10px}@media only screen and (min-width: 769px){html.yui3-js-enabled .arrow{visibility:visible}}.list,.list-ubuntu,.list-canonical{list-style:none;margin-left:0}.list li,.list-ubuntu li,.list-canonical li{border-bottom:1px dotted #888;margin-bottom:0;padding:10px 0}.list li:last-of-type,.list li.last-item,.list-ubuntu li:last-of-type,.list-ubuntu li.last-item,.list-canonical li:last-of-type,.list-canonical li.last-item{border:0;padding-bottom:0}.list article{border-bottom:1px dotted #888;margin-bottom:0;padding:10px 0}.list-spaced article,.list-spaced li{padding:30px 0}nav .list a{display:block}.list-ubuntu li,.list-canonical li{background-repeat:no-repeat;background-position:0 1em;padding-left:25px}.list-ubuntu li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-orange.svg")}.list-canonical li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-midaubergine.svg")}.list-warm li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-warmgrey.svg")}.list-dark li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-darkaubergine.svg")}.vertical-divider .list-canonical li,.vertical-divider .list-ubuntu li{padding-left:25px}html.no-svg .list-ubuntu li,.opera-mini .list-ubuntu li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-orange.png")}html.no-svg .list-canonical li,.opera-mini .list-canonical li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-midaubergine.png")}html.no-svg .list-warm li,.opera-mini .list-warm li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-warmgrey.png")}html.no-svg .list-dark li,.opera-mini .list-dark li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-darkaubergine.png")}.no-bullets{list-style:none;margin-left:0}.row .combined-list ul,.row .combined-list div{margin-bottom:0}.row .combined-list li.last-item{border-bottom:1px dotted #888;padding-bottom:10px}.row .combined-list div.last-col,.row .combined-list ul.last-col{margin-bottom:20px}.row .combined-list div.last-col li.last-item,.row .combined-list ul.last-col li.last-item{border-bottom:0;padding-bottom:0}.inline{margin-left:0}.inline li{display:inline;list-style:none;margin-left:0;float:left}@media only screen and (min-width: 768px){.row .combined-list ul,.row .combined-list div{margin-bottom:20px}.row .combined-list li.last-item{border-bottom:0;padding-bottom:0}}ul.inline-logos{float:left;margin-left:0;padding:0;text-align:center;width:100%}ul.inline-logos li{clear:none;display:inline-block;float:none;margin:10px 20px;padding:0}ul.inline-logos li.clear-row{clear:left}ul.inline-logos li.last-item{border:0}ul.inline-logos img{-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;-ms-transition:all 0.5s ease-out;-o-transition:all 0.5s ease-out;transition:all 0.5s ease-out;vertical-align:middle;max-width:115px;max-height:32px}.inline-icons{margin:0 0 20px}.inline-icons li{margin-right:20px;margin-bottom:20px;text-align:left;display:inline-block}.inline-icons li.last-item{margin-right:0}.inline-icons.no-margin-bottom li{margin-bottom:0}.inline-icons img{vertical-align:middle;max-width:115px;max-height:32px}@media only screen and (max-width: 768px){ul.inline-logos img{max-width:172px;max-height:48px}}@media only screen and (min-width: 769px){ul.inline-logos li{clear:none;display:inline-block;height:auto;margin:20px 0;line-height:60px;padding:0 40px}ul.inline-logos li img{float:none;vertical-align:middle;max-width:200px;max-height:45px}}@media only screen and (min-width: 984px){.inline-icons{text-align:left;margin-bottom:20px}}blockquote.pull-quote{text-indent:0}blockquote.pull-quote p{color:#333;padding-left:10px;padding-right:10px;font-size:1.77379em;margin-bottom:0.48323em;text-indent:-.4em;margin-left:.4em;line-height:1.3}blockquote.pull-quote p span{font-weight:bold;color:#dd4814;line-height:0;position:relative;left:-5px}blockquote.pull-quote p span+span{left:5px}blockquote.pull-quote p cite{margin:10px 0 0;font-weight:300;display:block;font-size:.75em;text-indent:0}blockquote.pull-quote.js{padding-left:60px;display:table-cell}blockquote.quote-canonical,blockquote.quote-canonical-white{font-size:1.14286em;margin-bottom:0.75em;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-white-360x360.png") no-repeat 20px -130px;color:#772953;float:right;font-size:1em;height:215px;margin-top:0;padding:20px 60px 0;position:relative;width:236px}blockquote.quote-canonical-white{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-aubergine-345x345.png") no-repeat 0 0;color:#fff;padding:80px 60px 0;height:265px}blockquote.quote p:first-child{font-size:1.28571em;margin-bottom:0.66667em;line-height:1.3;text-indent:-7px}blockquote.quote-right-bottom{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-quote-orange.svg");background-repeat:no-repeat;background-size:287px 286px;color:#fff;height:167px;padding:60px 40px;position:static;right:-40px;top:-90px;width:207px}blockquote.quote-right-bottom p{color:#fff}blockquote.quote-grey{font-size:2.57143em;margin-bottom:0.33333em;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-grey-br-211x211.png") no-repeat scroll 0 0 transparent;color:#fff;height:152px;line-height:40px;margin-left:20px;padding:60px 0 0;text-align:center;width:211px}blockquote.quote-bottom-left{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-orange-bl-287x287.png") no-repeat;color:#fff;height:167px;padding:55px 40px 70px 45px;width:225px}html.no-svg blockquote.quote-right-bottom,.opera-mini blockquote.quote-right-bottom{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-quote-orange.png")}.row-quote{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.row-quote blockquote{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;margin:0;padding:0}.row-quote blockquote p{margin-bottom:.75em;line-height:1.3;color:#333;padding-left:10px;padding-right:10px;text-indent:0}.row-quote blockquote span{font-weight:bold;color:#dd4814;line-height:0;position:relative;left:-5px}.row-quote blockquote span+span{left:5px}.row-quote blockquote cite{color:#333;font-style:normal;margin-bottom:0;font-size:.75em;text-indent:-14px;text-indent:0}.row-quote .quote-twitter{background:#fcece7 url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/pictogram-twitter-115x139.png") 20px bottom no-repeat;padding:20px 20px 20px 23.40425%}.row-quote .quote-twitter-small{background:#fcece7 url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/pictogram-twitter-54x63.png") 99% bottom no-repeat;padding:20px 20px 20px 80px}.row-quote .quote-twitter-small p{margin:0;padding:0}blockquote.quote-canonical,blockquote.quote-canonical-white{background:none;color:#333;width:auto;height:auto;padding:0 30px;margin-top:20px}@media only screen and (min-width: 768px){.row-quote blockquote{text-indent:-7px}.pull-quote{text-indent:-.4em}.row-quote blockquote p{font-size:1.77357em;margin-bottom:0.48329em}blockquote.pull-quote p,.row-quote blockquote p{padding-left:0;padding-right:0;text-indent:-.7em}blockquote.pull-quote p span,.row-quote blockquote p span{font-size:1.391304348em}blockquote.pull-quote p cite,.row-quote blockquote p cite{margin-left:0;text-indent:0}blockquote.pull-quote p span,.row-quote blockquote p span{top:5px}}@media only screen and (min-width: 769px){.row-quote blockquote p{font-size:1.77357em;margin-bottom:0.48329em;text-indent:-.4em}}@media only screen and (min-width: 984px){.row-quote blockquote{padding:0 80px 20px;text-indent:-10px}blockquote.pull-quote p span,.row-quote blockquote p span{top:10px}}html.js .tabbed-content .accordion-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:auto;padding-bottom:.6em;padding-right:20px}html.yui3-js-enabled .tabbed-menu{display:none;padding-bottom:20px;padding-top:20px}html.yui3-js-enabled .arrow{display:none;position:absolute;visibility:hidden}html.yui3-js-enabled .tabbed-content{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:8px 8px 0;background:#f7f7f7;margin-bottom:8px}html.yui3-js-enabled .tabbed-content.hide{display:block;opacity:1 !important}html.yui3-js-enabled .tabbed-content .title{display:none}html.yui3-js-enabled .tabbed-content div{display:none}html.yui3-js-enabled .tabbed-content .accordion-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-down.svg") no-repeat scroll right 3px #f7f7f7;color:#333;display:block;font-size:16px;padding-bottom:.6em;padding-right:20px;width:100%}html.yui3-js-enabled .tabbed-content.open .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-up.svg");margin-bottom:10px}html.yui3-js-enabled .tabbed-content.open div{display:block}html.yui3-js-enabled html.yui3-js-enabled.opera-mini .tabbed-content .accordion-button,html.yui3-js-enabled html.yui3-js-enabled.no-svg .tabbed-content .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-right.png")}html.yui3-js-enabled html.yui3-js-enabled.opera-mini .tabbed-content.open .accordion-button,html.yui3-js-enabled html.yui3-js-enabled.no-svg .tabbed-content.open .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-up.png")}html.yui3-js-enabled html.yui3-js-enabled.opera-mini.tabbed-content .accordion-button{background-image:none;margin-bottom:10px}html.yui3-js-enabled html.yui3-js-enabled.opera-mini.tabbed-content div{display:block}@media only screen and (min-width: 768px){html.yui3-js-enabled .tabbed-menu{display:block}html.yui3-js-enabled .tabbed-content{margin-bottom:20px;padding:40px}html.yui3-js-enabled .tabbed-content.hide{display:none;opacity:0 !important}html.yui3-js-enabled .tabbed-content .title{display:block}html.yui3-js-enabled .tabbed-content div{display:block}html.yui3-js-enabled .tabbed-content .vertical-divider div{display:table-cell}html.yui3-js-enabled .tabbed-content .accordion-button{display:none}}html.yui3-js-enabled .accordion-button.active{background-color:transparent}@media only screen and (min-width: 768px){.tabbed-menu{-moz-box-shadow:0 -1px 10px #cfcfcf inset;-webkit-box-shadow:0 -1px 10px #cfcfcf inset;box-shadow:0 -1px 10px #cfcfcf inset;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;background:none repeat scroll 0 0 #f7f7f7;padding-bottom:20px;padding-top:20px;position:relative}.tabbed-menu ul{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:table;margin-bottom:0;padding:0;position:relative;table-layout:fixed;width:100%}.tabbed-menu li{text-align:center;display:table-cell}.tabbed-menu a{color:#666;display:block;outline:none}.tabbed-menu a .active{color:#772953;text-decoration:none}.tabbed-menu a:hover{text-decoration:none}.tabbed-menu .arrow{bottom:0;position:absolute}.tabbed-content{*zoom:1;padding:20px 40px 0}.tabbed-content:before,.tabbed-content:after{content:"";display:table}.tabbed-content:after{clear:both}.tabbed-content .row{padding-left:0;padding-right:0}.tabbed-content .main-content{padding-bottom:40px}html.yui3-js-enabled .tabbed-content.hide{display:none;opacity:0}.tabbed-content-bg{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;margin-left:20px;margin-right:20px}.tabbed-content-bg .row-box{padding-left:0;padding-right:0}html.yui3-js-enabled .arrow{visibility:visible}}.row.vertical-divider{padding-bottom:40px}.vertical-divider div,.vertical-divider li{border-right:0;display:block;padding-left:0;padding-right:0}.vertical-divider-full{padding-bottom:0}.vertical-divider-full>div{padding-bottom:40px}.row.vertical-divider-full{padding-bottom:0}@media only screen and (max-width: 767px){.vertical-divider>div,.vertical-divider>li{border-bottom:1px dotted #888;padding-bottom:20px}.vertical-divider div:last-of-type,.vertical-divider li:last-of-type,.inline-icons li:last-of-type{border-bottom:0;padding-bottom:5px}.row.vertical-divider{padding-bottom:0}.equal-height div,.equal-height li{height:auto !important}}@media only screen and (min-width: 984px){.row.vertical-divider{padding-bottom:60px}.vertical-divider>div,.vertical-divider>li{border-right:1px dotted #888;display:table-cell;float:none;margin-right:0;padding-left:20px;padding-right:20px;vertical-align:top}.vertical-divider>div:last-child,.vertical-divider>li:last-child,.vertical-divider>div.last-col,.vertical-divider>li.last-col,.vertical-divider>div:last-of-type,.vertical-divider>li:last-of-type{border-right:0;padding-right:0}.vertical-divider>div:first-child,.vertical-divider>li:first-child,.vertical-divider>div.first-col,.vertical-divider>li.first-col,.vertical-divider>div:first-of-type,.vertical-divider>li:first-of-type{padding-left:0}}.slider{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#f7f7f7;padding-top:40px}.slider .slide-window{overflow:hidden;position:relative;height:450px;-moz-transition:left 1s;-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s}.slider .slide-container{position:absolute;width:2800 px;-moz-transition:left 1s;-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s;left:0}.slider .slider-dots ul{position:absolute;top:550px;left:220px;z-index:5}.slider .slider-dots li{background-position:0 -8px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/sprite-pager.png") no-repeat;float:left;height:7px;list-style-type:none;margin-right:.75em;text-indent:-9999em;width:7px}.slider .slider-dots li.active{background-position:0 0}.slider .slider-dots a{display:block;outline:0}.slider .slide{float:right;width:700px}.slider .slide h3{margin-top:65px;display:inline-block}.slider .slide p{width:350px}.slider .arrow-prev,.slider .arrow-next{font-size:5em;margin-top:150px;display:block;color:#888;outline:0}.slider .arrow-prev:hover,.slider .arrow-next:hover{text-decoration:none;color:#333}.slider .arrow-prev:active,.slider .arrow-next:active{padding-top:1px;text-decoration:none}.slider .arrow-prev:focus,.slider .arrow-next:focus{text-decoration:none}.yui3-tooltip-hidden{display:none}.yui3-tooltip-content{-moz-box-shadow:0 2px 8px rgba(0,0,0,0.2);-webkit-box-shadow:0 2px 8px rgba(0,0,0,0.2);box-shadow:0 2px 8px rgba(0,0,0,0.2);background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/grey-textured-background.jpg") repeat scroll 0 0 transparent;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border:1px solid #e3e3e3;color:#333;margin-top:-30px;max-width:520px;position:relative}.yui3-tooltip .yui3-widget-bd{padding:20px;width:320px}.yui3-tooltip .yui3-widget-bd *{max-width:100%}.yui3-tooltip .yui3-widget-bd h5{margin-bottom:10px;font-size:22px;font-weight:300}.yui3-tooltip .yui3-widget-bd img{float:left;margin-right:10px}.yui3-tooltip .yui3-widget-bd q{border-bottom:1px dotted #888;border-top:1px dotted #888;display:block;font-size:16px;font-style:italic;margin-bottom:0;margin-top:20px;padding:10px 0}.yui3-tooltip .yui3-widget-bd p:last-child{margin-bottom:0}.yui3-tooltip .yui3-widget-ft,.yui3-tooltip .yui3-widget-ft div{position:absolute;width:0;height:0;border-style:solid;line-height:0;font-size:0}.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft,.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft div{top:-10px;left:50%;margin:0 0 0 -10px;border-width:0 10px 10px;border-color:#efefef transparent}.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft div{top:0;border-color:#efefef transparent}.tooltip-label{-moz-box-shadow:3px 3px 6px rgba(0,0,0,0.3);-webkit-box-shadow:3px 3px 6px rgba(0,0,0,0.3);box-shadow:3px 3px 6px rgba(0,0,0,0.3);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;border:1px solid #dfdcd9;display:none;font-size:13px;line-height:1;margin:0;padding:6px 5px;position:absolute;top:-20px;white-space:nowrap;z-index:1000}body,a:link,a:visited{-webkit-font-smoothing:antialiased}code,pre,p{line-height:1.5}body{font-size:16px}@media only screen and (min-width: 768px){code,pre,p{line-height:1.6}body{font-size:16px}}@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi){body{font-size:18px}}.not-for-medium{display:none}@media only screen and (min-width: 985px){.not-for-medium{display:block}}header.banner{background:#000;-moz-box-shadow:inset 0 2px 2px -2px #000;-webkit-box-shadow:inset 0 2px 2px -2px #000;box-shadow:inset 0 2px 2px -2px #000;margin-bottom:0}header.banner .nav-primary{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;*zoom:1}header.banner .nav-primary:before,header.banner .nav-primary:after{content:"";display:table}header.banner .nav-primary:after{clear:both}header.banner nav.nav-primary{border-bottom:1px solid #262626;overflow:visible}header.banner nav.nav-primary .user-nav{float:right;margin-right:20px}header.banner nav.nav-primary .user-dropdown:hover ul:after{display:none}header.banner nav.nav-primary .user-dropdown .menu-link img{margin-right:10px}header.banner nav.nav-primary .user-dropdown .menu-link img.hover{display:none}header.banner nav.nav-primary .user-dropdown .menu-link img.normal{display:inline-block}header.banner nav.nav-primary .user-dropdown .open .menu-link img.hover,header.banner nav.nav-primary .user-dropdown .menu-link:hover img.hover{display:inline-block}header.banner nav.nav-primary .user-dropdown .open .menu-link img.normal,header.banner nav.nav-primary .user-dropdown .menu-link:hover img.normal{display:none}header.banner nav.nav-primary .user-dropdown ul{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;margin-top:-2px;background-color:#fff;border-width:0}header.banner nav.nav-primary .user-dropdown ul a:hover{background-color:transparent}header.banner nav.nav-primary #user-dropdown .dropdown ul{width:auto}header.banner .nav-primary.nav-right .logo-ubuntu{-moz-background-size:73px 30px;-webkit-background-size:73px 30px;-o-background-size:73px 30px;background-size:73px 30px;background-image:url(../img/logos/logo.svg);background-position:20px;background-repeat:no-repeat;min-width:120px;padding-top:6px;margin-left:0}body.no-svg header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url(../img/logos/logo.png)}input[type=text]::-ms-reveal,input[type=text]::-ms-clear{display:none;width:0;height:0}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-results-button,input[type="search"]::-webkit-search-results-decoration{display:none}.contextual-bar{overflow:hidden;background-color:#fff;border-bottom:1px solid #d4d4d4}form.search-form{overflow:hidden;float:right;width:100%;position:relative}form.search-form input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:0;border-left:0;margin:0;width:100%;height:50px;float:left;font-size:1em;padding-top:0;padding-bottom:0;padding-right:30px;background-color:transparent;-webkit-appearance:none}form.search-form input:focus{border-color:#dd4814}form.search-form button[type=submit],form.search-form button[type=submit]:hover{position:absolute;top:10px;right:10px;display:block;height:30px;width:30px;padding:0;line-height:0;-webkit-appearance:none;background:transparent}form.search-form button img{height:16px}.contextual-nav{border:0;display:block;margin:0;padding-left:10px;background-color:transparent;overflow:hidden;float:left}.contextual-nav li,.contextual-nav li:last-child{font-size:0.875em;float:left;list-style-type:none;margin:0;margin-left:5px}.contextual-nav li a:link,.contextual-nav li a:visited,.contextual-nav .contextual-nav__label{display:block;color:#333;font-weight:300;text-align:center;padding:16px 10px 10px 10px;border-bottom:3px solid transparent}.contextual-nav .contextual-nav__label{color:#cdcdcd}.contextual-nav li a:hover{border-bottom-color:#dd4814;text-decoration:none;color:#dd4814}.contextual-nav li a.active{border-bottom:3px solid #dd4814}.opera-mini header.banner .logo-ubuntu,.no-svg header.banner .logo-ubuntu{background-image:url(../img/logos/logo.png)}@media only screen and (min-width: 769px){header.banner .nav-primary ul li,header.banner .nav-primary ul li:last-child{border-bottom:0;width:auto}header.banner nav.nav-primary li a:link,header.banner nav.nav-primary li a:visited{border-left:1px solid #262626;font-weight:400}header.banner nav.nav-primary ul li a.active{padding-bottom:10px;background-color:#0e0c0b;border-bottom:3px solid #dd4814;border-left:1px solid #262626}header.banner nav.nav-primary ul li{border-left:1px solid #262626}header.banner nav.nav-primary ul li a:hover{background-color:#dd4814}header.banner nav.nav-primary ul{background-color:transparent;border-right:1px solid #262626;display:block}header.banner nav.nav-primary ul li:last-child{border-left:1px solid #262626;border-right:0}header.banner .nav-primary ul li a:active,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:visited,header.banner nav.nav-primary ul li a:link{border-left:0}header.banner .nav-primary ul li a.external:hover{background-image:url("../img/icons/external-link-grey.png")}form.search-form{width:325px}form.search-form input{border-left:1px solid #d4d4d4;margin:0 20px;width:250px;font-size:0.875em}}@media only screen and (min-width: 1030px){header.banner{height:48px;overflow:hidden}header.banner .nav-primary{width:100%}}body{background-repeat:repeat}.row{border:0;background-color:rgba(255,255,255,0.6)}@media only screen and (min-width: 769px){.append-one{margin-right:10.6%}.row{padding:50px 40px 30px}}.inner-wrapper{*zoom:1;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background-color:transparent;background-image:none;margin:0 auto;padding-bottom:0;float:none}.inner-wrapper:before,.inner-wrapper:after{content:"";display:table}.inner-wrapper:after{clear:both}.wrapper{position:static;background:transparent;width:100%;overflow:hidden}img.touch-border{margin-bottom:-50px}.inner-wrapper,footer.global .legal{max-width:1030px;width:auto;padding-left:0;padding-right:0}.touch-top{margin-top:-50px}@media only screen and (max-width: 1030px){.inner-wrapper,footer.global .legal{padding-left:8px;padding-right:8px;width:auto}}.footer-cta{background:#fff;padding-bottom:20px}.footer-wrapper.strip-light{background-color:#fff}.solutions-cta{height:60px;background-color:#dd4814;line-height:60px;text-align:center}.solutions-cta a{color:#fff;font-size:1.25em}footer.global{background-color:white;box-shadow:none;padding-top:0}footer.global .row{padding:10px 0 0}footer.global .two-col{width:46%;float:left;display:inline-block;min-height:200px}footer.global h2{padding-bottom:0;color:#888;font-size:16px}footer.global nav .canonlist ul li,footer.global nav .additional-info ul li{min-height:0;width:48%;float:left}footer.global ul.bullets li:after{line-height:1;color:#888;content:"•";vertical-align:middle;margin:0 5px}footer.global ul.inline li:last-child{width:auto}footer.global a.external{background-image:url("../img/icons/external-link-dark.png")}footer.global .top-link{margin-bottom:10px}footer.global a{color:#333}footer.global a:hover{color:#dd4814}footer.global .legal{background-image:none}footer.global .legal.has-cookie{padding-bottom:70px}footer.global .inner-wrapper{overflow:visible}footer.global a.link-cta-positive,footer.global a.link-cta-negative{width:auto;margin-top:10px;padding-left:20px;padding-right:20px;color:#fff;font-size:14px}footer.global .section__title{background:none;cursor:default}.legal-inner{clear:both;overflow:hidden;float:left;width:100%;padding:20px 10px 0;margin:-3px -10px 0}.social,.social--right{margin-left:0}.social .social__item,.social--right .social__item{display:inline;float:left;padding-right:1em}.social .social__google,.social .social__facebook,.social .social__twitter,.social--right .social__google,.social--right .social__facebook,.social--right .social__twitter{background-image:url("../img/icons/icon-social.png");display:block;width:45px;height:44px}.social .social__google.social__twitter:hover,.social .social__facebook.social__twitter:hover,.social .social__twitter.social__twitter:hover,.social--right .social__google.social__twitter:hover,.social--right .social__facebook.social__twitter:hover,.social--right .social__twitter.social__twitter:hover{background-position:0 -45px}.social .social__google.social__facebook,.social .social__facebook.social__facebook,.social .social__twitter.social__facebook,.social--right .social__google.social__facebook,.social--right .social__facebook.social__facebook,.social--right .social__twitter.social__facebook{background-position:90px 0}.social .social__google.social__facebook:hover,.social .social__facebook.social__facebook:hover,.social .social__twitter.social__facebook:hover,.social--right .social__google.social__facebook:hover,.social--right .social__facebook.social__facebook:hover,.social--right .social__twitter.social__facebook:hover{background-position:90px -45px}.social .social__google.social__google,.social .social__facebook.social__google,.social .social__twitter.social__google,.social--right .social__google.social__google,.social--right .social__facebook.social__google,.social--right .social__twitter.social__google{background-position:135px 0}.social .social__google.social__google:hover,.social .social__facebook.social__google:hover,.social .social__twitter.social__google:hover,.social--right .social__google.social__google:hover,.social--right .social__facebook.social__google:hover,.social--right .social__twitter.social__google:hover{background-position:135px -45px}@media only screen and (min-width: 768px){.social--right{float:right}}#additional-info{border-bottom:0}#additional-info h2:before{background-image:url("../img/icons/external-link-grey.svg"),none;background-repeat:no-repeat;background-size:14px 14px;content:"";display:inline-block;height:15px;margin-right:3px;position:relative;top:3px;width:15px}#additional-info div li{border-left:1px solid #d4d7d4;box-sizing:border-box;display:block;float:left;margin:0;padding:0;width:50%}#additional-info div li a{border-bottom:1px solid #d4d7d4;box-sizing:border-box;color:#333333;display:block;float:left;margin:0;overflow:hidden;padding:8px 10px;text-align:left;white-space:normal;width:100%}#additional-info .section__title{border-bottom:1px solid #d4d7d4;background-position:100% .1em}html.opera-mini footer #nav-global h2:before,html.opera-mini footer #additional-info h2:before,html.no-svg footer #nav-global h2:before,html.no-svg footer #additional-info h2:before{background-image:url("../img/icons/external-link-grey.png")}@media only screen and (min-width: 769px){.footer-wrapper.strip-light{white-space:nowrap}footer.global{padding-top:40px;padding-bottom:40px}footer.global .two-col{width:14.89361%;display:inline-block;min-height:0}footer.global .section{min-height:160px;margin-right:40px;padding-bottom:0;border-right:1px dotted #aaa;border-bottom:0}footer.global .section:last-child{margin-right:0;border-right:0}footer.global li{display:inline;float:left}footer.global ul.no-bullets li{border-right:1px dotted #aaa;padding-right:15px;padding-left:15px}footer.global ul.no-bullets li a{font-size:16px}footer.global ul.no-bullets li a:hover{color:#dd4814}footer.global ul.no-bullets li:last-child{border-right:none}footer.global ul.no-bullets li:first-child{padding-left:0px}#additional-info .section__title{border-bottom:0}#additional-info div li,#additional-info div a:link{width:100%;border:0}}.actions .actions__social-item--twitter,.actions .actions__social-item--google-plus{text-indent:-99999px;background-image:url("../img/icons/icon-social.svg");background-repeat:no-repeat;height:44px;width:44px;overflow:hidden;display:block}.actions .actions__social-item--twitter{background-position:0 0}.actions .actions__social-item--twitter:hover{background-position:0 -45px}.actions .actions__social-item--google-plus{background-position:-45px 0}.actions .actions__social-item--google-plus:hover{background-position:-45px -45px}.anchor{display:inline-block;margin-left:3px;opacity:.0;position:relative;top:1px;width:1em;height:1em;background:url("../img/icons/anchor_16.svg") 0 80% no-repeat;background-size:16px;-moz-transition:opacity .1s;-webkit-transition:opacity .1s;transition:opacity .1s}h1:hover .anchor,h2:hover .anchor,h3:hover .anchor,h4:hover .anchor,dt:hover .anchor,li:hover .anchor{opacity:1}.box{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;display:block;margin-bottom:0;border-top:0;border-left:0;border-right:0;padding-left:0;padding-right:0}.box-dim{background-color:#fafafa}@media only screen and (min-width: 768px){.box{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-moz-box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);-webkit-box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);display:inline-block;margin-bottom:20px;padding-left:20px;padding-right:20px;border:0}}a.indent{-moz-box-shadow:inset 0 1px 2px 0 #333;-webkit-box-shadow:inset 0 1px 2px 0 #333;box-shadow:inset 0 1px 2px 0 #333;background:rgba(0,0,0,0.1);padding:10px 30px;text-weight:normal}a.indent:hover{background:rgba(0,0,0,0.2)}a.link-cta-positive,a.link-cta-negative{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#dd4814;color:#fff;display:inline-block;font-size:1.14286em;font-weight:300;text-decoration:none;margin:0;padding:8px 14px;text-align:center;-moz-transition:background .2s;-webkit-transition:background .2s;transition:background .2s;width:100%}a.link-cta-positive:hover,a.link-cta-negative:hover{background-color:#ae3910}a.link-cta-positive .external,a.link-cta-negative .external{padding-right:1em;background-image:url("../img/icons/external-link-white.svg");background-repeat:no-repeat;background-size:11px;background-position:right top}@media only screen and (min-width: 769px){a.link-cta-positive .external,a.link-cta-negative .external{padding-right:.7em}}a.link-cta-negative{background-color:#b2b2b2}a.link-cta-negative:hover{background-color:#888}.charms__list{list-style:none;margin-bottom:1em;margin-left:0;border-bottom:1px dotted #d4d4d4}.charms__list .charms__list--config{display:none}.charms__list .charms__list--toggle{display:block}.charms__list .charms__list--toggle.is-open+.charms__list--config{display:block}.charms__list .charms__list--config-name{border-top:0}.charms__list--item{font-size:1em;border-top:1px dotted #d4d4d4;padding:10px 0 0 10px;margin-bottom:10px}.charms__list--item:last-of-type{margin-bottom:10px}.charms__list--icon{margin-right:.4em;width:25px;height:25px}.charms__list--toggle{background:url("../img/shared/icon-arrow-down.svg") no-repeat center center;width:16px;height:100%;float:right;text-indent:-99999px;margin-right:20px}.charms__list--toggle.is-open{background-image:url("../img/shared/icon-arrow-up.svg");background-size:14px}.charms__list--config{padding-left:35px;padding-bottom:20px}.charms__list--config-name{font-size:1em;margin-top:15px;padding-top:15px;font-weight:400;border-top:1px dotted #d4d4d4}.charms__list--config-name:first-of-type{border-top:0}.charms__list--config-type{font-weight:400}.charms__list--config-description,.charms__list--config-setting{margin-left:30px;margin-top:8px}.charms__list--config-setting{font-size:0.875em;color:#888;font-family:"Ubuntu Mono","Consolas","Monaco","Lucida Console","Courier New",Courier,monospace}body.no-svg .charms__list .charms__list--toggle{background-image:url("../img/shared/icon-arrow-down.png")}body.no-svg .charms__list .charms__list--toggle.is-open{background-image:url("../img/shared/icon-arrow-up.png")}pre{background:transparent;border:1px solid #888;margin:0 0 1.5em 0}pre:not(:first-child){margin-top:1.5em}code.language-bash .comment{color:#888}.cookie-policy{-moz-box-shadow:0 -1px 2px rgba(0,0,0,0.2);-webkit-box-shadow:0 -1px 2px rgba(0,0,0,0.2);box-shadow:0 -1px 2px rgba(0,0,0,0.2);background-color:#fae4dc;bottom:0;position:fixed;width:100%;z-index:100}.cookie-policy p{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:13px;margin-bottom:0;margin-left:0;padding:8px 0;width:100%}.cookie-policy .link-cta{background-image:url(../img/icons/close-orange.svg);background-repeat:no-repeat;color:#fff;float:right;font-size:1em;height:15px;margin:12px 0;margin-top:12px;padding:0;text-decoration:none;text-indent:-9999px;width:16px}html.no-svg .cookie-policy .link-cta,html.opera-mini .cookie-policy .link-cta{background-image:url(../img/icons/close-orange.png)}html.opera-mini .cookie-policy{position:relative;top:0}.deploy-command{margin-bottom:10px;position:relative}.deploy-command .deploy-command__field{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 4px 4px;-moz-border-radius:4px 4px 4px 4px;border-radius:4px 4px 4px 4px;-moz-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);-webkit-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);background-image:url("../img/icons/code-snippet_16.svg");background-repeat:no-repeat;background-position:5px center;background-color:#fff;background-size:1.142857143em;width:100%;height:37px;border:1px solid #c1c1c1;padding:.6em;color:#888;padding-left:2em;font-size:0.875em;white-space:nowrap;overflow:hidden;cursor:text}.deploy-command .command2clipboard__clip{cursor:pointer;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;line-height:1;position:absolute;right:1px;top:1px;background-color:#fff;padding:9px 8px 7px;border-left:1px solid #b2b2b2;display:none}.deploy-command .command2clipboard__clip.zeroclipboard-is-hover{background-color:#eee}@media only screen and (min-width: 1030px){.deploy-command .command2clipboard__clip{display:inline-block}}.dropdown-menu{position:relative;display:block}.dropdown-menu.open .menu-link{background-color:#000}.dropdown-menu.open .dropdown{display:block}.dropdown-menu .menu-link .border-box{display:block;color:#f2f2f4}.dropdown-menu .dropdown{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;display:none;position:absolute;z-index:1000;top:0;left:0;right:0;width:auto;background-color:#fff;box-shadow:0 1px 5px rgba(0,0,0,0.2)}.dropdown-menu .dropdown.right{left:auto;right:0;text-align:right}.dropdown-menu .dropdown.narrow{min-width:140px;width:auto}.dropdown-menu .dropdown a,.dropdown-menu .dropdown p,.dropdown-menu .dropdown li{color:#333}.dropdown-menu .dropdown p{padding:11px 20px}.dropdown-menu .dropdown header,.dropdown-menu .dropdown footer{background-color:#fff}.dropdown-menu .dropdown header{padding:11px 20px;color:#f2f2f4;font-size:16px;font-weight:300}.dropdown-menu .dropdown footer{padding:20px}.dropdown-menu .dropdown ul{width:auto;left:0;right:0}.dropdown-menu .dropdown ul li a{width:auto;display:block;padding:15px 20px}.files .files__list{list-style:none;margin-bottom:1em;border-left:1px solid #cbcbcb;margin-left:1em}@media only screen and (min-width: 768px){.files .files__list{margin-left:0}}.files .files__list li{position:relative}.files .files__list li a:link,.files .files__list li a:visited{color:#333;text-decoration:none}.files .files__list li:before{content:'';width:12px;height:1px;background:#d4d4d4;display:inline-block;position:relative;top:-4px;margin-right:5px}.files .files__list li:last-child:after{content:'';width:4px;height:1em;position:absolute;display:block;left:-2px;top:.85em;background:#fff}.files .files__list ul:last-child>li a:after{content:'';width:4px;height:3em;position:absolute;display:block;left:-1.8em;top:-1.45em;background:white;cursor:default}.files .files__list .files__list{margin-left:1.3em}.files .files__list .files__list--item,.files .files__list .files__list--item-folder{font-size:0.875em;margin-bottom:0.75em}.files .files__list .files__list--item-folder{background-position:center right;background-size:12px;cursor:pointer}.files .files__list .files__list--item-folder:after{font-size:14px;display:block;content:"-";position:absolute;left:-7px;top:4px;padding:0 4px;line-height:0.9em;background:#fff;border:1px solid #888}.files .files__list .files__list--item-folder.is-closed+ul{display:none}.files .files__list .files__list--item-folder.is-closed:after{content:"+";padding:0 2px}.files .files__actions--launchpad{background:url("../img/icons/icon-launchpad.svg") no-repeat;padding-left:1.4em}#main-content .row-hero{padding-top:20px;margin-top:0}#main-content .row-hero .intro{font-size:16px}@media only screen and (min-width: 769px){#main-content .row-hero{padding-top:60px}#main-content .row-hero .intro{font-size:1.4375em;margin-bottom:40px}}.how-to div div img{float:left;margin:0 20px 20px 0}header.banner a.external,header.banner a.external:hover{background-image:url("../img/icons/external-link-grey.png")}a.external,a.external:hover,header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background-repeat:no-repeat}a.external,a.external:hover header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background-position:right 14px top 14px;padding-right:35px;background-size:auto}@media only screen and (max-width: 769px){header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background:none}header.banner nav.nav-primary ul li a.external:after{display:inline-block;width:11px;height:11px;margin-left:0.25em;background-image:url("../img/icons/external-link-dark.png");vertical-align:text-top}}.list__icons{margin-left:0;margin-bottom:5px}.list__icons li{list-style:none;float:left;padding:8px 8px 0 0;margin-bottom:0}.list__icons li img{width:24px;height:24px;vertical-align:top}.list__tick{list-style-image:url("../img/icons/tick.png")}.list__middot{margin-left:0;list-style:none}.list__middot li{display:inline}.list__middot li:after{content:"•";color:#888;margin:0 5px 0 8px;vertical-align:middle}.list__middot li.files__actions--last:after{content:""}.combined-list .list li{border-bottom:1px dotted #888;padding:10px 0}@media only screen and (max-width: 767px){.combined-list .last-col .list li:last-of-type{border-bottom:0;padding-bottom:0}}@media only screen and (min-width: 768px){.combined-list .list li:last-of-type{border-bottom:0;padding-bottom:0}}.events-list li{position:relative;padding-bottom:20px}.events-list dd{margin-left:0;background-position:0 center;background-repeat:no-repeat;background-size:20px 20px;padding:6px 20px 6px 24px}.events-list .event-map{display:none}.events-list .event-date{background-image:url("../img/icons/calendar.svg")}.events-list .location{background-image:url("../img/icons/location.svg")}@media only screen and (min-width: 769px){.events-list .event-details-wrapper{padding-left:120px}.events-list .event-map{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;position:absolute;left:0;top:0;height:100px;width:100px;float:left;margin-right:10px;margin-top:5px;overflow:hidden;display:block}}body.no-svg .events-list .event-date{background-image:url("../img/icons/calendar.png")}body.no-svg .events-list .location{background-image:url("../img/icons/location.png")}.maintainers .maintainer__email{display:block}.ratings ul{margin-left:2px;margin-bottom:0}.ratings ul li{margin-bottom:0}.ratings ul li img{vertical-align:text-top}.ratings ul li:first-of-type{margin-left:0}.revisions__list{list-style:none;margin-left:0}.revisions__list .revisions__list-item{margin-bottom:1em}.revisions__list .revisions__list_meta{color:#888;margin-bottom:.2em}.revisions__list .revisions__list_meta_date{float:right}.section{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;padding-bottom:20px;padding-top:20px}.section .section__title{background:url(../img/shared/icon-arrow-up.svg) no-repeat center right;cursor:pointer;margin-bottom:1em}.section.is-closed{height:60px}.section.is-closed .section__title{background-image:url(../img/shared/icon-arrow-down.svg)}.no-svg .row.section .section__title{background:url(../img/shared/icon-arrow-up.png)}.no-svg .row.section.is-closed .section__title{background:url(../img/shared/icon-arrow-down.png)}footer .section{margin-bottom:1em;padding-bottom:1em}footer .section.is-closed{height:auto;padding-bottom:0}footer .section.is-closed ul{display:none}@media only screen and (min-width: 769px){.row .section .section__title{background-image:none;cursor:auto}.row .section.is-closed{height:auto}}.list--concealed .list-item{display:none}.list--concealed .list-item:first-of-type{display:list-item}.list--concealed.list--visible-6 .list-item:nth-child(-n+6){display:list-item}.list--concealed.list--visible-4 .list-item:nth-child(-n+4){display:list-item}.list--concealed.list--visible-2 .list-item:nth-child(-n+2){display:list-item}.list--concealed a.btn__see--less{display:none}.list--concealed a.btn__see--more{display:inline}.list--revealed .list__controls,.list--concealed .list__controls{display:block;margin-top:2em}.list--revealed .list--item{display:list-item}.list--revealed a.btn__see--less{display:inline}.list--revealed a.btn__see--more{display:none}a.btn__see--more,a.btn__see--less{-moz-transition:background .2s;-webkit-transition:background .2s;transition:background .2s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:#333;border-radius:2px;border:1px solid #b2b2b2;background:#fff;padding:0.384615385em 1.153846154em}a.btn__see--more:hover,a.btn__see--less:hover{background:#eee;text-decoration:none}.strip-dark,.strip-light{clear:both}.strip-dark{background-color:#2c001e;background-image:none;background-repeat:repeat;color:#fff}.strip-dark.solid{background-image:none;background-color:#2c001e}.strip-dark ul,.strip-dark ol{margin:0;padding:0}.strip-dark .icon,.strip-dark ol span{-moz-background-size:40px 40px;-webkit-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;background-image:url(../img/icons/list-icon-background.png);background-repeat:no-repeat;display:block;margin:0 20px 20px 0;padding:24px;float:left;width:16px;height:16px;padding:12px}.strip-light .icon,.strip-dark .icon{position:absolute}.strip-light{background-color:rgba(255,255,255,0.6)}.strip-dark ol,.strip-dark ul{padding:20px 0}.strip-light .icon{display:block;background-image:url(../img/icons/list-icon-background.png);padding:24px;margin:0 auto 48px}.strip-dark .connected-list li,.strip-light .connected-list li{margin-bottom:10px;min-height:52px}.strip-dark .connected-list li p,.strip-light .connected-list li p,.strip-dark .connected-list li h3,.strip-light .connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li p .strip-dark ol.connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li span{float:left;font-size:22px;font-weight:normal;height:26px;margin-left:0;margin-right:20px;padding-top:2px;position:absolute;text-align:center;width:16px}.strip-white{background:#fff}.strip-trans{background:transparent}.strip-green{background-image:linear-gradient(to right, #6fad23 0%, #7cc227 100%);overflow:hidden}.strip-green,.strip-green a{color:#fff}.strip-blue{background-image:linear-gradient(to right, #1076a2 0%, #359fcd 100%);overflow:hidden}.strip-blue,.strip-blue a{color:#fff}.tag-list{list-style:none;margin:0}.tag-list--item{display:inline-block;text-transform:lowercase}.tag-list--item a:link,.tag-list--item a:visited{color:#333}.tag-list--item a:after{content:','}.tag-list--item:last-child a:after{content:''}#twitter-feed,#blog-feed{margin:35px 0}#twitter-feed>ul,#blog-feed>ul{list-style:none;margin-left:0}#twitter-feed>ul li,#blog-feed>ul li{position:relative;margin-bottom:30px}#twitter-feed .user,#blog-feed .user{font-size:0.875em;margin-bottom:0.5em}#twitter-feed .user img,#blog-feed .user img{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;width:24px;height:24px;vertical-align:middle;margin-right:5px}#twitter-feed .user a:link,#twitter-feed .user a:visited,#twitter-feed .user a:hover,#blog-feed .user a:link,#blog-feed .user a:visited,#blog-feed .user a:hover{text-decoration:none}#twitter-feed .user span[data-scribe="element:name"],#blog-feed .user span[data-scribe="element:name"]{color:#333}#twitter-feed .tweet,#blog-feed .tweet{padding-left:33px;margin-bottom:.3em}#twitter-feed .timePosted,#blog-feed .timePosted{padding-left:33px;font-size:0.875em}#twitter-feed .interact,#blog-feed .interact{padding-left:33px}#twitter-feed .interact a:link,#twitter-feed .interact a:visited,#blog-feed .interact a:link,#blog-feed .interact a:visited{margin-right:20px}@media only screen and (min-width: 769px){#twitter-feed .timePosted{position:absolute;top:0;right:0;padding-left:0}}.spaced-segment{margin-bottom:50px}.spaced-segment h3{margin-bottom:1.3em}.strip-dark,.strip-light{clear:both}.strip-dark{background-color:#2c001e;background-image:none;background-repeat:repeat;color:#fff}.strip-dark.solid{background-image:none;background-color:#2c001e}.strip-dark ul,.strip-dark ol{margin:0;padding:0}.strip-dark .icon,.strip-dark ol span{-moz-background-size:40px 40px;-webkit-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;background-image:url(../img/icons/list-icon-background.png);background-repeat:no-repeat;display:block;margin:0 20px 20px 0;padding:24px;float:left;width:16px;height:16px;padding:12px}.strip-light .icon,.strip-dark .icon{position:absolute}.strip-light{background-color:rgba(255,255,255,0.6)}.strip-dark ol,.strip-dark ul{padding:20px 0}.strip-light .icon{display:block;background-image:url(../img/icons/list-icon-background.png);padding:24px;margin:0 auto 48px}.strip-dark .connected-list li,.strip-light .connected-list li{margin-bottom:10px;min-height:52px}.strip-dark .connected-list li p,.strip-light .connected-list li p,.strip-dark .connected-list li h3,.strip-light .connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li p .strip-dark ol.connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li span{float:left;font-size:22px;font-weight:normal;height:26px;margin-left:0;margin-right:20px;padding-top:2px;position:absolute;text-align:center;width:16px}.strip-white{background:#fff}.strip-trans{background:transparent}.strip-green{background-image:linear-gradient(to right, #6fad23 0%, #7cc227 100%);overflow:hidden}.strip-green,.strip-green a{color:#fff}.strip-blue{background-image:linear-gradient(to right, #1076a2 0%, #359fcd 100%);overflow:hidden}.strip-blue,.strip-blue a{color:#fff}@media only screen and (min-width: 769px){.tip,.command2clipboard__clip{position:relative;display:inline-block}.tip .tip-content,.command2clipboard__clip .tip-content{position:absolute;z-index:98;left:-1000px;right:-1000px;top:-30px;font-weight:300;margin:auto;display:block;text-align:center;white-space:nowrap}.tip:hover .tip-content:after,.command2clipboard__clip.zeroclipboard-is-hover .tip-content:after{display:table;z-index:98;margin:auto;color:#fff;border-radius:3px;background:#000;box-shadow:none;font-size:12px;content:attr(data-tooltip);padding:4px 6px;white-space:nowrap;text-align:center}.tip:hover .tip-content:before,.command2clipboard__clip.zeroclipboard-is-hover .tip-content:before{position:absolute;top:100%;left:50%;margin-left:-5px;content:'';border:solid transparent;border-width:5px;border-top-color:#000}}.fake{display:block}*{-webkit-backface-visibility:hidden;margin:0}html{height:100%}body{height:100%;font-size:1.0em;font-family:'Ubuntu', Arial, 'libra sans', sans-serif;font-weight:300}hr{border:none;background:#B2B2B2;width:100%;height:1px;display:block;width:100%;float:left;margin-bottom:20px}ul,ol{margin-left:0}a.alt{color:#333}a.alt:hover{color:#dd4814}a:active,a:focus{outline:none}::selection{color:#FFF;background:#dd4814}::-moz-selection{color:#FFF;background:#dd4814}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:300;src:url("../fonts/ubuntu-l-webfont.eot?") format("eot"),url("../fonts/ubuntu-l-webfont.woff") format("woff"),url("../fonts/ubuntu-l-webfont.ttf") format("truetype"),url("../fonts/ubuntu-l-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:italic;font-weight:300;src:url("../fonts/ubuntu-li-webfont.eot?") format("eot"),url("../fonts/ubuntu-li-webfont.woff2") format("woff2"),url("../fonts/ubuntu-li-webfont.woff") format("woff"),url("../fonts/ubuntu-li-webfont.ttf") format("truetype"),url("../fonts/ubuntu-li-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:url("../fonts/ubuntu-r-webfont.eot?") format("eot"),url("../fonts/ubuntu-r-webfont.woff") format("woff"),url("../fonts/ubuntu-r-webfont.ttf") format("truetype"),url("../fonts/ubuntu-r-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:500;src:url("../fonts/ubuntu-m-webfont.eot?") format("eot"),url("../fonts/ubuntu-m-webfont.woff") format("woff"),url("../fonts/ubuntu-m-webfont.ttf") format("truetype"),url("../fonts/ubuntu-m-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:italic;font-weight:500;src:url("../fonts/ubuntu-mi-webfont.eot?") format("eot"),url("../fonts/ubuntu-mi-webfont.woff2") format("woff2"),url("../fonts/ubuntu-mi-webfont.woff") format("woff"),url("../fonts/ubuntu-mi-webfont.ttf") format("truetype"),url("../fonts/ubuntu-mi-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:url("../fonts/ubuntu-b-webfont.eot?") format("eot"),url("../fonts/ubuntu-b-webfont.woff2") format("woff2"),url("../fonts/ubuntu-b-webfont.woff") format("woff"),url("../fonts/ubuntu-b-webfont.ttf") format("truetype"),url("../fonts/ubuntu-b-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:400;src:url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/GZMdC02DTXXx8AdUvU2etw.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:700;src:url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/pqisLQoeO9YTDCNnlQ9bfz8E0i7KZn-EPnyo3HZu7kw.woff") format("woff")}.accordion{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);margin-bottom:40px}.disabled .accordion{opacity:.5;pointer-events:none}.accordion .accordion__title{border-bottom:1px dotted #B2B2B2;padding:13px 20px 12px;margin:0;font-size:1.3em}.accordion .accordion__tab{border-bottom:1px dotted #B2B2B2}.accordion .accordion__tab:last-of-type{border:none}.accordion .accordion__tab .accordion__tab-title{padding:12px 20px;margin:0;color:#888;cursor:pointer;background:transparent url("../img/icons/accordion-open.svg") top 20px right 20px no-repeat}.accordion .accordion__tab .accordion__tab-title.active{background-image:url("../img/icons/accordion-close.svg")}.accordion .accordion__tab .accordion__tab-title.active+.accordion__tab-content{max-height:3000px;transition:max-height .5s ease-in}.accordion .accordion__tab .accordion__tab-content{max-height:0;transition:max-height .5s ease-out;overflow:hidden}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list{list-style-type:none;padding:0 20px 14px;margin:0}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item{margin-bottom:0.15em}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#333;width:100%;display:inline-block;padding-right:20px}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link:hover{color:#dd4814;text-decoration:none}.disabled .accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link{color:#333}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active{font-weight:400}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active .accordion__tab-link{background:transparent url("../img/icons/cross.svg") top 7px right 0px no-repeat}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active:hover{color:#dd4814}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active:hover .accordion__tab-link{color:#dd4814;background-image:url("../img/icons/cross-orange.svg")}.cta-group .cta-group__link{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;border-radius:3px 0px 0px 3px;display:inline-block;padding:10px 14px;text-align:center;color:#fff;background-color:#dd4814}.cta-group .cta-group__link:hover{cursor:pointer;text-decoration:none;background-color:#c03f11}.cta-group.secondary .cta-group__link{color:#dd4814;border:1px solid #b2b2b2;background-color:#FFF;line-height:1}.cta-group.secondary .cta-group__link:hover{cursor:pointer;background-color:#F2F2F2}a.link-cta-ubuntu,button.cta-ubuntu,input[type='submit'],form button[type='submit'],form input[type='submit']{font-size:1em;border:none;max-height:37px}a.link-cta-ubuntu[disabled],a.link-cta-ubuntu.disabled,button.cta-ubuntu[disabled],button.cta-ubuntu.disabled,input[type='submit'][disabled],input[type='submit'].disabled,form button[type='submit'][disabled],form button[type='submit'].disabled,form input[type='submit'][disabled],form input[type='submit'].disabled{cursor:default;opacity:.5}a.link-cta-ubuntu.clear,button.cta-ubuntu.clear,input[type='submit'].clear,form button[type='submit'].clear,form input[type='submit'].clear{background:none;color:#333}a.link-cta-ubuntu.secondary,button.cta-ubuntu.secondary,input[type='submit'].secondary,form button[type='submit'].secondary,form input[type='submit'].secondary{color:#dd4814;border:1px solid #b2b2b2;background:#FFF}a.link-cta-ubuntu.secondary.external,button.cta-ubuntu.secondary.external,input[type='submit'].secondary.external,form button[type='submit'].secondary.external,form input[type='submit'].secondary.external{background-image:url("../img/external-link-black.svg");background-size:16px 16px;background-repeat:no-repeat;background-position:top 8px right 8px}a.link-cta-ubuntu.secondary:hover,button.cta-ubuntu.secondary:hover,input[type='submit'].secondary:hover,form button[type='submit'].secondary:hover,form input[type='submit'].secondary:hover{background-color:#F2F2F2;cursor:pointer}a.link-cta-ubuntu.secondary[disabled],a.link-cta-ubuntu.secondary.disabled,button.cta-ubuntu.secondary[disabled],button.cta-ubuntu.secondary.disabled,input[type='submit'].secondary[disabled],input[type='submit'].secondary.disabled,form button[type='submit'].secondary[disabled],form button[type='submit'].secondary.disabled,form input[type='submit'].secondary[disabled],form input[type='submit'].secondary.disabled{cursor:default;color:#f5ae95;border:1px solid #ddd;background:#FFF;opacity:1}a.link-cta-ubuntu.secondary[disabled]:hover,a.link-cta-ubuntu.secondary.disabled:hover,button.cta-ubuntu.secondary[disabled]:hover,button.cta-ubuntu.secondary.disabled:hover,input[type='submit'].secondary[disabled]:hover,input[type='submit'].secondary.disabled:hover,form button[type='submit'].secondary[disabled]:hover,form button[type='submit'].secondary.disabled:hover,form input[type='submit'].secondary[disabled]:hover,form input[type='submit'].secondary.disabled:hover{background:#FFF}a.link-cta-ubuntu.text-button,button.cta-ubuntu.text-button,input[type='submit'].text-button,form button[type='submit'].text-button,form input[type='submit'].text-button{background-color:transparent;color:#333}a.link-cta-ubuntu.text-button:hover,button.cta-ubuntu.text-button:hover,input[type='submit'].text-button:hover,form button[type='submit'].text-button:hover,form input[type='submit'].text-button:hover{text-decoration:underline}a.link-cta-ubuntu.full,button.cta-ubuntu.full,input[type='submit'].full,form button[type='submit'].full,form input[type='submit'].full{display:block;width:100%}@media screen and (max-width: 768px){a.link-cta-ubuntu,button.cta-ubuntu,input[type='submit'],form button[type='submit'],form input[type='submit']{margin-bottom:20px}}a.link-cta-ubuntu{line-height:20px}.cta-group{float:left;width:auto;clear:both;position:relative;overflow:hidden}.cta-group .cta-group__link{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-height:36px;padding-right:49px;width:100%;line-height:1.2;position:relative;margin:0;text-align:left}.cta-group .cta-group__link:after{-webkit-border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;border-radius:0px 3px 3px 0px;content:'';display:block;height:36px;width:34px;background:red;position:absolute;top:0;right:0;background-image:url("../img/chevron-white.svg");background-color:#dd4814;background-repeat:no-repeat;background-position:center}.cta-group .cta-group__link:hover{background-color:#dd4814}.cta-group .cta-group__link:hover:after{background-color:#c03f11}.cta-group .cta-group__dropdown{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;right:0;list-style:none;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);z-index:20;max-height:1000px;transition:max-height 0.3s ease-in;overflow:hidden;position:relative;clear:both}.cta-group .cta-group__dropdown.ng-hide{display:block !important;max-height:0;overflow:hidden;transition:max-height 0.3s ease-out}.cta-group .cta-group__dropdown .cta-group__item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;clear:both;padding:5px 10px;margin:0}.cta-group .cta-group__dropdown .cta-group__item a{color:#333;cursor:pointer;width:100%;float:left;margin:0}.cta-group .cta-group__dropdown .cta-group__item a:hover{color:#dd4814;text-decoration:none}.cta-group.secondary .cta-group__link{float:left;max-height:36px;width:100%}.cta-group.secondary .cta-group__link:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-image:url("../img/icons/accordion-open.svg");background-repeat:no-repeat;background-color:#fff;border:1px solid #b2b2b2;border-left:none;top:-1px;right:-1px}.cta-group.secondary .cta-group__link:hover{background-color:#FFF}.cta-group.secondary .cta-group__link:hover:after{background-color:#F2F2F2}.flash-messages{margin:0px auto;padding:0;max-width:1440px}@media screen and (max-width: 1030px){.flash-messages{margin:0px 10px 20px}}.flash-messages .flash-messages__item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.flash-messages .flash-messages__item.info{background-image:url("../img/icons/info.png");background-image:url("../img/icons/info.svg"),none}.flash-messages .flash-messages__item.success{background-image:url("../img/icons/success.png");background-image:url("../img/icons/success.svg"),none}.flash-messages .flash-messages__item.warning{background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}.flash-messages .flash-messages__item.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none}form input[type='text'],form input[type='number'],form input[type='search'],form input[type='password'],form input[type='email'],form input[type='url'],form textarea,form select,tags-input .tags .input,.accounts .api li input[type='text']{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;background:#FFF;color:#333;border:1px solid #D2D2D2;display:block;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;padding:0px 13px}form input[type='text']:active,form input[type='number']:active,form input[type='search']:active,form input[type='password']:active,form input[type='email']:active,form input[type='url']:active,form textarea:active,form select:active,tags-input .tags .input:active,.accounts .api li input[type='text']:active{border-color:#B2B2B2;outline:none}form input[type='text']:focus,form input[type='number']:focus,form input[type='search']:focus,form input[type='password']:focus,form input[type='email']:focus,form input[type='url']:focus,form textarea:focus,form select:focus,tags-input .tags .input:focus,.accounts .api li input[type='text']:focus{border-color:#B2B2B2;outline:none}form input.invalid[type='text'],form input.invalid[type='number'],form input.invalid[type='search'],form input.invalid[type='password'],form input.invalid[type='email'],form input.invalid[type='url'],form textarea.invalid,form select.invalid,tags-input .tags .invalid.input,.accounts .api li input.invalid[type='text'],form input.ng-invalid[type='text'],form input.ng-invalid[type='number'],form input.ng-invalid[type='search'],form input.ng-invalid[type='password'],form input.ng-invalid[type='email'],form input.ng-invalid[type='url'],form textarea.ng-invalid,form select.ng-invalid,tags-input .tags .ng-invalid.input,.accounts .api li input.ng-invalid[type='text']{border-color:#d90000}form input[disabled="disabled"][type='text'],form input[disabled="disabled"][type='number'],form input[disabled="disabled"][type='search'],form input[disabled="disabled"][type='password'],form input[disabled="disabled"][type='email'],form input[disabled="disabled"][type='url'],form textarea[disabled="disabled"],form select[disabled="disabled"],tags-input .tags [disabled="disabled"].input,.accounts .api li input[disabled="disabled"][type='text']{-webkit-text-fill-color:#333;border-color:#D2D2D2;background-color:transparent}label{position:relative}.disabled label{cursor:default}form li.help-msg{margin-bottom:1em}form li.help-msg .help{color:#888;font-size:0.875em}form label span{color:#333}form input[type='text'],form input[type='number'],form input[type='search'],form input[type='password'],form input[type='email'],form input[type='url']{padding:7px 10px}form input[type='text']::-webkit-input-placeholder,form input[type='number']::-webkit-input-placeholder,form input[type='search']::-webkit-input-placeholder,form input[type='password']::-webkit-input-placeholder,form input[type='email']::-webkit-input-placeholder,form input[type='url']::-webkit-input-placeholder{color:#888}form input[type='text']:-moz-placeholder,form input[type='number']:-moz-placeholder,form input[type='search']:-moz-placeholder,form input[type='password']:-moz-placeholder,form input[type='email']:-moz-placeholder,form input[type='url']:-moz-placeholder{color:#888}form input[type='text']::-moz-placeholder,form input[type='number']::-moz-placeholder,form input[type='search']::-moz-placeholder,form input[type='password']::-moz-placeholder,form input[type='email']::-moz-placeholder,form input[type='url']::-moz-placeholder{color:#888}form input[type='text']:-ms-input-placeholder,form input[type='number']:-ms-input-placeholder,form input[type='search']:-ms-input-placeholder,form input[type='password']:-ms-input-placeholder,form input[type='email']:-ms-input-placeholder,form input[type='url']:-ms-input-placeholder{color:#888}form input[type='number']{padding-right:15px}form input[type='search']{-webkit-appearance:textfield}form input[type='search']::-webkit-search-decoration,form input[type='search']::-webkit-search-cancel-button{-webkit-appearance:none}form input[type='radio'],form input[type='image']{display:inline-block;margin-right:10px}form textarea{overflow:auto;height:auto;min-height:175px;padding:7px 10px;vertical-align:top}form select{display:block;clear:both;cursor:pointer;margin:0;background-image:url("../img/icons/accordion-open.svg");background-repeat:no-repeat;background-position:top 16px right 10px;padding:6px 30px 6px 10px;-moz-appearance:none;text-indent:0.01px;text-overflow:''}form select[multiple],form select[size]{height:auto;background-image:none;padding-top:10px}form select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}form select[disabled]{color:#888;background-image:none}form select::-ms-expand{display:none}form fieldset{background:none;margin-left:0;padding:0}.checkbox{visibility:hidden;width:0;height:0;margin-right:0;position:absolute}.checkbox+.checkbox-label{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-left:20px;position:relative}.checkbox+.checkbox-label:before{content:"";display:inline-block;width:20px;height:20px;position:absolute;top:0;left:0;background:url("../img/checkbox.svg") no-repeat;background-size:13px 13px;background-position:0px 3px}.checkbox:checked+.checkbox-label:before{background:url("../img/checkbox-checked.svg") no-repeat;background-position:0px 3px}.checkbox[disabled="disabled"]+.checkbox-label:before{cursor:default;opacity:0.5}.field-error,.errors{color:#DF382C}.field-error .errorlist,.errors .errorlist{margin:0}.field-error .errorlist li,.errors .errorlist li{margin:0 0 14px 0}.inline{display:inline-block;width:100%;font-size:0;margin-bottom:10px}.inline.error{background-color:#fdf5f5;box-shadow:0px 0px 0px 5px #fdf5f5}.inline.error .ng-invalid{border-color:#D2D2D2}.inline:last-of-type{margin-bottom:0}.inline label{display:inline-block;float:none;font-size:16px;margin:0}.inline input[type='submit'],.inline input[type='text'],.inline input[type='number'],.inline input[type='search'],.inline input[type='password'],.inline input[type='email'],.inline input[type='checkbox'],.inline select{display:inline-block;clear:none;margin:0;float:none;font-size:16px}.inline input[type='submit']:invalid,.inline input[type='text']:invalid,.inline input[type='number']:invalid,.inline input[type='search']:invalid,.inline input[type='password']:invalid,.inline input[type='email']:invalid,.inline input[type='checkbox']:invalid,.inline select:invalid{-moz-box-shadow:none}.inline input[type='submit']:-moz-submit-invalid,.inline input[type='text']:-moz-submit-invalid,.inline input[type='number']:-moz-submit-invalid,.inline input[type='search']:-moz-submit-invalid,.inline input[type='password']:-moz-submit-invalid,.inline input[type='email']:-moz-submit-invalid,.inline input[type='checkbox']:-moz-submit-invalid,.inline select:-moz-submit-invalid{box-shadow:none}.inline input[type='submit']:-moz-ui-invalid,.inline input[type='text']:-moz-ui-invalid,.inline input[type='number']:-moz-ui-invalid,.inline input[type='search']:-moz-ui-invalid,.inline input[type='password']:-moz-ui-invalid,.inline input[type='email']:-moz-ui-invalid,.inline input[type='checkbox']:-moz-ui-invalid,.inline select:-moz-ui-invalid{box-shadow:none}.inline div{float:none;margin:0}.inline input.cta-ubuntu,.inline a.link-cta-ubuntu,.inline button.cta-ubuntu{font-size:16px}.inline .icon{position:absolute;top:11px;right:10px;cursor:pointer}.inline .error-message{font-size:12px;color:#e85232;margin-top:10px;margin-bottom:10px;font-weight:normal}.form-inline label,.form-inline button,.form-inline input[type='submit'],.form-inline input[type='text'],.form-inline input[type='number'],.form-inline input[type='search'],.form-inline input[type='password'],.form-inline input[type='email'],.form-inline input[type='checkbox'],.form-inline select{display:inline-block;width:auto;vertical-align:middle;margin-bottom:0}.form-inline input,.form-inline input[type='submit'] input[type='text'],.form-inline input[type='number'],.form-inline input[type='search'],.form-inline input[type='password'],.form-inline input[type='email'],.form-inline input[type='checkbox'],.form-inline select{margin-left:20px}.form-inline fieldset{width:auto;display:inline-block;margin:0 40px 0 0}.controls{position:absolute;top:0;right:20px}.controls a,.controls button{margin-left:20px}.icon{background-size:16px 16px;width:16px;height:16px;padding:0;display:inline-block}.icon.icon__loading{background:url("../img/in_progress.png") no-repeat;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear}a.icon{cursor:pointer}dl dt{clear:left}dl dd{color:#888;margin-left:0}dl dt,dl dd{display:inline-block;float:left;line-height:37px;margin-bottom:10px !important}tags-input{outline:none}tags-input .host:focus{outline:none}tags-input .tags:focus,tags-input .tags.focused{outline:none}tags-input .tags .tag-list{margin:4px 0 0;padding:0;list-style-type:none;width:100%;float:left}tags-input .tags .tag-item{display:inline-block;float:left;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;height:30px;line-height:30px;cursor:default;color:#000;padding-right:15px;position:relative;margin:0 11px 0 0}tags-input .tags .tag-item .remove-button{display:inline-block;width:12px;height:12px;text-indent:-999em;background:url("../img/icons/cross.svg") no-repeat;background-size:12px 12px;position:absolute;right:0;top:9px;cursor:pointer}tags-input .tags .tag-item .remove-button:hover{text-decoration:none}tags-input .tags .input{padding:7px 10px;width:100% !important;float:left;position:relative !important;left:0}tags-input .tags .input::-ms-clear{display:none}tags-input .autocomplete{float:left;width:100%}tags-input .autocomplete .suggestion-list{background:#FFF;padding:10px 8px;border:1px solid #D2D2D2;border-top:0;border-radius:0 0 2px 2px}tags-input .autocomplete .suggestion-list li:hover{background:#EEE;cursor:pointer}tags-input[disabled] .host:focus{outline:none}tags-input[disabled] .tags{cursor:default}tags-input[disabled] .tags .tag-item .remove-button{cursor:default}tags-input[disabled] .tags .input{cursor:default}.tag-link{margin-right:10px}.tag-link:last-of-type:after{content:''}.table__data tags-input .tags{margin-top:-10px}.table__data tags-input .tags input{margin-left:0;width:50% !important;float:left}.pagination{margin:10px 0;text-align:center}.pagination .inactive{color:#AEA79F}.pagination a,.pagination span{margin:0 5px}.search{position:relative;padding-bottom:20px}.search input[type='search']{-webkit-appearance:textfield}.search .search__input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;list-style:none;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);width:100%;border:none;padding:13px 20px;font-size:1.25em}.search .search__input::-webkit-input-placeholder{color:#000 !important}.search .search__input:-moz-placeholder{color:#000 !important}.search .search__input::-moz-placeholder{color:#000 !important}.search .search__input:-ms-input-placeholder{color:#000 !important}.search .search__input[disabled="disabled"]{background-color:#fff;opacity:.5;pointer-events:none}.search .search__input[disabled="disabled"]+.search__submit.close{pointer-events:none;opacity:.5}.search .search__submit{position:absolute;top:15px;right:25px;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat;text-indent:-999em;display:block;width:21px;height:20px;overflow:hidden;outline:none;padding:0;border:none}.search .search__submit:hover{background-color:transparent;background-image:url("../img/search-icon.svg")}.search .search__submit.close{background-image:url("../img/icons/cross.svg");background-size:21px;margin-top:2px}.search .search__submit.close:hover{background-image:url("../img/icons/cross.svg")}.spinner-col{width:10px}.spinner{float:left;margin:0 auto;text-indent:-9999em}.spinner.spin{background:url("../img/in_progress.png") no-repeat;background-size:16px 16px;width:16px;height:16px;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear;padding:0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}table{text-align:left;width:100%;margin-bottom:40px;border-collapse:separate;border-spacing:0;font-size:16px}table th,table td{background:transparent;text-align:left;padding:13px 10px}table th .checkbox+.checkbox-label::before,table td .checkbox+.checkbox-label::before{top:-2px}table thead th{background:transparent;color:#888;border:none;border-bottom:1px solid #B2B2B2}table tbody tr:hover .icon-controls a{opacity:1}table tbody td{border:none;border-bottom:1px dotted #B2B2B2;position:relative}table tbody td.icon-controls{text-align:right}table tbody td.icon-controls a{opacity:0}table tbody td input[type="text"]{position:absolute;left:10px;top:6px;width:80%}.table-listing{text-align:left;width:100%;margin:0 0 40px 0;border-collapse:separate;border-spacing:0}.table-listing .table-listing__row:hover .table-listing__cell{background-color:#FFF}.table-listing .table-listing__row.error{background-color:#F3E3E2}.table-listing .table-listing__row.error .status{color:#DD3832}.table-listing .table-listing__row.progress{background-color:rgba(25,182,238,0.1)}.table-listing .table-listing__row.selected{background-color:#FFF}.table-listing .table-listing__header{background:transparent;color:#888;border:none;border-bottom:1px solid #B2B2B2}.table-listing .table-listing__header .table-listing__header-link{background-repeat:no-repeat;background-position:top 8px right 0;color:#888}.table-listing .table-listing__header .table-listing__header-link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.table-listing .table-listing__header .table-listing__header-link:focus,.table-listing .table-listing__header .table-listing__header-link:active,.table-listing .table-listing__header .table-listing__header-link:visited{text-decoration:none}.table-listing .table-listing__header .table-listing__header-link.active{color:#333}.table-listing .table-listing__header .table-listing__header-link.sort{border-bottom:1px solid #333}.table-listing .table-listing__header .divide{width:1px;display:inline-block;background:#D2D2D2 none repeat scroll 0% 0%;height:10px;padding:0px;margin:0px 5px}.table-listing .table-listing__cell{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;border-bottom:1px dotted #B2B2B2;position:relative}.table-listing .table-listing__cell.icon-controls{text-align:right;opacity:0}.table-listing .table-listing__cell input,.table-listing .table-listing__cell select{position:absolute;left:10px;top:5px;width:80%}.table-listing .fixed{max-width:200px;min-width:200px;width:200px;padding-left:0}.table-listing__header .table-listing .fixed{padding-left:0}.table-listing.no-hover .table-listing__row:hover .table-listing__cell,.table-listing.no-hover .table-listing__row:hover td{background-color:transparent}.t1{width:1%}.t2{width:2%}.t3{width:3%}.t4{width:4%}.t5{width:5%}.t6{width:6%}.t7{width:7%}.t8{width:8%}.t9{width:9%}.t10{width:10%}.t11{width:11%}.t12{width:12%}.t13{width:13%}.t14{width:14%}.t15{width:15%}.t16{width:16%}.t17{width:17%}.t18{width:18%}.t19{width:19%}.t20{width:20%}.t21{width:21%}.t22{width:22%}.t23{width:23%}.t24{width:24%}.t25{width:25%}.t26{width:26%}.t27{width:27%}.t28{width:28%}.t29{width:29%}.t30{width:30%}.t31{width:31%}.t32{width:32%}.t33{width:33%}.t34{width:34%}.t35{width:35%}.t36{width:36%}.t37{width:37%}.t38{width:38%}.t39{width:39%}.t40{width:40%}.t41{width:41%}.t42{width:42%}.t43{width:43%}.t44{width:44%}.t45{width:45%}.t46{width:46%}.t47{width:47%}.t48{width:48%}.t49{width:49%}.t50{width:50%}.t51{width:51%}.t52{width:52%}.t53{width:53%}.t54{width:54%}.t55{width:55%}.t56{width:56%}.t57{width:57%}.t58{width:58%}.t59{width:59%}.t60{width:60%}.t61{width:61%}.t62{width:62%}.t63{width:63%}.t64{width:64%}.t65{width:65%}.t66{width:66%}.t67{width:67%}.t68{width:68%}.t69{width:69%}.t70{width:70%}.t71{width:71%}.t72{width:72%}.t73{width:73%}.t74{width:74%}.t75{width:75%}.t76{width:76%}.t77{width:77%}.t78{width:78%}.t79{width:79%}.t80{width:80%}.t81{width:81%}.t82{width:82%}.t83{width:83%}.t84{width:84%}.t85{width:85%}.t86{width:86%}.t87{width:87%}.t88{width:88%}.t89{width:89%}.t90{width:90%}.t91{width:91%}.t92{width:92%}.t93{width:93%}.t94{width:94%}.t95{width:95%}.t96{width:96%}.t97{width:97%}.t98{width:98%}.t99{width:99%}.t100{width:100%}.table__column--1{width:1%}.table__column--2{width:2%}.table__column--3{width:3%}.table__column--4{width:4%}.table__column--5{width:5%}.table__column--6{width:6%}.table__column--7{width:7%}.table__column--8{width:8%}.table__column--9{width:9%}.table__column--10{width:10%}.table__column--11{width:11%}.table__column--12{width:12%}.table__column--13{width:13%}.table__column--14{width:14%}.table__column--15{width:15%}.table__column--16{width:16%}.table__column--17{width:17%}.table__column--18{width:18%}.table__column--19{width:19%}.table__column--20{width:20%}.table__column--21{width:21%}.table__column--22{width:22%}.table__column--23{width:23%}.table__column--24{width:24%}.table__column--25{width:25%}.table__column--26{width:26%}.table__column--27{width:27%}.table__column--28{width:28%}.table__column--29{width:29%}.table__column--30{width:30%}.table__column--31{width:31%}.table__column--32{width:32%}.table__column--33{width:33%}.table__column--34{width:34%}.table__column--35{width:35%}.table__column--36{width:36%}.table__column--37{width:37%}.table__column--38{width:38%}.table__column--39{width:39%}.table__column--40{width:40%}.table__column--41{width:41%}.table__column--42{width:42%}.table__column--43{width:43%}.table__column--44{width:44%}.table__column--45{width:45%}.table__column--46{width:46%}.table__column--47{width:47%}.table__column--48{width:48%}.table__column--49{width:49%}.table__column--50{width:50%}.table__column--51{width:51%}.table__column--52{width:52%}.table__column--53{width:53%}.table__column--54{width:54%}.table__column--55{width:55%}.table__column--56{width:56%}.table__column--57{width:57%}.table__column--58{width:58%}.table__column--59{width:59%}.table__column--60{width:60%}.table__column--61{width:61%}.table__column--62{width:62%}.table__column--63{width:63%}.table__column--64{width:64%}.table__column--65{width:65%}.table__column--66{width:66%}.table__column--67{width:67%}.table__column--68{width:68%}.table__column--69{width:69%}.table__column--70{width:70%}.table__column--71{width:71%}.table__column--72{width:72%}.table__column--73{width:73%}.table__column--74{width:74%}.table__column--75{width:75%}.table__column--76{width:76%}.table__column--77{width:77%}.table__column--78{width:78%}.table__column--79{width:79%}.table__column--80{width:80%}.table__column--81{width:81%}.table__column--82{width:82%}.table__column--83{width:83%}.table__column--84{width:84%}.table__column--85{width:85%}.table__column--86{width:86%}.table__column--87{width:87%}.table__column--88{width:88%}.table__column--89{width:89%}.table__column--90{width:90%}.table__column--91{width:91%}.table__column--92{width:92%}.table__column--93{width:93%}.table__column--94{width:94%}.table__column--95{width:95%}.table__column--96{width:96%}.table__column--97{width:97%}.table__column--98{width:98%}.table__column--99{width:99%}.table__column--100{width:100%}#commissioning_scripts .script-content.slider{overflow:hidden}#commissioning_scripts .script-content.slider pre{margin-top:20px}.table{display:table;border-color:#B2B2B2;border-collapse:collapse;border-spacing:0;overflow-x:scroll;margin-bottom:20px;margin:0 0 2.5em;width:100%}.table .table__row{float:left;width:100%;display:table-row;border-bottom:1px dotted #B2B2B2}.table .table__row:hover{background-color:#FFF}.table .table__row:hover .table__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row:hover .table__input.invalid{border-color:#D90000}.table .table__row:hover .table__input[disabled]{border-color:transparent;color:#333}.table .table__row:hover .table__controls{z-index:1;opacity:1}.table .table__row:hover .table__controls--secondary{z-index:1;opacity:1}.table .table__row.table__row--no-hover:hover{background-color:transparent}.table .table__row.active{background-color:#FFF}.table .table__row.active .table__dropdown .table__data,.table .table__row.active .table__dropdown .table__input{color:#333}.table .table__row.active:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.active:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.active:hover .table__dropdown .table__input{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input.editible{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input[disabled]{border-color:transparent;color:#333}.table .table__row.active .table__dropdown{max-height:3000px}.table .table__row.selected .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.selected:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.selected:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.selected:hover .table__dropdown .table__input{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.disabled>.table__data{color:#888;pointer-events:none}.table .table__row.disabled>.table__data>.table__input{color:#888;pointer-events:none}.table .table__row.disabled .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.disabled:hover .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.disabled:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.disabled:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.noEdit .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.noEdit:hover .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.noEdit:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.noEdit:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__header,.table .table__data{font-size:16px;display:table-cell;padding:13px 10px;box-sizing:border-box;height:100%;background:none;border:0;text-align:left;float:left}.table .table__header a,.table .table__data a{color:#dd4814}.table .table__header a:hover,.table .table__data a:hover{cursor:pointer}.table .table__head{display:table-head;width:100%;box-sizing:border-box}.table .table__head .table__row{border-bottom:1px solid #B2B2B2}.table .table__head .table__row:hover{background-color:transparent}.table .table__head .table__header{font-size:13px;background:none;color:#888}.table .table__head a,.table .table__head .table__header-link{color:#888}.table .table__head a:hover,.table .table__head .table__header-link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.table .table__head a.active,.table .table__head .table__header-link.active{color:#333;text-decoration:none}.table .table__head a.sort,.table .table__head .table__header-link.sort{border-bottom:1px solid inherit}.table .table__head .divide{width:1px;display:inline-block;background:#888;height:10px;margin:0 5px}.table .table__body{display:table-row-group}.table .table__footer{display:table-footer-group}.table .table__label{clear:both;display:block;margin-top:11px;color:#BCBCBC}.table .table__label a{color:#BCBCBC}.table .table__label a:hover{color:#dd4814}.table .table__label.active a{color:#dd4814}.table .table__controls{width:100%;text-align:right;opacity:0;z-index:-1000}.table .table__controls--secondary{opacity:0;z-index:-1000;width:auto;text-align:left}.table .table__tags .table__tag{display:inline-block;margin-right:5px}.table .table__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:transparent;border-color:transparent;background-position:-9999px -9999px}.table .table__input.invalid{border-color:transparent}.table .table__input.invalid:focus{border-color:#D90000}.table .table__input[disabled]{border-color:transparent;color:#333}.table .table__input:focus{background-color:#FFF;border-color:#D2D2D2}.table label{font-size:13px;color:#BCBCBC}.table input,.table select{margin:0 0 0 -14px}.table input[type="radio"]{margin-left:0}.table ul li{margin:0;margin-top:14px}.table ul li:first-of-type{margin-top:0}.table .table__dropdown{width:100%;max-height:0;overflow-y:hidden}.table .table__dropdown .table__dropdown-row{border-bottom:0;position:relative;max-height:0;transition:max-height 0.10s ease-out;overflow:hidden}.table .table__dropdown .table__dropdown-row.active{max-height:500px;transition:max-height 0.25s ease-in}.table .table__dropdown .table__dropdown-row:before{display:block;margin:0 auto;width:calc(100% - 20px);border-top:1px dotted #B2B2B2;position:absolute;height:1px;content:'';top:0;left:10px}.table .table__dropdown .table__dropdown-row.table__dropdown-row--head{border-bottom:0}.table .table__dropdown .table__dropdown-row.table__dropdown-row--head .table__header{color:#BCBCBC;font-size:13px}.table .table__dropdown .table__dropdown-row.no-border{border:0}.table .table__dropdown .table__dropdown-row.no-border:before{border:0}.table .table__dropdown .table__dropdown-row .table__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__dropdown--info{width:100%;max-height:0;background-color:transparent}.table .table__dropdown--info .table__dropdown-row--info{border-bottom:0;position:relative;max-height:0;transition:max-height 0.10s ease-out;overflow:hidden}.table .table__dropdown--info .table__dropdown-row--info.active{max-height:500px;transition:max-height 0.25s ease-in}.table .table__dropdown--info .table__dropdown-row--info .table__data{color:#BCBCBC}h1 span,h2 span,h3 span,h4 span,h5 span{color:#888;font-size:75%;padding-left:20px}h4{font-size:20px;font-weight:300}pre{border:0;background-color:#FFF;border-radius:2px}pre code{counter-reset:line-numbering}pre code .line{float:left}pre code .line::before{content:counter(line-numbering);counter-increment:line-numbering;padding-right:1em;width:1.5em;text-align:right;opacity:0.5;pointer-events:none;user-select:none}.yui3-node-add-widget{width:65.9292%;margin-right:2.21238%}@media screen and (max-width: 768px){.yui3-node-add-widget{width:100%;margin:0}}.yui3-node-add-widget .buttons{margin-top:30px}.yui3-node-add-widget .add-link img.icon{margin-right:6px}.yui3-overlay{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;background-color:#fff;-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,0.5);box-shadow:0 0 10px 0 rgba(0,0,0,0.5)}.yui3-overlay ul{padding:5px 0}.yui3-overlay li{float:none}.yui3-overlay li:last-child a{border-bottom:none}.yui3-overlay a{display:block;padding:6px 20px;color:#dd4814 !important;border-bottom:1px solid #e5e2e0}.yui3-overlay a:focus,.yui3-overlay a:hover{background-color:#f2f2f2}.yui3-overlay-hidden{display:none}.yui3-widget-mask{background-color:#000;opacity:0.3}.yui3-panel{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;background-color:#FFF;padding:50px 80px 50px 80px;-webkit-box-shadow:0 0 15px 0 #000;box-shadow:0 0 15px 0 #000}.yui3-panel .yui3-button{float:right}.yui3-panel .yui3-button.link-button{float:left;padding-left:0;padding-right:0;color:#dd4814;border:none;background:none;-webkit-box-shadow:none;box-shadow:none;font-size:13px}.yui3-widget-hd{margin-bottom:30px;font-size:24px}.yui3-widget-ft{margin-top:50px}.yui3-widget-button-wrapper{width:100%}.icon{margin-left:5px;width:16px;height:16px;display:inline-block;text-indent:999em;background-repeat:no-repeat;background-size:16px 16px;vertical-align:middle}.icon.info{background-image:url("../img/icons/info.png");background-image:url("../img/icons/info.svg"),none}.icon.edit{background-image:url("../img/icons/edit.png");background-image:url("../img/icons/edit.svg"),none}.icon.delete{background-image:url("../img/icons/delete.png");background-image:url("../img/icons/delete.svg"),none}.icon.remove{background-image:url("../img/icons/filter-remove.svg"),none}.icon.warning{background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}.icon.debug{background-image:url("../img/icons/debug.png");background-image:url("../img/icons/debug.svg"),none}.icon.success,.icon.tick{background-image:url("../img/icons/success.png");background-image:url("../img/icons/success.svg"),none}.icon.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none}.icon.partition{background-image:url("../img/icons/partition.svg")}.icon.add{background-image:url("../img/icons/add.svg")}.icon.tags{background-image:url("../img/icons/tags.svg")}.icon.mount{background-image:url("../img/icons/mount.svg")}.icon.unmount{background-image:url("../img/icons/unmount.svg")}.clear{clear:both}.hidden{display:none}.align-right{text-align:right}.align-center{text-align:center}.align-left{text-align:left}.right{float:right !important}.left{float:left !important}.border{border-top:1px dotted #B2B2B2}.border.bottom{border-bottom:1px dotted #B2B2B2}.border.solid{border-style:solid}.vertical-align{position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.margin-top{margin-top:20px}.margin-top--five{margin-top:5px}.margin-top--ten{margin-top:10px}.margin-right{margin-right:20px !important}.margin-right--ten{margin-right:10px !important}.margin-bottom{margin-bottom:20px}.margin-left{margin-left:20px !important}.margin-left--ten{margin-left:10px !important}.margin-left--thirty{margin-left:30px !important}.padding-top{padding-top:20px}.padding-top--ten{padding-top:10px !important}.padding-right{padding-right:20px}.padding-bottom{padding-bottom:20px !important}.padding-bottom--ten{padding-bottom:10px !important}.padding-left{padding-left:20px !important}.padding-left--30,.padding-left--thirty{padding-left:30px !important}.padding-left--35{padding-left:35px !important}.padding-left--45{padding-left:45px !important}.padding-left--50{padding-left:50px !important}.border-top{border-top:1px dotted #888}.add-machine__list .add-machine__details,.border-bottom{border-bottom:1px dotted #888}.no-margin{margin:0}.no-margin-top{margin-top:0 !important}.no-padding{padding:0}.no-padding-top{padding-top:0 !important}.no-padding-left{padding-left:0}.no-padding-bottom{padding-bottom:0 !important}.no-margin-bottom{margin-bottom:0}.width--auto{width:auto}.width--half{width:50%}.width--full{width:100%}.tooltip{position:relative}.tooltip::before{content:attr(data-tooltip);font-size:13px;font-weight:400;position:absolute;z-index:999;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);background:#333;color:#FFF;padding:10px;text-indent:0;opacity:0;transition:opacity 0.4s ease-out;border-radius:5px;box-shadow:0px 1px 3px 0 rgba(51,51,51,0.2);top:-9999em}.tooltip::after{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);content:'';width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;z-index:1000;transition:opacity 0.4s ease-out;border-top:5px solid #333;opacity:0;top:-9999em}.tooltip:hover::before{opacity:1 !important;top:-47px}.tooltip:hover::after{opacity:1 !important;top:-10px}.link-cta-ubuntu.tooltip:hover::before,.cta-ubuntu.tooltip:hover::before{top:-50px}.footer-wrapper{border-top:1px dotted #b2b2b2}.footer-wrapper footer.global{background-color:transparent;padding-top:0px;padding-right:20px;padding-left:20px;background-image:url("../img/logos/logo-ubuntu-orange.png");background-image:url("../img/logos/logo-ubuntu-orange.svg"),none;background-size:107px 25px;background-position:top 20px right 20px;background-repeat:no-repeat;max-width:1480px}.footer-wrapper footer.global p{font-size:0.875em}.footer-wrapper footer.global a{margin:0 5px;color:#dd4814}.footer-wrapper footer.global .version{font-weight:500;margin-right:5px}.footer-wrapper footer.global .copy{margin-top:10px}.footer-wrapper footer.global .legal{max-width:1440px}.wrapper{min-height:100%;height:auto !important;height:100%;margin:0 auto -112px;position:relative;background:rgba(255,255,255,0.6);padding-top:172px}.wrapper:after{content:'';position:absolute;display:block;top:0;right:0;bottom:0;left:0;background:url("../img/backgrounds/image-background-paper.png");height:100%;width:100%;z-index:-1}.inner-wrapper{max-width:1480px;padding:0px 20px;margin:0 auto;position:relative}.push,.footer-wrapper{height:112px}.row{background-color:transparent;border-bottom:1px dotted #CCC}.row:last-child{border-bottom:none}header.banner{overflow:visible;z-index:20;position:fixed;top:0}header.banner .logo{padding-left:15px}header.banner nav.nav-primary{border-bottom:none}header.banner .nav-primary.nav-right .logo-ubuntu{-moz-background-size:100px 30px;-webkit-background-size:100px 30px;-o-background-size:100px 30px;background-size:100px 30px;background-position:5px 9px;background-image:url("../img/logos/logo.png");background-image:url("../img/logos/logo.svg"),none}header.banner .nav-primary li:hover ul:after{display:none}@media screen and (max-width: 768px){header.banner .nav-primary ul{border-right:none}}header.banner #right-nav{float:right;margin-right:20px}@media screen and (max-width: 768px){header.banner #right-nav{margin-right:0}}header.banner #user-link{position:relative}@media screen and (max-width: 768px){header.banner #user-link{border-top:1px solid #d4d7d4;width:100%}}header.banner #user-link>a{padding-bottom:12px}@media screen and (max-width: 768px){header.banner #user-link>a{display:none}}header.banner #user-link .normal,header.banner #user-link .hover{margin-right:7px}@media screen and (max-width: 768px){header.banner #user-link .normal,header.banner #user-link .hover{display:none}}header.banner #user-link .hover{display:none}header.banner #user-link .nav{-webkit-border-radius:0px 0px 4px 4px;-moz-border-radius:0px 0px 4px 4px;border-radius:0px 0px 4px 4px;background-color:#FFF;border:none;display:none;position:absolute;right:0;top:48px;box-shadow:0px 2px 4px rgba(0,0,0,0.15)}@media screen and (min-width: 769px){header.banner #user-link .nav a.active{background:none;border:none}}header.banner #user-link .nav a:hover{background-color:transparent}@media screen and (max-width: 768px){header.banner #user-link .nav a:hover{background-color:#F8F8F8;color:#333}}@media screen and (max-width: 768px){header.banner #user-link .nav{background:none;position:relative;top:inherit;width:100%;box-shadow:none;float:left;padding:0}header.banner #user-link .nav li{border-bottom:1px solid #d4d7d4;width:100%;float:left}header.banner #user-link .nav li a{padding:10px 14px;width:100%}}@media screen and (max-width: 768px){header.banner #user-link:hover>a{background-color:transparent}}header.banner #user-link:hover .normal{display:none}header.banner #user-link:hover .hover{display:inline-block}@media screen and (max-width: 768px){header.banner #user-link:hover .hover{display:none}}header.banner #user-link:hover .nav{display:block}header.banner .nav-toggle{background-image:url("../img/icons/navigation-menu-plain.png");background-image:url("../img/icons/navigation-menu-plain.svg"),none;top:0}@media screen and (max-width: 768px){header.banner .nav-toggles .open{display:block}header.banner .nav-toggles .close{display:none}header.banner #canonlist:target ul{display:block}header.banner #canonlist:target+.nav-toggles .open{display:none}header.banner #canonlist:target+.nav-toggles .close{display:block}}.page-header{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);width:100%;float:left;position:fixed;z-index:10;top:48px}.page-header .page-header__nav{position:absolute;top:10px;z-index:1000}.page-header .page-header__nav a{font-weight:300}.page-header .page-header__title{font-size:2em;width:auto;padding:31px 0;margin:0;float:left;font-size:32px}.page-header .page-header__title [contenteditable="true"]{display:inline-block;padding:8px 10px;width:auto;box-sizing:border-box;border:1px solid transparent;margin:-10px 0 -10px -10px;border-radius:2px;color:#333;cursor:default;font-size:32px}.page-header .page-header__title [contenteditable="true"].editable:hover{border:1px solid #D2D2D2;cursor:text}.page-header .page-header__title [contenteditable="true"]:active,.page-header .page-header__title [contenteditable="true"]:focus{outline:none;background-color:#FFF;border:1px solid #B2B2B2}.page-header .page-header__title [contenteditable="true"].invalid,.page-header .page-header__title [contenteditable="true"].invalid:hover,.page-header .page-header__title [contenteditable="true"].invalid:active,.page-header .page-header__title [contenteditable="true"].invalid:focus{border-color:#d90000}.page-header .page-header__title [contenteditable="true"] br{display:none}.page-header .page-header__title .icon{vertical-align:3px;margin-right:10px}.page-header .page-header__title .page-header__title--identicator{font-size:0.6em;width:auto;display:inline-block;position:relative;top:0px;padding-left:20px;margin-left:10px}.page-header .page-header__title .page-header__title--identicator a{color:#888}.page-header .page-header__title .page-header__title--identicator a:hover{text-decoration:none;border-bottom:3px solid #888}.page-header .page-header__title .page-header__title--identicator a:focus,.page-header .page-header__title .page-header__title--identicator a:active{text-decoration:none}.page-header .page-header__title .page-header__title--identicator a.active{color:#333;border-bottom:3px solid #dd4814}.page-header .page-header__title .page-header__title--identicator a.active:hover{text-decoration:none;cursor:default}.page-header .page-header__title .page-header__title--identicator .divide{width:1px;display:inline-block;background:#D2D2D2;height:11px;padding:0;margin:0 5px}.page-header .page-header__title .page-header__title--identicator .page-header__title-loadmore{font-size:14px;margin-left:10px}.page-header .page-header__title .page-header__title--identicator .page-header__title-loadmore:hover{border:0;text-decoration:underline}.page-header .page-header__title .link-cta-ubuntu,.page-header .page-header__title .alt{font-size:16px;margin-left:20px;position:relative;vertical-align:middle;margin-top:-5px}.page-header .page-header__actions{float:right;padding:34px 0;margin-bottom:0}.page-header .page-header__actions .page-header__cta{float:right;position:relative;height:auto;max-height:36px}.page-header .page-header__actions .page-header__cta .cta-group{float:right}.page-header .page-header__actions .page-header__cta .page-header__cta-feedback{display:inline-block;position:relative;line-height:36px;text-align:right;color:#dd4814;margin-right:20px;cursor:pointer}.page-header .page-header__actions .page-header__cta .page-header__cta-feedback:hover{text-decoration:underline}.page-header .page-header__dropdown{float:left;width:100%;max-height:1000px;transition:max-height 0.3s ease-in;overflow:hidden;border-color:#888 !important}.page-header .page-header__dropdown.ng-hide{display:block !important;max-height:0;overflow:hidden;transition:max-height 0.3s ease-out;border-top:none}.page-header .page-header__dropdown .page-header__feedback{border-top:1px dotted #888;display:inline-block;width:100%;padding:20px 0}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;background-position:top 3px left 0px;background-repeat:no-repeat;padding:6px 0 5px 25px;width:auto;display:inline-block;position:relative}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.info,.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none;background-position:0px 9px}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.info.progress,.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.error.progress{width:100%}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.progress{padding-left:0}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.progress .loader{position:relative;top:1px}.title .title__indicator .title__link{color:#888;font-size:20px}.title .title__indicator .title__link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.title .title__indicator .title__link:focus,.title .title__indicator .title__link:active{text-decoration:none}.title .title__indicator .title__link.active{color:#333;border-bottom:1px #dd4814 solid}.title .title__indicator .divide{width:1px;display:inline-block;background:#D2D2D2;height:11px;padding:0;margin:0 5px}.accounts .logout .divide{padding:0 20px 0 30px;display:inline-block}.accounts .api li{position:relative}.accounts .api li input[type='text']{line-height:30px;padding-right:30px;width:100%}.accounts .api li input[type='text']::-webkit-input-placeholder{color:#333}.accounts .api li input[type='text']:-moz-placeholder{color:#333}.accounts .api li input[type='text']::-moz-placeholder{color:#333}.accounts .api li input[type='text']:-ms-input-placeholder{color:#333}.accounts .api li .delete-link{position:absolute;top:7px;right:7px}form.page-title-form{margin-bottom:30px}form.page-title-form input{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;border:1px solid transparent;background-color:transparent;font-size:36px;line-height:26px;color:#333;margin:6px 10px;padding:4px;height:auto;box-shadow:none}form.page-title-form input:hover{outline:none;background:#FFF;border-color:#D2D2D2;box-shadow:inset 0 1px 1px rgba(0,0,0,0.1)}form.page-title-form input:focus{border:1px solid #dd4814;background-color:#fff;outline:none}.small-icon{width:12px}.images-info{text-align:center;padding:10px}.images-warning{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 10px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}#loader{width:10px;margin:16px auto 0 auto}#importing{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 10px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;position:relative}#importing .spinner{position:absolute;left:15px}.importing-dot{opacity:0;-webkit-animation:dot 1.3s infinite;animation:dot 1.3s infinite}.selector{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;padding:20px;background:#FFF;margin:0 0 20px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;width:100%;float:left}.selector h2{font-size:1em;font-weight:300}.selector h2 img{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;background:url("../img/icons/help.svg") no-repeat;width:16px;height:16px;padding-left:16px;margin-left:5px}.selector .selector-available,.selector .selector-chosen{width:46%;float:left;margin:0;text-align:left}@media screen and (max-width: 768px){.selector .selector-available,.selector .selector-chosen{width:100%}}.selector .selector-available h2,.selector .selector-chosen h2{background:none;border:none}.selector .selector-available select,.selector .selector-chosen select{margin-bottom:10px}.selector ul.selector-chooser{width:8%;float:left;margin:20% 0 0}@media screen and (max-width: 768px){.selector ul.selector-chooser{width:100%;margin:0 0 10px;text-align:center}}.selector ul.selector-chooser li{width:100%;text-align:center}@media screen and (max-width: 768px){.selector ul.selector-chooser li{width:auto;display:inline-block;height:16px;width:16px;margin:0 20px}}.selector ul.selector-chooser li a{display:block;text-indent:999em;width:16px;height:16px;overflow:hidden;margin:0 auto}.selector ul.selector-chooser li a.selector-add{background-image:url("../img/icons/chevron_right.svg")}@media screen and (max-width: 768px){.selector ul.selector-chooser li a.selector-add{background-image:url("../img/icons/chevron_down.svg")}}.selector ul.selector-chooser li a.selector-remove{background-image:url("../img/icons/chevron_left.svg")}@media screen and (max-width: 768px){.selector ul.selector-chooser li a.selector-remove{background-image:url("../img/icons/chevron_up.svg")}}.selector .selector-filter img{display:none}.selector .selector-filter input{background-image:url("../img/search-orange.png");background-repeat:no-repeat;background-position:top 7px right 8px}.selector select#id_mac_addresses_to.filtered{height:269px !important}.nodes{position:relative}.nodes .search{position:absolute;right:0}.nodes .search input[type='submit']{position:absolute;top:8px;right:12px;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat;text-indent:-999em;display:block;width:21px;height:20px;overflow:hidden;outline:none;padding:0}.nodes .search input[type='submit']:hover{color:transparent;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat}@media screen and (max-width: 768px){.nodes .search{position:relative}}@media screen and (max-width: 768px){.nodes .actions select{width:100%;margin-bottom:20px}.nodes .actions input{position:absolute;right:0;top:0}}.powerstates{width:14px;height:15px;display:inline-block}.powerstates.power-on{background:transparent url("../img/icons/power-on.svg") left top no-repeat}.powerstates.power-off{background:transparent url("../img/icons/power-off.svg") left top no-repeat}.powerstates.power-unknown{background:none}.powerstates.power-error{background:transparent url("../img/icons/power-error.svg") left top no-repeat}.powerstates.power-check-ok{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:10px;height:10px;color:#33CC00}.powerstates.power-check-error{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:10px;height:10px;color:#FF0000}.node-actions .link-cta-ubuntu,.node-actions .cta-ubuntu{margin-bottom:10px;float:left;font-size:16px}.buttons{margin-top:30px}#network-interfaces li{list-style-type:none}#content-discovery-data{padding-top:20px;margin-top:20px;border-top:1px dotted #B2B2B2}#content-discovery-data .slider{height:0;overflow:hidden}.slider{padding-top:0 !important}.slider .content{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#FFF;border:1px solid #EEE;border-top:none;padding:20px}.slider .content pre{margin:0}.slider .tabs{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;padding:8px 20px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;border:1px solid #EEE}.add-machine__list{padding:13px 0 20px;border-top:1px dotted #888;margin-bottom:0}.add-machine__list .add-machine__details{background:transparent url("../img/icons/accordion-open.svg") top 12px right 10px no-repeat}.add-machine__list .add-machine__details>div{margin-bottom:0}.add-machine__list .add-machine__details .add-machine__details-form{display:none}.add-machine__list .add-machine__details.active{background-image:url("../img/icons/accordion-close.svg")}.add-machine__list .add-machine__details.active .add-machine__details-form{display:block}.power-status{display:inline-block;font-size:100%;padding-left:0}.power-status--power{display:inline-block;margin-left:20px;position:relative;font-size:100%}.power-status--power.checking{color:#2AB7EC;background:url("../img/status_in_progress.svg");padding-left:20px}.power-status--power.on{padding-left:20px;color:#38B44A;background:transparent url("../img/icons/power-on.svg") left top 4px no-repeat}.power-status--power.off{padding-left:20px;color:#D2D2D2;background:transparent url("../img/icons/power-off.svg") left top 4px no-repeat}.power-status--power.error{padding-left:20px;color:#DB3832;background:transparent url("../img/icons/power-error.svg") left top 4px no-repeat}.power-status--power .power-check{font-size:0.75em;color:#D2D2D2;display:inline-block;padding:0}.power-status--power .power-check .power-check__link{color:#888;text-decoration:none;margin-left:5px}.power-status--power .power-check .power-check__link:hover{border-bottom:0 !important;text-decoration:underline !important}.loading,.loader{background:url("../img/in_progress.png") no-repeat;background-size:16px 16px;width:16px;height:16px;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear;padding:0;display:inline-block}.details__used{color:#BCBCBC}.details .details__label{clear:both;display:block;margin-top:11px;color:#BCBCBC}.details .details__label a{color:#BCBCBC}.details .details__label a:hover{color:#dd4814}.details .details__label.active a{color:#dd4814}.details .details__controls{width:100%;text-align:right;opacity:0;z-index:-1000}.details .details__controls--secondary{opacity:0;z-index:-1000;width:auto;text-align:left}.details .table-row .details__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:transparent;border-color:transparent;background-position:-9999px -9999px}.details .table-row .details__text{line-height:37px}.details .table-row:hover .details__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.details .table-row:hover .details__controls{z-index:1;opacity:1}.details .table-row:hover .details__controls--secondary{z-index:1;opacity:1}.details .table-row.active:hover .details__input{background-color:transparent;border-color:transparent;pointer-events:none;background-position:-9999px -9999px}.details .table-row.active:hover .details__controls{opacity:0;z-index:-1000;pointer-events:none}.details .table-row.active:hover .details__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.details .table-row label{font-size:13px;color:#BCBCBC}.details .table-row input,.details .table-row select{margin:0 0 0 -14px}.details .table-row input[type="radio"]{margin-left:0}.details .details__dropdown .details__row{border-bottom:0;position:relative}.details .details__dropdown .details__row:before{display:block;margin:0 auto;width:calc(100% - 20px);border-top:1px dotted #B2B2B2;position:relative;height:1px;content:''}.details .details__dropdown .details__row.details__row--head{border-bottom:0}.details .details__dropdown .details__row.details__row--head .table-cell{color:#BCBCBC;font-size:13px}.details .details__dropdown .details__row.no-border{border:0}.details .details__dropdown .details__row.no-border:before{border:0}.details .details__dropdown--info .table-row{border-bottom:0}.details .details__dropdown--info .table-cell{color:#BCBCBC}
3=======
4.fake{display:none}body{font-size:14px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;clear:none;display:inline-block;float:none;margin-right:2.12766%;margin-bottom:20px;position:relative;width:100%}.twelve-col .one-col,.twelve-col .two-col,.twelve-col .three-col,.twelve-col .four-col,.twelve-col .five-col,.twelve-col .six-col,.twelve-col .seven-col,.twelve-col .eight-col,.twelve-col .nine-col,.twelve-col .ten-col,.twelve-col .eleven-col{width:100%}.last-col,.last{margin-right:0}.clearfix:after,.container:after{clear:both;content:"\0020";display:block;height:0;overflow:hidden;visibility:hidden}.clear{clear:both}.clearfix{display:block}@media only screen and (min-width: 768px){body{font-size:15px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{float:left}.one-col{width:6.38297%}.two-col{width:14.89361%}.three-col{width:23.40425%}.four-col{width:31.91489%}.five-col{width:40.42553%}.six-col{width:48.93617%}.seven-col{width:57.4468%}.eight-col{width:65.95744%}.nine-col{width:74.46808%}.ten-col{width:82.97872%}.eleven-col{width:91.48936%}.twelve-col{width:100%;margin-right:0}.twelve-col .one-col{width:6.3053%;margin-right:2.21238%}.twelve-col .two-col{width:14.823%;margin-right:2.21238%}.twelve-col .three-col{width:23.3407%;margin-right:2.21238%}.twelve-col .three-col{width:48.8938%;margin-right:2.21238%}.twelve-col .four-col{width:31.8584%;margin-right:2.21238%}.twelve-col .five-col{width:40.3761%;margin-right:2.21238%}.twelve-col .six-col{width:48.8938%;margin-right:2.21238%}.twelve-col .seven-col{width:57.4115%;margin-right:2.21238%}.twelve-col .eight-col{width:65.9292%;margin-right:2.21238%}.twelve-col .nine-col{width:74.4469%;margin-right:2.21238%}.twelve-col .ten-col{width:82.9646%;margin-right:2.21238%}.twelve-col .eleven-col{width:91.4823%;margin-right:2.21238%}.twelve-col .twelve-col{width:100%;margin-right:0}.eleven-col .one-col{width:6.89238%;margin-right:2.41837%}.eleven-col .two-col{width:16.20314%;margin-right:2.41837%}.eleven-col .three-col{width:25.5139%;margin-right:2.41837%}.eleven-col .four-col{width:34.82466%;margin-right:2.41837%}.eleven-col .five-col{width:44.13542%;margin-right:2.41837%}.eleven-col .six-col{width:53.44619%;margin-right:2.41837%}.eleven-col .seven-col{width:62.75695%;margin-right:2.41837%}.eleven-col .eight-col{width:72.06771%;margin-right:2.41837%}.eleven-col .nine-col{width:81.37847%;margin-right:2.41837%}.eleven-col .ten-col{width:90.68923%;margin-right:2.41837%}.eleven-col .eleven-col{width:100%;margin-right:0}.ten-col .one-col{width:7.6%;margin-right:2.66666%}.ten-col .two-col{width:17.86666%;margin-right:2.66666%}.ten-col .three-col{width:28.13333%;margin-right:2.66666%}.ten-col .four-col{width:38.4%;margin-right:2.66666%}.ten-col .five-col{width:48.66666%;margin-right:2.66666%}.ten-col .six-col{width:58.93333%;margin-right:2.66666%}.ten-col .seven-col{width:69.19999%;margin-right:2.66666%}.ten-col .eight-col{width:79.46666%;margin-right:2.66666%}.ten-col .nine-col{width:89.73333%;margin-right:2.66666%}.ten-col .ten-col{width:100%;margin-right:0}.nine-col .one-col{width:8.46953%;margin-right:2.97176%}.nine-col .two-col{width:19.91084%;margin-right:2.97176%}.nine-col .three-col{width:31.35215%;margin-right:2.97176%}.nine-col .four-col{width:42.79346%;margin-right:2.97176%}.nine-col .five-col{width:54.23476%;margin-right:2.97176%}.nine-col .six-col{width:65.67607%;margin-right:2.97176%}.nine-col .seven-col{width:77.11738%;margin-right:2.97176%}.nine-col .eight-col{width:88.55869%;margin-right:2.97176%}.nine-col .nine-col{width:100%;margin-right:0}.eight-col .one-col{width:9.56375%;margin-right:3.3557%}.eight-col .two-col{width:22.48322%;margin-right:3.3557%}.eight-col .three-col{width:35.40268%;margin-right:3.3557%}.eight-col .four-col{width:48.32214%;margin-right:3.3557%}.eight-col .five-col{width:61.24161%;margin-right:3.3557%}.eight-col .six-col{width:74.16107%;margin-right:3.3557%}.eight-col .seven-col{width:87.08053%;margin-right:3.3557%}.eight-col .eight-col{width:100%;margin-right:0}.seven-col .one-col{width:10.98265%;margin-right:3.85356%}.seven-col .two-col{width:25.81888%;margin-right:3.85356%}.seven-col .three-col{width:40.6551%;margin-right:3.85356%}.seven-col .four-col{width:55.49132%;margin-right:3.85356%}.seven-col .five-col{width:70.32755%;margin-right:3.85356%}.seven-col .six-col{width:85.16377%;margin-right:3.85356%}.seven-col .seven-col{width:100%;margin-right:0}.six-col .one-col{width:12.89592%;margin-right:4.52488%}.six-col .two-col{width:30.31674%;margin-right:4.52488%}.six-col .three-col{width:47.73755%;margin-right:4.52488%}.six-col .four-col{width:65.15837%;margin-right:4.52488%}.six-col .five-col{width:82.57918%;margin-right:4.52488%}.six-col .six-col{width:100%;margin-right:0}.five-col .one-col{width:15.61643%;margin-right:5.47945%}.five-col .two-col{width:36.71232%;margin-right:5.47945%}.five-col .three-col{width:57.80821%;margin-right:5.47945%}.five-col .four-col{width:78.9041%;margin-right:5.47945%}.five-col .five-col{width:100%;margin-right:0}.four-col .one-col{width:19.79166%;margin-right:6.94444%}.four-col .two-col{width:46.52777%;margin-right:6.94444%}.four-col .three-col{width:73.26388%;margin-right:6.94444%}.four-col .four-col{width:100%;margin-right:0}.three-col .one-col{width:27.01421%;margin-right:9.47867%}.three-col .two-col{width:63.5071%;margin-right:9.47867%}.three-col .three-col{width:100%;margin-right:0}.two-col .one-col{width:42.53731%;margin-right:14.92537%}.two-col .two-col{width:100%;margin-right:0}.one-col .one-col{width:100%;margin-right:0}.twelve-col .last-col{margin-right:0}.eleven-col .last-col{margin-right:0}.ten-col .last-col{margin-right:0}.nine-col .last-col{margin-right:0}.eight-col .last-col{margin-right:0}.seven-col .last-col{margin-right:0}.six-col .last-col{margin-right:0}.five-col .last-col{margin-right:0}.four-col .last-col{margin-right:0}.three-col .last-col{margin-right:0}.two-col .last-col{margin-right:0}.one-col .last-col{margin-right:0}.row,#context-footer{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin:0;padding:40px 40px 20px}.row:after{content:".";visibility:hidden;display:block;height:0;clear:both}.row-feature{background:none}.container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:20px 20px 0;width:100%}.append-one{margin-right:8.51063%}.append-two{margin-right:17.02127%}.append-three{margin-right:25.53191%}.append-four{margin-right:34.04255%}.append-five{margin-right:42.55319%}.append-six{margin-right:51.06383%}.append-seven{margin-right:59.57446%}.append-eight{margin-right:68.0851%}.append-nine{margin-right:76.59574%}.append-ten{margin-right:85.10638%}.append-eleven{margin-right:93.61702%}.prepend-one{margin-left:8.51063%}.prepend-two{margin-left:17.02127%}.prepend-three{margin-left:25.53191%}.prepend-four{margin-left:34.04255%}.prepend-five{margin-left:42.55319%}.prepend-six{margin-left:51.06383%}.prepend-seven{margin-left:59.57446%}.prepend-eight{margin-left:68.0851%}.prepend-nine{margin-left:76.59574%}.prepend-ten{margin-left:85.10638%}.prepend-eleven{margin-left:93.61702%}.push-one{margin-left:57px}.pull-one,.pull-two,.pull-three,.pull-four,.pull-five,.pull-six,.pull-seven,.pull-eight,.pull-nine,.pull-ten,.pull-eleven{float:left;position:relative}.pull-one{margin-left:-6.38297%}.pull-two{margin-left:-17.02127%}.pull-three{margin-left:-25.53191%}.pull-four{margin-left:-34.04255%}.pull-five{margin-left:-34.04255%}.pull-six{margin-left:-51.06383%}.pull-seven{margin-left:-59.57446%}.pull-eight{margin-left:-68.0851%}.pull-nine{margin-left:-76.59574%}.pull-ten{margin-left:-85.10638%}.pull-eleven{margin-left:-93.61702%}.push-1,.push-two,.push-three,.push-four,.push-five,.push-six,.push-seven,.push-eight,.push-nine,.push-ten,.push-eleven{float:left;position:relative}.push-one{margin:0 -8.51063% 0 8.51063%}.push-two{margin:0 -19.14893% 0 19.14893%}.push-three{margin:0 -27.65957% 0 27.65957%}.push-four{margin:0 -36.17021% 0 36.17021%}.push-five{margin:0 -36.17021% 0 36.17021%}.push-six{margin:0 -53.19149% 0 53.19149%}.push-seven{margin:0 -61.70212% 0 61.70212%}.push-eight{margin:0 -70.21276% 0 70.21276%}.push-nine{margin:0 -78.7234% 0 78.7234%}.push-ten{margin:0 -87.23404% 0 87.23404%}.push-eleven{margin:0 -95.74468% 0 95.74468%}}@media only screen and (min-width: 984px){body{font-size:16px}.one-col,.two-col,.three-col,.four-col,.five-col,.six-col,.seven-col,.eight-col,.nine-col,.ten-col,.eleven-col,.twelve-col,.col{float:left}.one-col{width:6.38297%}.two-col{width:14.89361%}.three-col{width:23.40425%}.four-col{width:31.91489%}.five-col{width:40.42553%}.six-col{width:48.93617%}.seven-col{width:57.4468%}.eight-col{width:65.95744%}.nine-col{width:74.46808%}.ten-col{width:82.97872%}.eleven-col{width:91.48936%}.three-col:nth-child(1):nth-last-child(4),.three-col:nth-child(2):nth-last-child(3),.three-col:nth-child(3):nth-last-child(2),.three-col:nth-child(4):nth-last-child(1){width:23.36%}.three-col:nth-of-type(2){margin-right:2.21238%}.twelve-col{width:100%;margin-right:0}.twelve-col .one-col{width:6.3053%;margin-right:2.21238%}.twelve-col .two-col{width:14.823%;margin-right:2.21238%}.twelve-col .three-col{width:23.3407%;margin-right:2.21238%}.twelve-col .three-col:nth-child(1):nth-last-child(4),.twelve-col .three-col:nth-child(2):nth-last-child(3),.twelve-col .three-col:nth-child(3):nth-last-child(2),.twelve-col .three-col:nth-child(4):nth-last-child(1){width:23.3407%}.twelve-col .three-col:nth-of-type(2){margin-right:2.21238%}.twelve-col .four-col{width:31.8584%;margin-right:2.21238%}.twelve-col .five-col{width:40.3761%;margin-right:2.21238%}.twelve-col .six-col{width:48.8938%;margin-right:2.21238%}.twelve-col .seven-col{width:57.4115%;margin-right:2.21238%}.twelve-col .eight-col{width:65.9292%;margin-right:2.21238%}.twelve-col .nine-col{width:74.4469%;margin-right:2.21238%}.twelve-col .ten-col{width:82.9646%;margin-right:2.21238%}.twelve-col .eleven-col{width:91.4823%;margin-right:2.21238%}.twelve-col .twelve-col{width:100%;margin-right:0}.eleven-col .one-col{width:6.89238%;margin-right:2.41837%}.eleven-col .two-col{width:16.20314%;margin-right:2.41837%}.eleven-col .three-col{width:25.5139%;margin-right:2.41837%}.eleven-col .four-col{width:34.82466%;margin-right:2.41837%}.eleven-col .five-col{width:44.13542%;margin-right:2.41837%}.eleven-col .six-col{width:53.44619%;margin-right:2.41837%}.eleven-col .seven-col{width:62.75695%;margin-right:2.41837%}.eleven-col .eight-col{width:72.06771%;margin-right:2.41837%}.eleven-col .nine-col{width:81.37847%;margin-right:2.41837%}.eleven-col .ten-col{width:90.68923%;margin-right:2.41837%}.eleven-col .eleven-col{width:100%;margin-right:0}.ten-col .one-col{width:7.6%;margin-right:2.66666%}.ten-col .two-col{width:17.86666%;margin-right:2.66666%}.ten-col .three-col{width:28.13333%;margin-right:2.66666%}.ten-col .four-col{width:38.4%;margin-right:2.66666%}.ten-col .five-col{width:48.66666%;margin-right:2.66666%}.ten-col .six-col{width:58.93333%;margin-right:2.66666%}.ten-col .seven-col{width:69.19999%;margin-right:2.66666%}.ten-col .eight-col{width:79.46666%;margin-right:2.66666%}.ten-col .nine-col{width:89.73333%;margin-right:2.66666%}.ten-col .ten-col{width:100%;margin-right:0}.nine-col .one-col{width:8.46953%;margin-right:2.97176%}.nine-col .two-col{width:19.91084%;margin-right:2.97176%}.nine-col .three-col{width:31.35215%;margin-right:2.97176%}.nine-col .four-col{width:42.79346%;margin-right:2.97176%}.nine-col .five-col{width:54.23476%;margin-right:2.97176%}.nine-col .six-col{width:65.67607%;margin-right:2.97176%}.nine-col .seven-col{width:77.11738%;margin-right:2.97176%}.nine-col .eight-col{width:88.55869%;margin-right:2.97176%}.nine-col .nine-col{width:100%;margin-right:0}.eight-col .one-col{width:9.56375%;margin-right:3.3557%}.eight-col .two-col{width:22.48322%;margin-right:3.3557%}.eight-col .three-col{width:35.40268%;margin-right:3.3557%}.eight-col .four-col{width:48.32214%;margin-right:3.3557%}.eight-col .five-col{width:61.24161%;margin-right:3.3557%}.eight-col .six-col{width:74.16107%;margin-right:3.3557%}.eight-col .seven-col{width:87.08053%;margin-right:3.3557%}.eight-col .eight-col{width:100%;margin-right:0}.seven-col .one-col{width:10.98265%;margin-right:3.85356%}.seven-col .two-col{width:25.81888%;margin-right:3.85356%}.seven-col .three-col{width:40.6551%;margin-right:3.85356%}.seven-col .four-col{width:55.49132%;margin-right:3.85356%}.seven-col .five-col{width:70.32755%;margin-right:3.85356%}.seven-col .six-col{width:85.16377%;margin-right:3.85356%}.seven-col .seven-col{width:100%;margin-right:0}.six-col .one-col{width:12.89592%;margin-right:4.52488%}.six-col .two-col{width:30.31674%;margin-right:4.52488%}.six-col .three-col{width:47.73755%;margin-right:4.52488%}.six-col .four-col{width:65.15837%;margin-right:4.52488%}.six-col .five-col{width:82.57918%;margin-right:4.52488%}.six-col .six-col{width:100%;margin-right:0}.five-col .one-col{width:15.61643%;margin-right:5.47945%}.five-col .two-col{width:36.71232%;margin-right:5.47945%}.five-col .three-col{width:57.80821%;margin-right:5.47945%}.five-col .four-col{width:78.9041%;margin-right:5.47945%}.five-col .five-col{width:100%;margin-right:0}.four-col .one-col{width:19.79166%;margin-right:6.94444%}.four-col .two-col{width:46.52777%;margin-right:6.94444%}.four-col .three-col{width:73.26388%;margin-right:6.94444%}.four-col .four-col{width:100%;margin-right:0}.three-col .one-col{width:27.01421%;margin-right:9.47867%}.three-col .two-col{width:63.5071%;margin-right:9.47867%}.three-col .three-col{width:100%;margin-right:0}.two-col .one-col{width:42.53731%;margin-right:14.92537%}.two-col .two-col{width:100%;margin-right:0}.one-col .one-col{width:100%;margin-right:0}.twelve-col .last-col{margin-right:0}.eleven-col .last-col{margin-right:0}.ten-col .last-col{margin-right:0}.nine-col .last-col{margin-right:0}.eight-col .last-col{margin-right:0}.seven-col .last-col{margin-right:0}.six-col .last-col{margin-right:0}.five-col .last-col{margin-right:0}.four-col .last-col{margin-right:0}.three-col .last-col{margin-right:0}.two-col .last-col{margin-right:0}.one-col .last-col{margin-right:0}.row,#context-footer{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin:0;padding:40px 40px 20px}.row:after{content:".";visibility:hidden;display:block;height:0;clear:both}.row-feature{background:none}.container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:20px 20px 0;width:100%}.append-one{margin-right:8.51063%}.append-two{margin-right:17.02127%}.append-three{margin-right:25.53191%}.append-four{margin-right:34.04255%}.append-five{margin-right:42.55319%}.append-six{margin-right:51.06383%}.append-seven{margin-right:59.57446%}.append-eight{margin-right:68.0851%}.append-nine{margin-right:76.59574%}.append-ten{margin-right:85.10638%}.append-eleven{margin-right:93.61702%}.prepend-one{margin-left:8.51063%}.prepend-two{margin-left:17.02127%}.prepend-three{margin-left:25.53191%}.prepend-four{margin-left:34.04255%}.prepend-five{margin-left:42.55319%}.prepend-six{margin-left:51.06383%}.prepend-seven{margin-left:59.57446%}.prepend-eight{margin-left:68.0851%}.prepend-nine{margin-left:76.59574%}.prepend-ten{margin-left:85.10638%}.prepend-eleven{margin-left:93.61702%}.push-one{margin-left:57px}.pull-one,.pull-two,.pull-three,.pull-four,.pull-five,.pull-six,.pull-seven,.pull-eight,.pull-nine,.pull-ten,.pull-eleven{float:left;position:relative}.pull-one{margin-left:-6.38297%}.pull-two{margin-left:-17.02127%}.pull-three{margin-left:-25.53191%}.pull-four{margin-left:-34.04255%}.pull-five{margin-left:-34.04255%}.pull-six{margin-left:-51.06383%}.pull-seven{margin-left:-59.57446%}.pull-eight{margin-left:-68.0851%}.pull-nine{margin-left:-76.59574%}.pull-ten{margin-left:-85.10638%}.pull-eleven{margin-left:-93.61702%}.push-1,.push-two,.push-three,.push-four,.push-five,.push-six,.push-seven,.push-eight,.push-nine,.push-ten,.push-eleven{float:left;position:relative}.push-one{margin:0 -8.51063% 0 8.51063%}.push-two{margin:0 -19.14893% 0 19.14893%}.push-three{margin:0 -27.65957% 0 27.65957%}.push-four{margin:0 -36.17021% 0 36.17021%}.push-five{margin:0 -36.17021% 0 36.17021%}.push-six{margin:0 -53.19149% 0 53.19149%}.push-seven{margin:0 -61.70212% 0 61.70212%}.push-eight{margin:0 -70.21276% 0 70.21276%}.push-nine{margin:0 -78.7234% 0 78.7234%}.push-ten{margin:0 -87.23404% 0 87.23404%}.push-eleven{margin:0 -95.74468% 0 95.74468%}}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,ol,ul,li,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:300;src:url("../fonts/ubuntu-l-webfont.eot");src:url("../fonts/ubuntu-l-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-l-webfont.woff") format("woff"),url("../fonts/ubuntu-l-webfont.ttf") format("truetype"),url("../fonts/ubuntu-l-webfont.svg#ubuntulight") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:400;src:local("Ubuntu");src:url("../fonts/ubuntu-r-webfont.eot");src:url("../fonts/ubuntu-r-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-r-webfont.woff") format("woff"),url("../fonts/ubuntu-r-webfont.ttf") format("truetype"),url("../fonts/ubuntu-r-webfont.svg#ubunturegular") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:500;src:url("../fonts/ubuntu-m-webfont.eot");src:local("Ubuntu Medium"),local("Ubuntu-Medium"),url("../fonts/ubuntu-m-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-m-webfont.woff") format("woff"),url("../fonts/ubuntu-m-webfont.ttf") format("truetype"),url("../fonts/ubuntu-m-webfont.svg#ubuntumedium") format("svg")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:700;src:url("../fonts/ubuntu-b-webfont.eot");src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url("../fonts/ubuntu-b-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-b-webfont.woff") format("woff"),url("../fonts/ubuntu-b-webfont.ttf") format("truetype"),url("../fonts/ubuntu-b-webfont.svg#ubuntubold") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:300;src:url("../fonts/ubuntu-li-webfont.eot");src:local("Ubuntu Light Italic"),local("Ubuntu-LightItalic"),url("../fonts/ubuntu-li-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-li-webfont.woff") format("woff"),url("../fonts/ubuntu-li-webfont.ttf") format("truetype"),url("../fonts/ubuntu-li-webfont.svg#ubuntulight_italic") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:400;src:local("Ubuntu Italic"),local("Ubuntu-Italic"),url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/GZMdC02DTXXx8AdUvU2etw.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:500;src:url("../fonts/ubuntu-mi-webfont.eot");src:local("Ubuntu Medium Italic"),local("Ubuntu-MediumItalic"),url("../fonts/ubuntu-mi-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/ubuntu-mi-webfont.woff") format("woff"),url("../fonts/ubuntu-mi-webfont.ttf") format("truetype"),url("../fonts/ubuntu-mi-webfont.svg#ubuntumedium_italic") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:700;src:local("Ubuntu Bold Italic"),local("Ubuntu-BoldItalic"),url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/pqisLQoeO9YTDCNnlQ9bfz8E0i7KZn-EPnyo3HZu7kw.woff") format("woff")}html{font-size:100%}body{color:#333;font-family:Ubuntu, Arial, "libra sans", sans-serif;font-weight:300}blockquote,q{quotes:none}blockquote{margin:28px 20px}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}legend{border:0;*margin-left:-7px}figure{margin:0}abbr,acronym{cursor:help}a:focus{outline:thin dotted}a:hover,a:active{outline:0}a:link,a:visited{color:#dd4814;text-decoration:none}a:hover,a:active,a:focus{text-decoration:underline}a.link-arrow:after{content:"\0000a0›"}nav ul li h2 a:after{content:"\0000a0›"}nav ul li a:after,.carousel ul li a:after,ul li p a:after{content:""}ol,ul{margin-left:20px;margin-bottom:20px}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}nav ul,nav ol{list-style:none;list-style-image:none}svg:not(:root){overflow:hidden}img{border:0;height:auto;max-width:100%}img.left{margin-right:20px}img.right{margin-left:20px}.middle img{vertical-align:middle;margin-top:4em}h1,h2,h3,h4,h5,h6{font-weight:300;line-height:1.3}h1{font-size:1.625em;margin-bottom:.5em}h2{font-size:1.438em;margin-bottom:.5em}h3{font-size:1.219em;margin-bottom:.522em}h4{font-size:1.25em;font-weight:400;margin-bottom:.615em}h5{font-size:1em;font-weight:700;margin-bottom:1em}h6{font-size:.723em;font-weight:400;margin-bottom:1em;letter-spacing:.1em;text-transform:uppercase}p,li{font-size:1em;line-height:1.5;margin:0;margin-bottom:.75em;padding:0}h2 span,h1 span{display:block}p+h2,ul+h2,ol+h2,pre+h2{margin-top:0.5625em}header nav a:link{font-weight:normal}p+h3,ul+h3,ol+h3,pre+h3{margin-top:0.78261em}p+h4,ul+h4,ol+h4,pre+h4{margin-top:1.39286em}ol+h2,p+h2,pre+h2,ul+h2{margin-top:.563em}ol+h3,p+h3,pre+h3,ul+h3{margin-top:.783em}ol+h4,p+h4,pre+h4,ul+h4{margin-top:1.219em}li{margin-bottom:.4em}li:last-of-type{margin-bottom:0}ins{background:#fffbeb;text-decoration:none}small,.smaller{font-size:13px}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{vertical-align:text-top}sub{vertical-align:text-bottom}dfn{font-style:italic}mark{background:#ff0;color:#000}code,pre{font-family:"Ubuntu Mono", "Consolas", "Monaco", "Lucida Console", "Courier New", Courier, monospace}pre{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fdf6f2;padding:0.6em 1em;white-space:pre-wrap;word-wrap:break-word}blockquote{margin:0}blockquote>p{font-size:0.92857em;margin-bottom:0.92308em;font-weight:100;margin:0 0 0.4em 0}blockquote small{font-size:.813em;line-height:1.4}button,input,select,textarea{font-family:Ubuntu,Arial,"libra sans",sans-serif;margin:0;vertical-align:baseline;*vertical-align:middle}select{font-size:1em;font-weight:300}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-box-sizing:content-box;-webkit-appearance:none;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-weight:300;outline:none;padding:0.69565em 0.86957em}input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}form fieldset{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-repeat:no-repeat;background-color:#EFEEEC;background-position:-15px -15px;border:0;margin-bottom:8px;padding:15px 20px}form fieldset h3{border-bottom:1px dotted #dfdcd9;margin-bottom:9px;padding-bottom:10px}form fieldset li:first-child{margin-top:0}form input[type="text"],form input[type="email"],form input[type="tel"],form textarea{-webkit-appearance:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#fff;border:1px solid #999;display:block;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;padding:0.69565em 0.86957em}form input:focus,form textarea:focus{border:1px solid #dd4814}form textarea[readonly='readonly']{color:#999}form input[type="checkbox"],form input[type="radio"]{margin:0;width:auto}form input[type="checkbox"]+label,form input[type="radio"]+label{display:inline;margin-left:5px;vertical-align:middle;width:auto}form input[type="submit"]{font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background-color:#dd4814;background-image:-moz-linear-gradient(#f26120, #dd4814);background-image:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#f26120), to(#dd4814));background-image:-webkit-linear-gradient(#f26120, #dd4814);background-image:-o-linear-gradient(#f26120, #dd4814);-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border:0;color:#fff;display:block;padding:10px 14px;text-shadow:none;width:auto;margin-bottom:0}form input[type="submit"]:hover{background:#dd4814}form label{cursor:pointer;display:block;margin-bottom:4px}form label span{color:#df382c}form ul{margin-left:0}form li{list-style:none outside none;margin-top:14px}form button[type="submit"]{border:0;display:inline-block;font-family:Ubuntu, Arial, "libra sans", sans-serif;text-decoration:none;font-weight:300}form input[type="reset"]{display:none}table{border-collapse:collapse;border-spacing:0;overflow-x:scroll;margin-bottom:20px;margin:0 0 2.85714em 0;width:100%}table th,table td{padding:15px 10px;background:#f0edea;border:1px dotted #888888}table td{text-align:center;vertical-align:middle}table thead th{border-collapse:separate;border-spacing:0 10px;background:#fee3d2;color:#333333;font-weight:normal}table tbody th{text-align:left;font-weight:normal;font-weight:300}table th[scope="col"]{text-align:center}table thead th:first-of-type{text-align:left}@media only screen and (max-width: 768px){table{display:block}}@media only screen and (min-width: 984px){form fieldset{padding:15px 20px}img{max-width:none}}.audience-consumer{color:#333333}.audience-consumer .row-box,.audience-consumer .main-content{color:#333333}.audience-consumer .inner-wrapper{background:#fff}.audience-consumer .quote-right-top{padding:60px 60px 0 40px;background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-br-287x287.png") no-repeat;height:287px;position:absolute;right:-40px;text-align:left;top:-90px;width:31.91489%}.audience-consumer .quote-right-top p{font-size:1.14286em;margin-bottom:0.75em;margin:0.769em;padding-bottom:0;color:#fff}.audience-consumer .quote-right-top p cite{font-size:0.85714em;margin-bottom:1em;color:#fff;padding:0}.audience-consumer .quote-right-top p a,.audience-consumer .quote-right p a{color:#fff}.audience-consumer .quote-right{font-size:1.28571em;margin-bottom:0.66667em;color:#fff;padding:50px 100px 0 50px;text-indent:-6px;background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-bl-287x287.png") no-repeat;min-height:287px;position:absolute;right:-20px;text-align:left;top:-90px;width:21.2006% em}.audience-consumer .quote-right cite{font-style:normal;margin-left:6px}.audience-consumer .quote-right-alt{background:url(/sites/ubuntu/latest/u/img/patterns/quote-white-br-360x360.png) 0 -100px no-repeat;color:#dd4814;padding:50px 50px 0 50px}.audience-consumer .quote-right-right{background:url("/sites/ubuntu/latest/u/img/patterns/quote-orange-br-287x287.png") no-repeat}.audience-enterprise h1{margin:0 0 18px 0}.audience-enterprise td{background:#fff}.audience-enterprise th,.audience-enterprise td{padding:6px 10px;background:#fff}.audience-enterprise th[scope="col"]{background:#E2D4DC;color:#772953}.audience-enterprise tbody th[rowspan]{background:#F7F2F6}.audience-enterprise tfoot th[rowspan]{background:#dfdcd9}.audience-enterprise tfoot td,.audience-enterprise tfoot th{font-weight:normal;background:#dfdcd9}.audience-enterprise .inner-wrapper{background:#2c001e;color:#fff}.audience-enterprise .row-box{background:#fff;color:#333333}.row-enterprise{background:#772953;color:#fff;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.row-enterprise .box,.row-enterprise div{background:#772953;color:#fff}.row-enterprise a{color:#fff}.enterprise-dot-pattern{background:url("/sites/ubuntu/latest/u/img/patterns/enterprise-dot-pattern.png")}.developer-dot-pattern{background:url("/sites/ubuntu/latest/u/img/patterns/developer-dot-pattern.png")}.wrapper,header.banner .nav-primary,nav div.footer-a div,.inline-lists ul,.legal{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:auto}.inner-wrapper{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;clear:both;display:block;float:left;width:100%;margin:0;padding-bottom:20px;position:relative;z-index:1}@media only screen and (min-width: 768px){.med-six-col .three-col{width:48%}.med-six-col .three-col:nth-of-type(2n){margin-right:0}}@media only screen and (min-width: 769px){.inner-wrapper{border-radius:4px;padding-bottom:20px}}@media only screen and (min-width: 984px){.wrapper{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;margin:0 auto;position:relative;text-align:left;width:984px}.inner-wrapper{-moz-box-shadow:0 0 3px #c9c9c9;-webkit-box-shadow:0 0 3px #c9c9c9;box-shadow:0 0 3px #c9c9c9;margin:10px 0 30px}.three-col,.med-six-col .three-col{width:23.30%}.three-col.last-col:nth-of-type(2n){margin-right:0}.med-six-col .three-col:nth-of-type(2n){margin-right:20px}.med-six-col .three-col.last-col{margin-right:0}}.left{float:left}.right{float:right}.caps{text-transform:uppercase}img{border:0 none;height:auto;max-width:100%}img.left{margin-right:0}img.touch-border{margin-bottom:-3px}.accessibility-aid,.off-left{position:absolute;left:-999em}a.external{-moz-background-size:0.7em 0.7em;-webkit-background-size:0.7em 0.7em;-o-background-size:0.7em 0.7em;background-size:0.7em 0.7em;padding-right:.9em;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/external-link-orange.svg");background-position:right 1px;background-repeat:no-repeat}.opera-mini a.external,.no-svg a.external{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/external-link-orange.png")}.text-center,.align-center{text-align:center}.no-margin{margin:0}.no-margin-bottom{margin-bottom:0}.no-padding-bottom{padding-bottom:0}.pull-left-20{margin-left:-20px}.pull-right-20{margin-right:-20px}.pull-left-40{margin-left:-40px}.pull-right-40{margin-right:-41px}.no-border{border:0}.link-top{font-size:1em;margin-bottom:0.85714em;clear:both;margin-bottom:40px;margin-top:-40px}.link-top a{background:#fff;margin-right:10px;margin-top:-17px;padding:5px;float:right}.pull-bottom-right{position:absolute;right:0;bottom:0;left:auto}.box .pull-bottom-right{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0}.pull-bottom-left{margin-left:-20px;margin-bottom:-21px}.pull-top-right{margin-left:-20px;margin-top:-21px}div.box-image-centered span img.priority-0,div.row-image-centered span img.priority-0,div.row.row-image-centered span img.priority-0,img.priority-0{position:absolute;left:-999em}.priority-0,.not-for-small{position:absolute;left:-999em}.video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%}.video-container+h3,.video-container+.video-title{margin-top:20px}@media only screen and (max-width: 768px){.pull-right-40{margin-right:-30px}.pull-bottom-right,.pull-bottom-left{position:static}img.pull-bottom-left{margin-bottom:0;margin-left:0}}@media only screen and (min-width: 768px){div.box-image-centered span img.priority-0,div.row-image-centered span img.priority-0,div.row.row-image-centered span img.priority-0,img.priority-0{position:relative;left:auto}.priority-0,.not-for-small{position:relative;left:auto}.for-mobile,.for-small{position:absolute;left:-999em}.pull-right{float:right;margin-right:-30px}img.pull-left{margin-left:-30px}img.touch-border{float:left;margin-bottom:-30px}}@media only screen and (min-width: 769px){img.left{margin-right:20px}}@media only screen and (min-width: 984px){img.touch-border{float:left;margin-bottom:-40px}img.pull-left{margin-left:-40px}.pull-right{float:right;margin-right:-40px}.for-tablet,.for-medium{display:none}.no-border{border:0}}.caps-centered,.muted-heading{font-size:.875em;margin-bottom:20px;text-align:center;text-transform:uppercase}p.intro{font-size:1.14286em;margin-bottom:0.75em;line-height:1.4}.row div p:last-child,.row div ul:last-child{margin-bottom:0}.four-col p:last-child{margin-bottom:0}.note{color:#888888;font-size:.813em}@media only screen and (min-width: 768px){p.intro{font-size:1.13333em}}@media only screen and (min-width: 984px){h1{font-size:2.8125em}h2{font-size:2em;margin-bottom:.375em}h3{font-size:1.438em;margin-bottom:.522em}h4{font-size:1em;margin-bottom:.75em}h5{font-size:1em}p,li,code,pre{font-size:16px;line-height:1.5;margin-bottom:.75em}p.intro{font-size:1.25em}}header.banner{border-top:0;min-width:100%;width:auto;background:#dd4814;display:block;position:relative;z-index:2}header.banner .nav-primary{border:0;margin:0 auto;overflow:hidden}header.banner .nav-primary ul{border-right:1px solid #ed6637;float:left;margin:0;position:relative}header.banner .nav-primary ul li{border-left:1px solid #c64012;float:left;list-style-image:none;margin:0;text-indent:0;vertical-align:bottom}header.banner .nav-primary ul li:last-child{border-right:1px solid #c64012}header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited{font-size:14px;border-left:1px solid #ec5b29;color:#fff;display:block;margin-bottom:0;padding:14px 14px 13px;position:relative;text-align:center;text-decoration:none;-webkit-font-smoothing:subpixel-antialiased;-moz-font-smoothing:subpixel-antialiased;-o-font-smoothing:subpixel-antialiased;font-smoothing:subpixel-antialiased}header.banner .nav-primary ul a.active{background:#B83A10;border-left:1px solid #ec5b29}header.banner .nav-primary ul li a:hover{background:#e1662f;border-top:0;-moz-box-shadow:inset 0 2px 2px -2px #777;-webkit-box-shadow:inset 0 2px 2px -2px #777;box-shadow:inset 0 2px 2px -2px #777}#main-navigation-link{display:none}header.banner .nav-toggle{position:absolute;right:0;display:block;width:48px;height:48px;text-indent:-99999px;background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg);-moz-background-size:25px auto;-webkit-background-size:25px auto;-o-background-size:25px auto;background-size:25px auto;background-repeat:no-repeat;background-position:center center;cursor:pointer}header.banner .no-script{display:none}.opera-mini header.banner .nav-toggle,.no-svg header.banner .nav-toggle{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.png)}header.banner nav ul{background-color:#f0f0f0;display:none;float:left}header.banner .nav-primary.active{-moz-box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);-webkit-box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);box-shadow:0 1px 2px 1px rgba(120,120,120,0.2);padding:0;border-bottom:1px solid #d4d7d4}header nav ul.active{display:block}header.banner .nav-primary ul li,header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:active{display:block;padding:0;margin:0;border:none}header.banner .nav-primary ul li a:hover{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background-color:#d0d0d0}header.banner .nav-primary ul li a.active{background-color:#ddd}header.banner .nav-primary ul li{border-bottom:1px solid #F2F2F4;font-size:16px}header.banner .nav-primary ul li:last-child{border:0}header.banner nav.nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{padding:14px 14px 13px;text-align:left}header.banner nav.nav-primary ul.active li ul{display:none}#menu.active:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-arrow.svg);background-repeat:no-repeat;background-position:50% 26px;content:"";display:block;height:23px;margin-left:0;padding-bottom:17px;position:relative;top:-3px;width:48px;z-index:999}html.no-svg #menu.active:after,.opera-mini #menu.active:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-arrow.png)}.nav-secondary{border-bottom:1px solid #dfdcd9;margin-bottom:0}.nav-secondary ul{float:left;margin-bottom:10px;margin-left:2px}.nav-secondary ul li{float:left;margin-top:16px;font-size:14px;margin-right:15px}.nav-secondary ul li a:link,.nav-secondary ul li a:visited{color:#333;font-size:14px;float:left}.nav-secondary ul li a:hover,.nav-secondary ul li a:active{color:#dd4814;text-decoration:none}.nav-secondary ul li,.nav-secondary ul li.active a:link,.nav-secondary ul li.active a:visited{color:#dd4814;text-decoration:none}.nav-secondary ul.breadcrumb{margin-left:20px}.nav-secondary ul.breadcrumb li,.nav-secondary ul.breadcrumb li a:link,.nav-secondary ul.breadcrumb li a:visited{color:#888888;margin-right:8px}.nav-secondary ul.breadcrumb li.active a:link,.nav-secondary ul.breadcrumb li.active a:visited{color:#dd4814}header.banner h2{font-size:1.78571em;margin-bottom:0.48em;display:block;left:4px;margin-bottom:0;position:relative;text-transform:lowercase;top:14px}header.banner h2 a:link,header.banner h2 a:visited,header.banner a{color:#fff;float:left;text-decoration:none}header.banner .logo{border-left:0;float:left;height:48px;overflow:hidden}header.banner .logo-ubuntu{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/ubuntu-logo.png") no-repeat scroll 0 10px transparent;font-size:18px;margin-bottom:0;position:relative;text-transform:lowercase;float:left;margin:0;display:inline-block;height:32px;min-width:128px;margin-right:-20px;margin-left:10px;padding:7px 14px 9px 0}header.banner .logo-ubuntu img{margin-right:8px;position:absolute;left:-999em}header.banner .logo-ubuntu span{float:left;font-size:23px;font-weight:300;padding-left:122px;padding-right:20px;position:relative;top:5px}header.banner .nav-primary.nav-left .logo-ubuntu{float:right}header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-white.svg");background-size:107px 25px;float:left}html.no-svg header.banner .nav-primary.nav-right .logo-ubuntu,.opera-mini header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-white.png")}@media only screen and (max-width: 295px){header.banner .nav-primary.nav-right .logo-ubuntu,header.banner .logo-ubuntu{-moz-background-size:20px 20px;-webkit-background-size:20px 20px;-o-background-size:20px 20px;background-size:20px 20px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu_cof-white_orange-hex.svg") 0 50% no-repeat;min-width:0;width:38px}header.banner .logo-ubuntu span{padding-left:38px}}html.no-svg header.banner .logo-ubuntu,.opera-mini header.banner .logo-ubuntu{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu_cof-white_orange-hex.png")}@media only screen and (max-width: 768px){header.banner .nav-primary{-moz-box-shadow:0 1px 2px 1px rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 2px 1px rgba(0,0,0,0.2);box-shadow:0 1px 2px 1px rgba(0,0,0,0.2)}header.banner .nav-primary.active{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;padding:0}header nav ul.active{float:left}header nav ul.active li:last-child a:link,header nav ul.active li:last-child a:visited{border-bottom:0}header.banner .nav-primary ul{position:relative;width:100%}header.banner .nav-primary ul li.active a:link,header.banner .nav-primary ul li.active a:visited{color:#333;font-weight:700}header.banner .nav-primary ul li,header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:active{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:transparent;border:none;display:block;font-weight:300;margin:0;padding:0;width:100%}header.banner .nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{background-color:#f0f0f0;border-bottom:1px solid #d4d7d4;color:#333333;font-size:1em}header.banner .nav-primary ul li:nth-last-child(-n+2) a:link,header.banner .nav-primary ul li:nth-last-child(-n+2) a:visited{border:0}header.banner .nav-primary ul li a:hover{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background:#f8f8f8}header.banner .nav-primary ul li a.active{background-color:#ddd}header.banner nav.nav-primary ul li a:link,header.banner .nav-primary ul li a:visited,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:active{padding:8px 10px;text-align:left}header.banner .nav-primary ul li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:transparent;border-bottom:0;border-right:1px solid #d4d7d4;float:left;width:50%}.nav-secondary{background:#fff}.nav-secondary ul.second-level-nav{border-top:1px solid #d4d7d4;display:none;margin-bottom:0;margin-left:0;padding-bottom:10px;padding-top:10px;width:100%}.nav-secondary ul.second-level-nav li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;margin:0;float:left}.nav-secondary ul.second-level-nav li a,.nav-secondary ul.second-level-nav li a:link,.nav-secondary ul.second-level-nav li a:visited{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;height:100%;padding:10px 10px 10px 20px;width:100%}.nav-secondary ul.second-level-nav li.active a,.nav-secondary ul.second-level-nav li.active a:link,.nav-secondary ul.second-level-nav li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.third-level-nav{display:none;margin-bottom:0;width:100%;padding-bottom:20px}.nav-secondary ul.third-level-nav li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:50%;margin:0;float:left;padding-left:30px}.nav-secondary ul.third-level-nav li a,.nav-secondary ul.third-level-nav li a:link,.nav-secondary ul.third-level-nav li a:visited{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px 10px 10px 0;display:block;width:100%;height:100%}.nav-secondary ul.third-level-nav li.active a,.nav-secondary ul.third-level-nav li.active a:link,.nav-secondary ul.third-level-nav li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.third-level-nav li.single-link{width:100%}.nav-secondary ul.third-level-nav li:only-child{width:100%}.nav-secondary ul.breadcrumb{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;margin-left:0;margin-bottom:0}.nav-secondary ul.breadcrumb li:first-of-type{border-bottom:1px solid #d4d7d4;margin-bottom:-1px}.nav-secondary ul.breadcrumb li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#fff;width:100%;display:block;height:40px;margin:0}.nav-secondary ul.breadcrumb li a,.nav-secondary ul.breadcrumb li a:link,.nav-secondary ul.breadcrumb li a:visited{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:16px;width:100%;color:#333333;display:block;margin-right:0;text-decoration:none;padding:8px 10px 0 10px}.nav-secondary ul.breadcrumb li.active{margin-top:12px}.nav-secondary ul.breadcrumb li.active a,.nav-secondary ul.breadcrumb li.active a:link,.nav-secondary ul.breadcrumb li.active a:visited{color:#333;font-weight:700}.nav-secondary ul.breadcrumb li:nth-of-type(2n){margin-top:12px}.nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.svg);background-position:center center;background-repeat:no-repeat;background-size:18px;float:right;height:18px;margin-right:-5px;margin-top:-6px;padding:10px;position:relative;right:0;top:0;width:18px}.nav-secondary ul.breadcrumb li+li{display:none}.nav-secondary ul.breadcrumb li+li a:link,.nav-secondary ul.breadcrumb li+li a:active,.nav-secondary ul.breadcrumb li+li a:visited{padding-left:20px}.nav-secondary ul.breadcrumb li+li a.after{background-image:none}.nav-secondary.open ul.breadcrumb li a:after,.nav-secondary.open ul.breadcrumb li a:link:after,.nav-secondary.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.svg)}.nav-secondary.open ul.breadcrumb li+li a.after{background-image:none}.nav-secondary.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.svg);margin-top:-7px}.nav-secondary.open ul.second-level-nav,.nav-secondary.open ul.third-level-nav,.nav-secondary.open ul.breadcrumb li+li{display:block}.no-js .nav-secondary ul.second-level-nav{display:block}.no-js #main-navigation-link{position:absolute;right:10px;top:12px;width:20px;height:28px;z-index:999;text-indent:-999em;display:block}.no-js #main-navigation-link a{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;display:block;width:28px;height:28px;position:absolute}html.no-svg .nav-secondary ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg header.banner .nav-primary #google-appliance-search-form button[type="submit"],.opera-mini header.banner .nav-primary #google-appliance-search-form button[type="submit"]{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.png")}html.no-svg .nav-secondary ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-down-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:link:after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li a:visited:after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after,.opera-mini .nav-secondary ul.breadcrumb.open ul.breadcrumb li .after{background-image:url(//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/nav-up-arrow.png)}html.no-svg header.banner .nav-primary #google-appliance-search-form button[type="submit"],.opera-mini header.banner .nav-primary #google-appliance-search-form button[type="submit"]{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.png")}header.banner .nav-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;cursor:pointer;display:block;height:48px;position:absolute;right:0;text-indent:-99999px;width:48px}html.no-svg header.banner .nav-toggle,.opera-mini header.banner .nav-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/navigation-menu-plain.png")}}@media only screen and (min-width: 768px){header.banner .nav-primary ul li{border-bottom:0}}@media only screen and (min-width: 769px){header.banner{-moz-box-shadow:0 2px 2px -2px #777777 inset,2px 1px #FFFFFF;-webkit-box-shadow:0 2px 2px -2px #777777 inset,2px 1px #FFFFFF;box-shadow:0 2px 2px -2px #777777 inset,2px 1px #FFFFFF}header.banner nav.nav-primary{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;border-bottom:0}header.banner .nav-toggle{display:none}header.banner nav ul{background-color:transparent;display:block}header.banner .nav-primary ul li{border-left:1px solid #C64012}header.banner .nav-primary ul li a:active,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:visited,header.banner nav.nav-primary ul li a:link{border-left:1px solid #EC5B29}header.banner .nav-primary ul li:last-child{border-right:1px solid #C64012;border-left:1px solid #C64012}header.banner .nav-primary ul li a.active{background-color:#B83A10}header.banner .nav-primary ul li a:hover{background-color:#E1662F}.nav-secondary ul:last-child li:last-child{padding-bottom:10px}.nav-secondary ul.breadcrumb li,.nav-secondary ul.second-level-nav li,.nav-secondary ul.third-level-nav li{margin-right:15px}.nav-secondary ul.breadcrumb{float:left}.nav-secondary ul.breadcrumb li{margin-bottom:10px}.nav-secondary ul{float:none;margin-bottom:0}.nav-secondary ul li{margin-bottom:5px}}@media only screen and (min-width: 984px){header.banner{margin-bottom:20px}header.banner nav.nav-primary ul{display:block}header.banner .nav-primary,#nav-global .nav-global-wrapper{width:984px}header.banner .nav-primary.nav-right .logo-ubuntu{margin-left:0}}header.banner .nav-primary ul{position:static}header.banner .nav-primary li ul{-moz-box-shadow:0 2px 2px -1px #777777;-webkit-box-shadow:0 2px 2px -1px #777777;box-shadow:0 2px 2px -1px #777777;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background:#f7f7f7;border:1px solid #d5d5d5;display:none;float:none;margin:0;padding:5px 0;position:absolute;top:51px;width:200px}header.banner .nav-primary li:hover ul:after{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-up-smaller.png") no-repeat;content:'';display:block;height:8px;left:20px;position:relative;top:-13px;width:200px;z-index:999}.no-generatedcontent header.banner .nav-primary li ul{-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px;top:48px}header.banner .nav-primary li ul .arrow-up{display:none}header.banner .nav-primary li ul li{border:0;float:none}header.banner .nav-primary li ul li a:link,header.banner .nav-primary li ul li a:visited{border:0;color:#333333;padding:0 0 11px 14px;text-align:left;width:170px}header.banner .nav-primary li ul li a:hover{background:none repeat scroll 0 0 transparent;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;color:#DD4814}header.banner .nav-primary li ul li.first a:link,header.banner .nav-primary li ul li.first a:visited,header.banner .nav-primary li ul li:first-of-type a:link{padding:10px 14px}header.banner .nav-primary li ul li.active a:link,header.banner .nav-primary li ul li.active a:visited{background:none repeat scroll 0 0 transparent !important}header.banner .nav-primary li ul .promo{border-top:1px solid #D5D5D5;float:left;margin-top:5px;padding:15px 0 0}header.banner .nav-primary li ul .promo a:link,header.banner .nav-primary li ul .promo a:visited{background:none repeat scroll 0 0 transparent;border-left:0 none;color:#333333;height:auto;padding:0;text-align:left}header.banner .nav-primary li ul .promo p{margin:0 10px}header.banner .nav-primary li ul .promo a:hover{box-shadow:none;color:#DD4814}header.banner .nav-primary li ul .promo img{margin-top:14px;margin-bottom:-6px;-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px;position:relative;top:1px}header.banner .nav-primary li ul .promo .category{color:#888888;font-size:11px;margin:0 10px;text-transform:uppercase}header.banner .nav-primary li:hover ul{display:block}html.lt-ie8 header.banner .nav-primary li:hover ul{display:none}.header-search,#box-search{padding:7px 0 7px 14px;overflow:hidden}.header-search input[type="search"],.header-search input[type="text"],#box-search input[type="search"],#box-search input[type="text"]{-webkit-appearance:none;-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);box-shadow:inset 0 1px 4px rgba(0,0,0,0.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;-ms-transition:all 0.5s ease-out;-o-transition:all 0.5s ease-out;transition:all 0.5s ease-out;background-color:#be3d00;border:none;color:#fff;display:block;float:left;font-size:16px;height:2.1em;margin-bottom:0;padding:0.5em 2.5em 0.5em 0.5em;width:100%}.header-search ::-webkit-input-placeholder,#box-search ::-webkit-input-placeholder{color:white;opacity:0.4}.header-search ::-webkit-input-placeholder,#box-search ::-webkit-input-placeholder{color:white;opacity:0.4}.header-search ::-moz-placeholder,#box-search ::-moz-placeholder{color:white;opacity:0.4}.header-search :-ms-input-placeholder,#box-search :-ms-input-placeholder{color:white;opacity:0.4}.header-search input:-moz-placeholder,#box-search input:-moz-placeholder{color:white;opacity:0.4}.header-search ::placeholder,#box-search ::placeholder{color:white;opacity:0.4}.header-search input[type="search"]:focus,#box-search input[type="search"]:focus{background-color:#a63603}.header-search button[type=submit],#box-search button[type=submit]{padding:3px 2px;line-height:0;float:left;margin-left:-40px;display:block;background:none;overflow:visible}.header-search button[type=submit]:hover,#box-search button[type=submit]:hover{background:none}.header-search button[type=submit] img,#box-search button[type=submit] img{height:28px;width:28px}header.banner .search-toggle{-moz-background-size:20px 20px;-webkit-background-size:20px 20px;-o-background-size:20px 20px;background-size:20px 20px;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search_icon_white_64.png");background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search.svg");background-position:center center;background-repeat:no-repeat;display:block;height:48px;outline:none;overflow:hidden;position:absolute;right:58px;text-indent:-999em;top:0;width:24px}.search-toggle:link,.search-toggle:active{outline:none}#box-search,.header-search{background:#f0f0f0;border:0;display:none;float:left;margin-bottom:0;position:relative;margin:0 0 -1px 0;padding:0;width:100%;z-index:3}#box-search.active,.header-search.active,.header-search.open{display:block}#box-search div,.header-search div{-moz-box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);-webkit-box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);box-shadow:inset 0 -4px 4px -4px rgba(0,0,0,0.3),inset 0 5px 5px -5px rgba(0,0,0,0.3);background:#f0f0f0;margin:10px;position:relative;z-index:1}#box-search form input[type="search"],.header-search form input[type="search"]{font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:4px 4px 4px 4px;-moz-border-radius:4px 4px 4px 4px;border-radius:4px 4px 4px 4px;-moz-box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);box-shadow:0 2px 2px rgba(0,0,0,0.3) inset,0 -1px 3px rgba(0,0,0,0.2) inset,0 2px 0 rgba(255,255,255,0.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;border:0;color:#333;font-size:16px;height:auto;margin:0;float:left;padding:9px 10px;width:100%}.yes-js .header-inner #box-search,.yes-js .header-inner .header-search{display:none}.yes-js .header-inner #box-search form,.yes-js .header-inner .header-search form{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0;margin-right:0;overflow:hidden;padding:10px;top:0;z-index:999;position:relative;width:100%}@media only screen and (max-width: 768px){header.banner .search-toggle{right:48px}html.no-svg .search-toggle,.opera-mini .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-white.png")}}@media only screen and (min-width: 768px){header.banner .search-toggle{display:none}}@media only screen and (min-width: 960px){#box-search,.header-search{background:none;overflow:hidden;padding:7px 0 7px 14px;border-right:0 none;float:right;margin-bottom:0;padding-bottom:5px;padding-right:0;padding-top:7px;max-width:220px}#box-search form input[type="text"],#box-search form input[type="search"],.header-search form input[type="text"],.header-search form input[type="search"]{-moz-box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;box-shadow:0 2px 4px rgba(0,0,0,0.4) inset;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-search.png") no-repeat scroll 5px center,none repeat scroll 0 0 #BE3D00;border:6px solid #DE6532;border-width:0 0 1px;color:#fff;font-size:0.813em;height:24px;margin-bottom:0;padding:4px 4px 4px 30px;transition:all 0.5s ease 0s;width:86px}}@media only screen and (max-width: 960px){header.banner nav.nav-primary .header-search{padding:0;position:relative;top:0;width:100%}header.banner nav.nav-primary .header-search input[type="search"]{border-radius:0;background:#f7f7f7;color:#333}header.banner nav.nav-primary .header-search button[type="submit"]{width:32px;height:38px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-black.svg") no-repeat scroll center center transparent;background-size:28px 28px}header.banner nav.nav-primary .header-search button[type="submit"] img{max-width:none;display:none}header.banner nav.nav-primary .header-search.open{display:block}header.banner .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/search-white.svg");background-position:center center;background-repeat:no-repeat;background-size:25px auto;cursor:pointer;right:0;display:block;height:48px;position:absolute;text-indent:-99999px;width:48px}html.no-svg header.banner .search-toggle,.opera-mini header.banner .search-toggle{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/img/search-white.png")}.opera-mini x:-o-prefocus,.opera-mini header.banner .search-toggle{-o-background-size:25px auto;background-size:25px auto}}@media only screen and (min-width: 984px){#box-search,.header-search{display:block;margin-right:0}#box-search form input[type="text"]:focus,.header-search form input[type="text"]:focus{width:160px}}@media only screen and (max-width: 768px){header.banner .search-toggle{right:48px}}body.ubuntu-search .nav-secondary,body.search-results .nav-secondary,body.search-no-results .nav-secondary{display:none}body.ubuntu-search section>h1,body.ubuntu-search section article h1,body.search-results section>h1,body.search-results section article h1,body.search-no-results section>h1,body.search-no-results section article h1{padding-bottom:10px;font-size:1.438em;margin-bottom:0}body.ubuntu-search section>h1,body.search-results section>h1,body.search-no-results section>h1{border-bottom:1px dotted #dfdcd9}body.ubuntu-search .main-search,body.search-results .main-search,body.search-no-results .main-search{padding:20px 0;margin:0 0 20px 0;background-color:transparent}body.ubuntu-search .main-search input[type="search"],body.search-results .main-search input[type="search"],body.search-no-results .main-search input[type="search"]{float:left;width:100%;font-size:2em;border:1px solid #999;-moz-box-sizing:border-box;box-sizing:border-box;padding:0.2em 65px 0.2em 0.2em}body.ubuntu-search .main-search button[type=submit],body.search-results .main-search button[type=submit],body.search-no-results .main-search button[type=submit]{padding:4px;line-height:0;float:left;margin-left:-53px;display:block;background:none;overflow:visible;width:auto;margin-top:-4px}body.ubuntu-search .main-search button[type=submit]:hover,body.search-results .main-search button[type=submit]:hover,body.search-no-results .main-search button[type=submit]:hover{background:none}body.ubuntu-search .main-search button[type=submit] img,body.search-results .main-search button[type=submit] img,body.search-no-results .main-search button[type=submit] img{height:45px;width:45px}body.ubuntu-search .search-result h1 .title-main,body.search-results .search-result h1 .title-main,body.search-no-results .search-result h1 .title-main{margin-right:20px}body.ubuntu-search .search-result h1 .result-url,body.search-results .search-result h1 .result-url,body.search-no-results .search-result h1 .result-url{color:#999;overflow:hidden;text-overflow:ellipsis;display:block;vertical-align:bottom;padding-bottom:2px}body.ubuntu-search .search-result h1 .result-url a,body.search-results .search-result h1 .result-url a,body.search-no-results .search-result h1 .result-url a{color:#999}body.ubuntu-search .search-result p,body.search-results .search-result p,body.search-no-results .search-result p{margin-bottom:0}body.ubuntu-search .num-results,body.search-results .num-results,body.search-no-results .num-results{display:inline-block;margin-left:20px}body.ubuntu-search .bottom-results-total,body.search-results .bottom-results-total,body.search-no-results .bottom-results-total{text-align:center;width:100%;overflow:visible;padding-top:20px;margin:0}body.ubuntu-search .bottom-nav,body.search-results .bottom-nav,body.search-no-results .bottom-nav{overflow:hidden;margin-top:-26px}body.ubuntu-search .bottom-nav ul,body.search-results .bottom-nav ul,body.search-no-results .bottom-nav ul{margin-bottom:0;margin-left:0;padding:0;overflow:hidden}body.ubuntu-search .bottom-nav li,body.search-results .bottom-nav li,body.search-no-results .bottom-nav li{float:left;margin-left:15px}body.ubuntu-search .bottom-nav li:first-child,body.search-results .bottom-nav li:first-child,body.search-no-results .bottom-nav li:first-child{margin-left:0}body.ubuntu-search .nav-back,body.search-results .nav-back,body.search-no-results .nav-back{float:left}body.ubuntu-search .nav-back li:before,body.search-results .nav-back li:before,body.search-no-results .nav-back li:before{content:"\2039";color:#dd4814;margin-right:5px}body.ubuntu-search .nav-back li.item-extreme:before,body.search-results .nav-back li.item-extreme:before,body.search-no-results .nav-back li.item-extreme:before{content:"\2039\2039"}body.ubuntu-search .nav-forward,body.search-results .nav-forward,body.search-no-results .nav-forward{float:right}body.ubuntu-search .nav-forward li:after,body.search-results .nav-forward li:after,body.search-no-results .nav-forward li:after{content:"\203A";color:#dd4814;margin-left:5px}body.ubuntu-search .nav-forward li.item-extreme:after,body.search-results .nav-forward li.item-extreme:after,body.search-no-results .nav-forward li.item-extreme:after{content:"\203A\203A"}body.ubuntu-search .error-notification,body.search-results .error-notification,body.search-no-results .error-notification{background-color:#fdffdc;color:#333;padding:20px;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;margin-top:20px;display:block}body.ubuntu-search .result-line,body.search-results .result-line,body.search-no-results .result-line{color:#ada69e}body.ubuntu-search .results-top,body.search-results .results-top,body.search-no-results .results-top{border-bottom:1px dotted #dfdcd9;padding-bottom:0.5em}body.ubuntu-search .search-container,body.search-results .search-container,body.search-no-results .search-container{padding-bottom:0}@media only screen and (min-width: 768px){.ubuntu-search .main-search button[type=submit]{margin-left:-60px;margin-top:0}}body footer.global #nav-global li:first-of-type a{margin-left:0}footer.global{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-moz-box-shadow:inset 0 2px 2px -1px #d3d3d3;-webkit-box-shadow:inset 0 2px 2px -1px #d3d3d3;box-shadow:inset 0 2px 2px -1px #d3d3d3;background:none;border-top:0;clear:both;display:block;padding:30px 10px 20px;position:relative;width:100%}footer.global .legal{margin:0 auto;width:100%}footer.global .legal{background-image:none;position:relative;clear:both;min-height:40px}footer.global .legal p,footer.global .legal ul{padding-left:0}footer.global h2{font-size:0.75em;line-height:1.4;margin-bottom:0;padding-bottom:0.5em}footer.global h2,footer.global h2 a:link,footer.global h2 a:visited{color:#333333;font-weight:normal}footer.global nav ul li h2 a:after{content:""}footer.global ul{margin:0}footer.global nav ul li.two-col{display:inline-block;min-height:10em;vertical-align:top}footer.global nav ul li li{font-size:0.85714em;margin-bottom:1em;font-size:0.75em;margin-bottom:0}footer.global ul li li a:link,footer.global ul li li a:visited{color:#333333;margin-bottom:0}footer.global ul li li a:hover,footer.global ul li li a:active,footer.global h2 a:hover,footer.global h2 a:active{color:#dd4814}footer.global .inline li{display:inline}footer.global p,footer.global ul.inline li a{color:#333333;font-size:12px;margin-bottom:0}footer.global ul.inline li a:hover{color:#dd4814}footer.global ul.inline li:after{color:#888888;content:"\00b7";vertical-align:middle;margin:0 5px}footer.global ul.inline li:last-child{width:120px}footer.global ul.inline li:last-child:after{content:""}footer.global .inline li{float:none;margin-bottom:0}footer.global .top-link{-moz-box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;-webkit-box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;box-shadow:0 -4px 4px -4px rgba(0,0,0,0.3) inset;background:none repeat scroll 0 0 transparent;border:0 none;float:left;font-size:0.75em;letter-spacing:0.05em;margin:0 0 0 -10px;padding-right:20px;text-transform:uppercase;width:100%}footer.global .top-link a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-upload-warmgrey.svg");background-position:10px center;background-repeat:no-repeat;background-size:14px 14px;border-bottom:0 none;color:#888888;display:block;float:none;font-weight:400;padding:12px 0 12px 28px}html.no-svg footer.global .top-link a,.opera-mini footer.global .top-link a{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-upload-warmgrey.png")}@media only screen and (max-width: 768px){footer.no-global .legal{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;box-shadow:0 2px 2px -1px #D3D3D3 inset;padding-top:10px;margin-left:-10px;padding-left:10px;padding-right:10px}#livechat-eye-catcher{display:block}}@media only screen and (min-width: 768px){footer.global .inline li{display:inline;float:left}}@media only screen and (min-width: 769px){footer.global .top-link{display:none}footer.global .footer-b h2 a i{font-style:normal;display:inline}}@media only screen and (min-width: 984px){footer.global .legal{width:984px}footer.global{padding:30px 0 20px}footer.global .legal{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-grey.png") 100% 0 no-repeat}footer.global .footer-a{display:block}}#context-footer{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1em;margin-bottom:0.85714em;border-bottom:0;clear:both;padding-bottom:1px;padding-top:0;position:relative;margin-bottom:0;margin-left:0;margin-right:0;width:100%}#context-footer hr{-moz-box-shadow:inset 0 2px 2px -2px #333;-webkit-box-shadow:inset 0 2px 2px -2px #333;box-shadow:inset 0 2px 2px -2px #333;background:#dd4814;height:14px;margin:0 0 10px;border:0;clear:both}#context-footer div.twelve-col{display:table;float:none;margin-bottom:7px}#context-footer div div{display:block;padding-left:0;margin-bottom:20px}#context-footer div div div{display:block;padding-left:0;margin-bottom:0}#context-footer div div.feature-one{padding-left:0}#context-footer div div.feature-four{margin-bottom:0;margin-right:0}#context-footer>div{padding-left:10px;padding-right:10px}#context-footer ul{margin-bottom:5px}#context-footer li.active{display:none}#context-footer h3{font-size:1.14286em;margin-bottom:0.75em;font-weight:normal}#context-footer .list a:after,#context-footer a.link-arrow:after,#context-footer nav ul li h2 a:after{content:' \203A'}@media only screen and (min-width: 768px){#context-footer{margin-bottom:12px;padding-left:30px;padding-right:30px}#context-footer div+div{width:31%}#context-footer div div.feature-four{padding-bottom:20px}#context-footer hr{margin:0 -30px 40px}#context-footer>div{padding-left:0;padding-right:0}}@media only screen and (min-width: 984px){#context-footer{padding:0 40px 10px}#context-footer div div{display:table-cell;float:none;padding-left:20px;margin-bottom:0}#context-footer hr{margin:0 -40px 40px}}a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1.14286em;margin-bottom:0.75em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#dd4814;color:#fff;text-decoration:none;display:inline-block;margin:0;font-family:Ubuntu, Arial, 'libra sans', sans-serif;font-weight:300;-webkit-font-smoothing:subpixel-antialiased;-moz-font-smoothing:subpixel-antialiased;-o-font-smoothing:subpixel-antialiased;font-smoothing:subpixel-antialiased;padding:8px 14px;width:100%;text-align:center}a.cta-large,button.cta-large{font-size:1.28571em;margin-bottom:0.66667em;padding:10px 20px}a.link-cta-canonical,button.cta-canonical,form button.cta-canonical[type="submit"],form input.cta-canonical[type="submit"]{background:#772953;color:#fff}a.link-cta-inverted,button.cta-inverted{background:#fff;color:#333333}.row-enterprise a.link-cta-canonical,.row-enterprise button.link-cta-canonical{background:#fff;color:#772953}a.link-cta-ubuntu:hover,a.link-cta-ubuntu:hover,button.cta-ubuntu:hover,form button[type="submit"]:hover,form input[type="submit"]:hover{background:#c03f11;text-decoration:none}a.link-cta-canonical:hover,button.cta-canonical:hover{background:#5f2143;text-decoration:none}a.link-cta-inverted:hover,.row-enterprise a.link-cta-canonical:hover,button.cta-inverted:hover,.row-enterprise button.cta-canonical:hover{background:#fff;text-decoration:underline}a.cta-deactivated,a.cta-deactivated:hover,button.cta-deactivated,button.cta-deactivated:hover{background:#efefef;color:#fff;cursor:not-allowed}@media only screen and (min-width: 768px){a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{width:auto}}@media only screen and (min-width: 984px){a.link-cta-ubuntu,a.link-cta-canonical,a.link-cta-inverted,button.cta-ubuntu,button.cta-canonical,form button[type="submit"],form input[type="submit"]{width:auto}}form input,form select,form textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}form .fieldset-submit ul{margin-bottom:0}form fieldset .mktError,form fieldset .errMsg,form fieldset .reqMark{color:#df382c}form fieldset .mktFormMsg{clear:both;display:block}.row{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:1px dotted #888888;clear:both;padding:20px 10px 0;position:relative}.row br{display:none}.row.no-padding-bottom{padding-bottom:0 !important}.row-grey{background:#f7f7f7}.no-border{border:0}#main-content .row-hero{margin-top:20px;padding-top:0}.row-background{color:#fff;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/backgrounds/image-background-wallpaper.jpg") no-repeat scroll 50% 50% #4b1827}.row-background a.alternate{color:#fff;text-decoration:underline}.row-background a.alternate:hover{color:rgba(255,255,255,0.6)}@media only screen and (min-width: 768px){.row-background{background-position:center 50%;background-size:100% auto}}.strip{width:100%;display:block}.strip-dark{background-color:#2c001e;background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/backgrounds/background-grid.png");background-repeat:repeat;color:#fff}.strip-dark .list-ubuntu li{border:0}.strip-dark .resource{color:#333;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.strip-dark .resource:before{border-right-color:#2c001e}#main-content .strip-dark .resource:before{border-bottom-width:29px;right:-2px;top:-1px}#main-content .strip-dark .resource:hover:before{border-bottom-width:34px}#main-content .strip-dark .resource h2{padding-right:20px}.row-aux{background-color:rgba(255,255,255,0.6);text-align:center}.row-aux h2,.row-aux p{text-align:left}.row-aux a p{color:#333;margin-bottom:30px}.row-step h2{position:relative;top:5px}.row-step .step{position:relative;top:-5px;height:32px;width:32px;border-radius:50%;border:3px solid #dd4814;color:#dd4814;line-height:32px;text-align:center;background-color:#fff;font-size:23px;font-weight:400}@media only screen and (min-width: 768px){.row{padding:30px}#main-content .row-hero{margin-top:40px}}@media only screen and (min-width: 769px){.row-step .step{height:42px;width:42px;line-height:42px}.row br{display:block}}@media only screen and (min-width: 984px){.row br{display:block}.row{padding:60px 40px 40px}.no-border{border:0}}.box,.box-grey{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:1.333em 20px}.box{background:#fff;border:1px solid #dfdcd9}.box-grey{background:#f7f7f7;color:#333333}.box-orange{background:#dd4814;color:#fff}.box-highlight{-moz-box-shadow:0 2px 2px 0 #c2c2c2;-webkit-box-shadow:0 2px 2px 0 #c2c2c2;box-shadow:0 2px 2px 0 #c2c2c2;border:1px solid #f7f7f7}.box-textured{-moz-box-shadow:0 2px 2px 0 #c2c2c2;-webkit-box-shadow:0 2px 2px 0 #c2c2c2;box-shadow:0 2px 2px 0 #c2c2c2;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/grey-textured-background.jpg");border:0}.box-padded{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#efefef;border:0;margin-bottom:20px;padding:6px 5px}.box-padded h3{font-size:1.39286em;margin-bottom:0.61538em;margin-left:5px;margin-top:5px}.box-padded li h3{font-size:1.39286em;margin-bottom:0.61538em;margin:0}.box-padded div{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;overflow:hidden;padding:8px 8px 2px}.box-padded-feature{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/soft-centre-bkg.gif") repeat scroll 0 0 #a09f9f;border:0;margin-bottom:20px;padding:11px 5px 6px}.box-padded-feature h3{color:#fff;margin-left:5px;font-size:1.39286em;margin-bottom:0.61538em}.box-padded-feature h4{font-size:1.14286em;margin-bottom:0.75em;font-weight:normal}.box-padded-feature>div{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;overflow:hidden;padding:20px 8px}.box-padded-feature div div{margin-bottom:0}.box-padded-feature .inline-icons{display:table;width:100%;margin:0;text-align:center}.box-padded-feature .inline-icons li{display:table-cell;text-align:left;float:none}.box-padded-feature .one-col{width:48px;float:left}.resource{cursor:pointer;padding-bottom:40px;position:relative;-moz-transition:background 0.2s ease-out;-webkit-transition:background 0.2s ease-out;transition:background 0.2s ease-out}.resource h2{padding-right:20px}.resource.five-col h2 a:link,.resource.five-col h2 a:visited,.resource.four-col h2 a:link,.resource.four-col h2 a:visited{font-size:inherit !important}.resource.four-col h2 a:link,.resource.four-col h2 a:visited{font-size:1.125em}.resource.twelve-col h2 a:link,.resource.twelve-col h2 a:visited{font-size:1.40625em}.resource:hover{background-color:#fafafa}.resource:after{-moz-box-shadow:0 -1px 2px 0 #ddd;-webkit-box-shadow:0 -1px 2px 0 #ddd;box-shadow:0 -1px 2px 0 #ddd;content:'';height:1px;position:absolute;right:-6px;top:14px;-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);-moz-transition:all 0.2s ease-out;-webkit-transition:all 0.2s ease-out;transition:all 0.2s ease-out;width:41px;z-index:2}.resource:hover:after{right:-9px;top:18px;width:48px}.resource:before{content:'';position:absolute;-moz-transition:border-width 0.2s ease-out;-webkit-transition:border-width 0.2s ease-out;transition:border-width 0.2s ease-out;top:-2px;right:-3px;width:0;height:0;border-bottom:30px solid #fdfdfd;border-right:30px solid #fff;-webkit-box-shadow:-2px 2px 2px rgba(176,176,176,0.4);-moz-box-shadow:-2px 2px 2px rgba(176,176,176,0.4);box-shadow:-2px 2px 2px rgba(176,176,176,0.4);z-index:2;-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0}.resource:hover:before{border-bottom-width:35px;border-right-width:35px}.resource:last-of-type{margin-bottom:30px}.resource .content-cat{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-resource-hub-icon-document.png") left center no-repeat;color:#aea79f;font-size:14px;letter-spacing:1px;margin:0;padding-left:20px;padding:0;position:absolute;text-transform:uppercase}.resource .content-cat-webinar{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-resource-hub-webinar.png") left center no-repeat}.resource.box-image-centered div+span img{margin-top:40px}html.yui3-js-enabled .resource:hover a{text-decoration:underline}.row-grey .resource:before{border-right-color:#f7f7f7}@media only screen and (max-width: 768px){.box-padded-feature .inline-icons li{float:left;display:block}.box-padded-feature .one-col{width:48px;float:left}}.arrow-up,.arrow-down,.arrow-right,.arrow-left{height:11px;position:absolute;width:18px}.arrow-up{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-up.png") 0 0 no-repeat;left:20px;top:-11px}.arrow-down{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-down.png") 0 0 no-repeat;bottom:-11px;right:20px}.arrow-right{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-right.png") 0 0 no-repeat;height:18px;right:-11px;top:20px;width:11px}.arrow-left{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/arrow-left.png") 0 0 no-repeat;bottom:20px;height:18px;left:-11px;width:11px}div>.arrow-left{left:-10px}@media only screen and (min-width: 769px){html.yui3-js-enabled .arrow{visibility:visible}}.list,.list-ubuntu,.list-canonical{list-style:none;margin-left:0}.list li,.list-ubuntu li,.list-canonical li{border-bottom:1px dotted #888888;margin-bottom:0;padding:10px 0}.list li:last-of-type,.list li.last-item,.list-ubuntu li:last-of-type,.list-ubuntu li.last-item,.list-canonical li:last-of-type,.list-canonical li.last-item{border:0;padding-bottom:0}.list article{border-bottom:1px dotted #888888;margin-bottom:0;padding:10px 0}.list-spaced article,.list-spaced li{padding:30px 0}nav .list a{display:block}.list-ubuntu li,.list-canonical li{background-repeat:no-repeat;background-position:0 1em;padding-left:25px}.list-ubuntu li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-orange.svg")}.list-canonical li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-midaubergine.svg")}.list-warm li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-warmgrey.svg")}.list-dark li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-darkaubergine.svg")}.vertical-divider .list-canonical li,.vertical-divider .list-ubuntu li{padding-left:25px}html.no-svg .list-ubuntu li,.opera-mini .list-ubuntu li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-orange.png")}html.no-svg .list-canonical li,.opera-mini .list-canonical li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-midaubergine.png")}html.no-svg .list-warm li,.opera-mini .list-warm li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-warmgrey.png")}html.no-svg .list-dark li,.opera-mini .list-dark li{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/tick-darkaubergine.png")}.no-bullets{list-style:none;margin-left:0}.row .combined-list ul,.row .combined-list div{margin-bottom:0}.row .combined-list li.last-item{border-bottom:1px dotted #888888;padding-bottom:10px}.row .combined-list div.last-col,.row .combined-list ul.last-col{margin-bottom:20px}.row .combined-list div.last-col li.last-item,.row .combined-list ul.last-col li.last-item{border-bottom:0;padding-bottom:0}.inline{margin-left:0}.inline li{display:inline;list-style:none;margin-left:0;float:left}@media only screen and (min-width: 768px){.row .combined-list ul,.row .combined-list div{margin-bottom:20px}.row .combined-list li.last-item{border-bottom:0;padding-bottom:0}}ul.inline-logos{float:left;margin-left:0;padding:0;text-align:center;width:100%}ul.inline-logos li{clear:none;display:inline-block;float:none;margin:10px 20px;padding:0}ul.inline-logos li.clear-row{clear:left}ul.inline-logos li.last-item{border:0}ul.inline-logos img{-webkit-transition:all 0.5s ease-out;-moz-transition:all 0.5s ease-out;-ms-transition:all 0.5s ease-out;-o-transition:all 0.5s ease-out;transition:all 0.5s ease-out;vertical-align:middle;max-width:115px;max-height:32px}.inline-icons{margin:0 0 20px}.inline-icons li{margin-right:20px;margin-bottom:20px;text-align:left;display:inline-block}.inline-icons li.last-item{margin-right:0}.inline-icons.no-margin-bottom li{margin-bottom:0}.inline-icons img{vertical-align:middle;max-width:115px;max-height:32px}@media only screen and (max-width: 768px){ul.inline-logos img{max-width:172px;max-height:48px}}@media only screen and (min-width: 769px){ul.inline-logos li{clear:none;display:inline-block;height:auto;margin:20px 0;line-height:60px;padding:0 40px}ul.inline-logos li img{float:none;vertical-align:middle;max-width:200px;max-height:45px}}@media only screen and (min-width: 984px){.inline-icons{text-align:left;margin-bottom:20px}}blockquote.pull-quote{text-indent:0}blockquote.pull-quote p{color:#333333;padding-left:10px;padding-right:10px;font-size:1.77379em;margin-bottom:0.48323em;text-indent:-.4em;margin-left:.4em;line-height:1.3}blockquote.pull-quote p span{font-weight:bold;color:#dd4814;line-height:0;position:relative;left:-5px}blockquote.pull-quote p span+span{left:5px}blockquote.pull-quote p cite{margin:10px 0 0;font-weight:300;display:block;font-size:.75em;text-indent:0}blockquote.pull-quote.js{padding-left:60px;display:table-cell}blockquote.quote-canonical,blockquote.quote-canonical-white{font-size:1.14286em;margin-bottom:0.75em;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-white-360x360.png") no-repeat 20px -130px;color:#772953;float:right;font-size:1em;height:215px;margin-top:0;padding:20px 60px 0;position:relative;width:236px}blockquote.quote-canonical-white{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-aubergine-345x345.png") no-repeat 0 0;color:#fff;padding:80px 60px 0;height:265px}blockquote.quote p:first-child{font-size:1.28571em;margin-bottom:0.66667em;line-height:1.3;text-indent:-7px}blockquote.quote-right-bottom{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-quote-orange.svg");background-repeat:no-repeat;background-size:287px 286px;color:#fff;height:167px;padding:60px 40px;position:static;right:-40px;top:-90px;width:207px}blockquote.quote-right-bottom p{color:#fff}blockquote.quote-grey{font-size:2.57143em;margin-bottom:0.33333em;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-grey-br-211x211.png") no-repeat scroll 0 0 transparent;color:#fff;height:152px;line-height:40px;margin-left:20px;padding:60px 0 0;text-align:center;width:211px}blockquote.quote-bottom-left{background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/quote-orange-bl-287x287.png") no-repeat;color:#fff;height:167px;padding:55px 40px 70px 45px;width:225px}html.no-svg blockquote.quote-right-bottom,.opera-mini blockquote.quote-right-bottom{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/picto-pack/picto-quote-orange.png")}.row-quote{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.row-quote blockquote{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;margin:0;padding:0}.row-quote blockquote p{margin-bottom:.75em;line-height:1.3;color:#333333;padding-left:10px;padding-right:10px;text-indent:0}.row-quote blockquote span{font-weight:bold;color:#dd4814;line-height:0;position:relative;left:-5px}.row-quote blockquote span+span{left:5px}.row-quote blockquote cite{color:#333333;font-style:normal;margin-bottom:0;font-size:.75em;text-indent:-14px;text-indent:0}.row-quote .quote-twitter{background:#fcece7 url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/pictogram-twitter-115x139.png") 20px bottom no-repeat;padding:20px 20px 20px 23.40425%}.row-quote .quote-twitter-small{background:#fcece7 url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/pictograms/pictogram-twitter-54x63.png") 99% bottom no-repeat;padding:20px 20px 20px 80px}.row-quote .quote-twitter-small p{margin:0;padding:0}blockquote.quote-canonical,blockquote.quote-canonical-white{background:none;color:#333333;width:auto;height:auto;padding:0 30px;margin-top:20px}@media only screen and (min-width: 768px){.row-quote blockquote{text-indent:-7px}.pull-quote{text-indent:-.4em}.row-quote blockquote p{font-size:1.77357em;margin-bottom:0.48329em}blockquote.pull-quote p,.row-quote blockquote p{padding-left:0;padding-right:0;text-indent:-.7em}blockquote.pull-quote p span,.row-quote blockquote p span{font-size:1.391304348em}blockquote.pull-quote p cite,.row-quote blockquote p cite{margin-left:0;text-indent:0}blockquote.pull-quote p span,.row-quote blockquote p span{top:5px}}@media only screen and (min-width: 769px){.row-quote blockquote p{font-size:1.77357em;margin-bottom:0.48329em;text-indent:-.4em}}@media only screen and (min-width: 984px){.row-quote blockquote{padding:0 80px 20px;text-indent:-10px}blockquote.pull-quote p span,.row-quote blockquote p span{top:10px}}html.js .tabbed-content .accordion-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:auto;padding-bottom:.6em;padding-right:20px}html.yui3-js-enabled .tabbed-menu{display:none;padding-bottom:20px;padding-top:20px}html.yui3-js-enabled .arrow{display:none;position:absolute;visibility:hidden}html.yui3-js-enabled .tabbed-content{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:8px 8px 0;background:#f7f7f7;margin-bottom:8px}html.yui3-js-enabled .tabbed-content.hide{display:block;opacity:1 !important}html.yui3-js-enabled .tabbed-content .title{display:none}html.yui3-js-enabled .tabbed-content div{display:none}html.yui3-js-enabled .tabbed-content .accordion-button{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-down.svg") no-repeat scroll right 3px #f7f7f7;color:#333333;display:block;font-size:16px;padding-bottom:.6em;padding-right:20px;width:100%}html.yui3-js-enabled .tabbed-content.open .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-up.svg");margin-bottom:10px}html.yui3-js-enabled .tabbed-content.open div{display:block}html.yui3-js-enabled html.yui3-js-enabled.opera-mini .tabbed-content .accordion-button,html.yui3-js-enabled html.yui3-js-enabled.no-svg .tabbed-content .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-right.png")}html.yui3-js-enabled html.yui3-js-enabled.opera-mini .tabbed-content.open .accordion-button,html.yui3-js-enabled html.yui3-js-enabled.no-svg .tabbed-content.open .accordion-button{background-image:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/icons/icon-arrow-up.png")}html.yui3-js-enabled html.yui3-js-enabled.opera-mini.tabbed-content .accordion-button{background-image:none;margin-bottom:10px}html.yui3-js-enabled html.yui3-js-enabled.opera-mini.tabbed-content div{display:block}@media only screen and (min-width: 768px){html.yui3-js-enabled .tabbed-menu{display:block}html.yui3-js-enabled .tabbed-content{margin-bottom:20px;padding:40px}html.yui3-js-enabled .tabbed-content.hide{display:none;opacity:0 !important}html.yui3-js-enabled .tabbed-content .title{display:block}html.yui3-js-enabled .tabbed-content div{display:block}html.yui3-js-enabled .tabbed-content .vertical-divider div{display:table-cell}html.yui3-js-enabled .tabbed-content .accordion-button{display:none}}html.yui3-js-enabled .accordion-button.active{background-color:transparent}@media only screen and (min-width: 768px){.tabbed-menu{-moz-box-shadow:0 -1px 10px #cfcfcf inset;-webkit-box-shadow:0 -1px 10px #cfcfcf inset;box-shadow:0 -1px 10px #cfcfcf inset;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;background:none repeat scroll 0 0 #f7f7f7;padding-bottom:20px;padding-top:20px;position:relative}.tabbed-menu ul{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:table;margin-bottom:0;padding:0;position:relative;table-layout:fixed;width:100%}.tabbed-menu li{text-align:center;display:table-cell}.tabbed-menu a{color:#666;display:block;outline:none}.tabbed-menu a .active{color:#772953;text-decoration:none}.tabbed-menu a:hover{text-decoration:none}.tabbed-menu .arrow{bottom:0;position:absolute}.tabbed-content{*zoom:1;padding:20px 40px 0}.tabbed-content:before,.tabbed-content:after{content:"";display:table}.tabbed-content:after{clear:both}.tabbed-content .row{padding-left:0;padding-right:0}.tabbed-content .main-content{padding-bottom:40px}html.yui3-js-enabled .tabbed-content.hide{display:none;opacity:0}.tabbed-content-bg{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;margin-left:20px;margin-right:20px}.tabbed-content-bg .row-box{padding-left:0;padding-right:0}html.yui3-js-enabled .arrow{visibility:visible}}.row.vertical-divider{padding-bottom:40px}.vertical-divider div,.vertical-divider li{border-right:0;display:block;padding-left:0;padding-right:0}.vertical-divider-full{padding-bottom:0}.vertical-divider-full>div{padding-bottom:40px}.row.vertical-divider-full{padding-bottom:0}@media only screen and (max-width: 767px){.vertical-divider>div,.vertical-divider>li{border-bottom:1px dotted #888888;padding-bottom:20px}.vertical-divider div:last-of-type,.vertical-divider li:last-of-type,.inline-icons li:last-of-type{border-bottom:0;padding-bottom:5px}.row.vertical-divider{padding-bottom:0}.equal-height div,.equal-height li{height:auto !important}}@media only screen and (min-width: 984px){.row.vertical-divider{padding-bottom:60px}.vertical-divider>div,.vertical-divider>li{border-right:1px dotted #888888;display:table-cell;float:none;margin-right:0;padding-left:20px;padding-right:20px;vertical-align:top}.vertical-divider>div:last-child,.vertical-divider>li:last-child,.vertical-divider>div.last-col,.vertical-divider>li.last-col,.vertical-divider>div:last-of-type,.vertical-divider>li:last-of-type{border-right:0;padding-right:0}.vertical-divider>div:first-child,.vertical-divider>li:first-child,.vertical-divider>div.first-col,.vertical-divider>li.first-col,.vertical-divider>div:first-of-type,.vertical-divider>li:first-of-type{padding-left:0}}.slider{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#f7f7f7;padding-top:40px}.slider .slide-window{overflow:hidden;position:relative;height:450px;-moz-transition:left 1s;-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s}.slider .slide-container{position:absolute;width:2800 px;-moz-transition:left 1s;-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s;left:0}.slider .slider-dots ul{position:absolute;top:550px;left:220px;z-index:5}.slider .slider-dots li{background-position:0 -8px;background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/sprite-pager.png") no-repeat;float:left;height:7px;list-style-type:none;margin-right:.75em;text-indent:-9999em;width:7px}.slider .slider-dots li.active{background-position:0 0}.slider .slider-dots a{display:block;outline:0}.slider .slide{float:right;width:700px}.slider .slide h3{margin-top:65px;display:inline-block}.slider .slide p{width:350px}.slider .arrow-prev,.slider .arrow-next{font-size:5em;margin-top:150px;display:block;color:#888888;outline:0}.slider .arrow-prev:hover,.slider .arrow-next:hover{text-decoration:none;color:#333333}.slider .arrow-prev:active,.slider .arrow-next:active{padding-top:1px;text-decoration:none}.slider .arrow-prev:focus,.slider .arrow-next:focus{text-decoration:none}.yui3-tooltip-hidden{display:none}.yui3-tooltip-content{-moz-box-shadow:0 2px 8px rgba(0,0,0,0.2);-webkit-box-shadow:0 2px 8px rgba(0,0,0,0.2);box-shadow:0 2px 8px rgba(0,0,0,0.2);background:url("//assets.ubuntu.com/sites/ubuntu/latest/u/img/patterns/grey-textured-background.jpg") repeat scroll 0 0 transparent;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border:1px solid #e3e3e3;color:#333333;margin-top:-30px;max-width:520px;position:relative}.yui3-tooltip .yui3-widget-bd{padding:20px;width:320px}.yui3-tooltip .yui3-widget-bd *{max-width:100%}.yui3-tooltip .yui3-widget-bd h5{margin-bottom:10px;font-size:22px;font-weight:300}.yui3-tooltip .yui3-widget-bd img{float:left;margin-right:10px}.yui3-tooltip .yui3-widget-bd q{border-bottom:1px dotted #888888;border-top:1px dotted #888888;display:block;font-size:16px;font-style:italic;margin-bottom:0;margin-top:20px;padding:10px 0}.yui3-tooltip .yui3-widget-bd p:last-child{margin-bottom:0}.yui3-tooltip .yui3-widget-ft,.yui3-tooltip .yui3-widget-ft div{position:absolute;width:0;height:0;border-style:solid;line-height:0;font-size:0}.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft,.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft div{top:-10px;left:50%;margin:0 0 0 -10px;border-width:0 10px 10px;border-color:#efefef transparent}.yui3-tooltip .yui3-tooltip-align-bottom .yui3-widget-ft div{top:0;border-color:#efefef transparent}.tooltip-label{-moz-box-shadow:3px 3px 6px rgba(0,0,0,0.3);-webkit-box-shadow:3px 3px 6px rgba(0,0,0,0.3);box-shadow:3px 3px 6px rgba(0,0,0,0.3);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;background:#fff;border:1px solid #dfdcd9;display:none;font-size:13px;line-height:1;margin:0;padding:6px 5px;position:absolute;top:-20px;white-space:nowrap;z-index:1000}body,a:link,a:visited{-webkit-font-smoothing:antialiased}code,pre,p{line-height:1.5}body{font-size:16px}@media only screen and (min-width: 768px){code,pre,p{line-height:1.6}body{font-size:16px}}@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi){body{font-size:18px}}.not-for-medium{display:none}@media only screen and (min-width: 985px){.not-for-medium{display:block}}header.banner{background:#000000;-moz-box-shadow:inset 0 2px 2px -2px #000;-webkit-box-shadow:inset 0 2px 2px -2px #000;box-shadow:inset 0 2px 2px -2px #000;margin-bottom:0}header.banner .nav-primary{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;*zoom:1}header.banner .nav-primary:before,header.banner .nav-primary:after{content:"";display:table}header.banner .nav-primary:after{clear:both}header.banner nav.nav-primary{border-bottom:1px solid #262626;overflow:visible}header.banner nav.nav-primary .user-nav{float:right;margin-right:20px}header.banner nav.nav-primary .user-dropdown:hover ul:after{display:none}header.banner nav.nav-primary .user-dropdown .menu-link img{margin-right:10px}header.banner nav.nav-primary .user-dropdown .menu-link img.hover{display:none}header.banner nav.nav-primary .user-dropdown .menu-link img.normal{display:inline-block}header.banner nav.nav-primary .user-dropdown .open .menu-link img.hover,header.banner nav.nav-primary .user-dropdown .menu-link:hover img.hover{display:inline-block}header.banner nav.nav-primary .user-dropdown .open .menu-link img.normal,header.banner nav.nav-primary .user-dropdown .menu-link:hover img.normal{display:none}header.banner nav.nav-primary .user-dropdown ul{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;margin-top:-2px;background-color:#fff;border-width:0}header.banner nav.nav-primary .user-dropdown ul a:hover{background-color:transparent}header.banner nav.nav-primary #user-dropdown .dropdown ul{width:auto}header.banner .nav-primary.nav-right .logo-ubuntu{-moz-background-size:73px 30px;-webkit-background-size:73px 30px;-o-background-size:73px 30px;background-size:73px 30px;background-image:url(../img/logos/logo.svg);background-position:20px;background-repeat:no-repeat;min-width:120px;padding-top:6px;margin-left:0}body.no-svg header.banner .nav-primary.nav-right .logo-ubuntu{background-image:url(../img/logos/logo.png)}input[type=text]::-ms-reveal,input[type=text]::-ms-clear{display:none;width:0;height:0}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-results-button,input[type="search"]::-webkit-search-results-decoration{display:none}.contextual-bar{overflow:hidden;background-color:#ffffff;border-bottom:1px solid #d4d4d4}form.search-form{overflow:hidden;float:right;width:100%;position:relative}form.search-form input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:0;border-left:0;margin:0;width:100%;height:50px;float:left;font-size:1em;padding-top:0;padding-bottom:0;padding-right:30px;background-color:transparent;-webkit-appearance:none}form.search-form input:focus{border-color:#dd4814}form.search-form button[type=submit],form.search-form button[type=submit]:hover{position:absolute;top:10px;right:10px;display:block;height:30px;width:30px;padding:0;line-height:0;-webkit-appearance:none;background:transparent}form.search-form button img{height:16px}.contextual-nav{border:0;display:block;margin:0;padding-left:10px;background-color:transparent;overflow:hidden;float:left}.contextual-nav li,.contextual-nav li:last-child{font-size:0.875em;float:left;list-style-type:none;margin:0;margin-left:5px}.contextual-nav li a:link,.contextual-nav li a:visited,.contextual-nav .contextual-nav__label{display:block;color:#333333;font-weight:300;text-align:center;padding:16px 10px 10px 10px;border-bottom:3px solid transparent}.contextual-nav .contextual-nav__label{color:#cdcdcd}.contextual-nav li a:hover{border-bottom-color:#dd4814;text-decoration:none;color:#dd4814}.contextual-nav li a.active{border-bottom:3px solid #dd4814}.opera-mini header.banner .logo-ubuntu,.no-svg header.banner .logo-ubuntu{background-image:url(../img/logos/logo.png)}@media only screen and (min-width: 769px){header.banner .nav-primary ul li,header.banner .nav-primary ul li:last-child{border-bottom:0;width:auto}header.banner nav.nav-primary li a:link,header.banner nav.nav-primary li a:visited{border-left:1px solid #262626;font-weight:400}header.banner nav.nav-primary ul li a.active{padding-bottom:10px;background-color:#0e0c0b;border-bottom:3px solid #dd4814;border-left:1px solid #262626}header.banner nav.nav-primary ul li{border-left:1px solid #262626}header.banner nav.nav-primary ul li a:hover{background-color:#dd4814}header.banner nav.nav-primary ul{background-color:transparent;border-right:1px solid #262626;display:block}header.banner nav.nav-primary ul li:last-child{border-left:1px solid #262626;border-right:0}header.banner .nav-primary ul li a:active,header.banner .nav-primary ul li a:hover,header.banner .nav-primary ul li a:visited,header.banner nav.nav-primary ul li a:link{border-left:0}header.banner .nav-primary ul li a.external:hover{background-image:url("../img/icons/external-link-grey.png")}form.search-form{width:325px}form.search-form input{border-left:1px solid #d4d4d4;margin:0 20px;width:250px;font-size:0.875em}}@media only screen and (min-width: 1030px){header.banner{height:48px;overflow:hidden}header.banner .nav-primary{width:100%}}body{background-repeat:repeat}.row{border:0;background-color:rgba(255,255,255,0.6)}@media only screen and (min-width: 769px){.append-one{margin-right:10.6%}.row{padding:50px 40px 30px}}.inner-wrapper{*zoom:1;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background-color:transparent;background-image:none;margin:0 auto;padding-bottom:0;float:none}.inner-wrapper:before,.inner-wrapper:after{content:"";display:table}.inner-wrapper:after{clear:both}.wrapper{position:static;background:transparent;width:100%;overflow:hidden}img.touch-border{margin-bottom:-50px}.inner-wrapper,footer.global .legal{max-width:1030px;width:auto;padding-left:0;padding-right:0}.touch-top{margin-top:-50px}@media only screen and (max-width: 1030px){.inner-wrapper,footer.global .legal{padding-left:8px;padding-right:8px;width:auto}}.footer-cta{background:#fff;padding-bottom:20px}.footer-wrapper.strip-light{background-color:#fff}.solutions-cta{height:60px;background-color:#dd4814;line-height:60px;text-align:center}.solutions-cta a{color:#fff;font-size:1.25em}footer.global{background-color:white;box-shadow:none;padding-top:0}footer.global .row{padding:10px 0 0}footer.global .two-col{width:46%;float:left;display:inline-block;min-height:200px}footer.global h2{padding-bottom:0;color:#888888;font-size:16px}footer.global nav .canonlist ul li,footer.global nav .additional-info ul li{min-height:0;width:48%;float:left}footer.global ul.bullets li:after{line-height:1;color:#888888;content:"•";vertical-align:middle;margin:0 5px}footer.global ul.inline li:last-child{width:auto}footer.global a.external{background-image:url("../img/icons/external-link-dark.png")}footer.global .top-link{margin-bottom:10px}footer.global a{color:#333333}footer.global a:hover{color:#dd4814}footer.global .legal{background-image:none}footer.global .legal.has-cookie{padding-bottom:70px}footer.global .inner-wrapper{overflow:visible}footer.global a.link-cta-positive,footer.global a.link-cta-negative{width:auto;margin-top:10px;padding-left:20px;padding-right:20px;color:#fff;font-size:14px}footer.global .section__title{background:none;cursor:default}.legal-inner{clear:both;overflow:hidden;float:left;width:100%;padding:20px 10px 0;margin:-3px -10px 0}.social,.social--right{margin-left:0}.social .social__item,.social--right .social__item{display:inline;float:left;padding-right:1em}.social .social__google,.social .social__facebook,.social .social__twitter,.social--right .social__google,.social--right .social__facebook,.social--right .social__twitter{background-image:url("../img/icons/icon-social.png");display:block;width:45px;height:44px}.social .social__google.social__twitter:hover,.social .social__facebook.social__twitter:hover,.social .social__twitter.social__twitter:hover,.social--right .social__google.social__twitter:hover,.social--right .social__facebook.social__twitter:hover,.social--right .social__twitter.social__twitter:hover{background-position:0 -45px}.social .social__google.social__facebook,.social .social__facebook.social__facebook,.social .social__twitter.social__facebook,.social--right .social__google.social__facebook,.social--right .social__facebook.social__facebook,.social--right .social__twitter.social__facebook{background-position:90px 0}.social .social__google.social__facebook:hover,.social .social__facebook.social__facebook:hover,.social .social__twitter.social__facebook:hover,.social--right .social__google.social__facebook:hover,.social--right .social__facebook.social__facebook:hover,.social--right .social__twitter.social__facebook:hover{background-position:90px -45px}.social .social__google.social__google,.social .social__facebook.social__google,.social .social__twitter.social__google,.social--right .social__google.social__google,.social--right .social__facebook.social__google,.social--right .social__twitter.social__google{background-position:135px 0}.social .social__google.social__google:hover,.social .social__facebook.social__google:hover,.social .social__twitter.social__google:hover,.social--right .social__google.social__google:hover,.social--right .social__facebook.social__google:hover,.social--right .social__twitter.social__google:hover{background-position:135px -45px}@media only screen and (min-width: 768px){.social--right{float:right}}#additional-info{border-bottom:0}#additional-info h2:before{background-image:url("../img/icons/external-link-grey.svg"),none;background-repeat:no-repeat;background-size:14px 14px;content:"";display:inline-block;height:15px;margin-right:3px;position:relative;top:3px;width:15px}#additional-info div li{border-left:1px solid #d4d7d4;box-sizing:border-box;display:block;float:left;margin:0;padding:0;width:50%}#additional-info div li a{border-bottom:1px solid #d4d7d4;box-sizing:border-box;color:#333333;display:block;float:left;margin:0;overflow:hidden;padding:8px 10px;text-align:left;white-space:normal;width:100%}#additional-info .section__title{border-bottom:1px solid #d4d7d4;background-position:100% 0.1em}html.opera-mini footer #nav-global h2:before,html.opera-mini footer #additional-info h2:before,html.no-svg footer #nav-global h2:before,html.no-svg footer #additional-info h2:before{background-image:url("../img/icons/external-link-grey.png")}@media only screen and (min-width: 769px){.footer-wrapper.strip-light{white-space:nowrap}footer.global{padding-top:40px;padding-bottom:40px}footer.global .two-col{width:14.89361%;display:inline-block;min-height:0}footer.global .section{min-height:160px;margin-right:40px;padding-bottom:0;border-right:1px dotted #aaa;border-bottom:0}footer.global .section:last-child{margin-right:0;border-right:0}footer.global li{display:inline;float:left}footer.global ul.no-bullets li{border-right:1px dotted #aaa;padding-right:15px;padding-left:15px}footer.global ul.no-bullets li a{font-size:16px}footer.global ul.no-bullets li a:hover{color:#dd4814}footer.global ul.no-bullets li:last-child{border-right:none}footer.global ul.no-bullets li:first-child{padding-left:0px}#additional-info .section__title{border-bottom:0}#additional-info div li,#additional-info div a:link{width:100%;border:0}}.actions .actions__social-item--twitter,.actions .actions__social-item--google-plus{text-indent:-99999px;background-image:url("../img/icons/icon-social.svg");background-repeat:no-repeat;height:44px;width:44px;overflow:hidden;display:block}.actions .actions__social-item--twitter{background-position:0 0}.actions .actions__social-item--twitter:hover{background-position:0 -45px}.actions .actions__social-item--google-plus{background-position:-45px 0}.actions .actions__social-item--google-plus:hover{background-position:-45px -45px}.anchor{display:inline-block;margin-left:3px;opacity:.0;position:relative;top:1px;width:1em;height:1em;background:url("../img/icons/anchor_16.svg") 0 80% no-repeat;background-size:16px;-moz-transition:opacity 0.1s;-webkit-transition:opacity 0.1s;transition:opacity 0.1s}h1:hover .anchor,h2:hover .anchor,h3:hover .anchor,h4:hover .anchor,dt:hover .anchor,li:hover .anchor{opacity:1}.box{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;display:block;margin-bottom:0;border-top:0;border-left:0;border-right:0;padding-left:0;padding-right:0}.box-dim{background-color:#fafafa}@media only screen and (min-width: 768px){.box{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-moz-box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);-webkit-box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);box-shadow:0px 1px 1px 0px rgba(0,0,0,0.15);display:inline-block;margin-bottom:20px;padding-left:20px;padding-right:20px;border:0}}a.indent{-moz-box-shadow:inset 0 1px 2px 0 #333;-webkit-box-shadow:inset 0 1px 2px 0 #333;box-shadow:inset 0 1px 2px 0 #333;background:rgba(0,0,0,0.1);padding:10px 30px;text-weight:normal}a.indent:hover{background:rgba(0,0,0,0.2)}a.link-cta-positive,a.link-cta-negative{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#dd4814;color:#fff;display:inline-block;font-size:1.14286em;font-weight:300;text-decoration:none;margin:0;padding:8px 14px;text-align:center;-moz-transition:background 0.2s;-webkit-transition:background 0.2s;transition:background 0.2s;width:100%}a.link-cta-positive:hover,a.link-cta-negative:hover{background-color:#ae3910}a.link-cta-positive .external,a.link-cta-negative .external{padding-right:1em;background-image:url("../img/icons/external-link-white.svg");background-repeat:no-repeat;background-size:11px;background-position:right top}@media only screen and (min-width: 769px){a.link-cta-positive .external,a.link-cta-negative .external{padding-right:.7em}}a.link-cta-negative{background-color:#b2b2b2}a.link-cta-negative:hover{background-color:#888888}.charms__list{list-style:none;margin-bottom:1em;margin-left:0;border-bottom:1px dotted #d4d4d4}.charms__list .charms__list--config{display:none}.charms__list .charms__list--toggle{display:block}.charms__list .charms__list--toggle.is-open+.charms__list--config{display:block}.charms__list .charms__list--config-name{border-top:0}.charms__list--item{font-size:1em;border-top:1px dotted #d4d4d4;padding:10px 0 0 10px;margin-bottom:10px}.charms__list--item:last-of-type{margin-bottom:10px}.charms__list--icon{margin-right:.4em;width:25px;height:25px}.charms__list--toggle{background:url("../img/shared/icon-arrow-down.svg") no-repeat center center;width:16px;height:100%;float:right;text-indent:-99999px;margin-right:20px}.charms__list--toggle.is-open{background-image:url("../img/shared/icon-arrow-up.svg");background-size:14px}.charms__list--config{padding-left:35px;padding-bottom:20px}.charms__list--config-name{font-size:1em;margin-top:15px;padding-top:15px;font-weight:400;border-top:1px dotted #d4d4d4}.charms__list--config-name:first-of-type{border-top:0}.charms__list--config-type{font-weight:400}.charms__list--config-description,.charms__list--config-setting{margin-left:30px;margin-top:8px}.charms__list--config-setting{font-size:0.875em;color:#888888;font-family:"Ubuntu Mono","Consolas","Monaco","Lucida Console","Courier New",Courier,monospace}body.no-svg .charms__list .charms__list--toggle{background-image:url("../img/shared/icon-arrow-down.png")}body.no-svg .charms__list .charms__list--toggle.is-open{background-image:url("../img/shared/icon-arrow-up.png")}pre{background:transparent;border:1px solid #888888;margin:0 0 1.5em 0}pre:not(:first-child){margin-top:1.5em}code.language-bash .comment{color:#888888}.cookie-policy{-moz-box-shadow:0 -1px 2px rgba(0,0,0,0.2);-webkit-box-shadow:0 -1px 2px rgba(0,0,0,0.2);box-shadow:0 -1px 2px rgba(0,0,0,0.2);background-color:#fae4dc;bottom:0;position:fixed;width:100%;z-index:100}.cookie-policy p{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:13px;margin-bottom:0;margin-left:0;padding:8px 0;width:100%}.cookie-policy .link-cta{background-image:url(../img/icons/close-orange.svg);background-repeat:no-repeat;color:#fff;float:right;font-size:1em;height:15px;margin:12px 0;margin-top:12px;padding:0;text-decoration:none;text-indent:-9999px;width:16px}html.no-svg .cookie-policy .link-cta,html.opera-mini .cookie-policy .link-cta{background-image:url(../img/icons/close-orange.png)}html.opera-mini .cookie-policy{position:relative;top:0}.deploy-command{margin-bottom:10px;position:relative}.deploy-command .deploy-command__field{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 4px 4px;-moz-border-radius:4px 4px 4px 4px;border-radius:4px 4px 4px 4px;-moz-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);-webkit-box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);background-image:url("../img/icons/code-snippet_16.svg");background-repeat:no-repeat;background-position:5px center;background-color:#fff;background-size:1.142857143em;width:100%;height:37px;border:1px solid #c1c1c1;padding:.6em;color:#888888;padding-left:2em;font-size:0.875em;white-space:nowrap;overflow:hidden;cursor:text}.deploy-command .command2clipboard__clip{cursor:pointer;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;line-height:1;position:absolute;right:1px;top:1px;background-color:#ffffff;padding:9px 8px 7px;border-left:1px solid #b2b2b2;display:none}.deploy-command .command2clipboard__clip.zeroclipboard-is-hover{background-color:#eeeeee}@media only screen and (min-width: 1030px){.deploy-command .command2clipboard__clip{display:inline-block}}.dropdown-menu{position:relative;display:block}.dropdown-menu.open .menu-link{background-color:#000000}.dropdown-menu.open .dropdown{display:block}.dropdown-menu .menu-link .border-box{display:block;color:#f2f2f4}.dropdown-menu .dropdown{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;display:none;position:absolute;z-index:1000;top:0;left:0;right:0;width:auto;background-color:#ffffff;box-shadow:0 1px 5px rgba(0,0,0,0.2)}.dropdown-menu .dropdown.right{left:auto;right:0;text-align:right}.dropdown-menu .dropdown.narrow{min-width:140px;width:auto}.dropdown-menu .dropdown a,.dropdown-menu .dropdown p,.dropdown-menu .dropdown li{color:#333333}.dropdown-menu .dropdown p{padding:11px 20px}.dropdown-menu .dropdown header,.dropdown-menu .dropdown footer{background-color:#ffffff}.dropdown-menu .dropdown header{padding:11px 20px;color:#f2f2f4;font-size:16px;font-weight:300}.dropdown-menu .dropdown footer{padding:20px}.dropdown-menu .dropdown ul{width:auto;left:0;right:0}.dropdown-menu .dropdown ul li a{width:auto;display:block;padding:15px 20px}.files .files__list{list-style:none;margin-bottom:1em;border-left:1px solid #cbcbcb;margin-left:1em}@media only screen and (min-width: 768px){.files .files__list{margin-left:0}}.files .files__list li{position:relative}.files .files__list li a:link,.files .files__list li a:visited{color:#333;text-decoration:none}.files .files__list li:before{content:'';width:12px;height:1px;background:#d4d4d4;display:inline-block;position:relative;top:-4px;margin-right:5px}.files .files__list li:last-child:after{content:'';width:4px;height:1em;position:absolute;display:block;left:-2px;top:.85em;background:#fff}.files .files__list ul:last-child>li a:after{content:'';width:4px;height:3em;position:absolute;display:block;left:-1.8em;top:-1.45em;background:white;cursor:default}.files .files__list .files__list{margin-left:1.3em}.files .files__list .files__list--item,.files .files__list .files__list--item-folder{font-size:0.875em;margin-bottom:0.75em}.files .files__list .files__list--item-folder{background-position:center right;background-size:12px;cursor:pointer}.files .files__list .files__list--item-folder:after{font-size:14px;display:block;content:"-";position:absolute;left:-7px;top:4px;padding:0 4px;line-height:0.9em;background:#ffffff;border:1px solid #888888}.files .files__list .files__list--item-folder.is-closed+ul{display:none}.files .files__list .files__list--item-folder.is-closed:after{content:"+";padding:0 2px}.files .files__actions--launchpad{background:url("../img/icons/icon-launchpad.svg") no-repeat;padding-left:1.4em}#main-content .row-hero{padding-top:20px;margin-top:0}#main-content .row-hero .intro{font-size:16px}@media only screen and (min-width: 769px){#main-content .row-hero{padding-top:60px}#main-content .row-hero .intro{font-size:1.4375em;margin-bottom:40px}}.how-to div div img{float:left;margin:0 20px 20px 0}header.banner a.external,header.banner a.external:hover{background-image:url("../img/icons/external-link-grey.png")}a.external,a.external:hover,header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background-repeat:no-repeat}a.external,a.external:hover header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background-position:right 14px top 14px;padding-right:35px;background-size:auto}@media only screen and (max-width: 769px){header.banner nav.nav-primary ul li a.external:link,header.banner nav.nav-primary ul li a.external:visited,header.banner nav.nav-primary ul li a.external:hover{background:none}header.banner nav.nav-primary ul li a.external:after{display:inline-block;width:11px;height:11px;margin-left:0.25em;background-image:url("../img/icons/external-link-dark.png");vertical-align:text-top}}.list__icons{margin-left:0;margin-bottom:5px}.list__icons li{list-style:none;float:left;padding:8px 8px 0 0;margin-bottom:0}.list__icons li img{width:24px;height:24px;vertical-align:top}.list__tick{list-style-image:url("../img/icons/tick.png")}.list__middot{margin-left:0;list-style:none}.list__middot li{display:inline}.list__middot li:after{content:"•";color:#888;margin:0 5px 0 8px;vertical-align:middle}.list__middot li.files__actions--last:after{content:""}.combined-list .list li{border-bottom:1px dotted #888;padding:10px 0}@media only screen and (max-width: 767px){.combined-list .last-col .list li:last-of-type{border-bottom:0;padding-bottom:0}}@media only screen and (min-width: 768px){.combined-list .list li:last-of-type{border-bottom:0;padding-bottom:0}}.events-list li{position:relative;padding-bottom:20px}.events-list dd{margin-left:0;background-position:0 center;background-repeat:no-repeat;background-size:20px 20px;padding:6px 20px 6px 24px}.events-list .event-map{display:none}.events-list .event-date{background-image:url("../img/icons/calendar.svg")}.events-list .location{background-image:url("../img/icons/location.svg")}@media only screen and (min-width: 769px){.events-list .event-details-wrapper{padding-left:120px}.events-list .event-map{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;position:absolute;left:0;top:0;height:100px;width:100px;float:left;margin-right:10px;margin-top:5px;overflow:hidden;display:block}}body.no-svg .events-list .event-date{background-image:url("../img/icons/calendar.png")}body.no-svg .events-list .location{background-image:url("../img/icons/location.png")}.maintainers .maintainer__email{display:block}.ratings ul{margin-left:2px;margin-bottom:0}.ratings ul li{margin-bottom:0}.ratings ul li img{vertical-align:text-top}.ratings ul li:first-of-type{margin-left:0}.revisions__list{list-style:none;margin-left:0}.revisions__list .revisions__list-item{margin-bottom:1em}.revisions__list .revisions__list_meta{color:#888;margin-bottom:.2em}.revisions__list .revisions__list_meta_date{float:right}.section{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;padding-bottom:20px;padding-top:20px}.section .section__title{background:url(../img/shared/icon-arrow-up.svg) no-repeat center right;cursor:pointer;margin-bottom:1em}.section.is-closed{height:60px}.section.is-closed .section__title{background-image:url(../img/shared/icon-arrow-down.svg)}.no-svg .row.section .section__title{background:url(../img/shared/icon-arrow-up.png)}.no-svg .row.section.is-closed .section__title{background:url(../img/shared/icon-arrow-down.png)}footer .section{margin-bottom:1em;padding-bottom:1em}footer .section.is-closed{height:auto;padding-bottom:0}footer .section.is-closed ul{display:none}@media only screen and (min-width: 769px){.row .section .section__title{background-image:none;cursor:auto}.row .section.is-closed{height:auto}}.list--concealed .list-item{display:none}.list--concealed .list-item:first-of-type{display:list-item}.list--concealed.list--visible-6 .list-item:nth-child(-n+6){display:list-item}.list--concealed.list--visible-4 .list-item:nth-child(-n+4){display:list-item}.list--concealed.list--visible-2 .list-item:nth-child(-n+2){display:list-item}.list--concealed a.btn__see--less{display:none}.list--concealed a.btn__see--more{display:inline}.list--revealed .list__controls,.list--concealed .list__controls{display:block;margin-top:2em}.list--revealed .list--item{display:list-item}.list--revealed a.btn__see--less{display:inline}.list--revealed a.btn__see--more{display:none}a.btn__see--more,a.btn__see--less{-moz-transition:background 0.2s;-webkit-transition:background 0.2s;transition:background 0.2s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:#333;border-radius:2px;border:1px solid #b2b2b2;background:#fff;padding:0.38462em 1.15385em}a.btn__see--more:hover,a.btn__see--less:hover{background:#eee;text-decoration:none}.strip-dark,.strip-light{clear:both}.strip-dark{background-color:#2c001e;background-image:none;background-repeat:repeat;color:#fff}.strip-dark.solid{background-image:none;background-color:#2c001e}.strip-dark ul,.strip-dark ol{margin:0;padding:0}.strip-dark .icon,.strip-dark ol span{-moz-background-size:40px 40px;-webkit-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;background-image:url(../img/icons/list-icon-background.png);background-repeat:no-repeat;display:block;margin:0 20px 20px 0;padding:24px;float:left;width:16px;height:16px;padding:12px}.strip-light .icon,.strip-dark .icon{position:absolute}.strip-light{background-color:rgba(255,255,255,0.6)}.strip-dark ol,.strip-dark ul{padding:20px 0}.strip-light .icon{display:block;background-image:url(../img/icons/list-icon-background.png);padding:24px;margin:0 auto 48px}.strip-dark .connected-list li,.strip-light .connected-list li{margin-bottom:10px;min-height:52px}.strip-dark .connected-list li p,.strip-light .connected-list li p,.strip-dark .connected-list li h3,.strip-light .connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li p .strip-dark ol.connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li span{float:left;font-size:22px;font-weight:normal;height:26px;margin-left:0;margin-right:20px;padding-top:2px;position:absolute;text-align:center;width:16px}.strip-white{background:#fff}.strip-trans{background:transparent}.strip-green{background-image:linear-gradient(to right, #6fad23 0%, #7cc227 100%);overflow:hidden}.strip-green,.strip-green a{color:#fff}.strip-blue{background-image:linear-gradient(to right, #1076a2 0%, #359fcd 100%);overflow:hidden}.strip-blue,.strip-blue a{color:#fff}.tag-list{list-style:none;margin:0}.tag-list--item{display:inline-block;text-transform:lowercase}.tag-list--item a:link,.tag-list--item a:visited{color:#333}.tag-list--item a:after{content:','}.tag-list--item:last-child a:after{content:''}#twitter-feed,#blog-feed{margin:35px 0}#twitter-feed>ul,#blog-feed>ul{list-style:none;margin-left:0}#twitter-feed>ul li,#blog-feed>ul li{position:relative;margin-bottom:30px}#twitter-feed .user,#blog-feed .user{font-size:0.875em;margin-bottom:0.5em}#twitter-feed .user img,#blog-feed .user img{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;width:24px;height:24px;vertical-align:middle;margin-right:5px}#twitter-feed .user a:link,#twitter-feed .user a:visited,#twitter-feed .user a:hover,#blog-feed .user a:link,#blog-feed .user a:visited,#blog-feed .user a:hover{text-decoration:none}#twitter-feed .user span[data-scribe="element:name"],#blog-feed .user span[data-scribe="element:name"]{color:#333}#twitter-feed .tweet,#blog-feed .tweet{padding-left:33px;margin-bottom:.3em}#twitter-feed .timePosted,#blog-feed .timePosted{padding-left:33px;font-size:0.875em}#twitter-feed .interact,#blog-feed .interact{padding-left:33px}#twitter-feed .interact a:link,#twitter-feed .interact a:visited,#blog-feed .interact a:link,#blog-feed .interact a:visited{margin-right:20px}@media only screen and (min-width: 769px){#twitter-feed .timePosted{position:absolute;top:0;right:0;padding-left:0}}.spaced-segment{margin-bottom:50px}.spaced-segment h3{margin-bottom:1.3em}.strip-dark,.strip-light{clear:both}.strip-dark{background-color:#2c001e;background-image:none;background-repeat:repeat;color:#fff}.strip-dark.solid{background-image:none;background-color:#2c001e}.strip-dark ul,.strip-dark ol{margin:0;padding:0}.strip-dark .icon,.strip-dark ol span{-moz-background-size:40px 40px;-webkit-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;background-image:url(../img/icons/list-icon-background.png);background-repeat:no-repeat;display:block;margin:0 20px 20px 0;padding:24px;float:left;width:16px;height:16px;padding:12px}.strip-light .icon,.strip-dark .icon{position:absolute}.strip-light{background-color:rgba(255,255,255,0.6)}.strip-dark ol,.strip-dark ul{padding:20px 0}.strip-light .icon{display:block;background-image:url(../img/icons/list-icon-background.png);padding:24px;margin:0 auto 48px}.strip-dark .connected-list li,.strip-light .connected-list li{margin-bottom:10px;min-height:52px}.strip-dark .connected-list li p,.strip-light .connected-list li p,.strip-dark .connected-list li h3,.strip-light .connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li p .strip-dark ol.connected-list li h3{padding-left:50px}.strip-dark ol.connected-list li span{float:left;font-size:22px;font-weight:normal;height:26px;margin-left:0;margin-right:20px;padding-top:2px;position:absolute;text-align:center;width:16px}.strip-white{background:#fff}.strip-trans{background:transparent}.strip-green{background-image:linear-gradient(to right, #6fad23 0%, #7cc227 100%);overflow:hidden}.strip-green,.strip-green a{color:#fff}.strip-blue{background-image:linear-gradient(to right, #1076a2 0%, #359fcd 100%);overflow:hidden}.strip-blue,.strip-blue a{color:#fff}@media only screen and (min-width: 769px){.tip,.command2clipboard__clip{position:relative;display:inline-block}.tip .tip-content,.command2clipboard__clip .tip-content{position:absolute;z-index:98;left:-1000px;right:-1000px;top:-30px;font-weight:300;margin:auto;display:block;text-align:center;white-space:nowrap}.tip:hover .tip-content:after,.command2clipboard__clip.zeroclipboard-is-hover .tip-content:after{display:table;z-index:98;margin:auto;color:#fff;border-radius:3px;background:#000;box-shadow:none;font-size:12px;content:attr(data-tooltip);padding:4px 6px;white-space:nowrap;text-align:center}.tip:hover .tip-content:before,.command2clipboard__clip.zeroclipboard-is-hover .tip-content:before{position:absolute;top:100%;left:50%;margin-left:-5px;content:'';border:solid transparent;border-width:5px;border-top-color:#000}}.fake{display:block}*{-webkit-backface-visibility:hidden;margin:0}html{height:100%}body{height:100%;font-size:1.0em;font-family:'Ubuntu', Arial, 'libra sans', sans-serif;font-weight:300}hr{border:none;background:#B2B2B2;width:100%;height:1px;display:block;width:100%;float:left;margin-bottom:20px}ul,ol{margin-left:0}a.alt{color:#333}a.alt:hover{color:#dd4814}a:active,a:focus{outline:none}::selection{color:#FFF;background:#dd4814}::-moz-selection{color:#FFF;background:#dd4814}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:300;src:url("../fonts/ubuntu-l-webfont.eot?") format("eot"),url("../fonts/ubuntu-l-webfont.woff") format("woff"),url("../fonts/ubuntu-l-webfont.ttf") format("truetype"),url("../fonts/ubuntu-l-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:italic;font-weight:300;src:url("../fonts/ubuntu-li-webfont.eot?") format("eot"),url("../fonts/ubuntu-li-webfont.woff2") format("woff2"),url("../fonts/ubuntu-li-webfont.woff") format("woff"),url("../fonts/ubuntu-li-webfont.ttf") format("truetype"),url("../fonts/ubuntu-li-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:url("../fonts/ubuntu-r-webfont.eot?") format("eot"),url("../fonts/ubuntu-r-webfont.woff") format("woff"),url("../fonts/ubuntu-r-webfont.ttf") format("truetype"),url("../fonts/ubuntu-r-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:500;src:url("../fonts/ubuntu-m-webfont.eot?") format("eot"),url("../fonts/ubuntu-m-webfont.woff") format("woff"),url("../fonts/ubuntu-m-webfont.ttf") format("truetype"),url("../fonts/ubuntu-m-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:italic;font-weight:500;src:url("../fonts/ubuntu-mi-webfont.eot?") format("eot"),url("../fonts/ubuntu-mi-webfont.woff2") format("woff2"),url("../fonts/ubuntu-mi-webfont.woff") format("woff"),url("../fonts/ubuntu-mi-webfont.ttf") format("truetype"),url("../fonts/ubuntu-mi-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:url("../fonts/ubuntu-b-webfont.eot?") format("eot"),url("../fonts/ubuntu-b-webfont.woff2") format("woff2"),url("../fonts/ubuntu-b-webfont.woff") format("woff"),url("../fonts/ubuntu-b-webfont.ttf") format("truetype"),url("../fonts/ubuntu-b-webfont.svg#Ubuntu") format("svg")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:400;src:url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/GZMdC02DTXXx8AdUvU2etw.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:700;src:url("https://themes.googleusercontent.com/static/fonts/ubuntu/v5/pqisLQoeO9YTDCNnlQ9bfz8E0i7KZn-EPnyo3HZu7kw.woff") format("woff")}.accordion{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);margin-bottom:40px}.disabled .accordion{opacity:.5;pointer-events:none}.accordion .accordion__title{border-bottom:1px dotted #B2B2B2;padding:13px 20px 12px;margin:0;font-size:1.3em}.accordion .accordion__tab{border-bottom:1px dotted #B2B2B2}.accordion .accordion__tab:last-of-type{border:none}.accordion .accordion__tab .accordion__tab-title{padding:12px 20px;margin:0;color:#888;cursor:pointer;background:transparent url("../img/icons/accordion-open.svg") top 20px right 20px no-repeat}.accordion .accordion__tab .accordion__tab-title.active{background-image:url("../img/icons/accordion-close.svg")}.accordion .accordion__tab .accordion__tab-title.active+.accordion__tab-content{max-height:3000px;transition:max-height 0.5s ease-in}.accordion .accordion__tab .accordion__tab-content{max-height:0;transition:max-height 0.5s ease-out;overflow:hidden}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list{list-style-type:none;padding:0 20px 14px;margin:0}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item{margin-bottom:0.15em}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#333;width:100%;display:inline-block;padding-right:20px}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link:hover{color:#dd4814;text-decoration:none}.disabled .accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item .accordion__tab-link{color:#333}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active{font-weight:400}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active .accordion__tab-link{background:transparent url("../img/icons/cross.svg") top 7px right 0px no-repeat}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active:hover{color:#dd4814}.accordion .accordion__tab .accordion__tab-content .accordion__tab-list .accordion__tab-item.active:hover .accordion__tab-link{color:#dd4814;background-image:url("../img/icons/cross-orange.svg")}.cta-group .cta-group__link{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px 0px 0px 3px;-moz-border-radius:3px 0px 0px 3px;border-radius:3px 0px 0px 3px;display:inline-block;padding:10px 14px;text-align:center;color:#ffffff;background-color:#dd4814}.cta-group .cta-group__link:hover{cursor:pointer;text-decoration:none;background-color:#c03f11}.cta-group.secondary .cta-group__link{color:#dd4814;border:1px solid #b2b2b2;background-color:#FFF;line-height:1}.cta-group.secondary .cta-group__link:hover{cursor:pointer;background-color:#F2F2F2}a.link-cta-ubuntu,button.cta-ubuntu,input[type='submit'],form button[type='submit'],form input[type='submit']{font-size:1em;border:none;max-height:37px}a.link-cta-ubuntu[disabled],a.link-cta-ubuntu.disabled,button.cta-ubuntu[disabled],button.cta-ubuntu.disabled,input[type='submit'][disabled],input[type='submit'].disabled,form button[type='submit'][disabled],form button[type='submit'].disabled,form input[type='submit'][disabled],form input[type='submit'].disabled{cursor:default;opacity:.5}a.link-cta-ubuntu.clear,button.cta-ubuntu.clear,input[type='submit'].clear,form button[type='submit'].clear,form input[type='submit'].clear{background:none;color:#333}a.link-cta-ubuntu.secondary,button.cta-ubuntu.secondary,input[type='submit'].secondary,form button[type='submit'].secondary,form input[type='submit'].secondary{color:#dd4814;border:1px solid #b2b2b2;background:#FFF}a.link-cta-ubuntu.secondary.external,button.cta-ubuntu.secondary.external,input[type='submit'].secondary.external,form button[type='submit'].secondary.external,form input[type='submit'].secondary.external{background-image:url("../img/external-link-black.svg");background-size:16px 16px;background-repeat:no-repeat;background-position:top 8px right 8px}a.link-cta-ubuntu.secondary:hover,button.cta-ubuntu.secondary:hover,input[type='submit'].secondary:hover,form button[type='submit'].secondary:hover,form input[type='submit'].secondary:hover{background-color:#F2F2F2;cursor:pointer}a.link-cta-ubuntu.secondary[disabled],a.link-cta-ubuntu.secondary.disabled,button.cta-ubuntu.secondary[disabled],button.cta-ubuntu.secondary.disabled,input[type='submit'].secondary[disabled],input[type='submit'].secondary.disabled,form button[type='submit'].secondary[disabled],form button[type='submit'].secondary.disabled,form input[type='submit'].secondary[disabled],form input[type='submit'].secondary.disabled{cursor:default;color:#f5ae95;border:1px solid #ddd;background:#FFF;opacity:1}a.link-cta-ubuntu.secondary[disabled]:hover,a.link-cta-ubuntu.secondary.disabled:hover,button.cta-ubuntu.secondary[disabled]:hover,button.cta-ubuntu.secondary.disabled:hover,input[type='submit'].secondary[disabled]:hover,input[type='submit'].secondary.disabled:hover,form button[type='submit'].secondary[disabled]:hover,form button[type='submit'].secondary.disabled:hover,form input[type='submit'].secondary[disabled]:hover,form input[type='submit'].secondary.disabled:hover{background:#FFF}a.link-cta-ubuntu.text-button,button.cta-ubuntu.text-button,input[type='submit'].text-button,form button[type='submit'].text-button,form input[type='submit'].text-button{background-color:transparent;color:#333}a.link-cta-ubuntu.text-button:hover,button.cta-ubuntu.text-button:hover,input[type='submit'].text-button:hover,form button[type='submit'].text-button:hover,form input[type='submit'].text-button:hover{text-decoration:underline}a.link-cta-ubuntu.full,button.cta-ubuntu.full,input[type='submit'].full,form button[type='submit'].full,form input[type='submit'].full{display:block;width:100%}@media screen and (max-width: 768px){a.link-cta-ubuntu,button.cta-ubuntu,input[type='submit'],form button[type='submit'],form input[type='submit']{margin-bottom:20px}}a.link-cta-ubuntu{line-height:20px}.cta-group{float:left;width:auto;clear:both;position:relative;overflow:hidden}.cta-group .cta-group__link{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-height:36px;padding-right:49px;width:100%;line-height:1.2;position:relative;margin:0;text-align:left}.cta-group .cta-group__link:after{-webkit-border-radius:0px 3px 3px 0px;-moz-border-radius:0px 3px 3px 0px;border-radius:0px 3px 3px 0px;content:'';display:block;height:36px;width:34px;background:red;position:absolute;top:0;right:0;background-image:url("../img/chevron-white.svg");background-color:#dd4814;background-repeat:no-repeat;background-position:center}.cta-group .cta-group__link:hover{background-color:#dd4814}.cta-group .cta-group__link:hover:after{background-color:#c03f11}.cta-group .cta-group__dropdown{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;right:0;list-style:none;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);z-index:20;max-height:1000px;transition:max-height 0.3s ease-in;overflow:hidden;position:relative;clear:both}.cta-group .cta-group__dropdown.ng-hide{display:block !important;max-height:0;overflow:hidden;transition:max-height 0.3s ease-out}.cta-group .cta-group__dropdown .cta-group__item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;clear:both;padding:5px 10px;margin:0}.cta-group .cta-group__dropdown .cta-group__item a{color:#333;cursor:pointer;width:100%;float:left;margin:0}.cta-group .cta-group__dropdown .cta-group__item a:hover{color:#dd4814;text-decoration:none}.cta-group.secondary .cta-group__link{float:left;max-height:36px;width:100%}.cta-group.secondary .cta-group__link:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-image:url("../img/icons/accordion-open.svg");background-repeat:no-repeat;background-color:#fff;border:1px solid #b2b2b2;border-left:none;top:-1px;right:-1px}.cta-group.secondary .cta-group__link:hover{background-color:#FFF}.cta-group.secondary .cta-group__link:hover:after{background-color:#F2F2F2}.flash-messages{margin:0px auto;padding:0;max-width:1440px}@media screen and (max-width: 1030px){.flash-messages{margin:0px 10px 20px}}.flash-messages .flash-messages__item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.flash-messages .flash-messages__item.info{background-image:url("../img/icons/info.png");background-image:url("../img/icons/info.svg"),none}.flash-messages .flash-messages__item.success{background-image:url("../img/icons/success.png");background-image:url("../img/icons/success.svg"),none}.flash-messages .flash-messages__item.warning{background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}.flash-messages .flash-messages__item.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none}form input[type='text'],form input[type='number'],form input[type='search'],form input[type='password'],form input[type='email'],form input[type='url'],form textarea,form select,tags-input .tags .input,.accounts .api li input[type='text']{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;background:#FFF;color:#333;border:1px solid #D2D2D2;display:block;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;padding:0px 13px}form input[type='text']:active,form input[type='number']:active,form input[type='search']:active,form input[type='password']:active,form input[type='email']:active,form input[type='url']:active,form textarea:active,form select:active,tags-input .tags .input:active,.accounts .api li input[type='text']:active{border-color:#B2B2B2;outline:none}form input[type='text']:focus,form input[type='number']:focus,form input[type='search']:focus,form input[type='password']:focus,form input[type='email']:focus,form input[type='url']:focus,form textarea:focus,form select:focus,tags-input .tags .input:focus,.accounts .api li input[type='text']:focus{border-color:#B2B2B2;outline:none}form input.invalid[type='text'],form input.invalid[type='number'],form input.invalid[type='search'],form input.invalid[type='password'],form input.invalid[type='email'],form input.invalid[type='url'],form textarea.invalid,form select.invalid,tags-input .tags .invalid.input,.accounts .api li input.invalid[type='text'],form input.ng-invalid[type='text'],form input.ng-invalid[type='number'],form input.ng-invalid[type='search'],form input.ng-invalid[type='password'],form input.ng-invalid[type='email'],form input.ng-invalid[type='url'],form textarea.ng-invalid,form select.ng-invalid,tags-input .tags .ng-invalid.input,.accounts .api li input.ng-invalid[type='text']{border-color:#d90000}form input[disabled="disabled"][type='text'],form input[disabled="disabled"][type='number'],form input[disabled="disabled"][type='search'],form input[disabled="disabled"][type='password'],form input[disabled="disabled"][type='email'],form input[disabled="disabled"][type='url'],form textarea[disabled="disabled"],form select[disabled="disabled"],tags-input .tags [disabled="disabled"].input,.accounts .api li input[disabled="disabled"][type='text']{-webkit-text-fill-color:#333;border-color:#D2D2D2;background-color:transparent}label{position:relative}.disabled label{cursor:default}form li.help-msg{margin-bottom:1em}form li.help-msg .help{color:#888;font-size:0.875em}form label span{color:#333}form input[type='text'],form input[type='number'],form input[type='search'],form input[type='password'],form input[type='email'],form input[type='url']{padding:7px 10px}form input[type='text']::-webkit-input-placeholder,form input[type='number']::-webkit-input-placeholder,form input[type='search']::-webkit-input-placeholder,form input[type='password']::-webkit-input-placeholder,form input[type='email']::-webkit-input-placeholder,form input[type='url']::-webkit-input-placeholder{color:#888}form input[type='text']:-moz-placeholder,form input[type='number']:-moz-placeholder,form input[type='search']:-moz-placeholder,form input[type='password']:-moz-placeholder,form input[type='email']:-moz-placeholder,form input[type='url']:-moz-placeholder{color:#888}form input[type='text']::-moz-placeholder,form input[type='number']::-moz-placeholder,form input[type='search']::-moz-placeholder,form input[type='password']::-moz-placeholder,form input[type='email']::-moz-placeholder,form input[type='url']::-moz-placeholder{color:#888}form input[type='text']:-ms-input-placeholder,form input[type='number']:-ms-input-placeholder,form input[type='search']:-ms-input-placeholder,form input[type='password']:-ms-input-placeholder,form input[type='email']:-ms-input-placeholder,form input[type='url']:-ms-input-placeholder{color:#888}form input[type='number']{padding-right:15px}form input[type='search']{-webkit-appearance:textfield}form input[type='search']::-webkit-search-decoration,form input[type='search']::-webkit-search-cancel-button{-webkit-appearance:none}form input[type='radio'],form input[type='image']{display:inline-block;margin-right:10px}form textarea{overflow:auto;height:auto;min-height:175px;padding:7px 10px;vertical-align:top}form select{display:block;clear:both;cursor:pointer;margin:0;background-image:url("../img/icons/accordion-open.svg");background-repeat:no-repeat;background-position:top 16px right 10px;padding:6px 30px 6px 10px;-moz-appearance:none;text-indent:0.01px;text-overflow:''}form select[multiple],form select[size]{height:auto;background-image:none;padding-top:10px}form select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}form select[disabled]{color:#888;background-image:none}form select::-ms-expand{display:none}form fieldset{background:none;margin-left:0;padding:0}.checkbox{visibility:hidden;width:0;height:0;margin-right:0;position:absolute}.checkbox+.checkbox-label{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-left:20px;position:relative}.checkbox+.checkbox-label:before{content:"";display:inline-block;width:20px;height:20px;position:absolute;top:0;left:0;background:url("../img/checkbox.svg") no-repeat;background-size:13px 13px;background-position:0px 3px}.checkbox:checked+.checkbox-label:before{background:url("../img/checkbox-checked.svg") no-repeat;background-position:0px 3px}.checkbox[disabled="disabled"]+.checkbox-label:before{cursor:default;opacity:0.5}.field-error,.errors{color:#DF382C}.field-error .errorlist,.errors .errorlist{margin:0}.field-error .errorlist li,.errors .errorlist li{margin:0 0 14px 0}.inline{display:inline-block;width:100%;font-size:0;margin-bottom:10px}.inline.error{background-color:#fdf5f5;box-shadow:0px 0px 0px 5px #fdf5f5}.inline.error .ng-invalid{border-color:#D2D2D2}.inline:last-of-type{margin-bottom:0}.inline label{display:inline-block;float:none;font-size:16px;margin:0}.inline input[type='submit'],.inline input[type='text'],.inline input[type='number'],.inline input[type='search'],.inline input[type='password'],.inline input[type='email'],.inline input[type='checkbox'],.inline select{display:inline-block;clear:none;margin:0;float:none;font-size:16px}.inline input[type='submit']:invalid,.inline input[type='text']:invalid,.inline input[type='number']:invalid,.inline input[type='search']:invalid,.inline input[type='password']:invalid,.inline input[type='email']:invalid,.inline input[type='checkbox']:invalid,.inline select:invalid{-moz-box-shadow:none}.inline input[type='submit']:-moz-submit-invalid,.inline input[type='text']:-moz-submit-invalid,.inline input[type='number']:-moz-submit-invalid,.inline input[type='search']:-moz-submit-invalid,.inline input[type='password']:-moz-submit-invalid,.inline input[type='email']:-moz-submit-invalid,.inline input[type='checkbox']:-moz-submit-invalid,.inline select:-moz-submit-invalid{box-shadow:none}.inline input[type='submit']:-moz-ui-invalid,.inline input[type='text']:-moz-ui-invalid,.inline input[type='number']:-moz-ui-invalid,.inline input[type='search']:-moz-ui-invalid,.inline input[type='password']:-moz-ui-invalid,.inline input[type='email']:-moz-ui-invalid,.inline input[type='checkbox']:-moz-ui-invalid,.inline select:-moz-ui-invalid{box-shadow:none}.inline div{float:none;margin:0}.inline input.cta-ubuntu,.inline a.link-cta-ubuntu,.inline button.cta-ubuntu{font-size:16px}.inline .icon{position:absolute;top:11px;right:10px;cursor:pointer}.inline .error-message{font-size:12px;color:#e85232;margin-top:10px;margin-bottom:10px;font-weight:normal}.form-inline label,.form-inline button,.form-inline input[type='submit'],.form-inline input[type='text'],.form-inline input[type='number'],.form-inline input[type='search'],.form-inline input[type='password'],.form-inline input[type='email'],.form-inline input[type='checkbox'],.form-inline select{display:inline-block;width:auto;vertical-align:middle;margin-bottom:0}.form-inline input,.form-inline input[type='submit'] input[type='text'],.form-inline input[type='number'],.form-inline input[type='search'],.form-inline input[type='password'],.form-inline input[type='email'],.form-inline input[type='checkbox'],.form-inline select{margin-left:20px}.form-inline fieldset{width:auto;display:inline-block;margin:0 40px 0 0}.controls{position:absolute;top:0;right:20px}.controls a,.controls button{margin-left:20px}.icon{background-size:16px 16px;width:16px;height:16px;padding:0;display:inline-block}.icon.icon__loading{background:url("../img/in_progress.png") no-repeat;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear}a.icon{cursor:pointer}dl dt{clear:left}dl dd{color:#888;margin-left:0}dl dt,dl dd{display:inline-block;float:left;line-height:37px;margin-bottom:10px !important}tags-input{outline:none}tags-input .host:focus{outline:none}tags-input .tags:focus,tags-input .tags.focused{outline:none}tags-input .tags .tag-list{margin:4px 0 0;padding:0;list-style-type:none;width:100%;float:left}tags-input .tags .tag-item{display:inline-block;float:left;font-family:Ubuntu,Arial,"libra sans",sans-serif;font-size:1em;font-weight:300;height:30px;line-height:30px;cursor:default;color:#000;padding-right:15px;position:relative;margin:0 11px 0 0}tags-input .tags .tag-item .remove-button{display:inline-block;width:12px;height:12px;text-indent:-999em;background:url("../img/icons/cross.svg") no-repeat;background-size:12px 12px;position:absolute;right:0;top:9px;cursor:pointer}tags-input .tags .tag-item .remove-button:hover{text-decoration:none}tags-input .tags .input{padding:7px 10px;width:100% !important;float:left;position:relative !important;left:0}tags-input .tags .input::-ms-clear{display:none}tags-input .autocomplete{float:left;width:100%}tags-input .autocomplete .suggestion-list{background:#FFF;padding:10px 8px;border:1px solid #D2D2D2;border-top:0;border-radius:0 0 2px 2px}tags-input .autocomplete .suggestion-list li:hover{background:#EEE;cursor:pointer}tags-input[disabled] .host:focus{outline:none}tags-input[disabled] .tags{cursor:default}tags-input[disabled] .tags .tag-item .remove-button{cursor:default}tags-input[disabled] .tags .input{cursor:default}.tag-link{margin-right:10px}.tag-link:last-of-type:after{content:''}.table__data tags-input .tags{margin-top:-10px}.table__data tags-input .tags input{margin-left:0;width:50% !important;float:left}.pagination{margin:10px 0;text-align:center}.pagination .inactive{color:#AEA79F}.pagination a,.pagination span{margin:0 5px}.search{position:relative;padding-bottom:20px}.search input[type='search']{-webkit-appearance:textfield}.search .search__input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;list-style:none;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);width:100%;border:none;padding:13px 20px;font-size:1.25em}.search .search__input::-webkit-input-placeholder{color:#000 !important}.search .search__input:-moz-placeholder{color:#000 !important}.search .search__input::-moz-placeholder{color:#000 !important}.search .search__input:-ms-input-placeholder{color:#000 !important}.search .search__input[disabled="disabled"]{background-color:#fff;opacity:.5;pointer-events:none}.search .search__input[disabled="disabled"]+.search__submit.close{pointer-events:none;opacity:.5}.search .search__submit{position:absolute;top:15px;right:25px;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat;text-indent:-999em;display:block;width:21px;height:20px;overflow:hidden;outline:none;padding:0;border:none}.search .search__submit:hover{background-color:transparent;background-image:url("../img/search-icon.svg")}.search .search__submit.close{background-image:url("../img/icons/cross.svg");background-size:21px;margin-top:2px}.search .search__submit.close:hover{background-image:url("../img/icons/cross.svg")}.spinner-col{width:10px}.spinner{float:left;margin:0 auto;text-indent:-9999em}.spinner.spin{background:url("../img/in_progress.png") no-repeat;background-size:16px 16px;width:16px;height:16px;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear;padding:0}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}table{text-align:left;width:100%;margin-bottom:40px;border-collapse:separate;border-spacing:0;font-size:16px}table th,table td{background:transparent;text-align:left;padding:13px 10px}table th .checkbox+.checkbox-label::before,table td .checkbox+.checkbox-label::before{top:-2px}table thead th{background:transparent;color:#888;border:none;border-bottom:1px solid #B2B2B2}table tbody tr:hover .icon-controls a{opacity:1}table tbody td{border:none;border-bottom:1px dotted #B2B2B2;position:relative}table tbody td.icon-controls{text-align:right}table tbody td.icon-controls a{opacity:0}table tbody td input[type="text"]{position:absolute;left:10px;top:6px;width:80%}.table-listing{text-align:left;width:100%;margin:0 0 40px 0;border-collapse:separate;border-spacing:0}.table-listing .table-listing__row:hover .table-listing__cell{background-color:#FFF}.table-listing .table-listing__row.error{background-color:#F3E3E2}.table-listing .table-listing__row.error .status{color:#DD3832}.table-listing .table-listing__row.progress{background-color:rgba(25,182,238,0.1)}.table-listing .table-listing__row.selected{background-color:#FFF}.table-listing .table-listing__header{background:transparent;color:#888;border:none;border-bottom:1px solid #B2B2B2}.table-listing .table-listing__header .table-listing__header-link{background-repeat:no-repeat;background-position:top 8px right 0;color:#888}.table-listing .table-listing__header .table-listing__header-link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.table-listing .table-listing__header .table-listing__header-link:focus,.table-listing .table-listing__header .table-listing__header-link:active,.table-listing .table-listing__header .table-listing__header-link:visited{text-decoration:none}.table-listing .table-listing__header .table-listing__header-link.active{color:#333}.table-listing .table-listing__header .table-listing__header-link.sort{border-bottom:1px solid #333}.table-listing .table-listing__header .divide{width:1px;display:inline-block;background:#D2D2D2 none repeat scroll 0% 0%;height:10px;padding:0px;margin:0px 5px}.table-listing .table-listing__cell{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;border-bottom:1px dotted #B2B2B2;position:relative}.table-listing .table-listing__cell.icon-controls{text-align:right;opacity:0}.table-listing .table-listing__cell input,.table-listing .table-listing__cell select{position:absolute;left:10px;top:5px;width:80%}.table-listing .fixed{max-width:200px;min-width:200px;width:200px;padding-left:0}.table-listing__header .table-listing .fixed{padding-left:0}.table-listing.no-hover .table-listing__row:hover .table-listing__cell,.table-listing.no-hover .table-listing__row:hover td{background-color:transparent}.t1{width:1%}.t2{width:2%}.t3{width:3%}.t4{width:4%}.t5{width:5%}.t6{width:6%}.t7{width:7%}.t8{width:8%}.t9{width:9%}.t10{width:10%}.t11{width:11%}.t12{width:12%}.t13{width:13%}.t14{width:14%}.t15{width:15%}.t16{width:16%}.t17{width:17%}.t18{width:18%}.t19{width:19%}.t20{width:20%}.t21{width:21%}.t22{width:22%}.t23{width:23%}.t24{width:24%}.t25{width:25%}.t26{width:26%}.t27{width:27%}.t28{width:28%}.t29{width:29%}.t30{width:30%}.t31{width:31%}.t32{width:32%}.t33{width:33%}.t34{width:34%}.t35{width:35%}.t36{width:36%}.t37{width:37%}.t38{width:38%}.t39{width:39%}.t40{width:40%}.t41{width:41%}.t42{width:42%}.t43{width:43%}.t44{width:44%}.t45{width:45%}.t46{width:46%}.t47{width:47%}.t48{width:48%}.t49{width:49%}.t50{width:50%}.t51{width:51%}.t52{width:52%}.t53{width:53%}.t54{width:54%}.t55{width:55%}.t56{width:56%}.t57{width:57%}.t58{width:58%}.t59{width:59%}.t60{width:60%}.t61{width:61%}.t62{width:62%}.t63{width:63%}.t64{width:64%}.t65{width:65%}.t66{width:66%}.t67{width:67%}.t68{width:68%}.t69{width:69%}.t70{width:70%}.t71{width:71%}.t72{width:72%}.t73{width:73%}.t74{width:74%}.t75{width:75%}.t76{width:76%}.t77{width:77%}.t78{width:78%}.t79{width:79%}.t80{width:80%}.t81{width:81%}.t82{width:82%}.t83{width:83%}.t84{width:84%}.t85{width:85%}.t86{width:86%}.t87{width:87%}.t88{width:88%}.t89{width:89%}.t90{width:90%}.t91{width:91%}.t92{width:92%}.t93{width:93%}.t94{width:94%}.t95{width:95%}.t96{width:96%}.t97{width:97%}.t98{width:98%}.t99{width:99%}.t100{width:100%}.table__column--1{width:1%}.table__column--2{width:2%}.table__column--3{width:3%}.table__column--4{width:4%}.table__column--5{width:5%}.table__column--6{width:6%}.table__column--7{width:7%}.table__column--8{width:8%}.table__column--9{width:9%}.table__column--10{width:10%}.table__column--11{width:11%}.table__column--12{width:12%}.table__column--13{width:13%}.table__column--14{width:14%}.table__column--15{width:15%}.table__column--16{width:16%}.table__column--17{width:17%}.table__column--18{width:18%}.table__column--19{width:19%}.table__column--20{width:20%}.table__column--21{width:21%}.table__column--22{width:22%}.table__column--23{width:23%}.table__column--24{width:24%}.table__column--25{width:25%}.table__column--26{width:26%}.table__column--27{width:27%}.table__column--28{width:28%}.table__column--29{width:29%}.table__column--30{width:30%}.table__column--31{width:31%}.table__column--32{width:32%}.table__column--33{width:33%}.table__column--34{width:34%}.table__column--35{width:35%}.table__column--36{width:36%}.table__column--37{width:37%}.table__column--38{width:38%}.table__column--39{width:39%}.table__column--40{width:40%}.table__column--41{width:41%}.table__column--42{width:42%}.table__column--43{width:43%}.table__column--44{width:44%}.table__column--45{width:45%}.table__column--46{width:46%}.table__column--47{width:47%}.table__column--48{width:48%}.table__column--49{width:49%}.table__column--50{width:50%}.table__column--51{width:51%}.table__column--52{width:52%}.table__column--53{width:53%}.table__column--54{width:54%}.table__column--55{width:55%}.table__column--56{width:56%}.table__column--57{width:57%}.table__column--58{width:58%}.table__column--59{width:59%}.table__column--60{width:60%}.table__column--61{width:61%}.table__column--62{width:62%}.table__column--63{width:63%}.table__column--64{width:64%}.table__column--65{width:65%}.table__column--66{width:66%}.table__column--67{width:67%}.table__column--68{width:68%}.table__column--69{width:69%}.table__column--70{width:70%}.table__column--71{width:71%}.table__column--72{width:72%}.table__column--73{width:73%}.table__column--74{width:74%}.table__column--75{width:75%}.table__column--76{width:76%}.table__column--77{width:77%}.table__column--78{width:78%}.table__column--79{width:79%}.table__column--80{width:80%}.table__column--81{width:81%}.table__column--82{width:82%}.table__column--83{width:83%}.table__column--84{width:84%}.table__column--85{width:85%}.table__column--86{width:86%}.table__column--87{width:87%}.table__column--88{width:88%}.table__column--89{width:89%}.table__column--90{width:90%}.table__column--91{width:91%}.table__column--92{width:92%}.table__column--93{width:93%}.table__column--94{width:94%}.table__column--95{width:95%}.table__column--96{width:96%}.table__column--97{width:97%}.table__column--98{width:98%}.table__column--99{width:99%}.table__column--100{width:100%}#commissioning_scripts .script-content.slider{overflow:hidden}#commissioning_scripts .script-content.slider pre{margin-top:20px}.table{display:table;border-color:#B2B2B2;border-collapse:collapse;border-spacing:0;overflow-x:scroll;margin-bottom:20px;margin:0 0 2.5em;width:100%}.table .table__row{float:left;width:100%;display:table-row;border-bottom:1px dotted #B2B2B2}.table .table__row:hover{background-color:#FFF}.table .table__row:hover .table__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row:hover .table__input.invalid{border-color:#D90000}.table .table__row:hover .table__input[disabled]{border-color:transparent;color:#333}.table .table__row:hover .table__controls{z-index:1;opacity:1}.table .table__row:hover .table__controls--secondary{z-index:1;opacity:1}.table .table__row.table__row--no-hover:hover{background-color:transparent}.table .table__row.active{background-color:#FFF}.table .table__row.active .table__dropdown .table__data,.table .table__row.active .table__dropdown .table__input{color:#333}.table .table__row.active:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.active:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.active:hover .table__dropdown .table__input{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input.editible{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.active .table__input[disabled]{border-color:transparent;color:#333}.table .table__row.active .table__dropdown{max-height:3000px}.table .table__row.selected .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.selected:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.selected:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.selected:hover .table__dropdown .table__input{pointer-events:all;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__row.disabled>.table__data{color:#888;pointer-events:none}.table .table__row.disabled>.table__data>.table__input{color:#888;pointer-events:none}.table .table__row.disabled .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.disabled:hover .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.disabled:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.disabled:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__row.noEdit .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.noEdit:hover .table__input{background-color:transparent;border-color:transparent;background-position:right -9999em top -9999em;pointer-events:none}.table .table__row.noEdit:hover .table__controls{opacity:0;z-index:-1000;pointer-events:none}.table .table__row.noEdit:hover .table__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.table .table__header,.table .table__data{font-size:16px;display:table-cell;padding:13px 10px;box-sizing:border-box;height:100%;background:none;border:0;text-align:left;float:left}.table .table__header a,.table .table__data a{color:#dd4814}.table .table__header a:hover,.table .table__data a:hover{cursor:pointer}.table .table__head{display:table-head;width:100%;box-sizing:border-box}.table .table__head .table__row{border-bottom:1px solid #B2B2B2}.table .table__head .table__row:hover{background-color:transparent}.table .table__head .table__header{font-size:13px;background:none;color:#888}.table .table__head a,.table .table__head .table__header-link{color:#888}.table .table__head a:hover,.table .table__head .table__header-link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.table .table__head a.active,.table .table__head .table__header-link.active{color:#333;text-decoration:none}.table .table__head a.sort,.table .table__head .table__header-link.sort{border-bottom:1px solid inherit}.table .table__head .divide{width:1px;display:inline-block;background:#888;height:10px;margin:0 5px}.table .table__body{display:table-row-group}.table .table__footer{display:table-footer-group}.table .table__label{clear:both;display:block;margin-top:11px;color:#BCBCBC}.table .table__label a{color:#BCBCBC}.table .table__label a:hover{color:#dd4814}.table .table__label.active a{color:#dd4814}.table .table__controls{width:100%;text-align:right;opacity:0;z-index:-1000}.table .table__controls--secondary{opacity:0;z-index:-1000;width:auto;text-align:left}.table .table__tags .table__tag{display:inline-block;margin-right:5px}.table .table__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:transparent;border-color:transparent;background-position:-9999px -9999px}.table .table__input.invalid{border-color:transparent}.table .table__input.invalid:focus{border-color:#D90000}.table .table__input[disabled]{border-color:transparent;color:#333}.table .table__input:focus{background-color:#FFF;border-color:#D2D2D2}.table label{font-size:13px;color:#BCBCBC}.table input,.table select{margin:0 0 0 -14px}.table input[type="radio"]{margin-left:0}.table ul li{margin:0;margin-top:14px}.table ul li:first-of-type{margin-top:0}.table .table__dropdown{width:100%;max-height:0;overflow-y:hidden}.table .table__dropdown .table__dropdown-row{border-bottom:0;position:relative;max-height:0;transition:max-height 0.1s ease-out;overflow:hidden}.table .table__dropdown .table__dropdown-row.active{max-height:500px;transition:max-height 0.25s ease-in}.table .table__dropdown .table__dropdown-row:before{display:block;margin:0 auto;width:calc(100% - 20px);border-top:1px dotted #B2B2B2;position:absolute;height:1px;content:'';top:0;left:10px}.table .table__dropdown .table__dropdown-row.table__dropdown-row--head{border-bottom:0}.table .table__dropdown .table__dropdown-row.table__dropdown-row--head .table__header{color:#BCBCBC;font-size:13px}.table .table__dropdown .table__dropdown-row.no-border{border:0}.table .table__dropdown .table__dropdown-row.no-border:before{border:0}.table .table__dropdown .table__dropdown-row .table__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.table .table__dropdown--info{width:100%;max-height:0;background-color:transparent}.table .table__dropdown--info .table__dropdown-row--info{border-bottom:0;position:relative;max-height:0;transition:max-height 0.1s ease-out;overflow:hidden}.table .table__dropdown--info .table__dropdown-row--info.active{max-height:500px;transition:max-height 0.25s ease-in}.table .table__dropdown--info .table__dropdown-row--info .table__data{color:#BCBCBC}h1 span,h2 span,h3 span,h4 span,h5 span{color:#888;font-size:75%;padding-left:20px}h4{font-size:20px;font-weight:300}pre{border:0;background-color:#FFF;border-radius:2px}pre code{counter-reset:line-numbering}pre code .line{float:left}pre code .line::before{content:counter(line-numbering);counter-increment:line-numbering;padding-right:1em;width:1.5em;text-align:right;opacity:0.5;pointer-events:none;user-select:none}.yui3-node-add-widget{width:65.9292%;margin-right:2.21238%}@media screen and (max-width: 768px){.yui3-node-add-widget{width:100%;margin:0}}.yui3-node-add-widget .buttons{margin-top:30px}.yui3-node-add-widget .add-link img.icon{margin-right:6px}.yui3-overlay{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;background-color:#fff;-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,0.5);box-shadow:0 0 10px 0 rgba(0,0,0,0.5)}.yui3-overlay ul{padding:5px 0}.yui3-overlay li{float:none}.yui3-overlay li:last-child a{border-bottom:none}.yui3-overlay a{display:block;padding:6px 20px;color:#dd4814 !important;border-bottom:1px solid #e5e2e0}.yui3-overlay a:focus,.yui3-overlay a:hover{background-color:#f2f2f2}.yui3-overlay-hidden{display:none}.yui3-widget-mask{background-color:#000;opacity:0.3}.yui3-panel{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;background-color:#FFF;padding:50px 80px 50px 80px;-webkit-box-shadow:0 0 15px 0 #000;box-shadow:0 0 15px 0 #000}.yui3-panel .yui3-button{float:right}.yui3-panel .yui3-button.link-button{float:left;padding-left:0;padding-right:0;color:#dd4814;border:none;background:none;-webkit-box-shadow:none;box-shadow:none;font-size:13px}.yui3-widget-hd{margin-bottom:30px;font-size:24px}.yui3-widget-ft{margin-top:50px}.yui3-widget-button-wrapper{width:100%}.icon{margin-left:5px;width:16px;height:16px;display:inline-block;text-indent:999em;background-repeat:no-repeat;background-size:16px 16px;vertical-align:middle}.icon.info{background-image:url("../img/icons/info.png");background-image:url("../img/icons/info.svg"),none}.icon.edit{background-image:url("../img/icons/edit.png");background-image:url("../img/icons/edit.svg"),none}.icon.delete{background-image:url("../img/icons/delete.png");background-image:url("../img/icons/delete.svg"),none}.icon.remove{background-image:url("../img/icons/filter-remove.svg"),none}.icon.warning{background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}.icon.debug{background-image:url("../img/icons/debug.png");background-image:url("../img/icons/debug.svg"),none}.icon.success,.icon.tick{background-image:url("../img/icons/success.png");background-image:url("../img/icons/success.svg"),none}.icon.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none}.icon.partition{background-image:url("../img/icons/partition.svg")}.icon.add{background-image:url("../img/icons/add.svg")}.icon.tags{background-image:url("../img/icons/tags.svg")}.icon.mount{background-image:url("../img/icons/mount.svg")}.icon.unmount{background-image:url("../img/icons/unmount.svg")}.clear{clear:both}.hidden{display:none}.align-right{text-align:right}.align-center{text-align:center}.align-left{text-align:left}.right{float:right !important}.left{float:left !important}.border{border-top:1px dotted #B2B2B2}.border.bottom{border-bottom:1px dotted #B2B2B2}.border.solid{border-style:solid}.vertical-align{position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.margin-top{margin-top:20px}.margin-top--five{margin-top:5px}.margin-top--ten{margin-top:10px}.margin-right{margin-right:20px !important}.margin-right--ten{margin-right:10px !important}.margin-bottom{margin-bottom:20px}.margin-left{margin-left:20px !important}.margin-left--ten{margin-left:10px !important}.margin-left--thirty{margin-left:30px !important}.padding-top{padding-top:20px}.padding-top--ten{padding-top:10px !important}.padding-right{padding-right:20px}.padding-bottom{padding-bottom:20px !important}.padding-bottom--ten{padding-bottom:10px !important}.padding-left{padding-left:20px !important}.padding-left--30,.padding-left--thirty{padding-left:30px !important}.padding-left--35{padding-left:35px !important}.padding-left--45{padding-left:45px !important}.padding-left--50{padding-left:50px !important}.border-top{border-top:1px dotted #888}.add-machine__list .add-machine__details,.border-bottom{border-bottom:1px dotted #888}.no-margin{margin:0}.no-margin-top{margin-top:0 !important}.no-padding{padding:0}.no-padding-top{padding-top:0 !important}.no-padding-left{padding-left:0}.no-padding-bottom{padding-bottom:0 !important}.no-margin-bottom{margin-bottom:0}.width--auto{width:auto}.width--half{width:50%}.width--full{width:100%}.tooltip{position:relative}.tooltip::before{content:attr(data-tooltip);font-size:13px;font-weight:400;position:absolute;z-index:999;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);background:#333;color:#FFF;padding:10px;text-indent:0;opacity:0;transition:opacity 0.4s ease-out;border-radius:5px;box-shadow:0px 1px 3px 0 rgba(51,51,51,0.2);top:-9999em}.tooltip::after{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);content:'';width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;z-index:1000;transition:opacity 0.4s ease-out;border-top:5px solid #333;opacity:0;top:-9999em}.tooltip:hover::before{opacity:1 !important;top:-47px}.tooltip:hover::after{opacity:1 !important;top:-10px}.link-cta-ubuntu.tooltip:hover::before,.cta-ubuntu.tooltip:hover::before{top:-50px}.footer-wrapper{border-top:1px dotted #b2b2b2}.footer-wrapper footer.global{background-color:transparent;padding-top:0px;padding-right:20px;padding-left:20px;background-image:url("../img/logos/logo-ubuntu-orange.png");background-image:url("../img/logos/logo-ubuntu-orange.svg"),none;background-size:107px 25px;background-position:top 20px right 20px;background-repeat:no-repeat;max-width:1480px}.footer-wrapper footer.global p{font-size:0.875em}.footer-wrapper footer.global a{margin:0 5px;color:#dd4814}.footer-wrapper footer.global .version{font-weight:500;margin-right:5px}.footer-wrapper footer.global .copy{margin-top:10px}.footer-wrapper footer.global .legal{max-width:1440px}.wrapper{min-height:100%;height:auto !important;height:100%;margin:0 auto -112px;position:relative;background:rgba(255,255,255,0.6);padding-top:172px}.wrapper:after{content:'';position:absolute;display:block;top:0;right:0;bottom:0;left:0;background:url("../img/backgrounds/image-background-paper.png");height:100%;width:100%;z-index:-1}.inner-wrapper{max-width:1480px;padding:0px 20px;margin:0 auto;position:relative}.push,.footer-wrapper{height:112px}.row{background-color:transparent;border-bottom:1px dotted #CCC}.row:last-child{border-bottom:none}header.banner{overflow:visible;z-index:20;position:fixed;top:0}header.banner .logo{padding-left:15px}header.banner nav.nav-primary{border-bottom:none}header.banner .nav-primary.nav-right .logo-ubuntu{-moz-background-size:100px 30px;-webkit-background-size:100px 30px;-o-background-size:100px 30px;background-size:100px 30px;background-position:5px 9px;background-image:url("../img/logos/logo.png");background-image:url("../img/logos/logo.svg"),none}header.banner .nav-primary li:hover ul:after{display:none}@media screen and (max-width: 768px){header.banner .nav-primary ul{border-right:none}}header.banner #right-nav{float:right;margin-right:20px}@media screen and (max-width: 768px){header.banner #right-nav{margin-right:0}}header.banner #user-link{position:relative}@media screen and (max-width: 768px){header.banner #user-link{border-top:1px solid #d4d7d4;width:100%}}header.banner #user-link>a{padding-bottom:12px}@media screen and (max-width: 768px){header.banner #user-link>a{display:none}}header.banner #user-link .normal,header.banner #user-link .hover{margin-right:7px}@media screen and (max-width: 768px){header.banner #user-link .normal,header.banner #user-link .hover{display:none}}header.banner #user-link .hover{display:none}header.banner #user-link .nav{-webkit-border-radius:0px 0px 4px 4px;-moz-border-radius:0px 0px 4px 4px;border-radius:0px 0px 4px 4px;background-color:#FFF;border:none;display:none;position:absolute;right:0;top:48px;box-shadow:0px 2px 4px rgba(0,0,0,0.15)}@media screen and (min-width: 769px){header.banner #user-link .nav a.active{background:none;border:none}}header.banner #user-link .nav a:hover{background-color:transparent}@media screen and (max-width: 768px){header.banner #user-link .nav a:hover{background-color:#F8F8F8;color:#333}}@media screen and (max-width: 768px){header.banner #user-link .nav{background:none;position:relative;top:inherit;width:100%;box-shadow:none;float:left;padding:0}header.banner #user-link .nav li{border-bottom:1px solid #d4d7d4;width:100%;float:left}header.banner #user-link .nav li a{padding:10px 14px;width:100%}}@media screen and (max-width: 768px){header.banner #user-link:hover>a{background-color:transparent}}header.banner #user-link:hover .normal{display:none}header.banner #user-link:hover .hover{display:inline-block}@media screen and (max-width: 768px){header.banner #user-link:hover .hover{display:none}}header.banner #user-link:hover .nav{display:block}header.banner .nav-toggle{background-image:url("../img/icons/navigation-menu-plain.png");background-image:url("../img/icons/navigation-menu-plain.svg"),none;top:0}@media screen and (max-width: 768px){header.banner .nav-toggles .open{display:block}header.banner .nav-toggles .close{display:none}header.banner #canonlist:target ul{display:block}header.banner #canonlist:target+.nav-toggles .open{display:none}header.banner #canonlist:target+.nav-toggles .close{display:block}}.page-header{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:#FFF;box-shadow:0 1px 1px rgba(0,0,0,0.1);width:100%;float:left;position:fixed;z-index:10;top:48px}.page-header .page-header__nav{position:absolute;top:10px;z-index:1000}.page-header .page-header__nav a{font-weight:300}.page-header .page-header__title{font-size:2em;width:auto;padding:31px 0;margin:0;float:left;font-size:32px}.page-header .page-header__title [contenteditable="true"]{display:inline-block;padding:8px 10px;width:auto;box-sizing:border-box;border:1px solid transparent;margin:-10px 0 -10px -10px;border-radius:2px;color:#333;cursor:default;font-size:32px}.page-header .page-header__title [contenteditable="true"].editable:hover{border:1px solid #D2D2D2;cursor:text}.page-header .page-header__title [contenteditable="true"]:active,.page-header .page-header__title [contenteditable="true"]:focus{outline:none;background-color:#FFF;border:1px solid #B2B2B2}.page-header .page-header__title [contenteditable="true"].invalid,.page-header .page-header__title [contenteditable="true"].invalid:hover,.page-header .page-header__title [contenteditable="true"].invalid:active,.page-header .page-header__title [contenteditable="true"].invalid:focus{border-color:#d90000}.page-header .page-header__title [contenteditable="true"] br{display:none}.page-header .page-header__title .icon{vertical-align:3px;margin-right:10px}.page-header .page-header__title .page-header__title--identicator{font-size:0.6em;width:auto;display:inline-block;position:relative;top:0px;padding-left:20px;margin-left:10px}.page-header .page-header__title .page-header__title--identicator a{color:#888}.page-header .page-header__title .page-header__title--identicator a:hover{text-decoration:none;border-bottom:3px solid #888}.page-header .page-header__title .page-header__title--identicator a:focus,.page-header .page-header__title .page-header__title--identicator a:active{text-decoration:none}.page-header .page-header__title .page-header__title--identicator a.active{color:#333;border-bottom:3px solid #dd4814}.page-header .page-header__title .page-header__title--identicator a.active:hover{text-decoration:none;cursor:default}.page-header .page-header__title .page-header__title--identicator .divide{width:1px;display:inline-block;background:#D2D2D2;height:11px;padding:0;margin:0 5px}.page-header .page-header__title .page-header__title--identicator .page-header__title-loadmore{font-size:14px;margin-left:10px}.page-header .page-header__title .page-header__title--identicator .page-header__title-loadmore:hover{border:0;text-decoration:underline}.page-header .page-header__title .link-cta-ubuntu,.page-header .page-header__title .alt{font-size:16px;margin-left:20px;position:relative;vertical-align:middle;margin-top:-5px}.page-header .page-header__actions{float:right;padding:34px 0;margin-bottom:0}.page-header .page-header__actions .page-header__cta{float:right;position:relative;height:auto;max-height:36px}.page-header .page-header__actions .page-header__cta .cta-group{float:right}.page-header .page-header__actions .page-header__cta .page-header__cta-feedback{display:inline-block;position:relative;line-height:36px;text-align:right;color:#dd4814;margin-right:20px;cursor:pointer}.page-header .page-header__actions .page-header__cta .page-header__cta-feedback:hover{text-decoration:underline}.page-header .page-header__dropdown{float:left;width:100%;max-height:1000px;transition:max-height 0.3s ease-in;overflow:hidden;border-color:#888 !important}.page-header .page-header__dropdown.ng-hide{display:block !important;max-height:0;overflow:hidden;transition:max-height 0.3s ease-out;border-top:none}.page-header .page-header__dropdown .page-header__feedback{border-top:1px dotted #888;display:inline-block;width:100%;padding:20px 0}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;background-position:top 3px left 0px;background-repeat:no-repeat;padding:6px 0 5px 25px;width:auto;display:inline-block;position:relative}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.info,.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.error{background-image:url("../img/icons/error.png");background-image:url("../img/icons/error.svg"),none;background-position:0px 9px}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.info.progress,.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.error.progress{width:100%}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.progress{padding-left:0}.page-header .page-header__dropdown .page-header__feedback .page-header__feedback-message.progress .loader{position:relative;top:1px}.title .title__indicator .title__link{color:#888;font-size:20px}.title .title__indicator .title__link:hover{color:#333;text-decoration:none;border-bottom:1px solid #333}.title .title__indicator .title__link:focus,.title .title__indicator .title__link:active{text-decoration:none}.title .title__indicator .title__link.active{color:#333;border-bottom:1px #dd4814 solid}.title .title__indicator .divide{width:1px;display:inline-block;background:#D2D2D2;height:11px;padding:0;margin:0 5px}.accounts .logout .divide{padding:0 20px 0 30px;display:inline-block}.accounts .api li{position:relative}.accounts .api li input[type='text']{line-height:30px;padding-right:30px;width:100%}.accounts .api li input[type='text']::-webkit-input-placeholder{color:#333}.accounts .api li input[type='text']:-moz-placeholder{color:#333}.accounts .api li input[type='text']::-moz-placeholder{color:#333}.accounts .api li input[type='text']:-ms-input-placeholder{color:#333}.accounts .api li .delete-link{position:absolute;top:7px;right:7px}form.page-title-form{margin-bottom:30px}form.page-title-form input{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;border:1px solid transparent;background-color:transparent;font-size:36px;line-height:26px;color:#333;margin:6px 10px;padding:4px;height:auto;box-shadow:none}form.page-title-form input:hover{outline:none;background:#FFF;border-color:#D2D2D2;box-shadow:inset 0 1px 1px rgba(0,0,0,0.1)}form.page-title-form input:focus{border:1px solid #dd4814;background-color:#fff;outline:none}.small-icon{width:12px}.images-info{text-align:center;padding:10px}.images-warning{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 10px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;background-image:url("../img/icons/warning.png");background-image:url("../img/icons/warning.svg"),none}#loader{width:10px;margin:16px auto 0 auto}#importing{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;list-style:none;padding:15px 20px 15px 45px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;margin:0 0 10px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;position:relative}#importing .spinner{position:absolute;left:15px}.importing-dot{opacity:0;-webkit-animation:dot 1.3s infinite;animation:dot 1.3s infinite}.selector{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;padding:20px;background:#FFF;margin:0 0 20px;box-shadow:0 1px 1px rgba(0,0,0,0.1);border:1px solid #EEE;width:100%;float:left}.selector h2{font-size:1em;font-weight:300}.selector h2 img{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;background:url("../img/icons/help.svg") no-repeat;width:16px;height:16px;padding-left:16px;margin-left:5px}.selector .selector-available,.selector .selector-chosen{width:46%;float:left;margin:0;text-align:left}@media screen and (max-width: 768px){.selector .selector-available,.selector .selector-chosen{width:100%}}.selector .selector-available h2,.selector .selector-chosen h2{background:none;border:none}.selector .selector-available select,.selector .selector-chosen select{margin-bottom:10px}.selector ul.selector-chooser{width:8%;float:left;margin:20% 0 0}@media screen and (max-width: 768px){.selector ul.selector-chooser{width:100%;margin:0 0 10px;text-align:center}}.selector ul.selector-chooser li{width:100%;text-align:center}@media screen and (max-width: 768px){.selector ul.selector-chooser li{width:auto;display:inline-block;height:16px;width:16px;margin:0 20px}}.selector ul.selector-chooser li a{display:block;text-indent:999em;width:16px;height:16px;overflow:hidden;margin:0 auto}.selector ul.selector-chooser li a.selector-add{background-image:url("../img/icons/chevron_right.svg")}@media screen and (max-width: 768px){.selector ul.selector-chooser li a.selector-add{background-image:url("../img/icons/chevron_down.svg")}}.selector ul.selector-chooser li a.selector-remove{background-image:url("../img/icons/chevron_left.svg")}@media screen and (max-width: 768px){.selector ul.selector-chooser li a.selector-remove{background-image:url("../img/icons/chevron_up.svg")}}.selector .selector-filter img{display:none}.selector .selector-filter input{background-image:url("../img/search-orange.png");background-repeat:no-repeat;background-position:top 7px right 8px}.selector select#id_mac_addresses_to.filtered{height:269px !important}.nodes{position:relative}.nodes .search{position:absolute;right:0}.nodes .search input[type='submit']{position:absolute;top:8px;right:12px;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat;text-indent:-999em;display:block;width:21px;height:20px;overflow:hidden;outline:none;padding:0}.nodes .search input[type='submit']:hover{color:transparent;background-color:transparent;background-image:url("../img/search-icon.svg");background-repeat:no-repeat}@media screen and (max-width: 768px){.nodes .search{position:relative}}@media screen and (max-width: 768px){.nodes .actions select{width:100%;margin-bottom:20px}.nodes .actions input{position:absolute;right:0;top:0}}.powerstates{width:14px;height:15px;display:inline-block}.powerstates.power-on{background:transparent url("../img/icons/power-on.svg") left top no-repeat}.powerstates.power-off{background:transparent url("../img/icons/power-off.svg") left top no-repeat}.powerstates.power-unknown{background:none}.powerstates.power-error{background:transparent url("../img/icons/power-error.svg") left top no-repeat}.powerstates.power-check-ok{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:10px;height:10px;color:#33CC00}.powerstates.power-check-error{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;width:10px;height:10px;color:#FF0000}.node-actions .link-cta-ubuntu,.node-actions .cta-ubuntu{margin-bottom:10px;float:left;font-size:16px}.buttons{margin-top:30px}#network-interfaces li{list-style-type:none}#content-discovery-data{padding-top:20px;margin-top:20px;border-top:1px dotted #B2B2B2}#content-discovery-data .slider{height:0;overflow:hidden}.slider{padding-top:0 !important}.slider .content{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#FFF;border:1px solid #EEE;border-top:none;padding:20px}.slider .content pre{margin:0}.slider .tabs{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;padding:8px 20px;margin:0;font-weight:400;font-size:0.875em;background:#FFF;background-position:top 50% left 15px;background-repeat:no-repeat;border:1px solid #EEE}.add-machine__list{padding:13px 0 20px;border-top:1px dotted #888;margin-bottom:0}.add-machine__list .add-machine__details{background:transparent url("../img/icons/accordion-open.svg") top 12px right 10px no-repeat}.add-machine__list .add-machine__details>div{margin-bottom:0}.add-machine__list .add-machine__details .add-machine__details-form{display:none}.add-machine__list .add-machine__details.active{background-image:url("../img/icons/accordion-close.svg")}.add-machine__list .add-machine__details.active .add-machine__details-form{display:block}.power-status{display:inline-block;font-size:100%;padding-left:0}.power-status--power{display:inline-block;margin-left:20px;position:relative;font-size:100%}.power-status--power.checking{color:#2AB7EC;background:url("../img/status_in_progress.svg");padding-left:20px}.power-status--power.on{padding-left:20px;color:#38B44A;background:transparent url("../img/icons/power-on.svg") left top 4px no-repeat}.power-status--power.off{padding-left:20px;color:#D2D2D2;background:transparent url("../img/icons/power-off.svg") left top 4px no-repeat}.power-status--power.error{padding-left:20px;color:#DB3832;background:transparent url("../img/icons/power-error.svg") left top 4px no-repeat}.power-status--power .power-check{font-size:0.75em;color:#D2D2D2;display:inline-block;padding:0}.power-status--power .power-check .power-check__link{color:#888;text-decoration:none;margin-left:5px}.power-status--power .power-check .power-check__link:hover{border-bottom:0 !important;text-decoration:underline !important}.loading,.loader{background:url("../img/in_progress.png") no-repeat;background-size:16px 16px;width:16px;height:16px;-webkit-animation:spin 1s infinite linear;-moz-animation:spin 1s infinite linear;animation:spin 1s infinite linear;padding:0;display:inline-block}.details__used{color:#BCBCBC}.details .details__label{clear:both;display:block;margin-top:11px;color:#BCBCBC}.details .details__label a{color:#BCBCBC}.details .details__label a:hover{color:#dd4814}.details .details__label.active a{color:#dd4814}.details .details__controls{width:100%;text-align:right;opacity:0;z-index:-1000}.details .details__controls--secondary{opacity:0;z-index:-1000;width:auto;text-align:left}.details .table-row .details__input{display:inline-block;margin:-7px 0 -8px -14px;background-color:transparent;border-color:transparent;background-position:-9999px -9999px}.details .table-row .details__text{line-height:37px}.details .table-row:hover .details__input{background-color:#FFF;border-color:#D2D2D2;background-position:right 10px top 16px}.details .table-row:hover .details__controls{z-index:1;opacity:1}.details .table-row:hover .details__controls--secondary{z-index:1;opacity:1}.details .table-row.active:hover .details__input{background-color:transparent;border-color:transparent;pointer-events:none;background-position:-9999px -9999px}.details .table-row.active:hover .details__controls{opacity:0;z-index:-1000;pointer-events:none}.details .table-row.active:hover .details__controls--secondary{z-index:-1000;opacity:0;pointer-events:none}.details .table-row label{font-size:13px;color:#BCBCBC}.details .table-row input,.details .table-row select{margin:0 0 0 -14px}.details .table-row input[type="radio"]{margin-left:0}.details .details__dropdown .details__row{border-bottom:0;position:relative}.details .details__dropdown .details__row:before{display:block;margin:0 auto;width:calc(100% - 20px);border-top:1px dotted #B2B2B2;position:relative;height:1px;content:''}.details .details__dropdown .details__row.details__row--head{border-bottom:0}.details .details__dropdown .details__row.details__row--head .table-cell{color:#BCBCBC;font-size:13px}.details .details__dropdown .details__row.no-border{border:0}.details .details__dropdown .details__row.no-border:before{border:0}.details .details__dropdown--info .table-row{border-bottom:0}.details .details__dropdown--info .table-cell{color:#BCBCBC}
5>>>>>>> MERGE-SOURCE
26
=== modified file 'src/maasserver/testing/factory.py'
--- src/maasserver/testing/factory.py 2016-01-08 05:09:21 +0000
+++ src/maasserver/testing/factory.py 2016-01-10 08:29:39 +0000
@@ -343,11 +343,19 @@
343 if interface:343 if interface:
344 self.make_Interface(344 self.make_Interface(
345 INTERFACE_TYPE.PHYSICAL, node=node, vlan=vlan, fabric=fabric)345 INTERFACE_TYPE.PHYSICAL, node=node, vlan=vlan, fabric=fabric)
346<<<<<<< TREE
346 if node_type == NODE_TYPE.MACHINE and with_boot_disk:347 if node_type == NODE_TYPE.MACHINE and with_boot_disk:
347 root_partition = self.make_Partition(node=node)348 root_partition = self.make_Partition(node=node)
348 acquired = node.status in ALLOCATED_NODE_STATUSES349 acquired = node.status in ALLOCATED_NODE_STATUSES
349 self.make_Filesystem(350 self.make_Filesystem(
350 partition=root_partition, mount_point='/', acquired=acquired)351 partition=root_partition, mount_point='/', acquired=acquired)
352=======
353 if installable and with_boot_disk:
354 root_partition = self.make_Partition(node=node)
355 acquired = node.status in ALLOCATED_NODE_STATUSES
356 self.make_Filesystem(
357 partition=root_partition, mount_point='/', acquired=acquired)
358>>>>>>> MERGE-SOURCE
351359
352 # Update the 'updated'/'created' fields with a call to 'update'360 # Update the 'updated'/'created' fields with a call to 'update'
353 # preventing a call to save() from overriding the values.361 # preventing a call to save() from overriding the values.
354362
=== modified file 'src/maasserver/tests/test_auth.py'
--- src/maasserver/tests/test_auth.py 2015-12-10 01:04:27 +0000
+++ src/maasserver/tests/test_auth.py 2016-01-10 08:29:39 +0000
@@ -223,6 +223,7 @@
223 user, NODE_PERMISSION.ADMIN, factory.make_FilesystemGroup()))223 user, NODE_PERMISSION.ADMIN, factory.make_FilesystemGroup()))
224224
225225
226<<<<<<< TREE
226class TestMAASAuthorizationBackendForDeviceInterface(MAASServerTestCase):227class TestMAASAuthorizationBackendForDeviceInterface(MAASServerTestCase):
227228
228 def test_owner_can_edit_device_interface(self):229 def test_owner_can_edit_device_interface(self):
@@ -251,6 +252,36 @@
251 user, NODE_PERMISSION.EDIT, interface))252 user, NODE_PERMISSION.EDIT, interface))
252253
253254
255=======
256class TestMAASAuthorizationBackendForDeviceInterface(MAASServerTestCase):
257
258 def test_owner_can_edit_device_interface(self):
259 backend = MAASAuthorizationBackend()
260 user = factory.make_User()
261 parent = factory.make_Node()
262 device = factory.make_Node(
263 owner=user, installable=False, parent=parent)
264 interface = factory.make_Interface(
265 INTERFACE_TYPE.PHYSICAL, node=device)
266 self.assertTrue(
267 backend.has_perm(
268 user, NODE_PERMISSION.EDIT, interface))
269
270 def test_non_owner_cannot_edit_device_interface(self):
271 backend = MAASAuthorizationBackend()
272 user = factory.make_User()
273 owner = factory.make_User()
274 parent = factory.make_Node()
275 device = factory.make_Node(
276 owner=owner, installable=False, parent=parent)
277 interface = factory.make_Interface(
278 INTERFACE_TYPE.PHYSICAL, node=device)
279 self.assertFalse(
280 backend.has_perm(
281 user, NODE_PERMISSION.EDIT, interface))
282
283
284>>>>>>> MERGE-SOURCE
254class TestMAASAuthorizationBackendForNetworking(MAASServerTestCase):285class TestMAASAuthorizationBackendForNetworking(MAASServerTestCase):
255286
256 scenarios = (287 scenarios = (
257288
=== modified file 'src/maasserver/tests/test_forms_blockdevice.py'
=== modified file 'src/maasserver/tests/test_forms_partition.py'
=== modified file 'src/maasserver/tests/test_forms_raid.py'
=== modified file 'src/maasserver/tests/test_forms_subnet.py'
=== modified file 'src/maasserver/tests/test_forms_volume_group.py'
=== modified file 'src/maasserver/tests/test_node_constraint_filter_forms.py'
--- src/maasserver/tests/test_node_constraint_filter_forms.py 2016-01-05 21:07:22 +0000
+++ src/maasserver/tests/test_node_constraint_filter_forms.py 2016-01-10 08:29:39 +0000
@@ -974,6 +974,7 @@
974 fabric=fabric2, vlan=vlan2)974 fabric=fabric2, vlan=vlan2)
975975
976 form = AcquireNodeForm({976 form = AcquireNodeForm({
977<<<<<<< TREE
977 'interfaces': 'fabric:fabric_class=1g;vlan:vid=1'})978 'interfaces': 'fabric:fabric_class=1g;vlan:vid=1'})
978 self.assertTrue(form.is_valid(), dict(form.errors))979 self.assertTrue(form.is_valid(), dict(form.errors))
979 filtered_nodes, _, _ = form.filter_nodes(Machine.objects)980 filtered_nodes, _, _ = form.filter_nodes(Machine.objects)
@@ -1032,6 +1033,66 @@
1032 self.assertTrue(form.is_valid(), dict(form.errors))1033 self.assertTrue(form.is_valid(), dict(form.errors))
1033 filtered_nodes, _, _ = form.filter_nodes(Machine.objects)1034 filtered_nodes, _, _ = form.filter_nodes(Machine.objects)
1034 self.assertItemsEqual([node1, node2], filtered_nodes)1035 self.assertItemsEqual([node1, node2], filtered_nodes)
1036=======
1037 u'interfaces': u'fabric:fabric_class=1g;vlan:vid=1'})
1038 self.assertTrue(form.is_valid(), dict(form.errors))
1039 filtered_nodes, _, _ = form.filter_nodes(Node.nodes)
1040 self.assertItemsEqual([node1], filtered_nodes)
1041
1042 form = AcquireNodeForm({
1043 u'interfaces': u'label:fabric_class=10g;vlan:vid=2'})
1044 self.assertTrue(form.is_valid(), dict(form.errors))
1045 filtered_nodes, _, _ = form.filter_nodes(Node.nodes)
1046 self.assertItemsEqual([node2], filtered_nodes)
1047
1048 def test_interfaces_filters_same_key_treated_as_OR_operation(self):
1049 fabric1 = factory.make_Fabric(class_type="1g")
1050 fabric2 = factory.make_Fabric(class_type="10g")
1051 vlan1 = factory.make_VLAN(vid=1, fabric=fabric1)
1052 vlan2 = factory.make_VLAN(vid=2, fabric=fabric2)
1053 node1 = factory.make_Node_with_Interface_on_Subnet(
1054 fabric=fabric1, vlan=vlan1)
1055 node2 = factory.make_Node_with_Interface_on_Subnet(
1056 fabric=fabric2, vlan=vlan2)
1057
1058 form = AcquireNodeForm({
1059 u'interfaces':
1060 u'fabric:fabric_class=1g,fabric_class=10g;vlan:vid=1'})
1061 self.assertTrue(form.is_valid(), dict(form.errors))
1062 filtered_nodes, _, _ = form.filter_nodes(Node.nodes)
1063 self.assertItemsEqual([node1], filtered_nodes)
1064
1065 form = AcquireNodeForm({
1066 u'interfaces':
1067 u'label:fabric_class=10g,fabric_class=1g;vlan:vid=2'})
1068 self.assertTrue(form.is_valid(), dict(form.errors))
1069 filtered_nodes, _, _ = form.filter_nodes(Node.nodes)
1070 self.assertItemsEqual([node2], filtered_nodes)
1071>>>>>>> MERGE-SOURCE
1072
1073 def test_interfaces_filters_different_key_treated_as_AND_operation(self):
1074 fabric1 = factory.make_Fabric(class_type="1g")
1075 fabric2 = factory.make_Fabric(class_type="10g")
1076 vlan1 = factory.make_VLAN(vid=1, fabric=fabric1)
1077 vlan2 = factory.make_VLAN(vid=2, fabric=fabric2)
1078 node1 = factory.make_Node_with_Interface_on_Subnet(
1079 fabric=fabric1, vlan=vlan1)
1080 node2 = factory.make_Node_with_Interface_on_Subnet(
1081 fabric=fabric2, vlan=vlan2)
1082
1083 form = AcquireNodeForm({
1084 u'interfaces':
1085 u'none:fabric_class=1g,vid=2'})
1086 self.assertTrue(form.is_valid(), dict(form.errors))
1087 filtered_nodes, _, _ = form.filter_nodes(Node.nodes)
1088 self.assertItemsEqual([], filtered_nodes)
1089
1090 form = AcquireNodeForm({
1091 u'interfaces':
1092 u'any:fabric_class=10g,fabric_class=1g,vid=1,vid=2'})
1093 self.assertTrue(form.is_valid(), dict(form.errors))
1094 filtered_nodes, _, _ = form.filter_nodes(Node.nodes)
1095 self.assertItemsEqual([node1, node2], filtered_nodes)
10351096
1036 def test_combined_constraints(self):1097 def test_combined_constraints(self):
1037 tag_big = factory.make_Tag(name='big')1098 tag_big = factory.make_Tag(name='big')
10381099
=== modified file 'src/maasserver/tests/test_preseed_storage.py'
=== modified file 'src/maasserver/tests/test_storage_layouts.py'
--- src/maasserver/tests/test_storage_layouts.py 2015-12-01 18:12:59 +0000
+++ src/maasserver/tests/test_storage_layouts.py 2016-01-10 08:29:39 +0000
@@ -422,9 +422,15 @@
422422
423 def assertEFIPartition(self, partition, boot_disk):423 def assertEFIPartition(self, partition, boot_disk):
424 self.assertIsNotNone(partition)424 self.assertIsNotNone(partition)
425<<<<<<< TREE
425 self.assertEqual(426 self.assertEqual(
426 round_size_to_nearest_block(427 round_size_to_nearest_block(
427 EFI_PARTITION_SIZE, boot_disk.block_size),428 EFI_PARTITION_SIZE, boot_disk.block_size),
429=======
430 self.assertEquals(
431 round_size_to_nearest_block(
432 EFI_PARTITION_SIZE, boot_disk.block_size),
433>>>>>>> MERGE-SOURCE
428 partition.size)434 partition.size)
429 self.assertThat(435 self.assertThat(
430 partition.get_effective_filesystem(), MatchesStructure.byEquality(436 partition.get_effective_filesystem(), MatchesStructure.byEquality(
@@ -462,8 +468,13 @@
462 partitions = partition_table.partitions.order_by('id').all()468 partitions = partition_table.partitions.order_by('id').all()
463 root_partition = partitions[0]469 root_partition = partitions[0]
464 self.assertIsNotNone(root_partition)470 self.assertIsNotNone(root_partition)
471<<<<<<< TREE
465 self.assertEqual(472 self.assertEqual(
466 round_size_to_nearest_block(473 round_size_to_nearest_block(
474=======
475 self.assertEquals(
476 round_size_to_nearest_block(
477>>>>>>> MERGE-SOURCE
467 boot_disk.size - PARTITION_TABLE_EXTRA_SPACE,478 boot_disk.size - PARTITION_TABLE_EXTRA_SPACE,
468 PARTITION_ALIGNMENT_SIZE,479 PARTITION_ALIGNMENT_SIZE,
469 False),480 False),
@@ -491,11 +502,19 @@
491 partitions = partition_table.partitions.order_by('id').all()502 partitions = partition_table.partitions.order_by('id').all()
492 root_partition = partitions[0]503 root_partition = partitions[0]
493 self.assertIsNotNone(root_partition)504 self.assertIsNotNone(root_partition)
505<<<<<<< TREE
494 self.assertEqual(506 self.assertEqual(
495 round_size_to_nearest_block(507 round_size_to_nearest_block(
496 MAX_PARTITION_SIZE_FOR_MBR,508 MAX_PARTITION_SIZE_FOR_MBR,
497 PARTITION_ALIGNMENT_SIZE,509 PARTITION_ALIGNMENT_SIZE,
498 False),510 False),
511=======
512 self.assertEquals(
513 round_size_to_nearest_block(
514 MAX_PARTITION_SIZE_FOR_MBR,
515 PARTITION_ALIGNMENT_SIZE,
516 False),
517>>>>>>> MERGE-SOURCE
499 root_partition.size)518 root_partition.size)
500 self.assertThat(519 self.assertThat(
501 root_partition.get_effective_filesystem(),520 root_partition.get_effective_filesystem(),
@@ -524,8 +543,13 @@
524 # Validate root partition.543 # Validate root partition.
525 root_partition = partitions[1]544 root_partition = partitions[1]
526 self.assertIsNotNone(root_partition)545 self.assertIsNotNone(root_partition)
546<<<<<<< TREE
527 self.assertEqual(547 self.assertEqual(
528 round_size_to_nearest_block(548 round_size_to_nearest_block(
549=======
550 self.assertEquals(
551 round_size_to_nearest_block(
552>>>>>>> MERGE-SOURCE
529 boot_disk.size - EFI_PARTITION_SIZE -553 boot_disk.size - EFI_PARTITION_SIZE -
530 PARTITION_TABLE_EXTRA_SPACE,554 PARTITION_TABLE_EXTRA_SPACE,
531 PARTITION_ALIGNMENT_SIZE,555 PARTITION_ALIGNMENT_SIZE,
@@ -562,9 +586,15 @@
562 # Validate boot partition.586 # Validate boot partition.
563 boot_partition = partitions[1]587 boot_partition = partitions[1]
564 self.assertIsNotNone(boot_partition)588 self.assertIsNotNone(boot_partition)
589<<<<<<< TREE
565 self.assertEqual(590 self.assertEqual(
566 round_size_to_nearest_block(591 round_size_to_nearest_block(
567 boot_size, PARTITION_ALIGNMENT_SIZE, False),592 boot_size, PARTITION_ALIGNMENT_SIZE, False),
593=======
594 self.assertEquals(
595 round_size_to_nearest_block(
596 boot_size, PARTITION_ALIGNMENT_SIZE, False),
597>>>>>>> MERGE-SOURCE
568 boot_partition.size)598 boot_partition.size)
569 self.assertThat(599 self.assertThat(
570 boot_partition.get_effective_filesystem(),600 boot_partition.get_effective_filesystem(),
@@ -577,8 +607,13 @@
577 # Validate root partition.607 # Validate root partition.
578 root_partition = partitions[2]608 root_partition = partitions[2]
579 self.assertIsNotNone(root_partition)609 self.assertIsNotNone(root_partition)
610<<<<<<< TREE
580 self.assertEqual(611 self.assertEqual(
581 round_size_to_nearest_block(612 round_size_to_nearest_block(
613=======
614 self.assertEquals(
615 round_size_to_nearest_block(
616>>>>>>> MERGE-SOURCE
582 boot_disk.size - boot_partition.size -617 boot_disk.size - boot_partition.size -
583 EFI_PARTITION_SIZE - PARTITION_TABLE_EXTRA_SPACE,618 EFI_PARTITION_SIZE - PARTITION_TABLE_EXTRA_SPACE,
584 PARTITION_ALIGNMENT_SIZE,619 PARTITION_ALIGNMENT_SIZE,
@@ -615,9 +650,15 @@
615 # Validate root partition.650 # Validate root partition.
616 root_partition = partitions[1]651 root_partition = partitions[1]
617 self.assertIsNotNone(root_partition)652 self.assertIsNotNone(root_partition)
653<<<<<<< TREE
618 self.assertEqual(654 self.assertEqual(
619 round_size_to_nearest_block(655 round_size_to_nearest_block(
620 root_size, PARTITION_ALIGNMENT_SIZE, False),656 root_size, PARTITION_ALIGNMENT_SIZE, False),
657=======
658 self.assertEquals(
659 round_size_to_nearest_block(
660 root_size, PARTITION_ALIGNMENT_SIZE, False),
661>>>>>>> MERGE-SOURCE
621 root_partition.size)662 root_partition.size)
622 self.assertThat(663 self.assertThat(
623 root_partition.get_effective_filesystem(),664 root_partition.get_effective_filesystem(),
@@ -653,9 +694,15 @@
653 # Validate boot partition.694 # Validate boot partition.
654 boot_partition = partitions[1]695 boot_partition = partitions[1]
655 self.assertIsNotNone(boot_partition)696 self.assertIsNotNone(boot_partition)
697<<<<<<< TREE
656 self.assertEqual(698 self.assertEqual(
657 round_size_to_nearest_block(699 round_size_to_nearest_block(
658 boot_size, PARTITION_ALIGNMENT_SIZE, False),700 boot_size, PARTITION_ALIGNMENT_SIZE, False),
701=======
702 self.assertEquals(
703 round_size_to_nearest_block(
704 boot_size, PARTITION_ALIGNMENT_SIZE, False),
705>>>>>>> MERGE-SOURCE
659 boot_partition.size)706 boot_partition.size)
660 self.assertThat(707 self.assertThat(
661 boot_partition.get_effective_filesystem(),708 boot_partition.get_effective_filesystem(),
@@ -668,9 +715,15 @@
668 # Validate root partition.715 # Validate root partition.
669 root_partition = partitions[2]716 root_partition = partitions[2]
670 self.assertIsNotNone(root_partition)717 self.assertIsNotNone(root_partition)
718<<<<<<< TREE
671 self.assertEqual(719 self.assertEqual(
672 round_size_to_nearest_block(720 round_size_to_nearest_block(
673 root_size, PARTITION_ALIGNMENT_SIZE, False),721 root_size, PARTITION_ALIGNMENT_SIZE, False),
722=======
723 self.assertEquals(
724 round_size_to_nearest_block(
725 root_size, PARTITION_ALIGNMENT_SIZE, False),
726>>>>>>> MERGE-SOURCE
674 root_partition.size)727 root_partition.size)
675 self.assertThat(728 self.assertThat(
676 root_partition.get_effective_filesystem(),729 root_partition.get_effective_filesystem(),
@@ -711,9 +764,15 @@
711 root_partition = root_partition_table.partitions.order_by(764 root_partition = root_partition_table.partitions.order_by(
712 'id').all()[0]765 'id').all()[0]
713 self.assertIsNotNone(root_partition)766 self.assertIsNotNone(root_partition)
767<<<<<<< TREE
714 self.assertEqual(768 self.assertEqual(
715 round_size_to_nearest_block(769 round_size_to_nearest_block(
716 root_size, PARTITION_ALIGNMENT_SIZE, False),770 root_size, PARTITION_ALIGNMENT_SIZE, False),
771=======
772 self.assertEquals(
773 round_size_to_nearest_block(
774 root_size, PARTITION_ALIGNMENT_SIZE, False),
775>>>>>>> MERGE-SOURCE
717 root_partition.size)776 root_partition.size)
718 self.assertThat(777 self.assertThat(
719 root_partition.get_effective_filesystem(),778 root_partition.get_effective_filesystem(),
@@ -977,10 +1036,17 @@
977 1, volume_group.virtual_devices.count(),1036 1, volume_group.virtual_devices.count(),
978 "Should have only 1 logical volume.")1037 "Should have only 1 logical volume.")
979 logical_volume = volume_group.virtual_devices.first()1038 logical_volume = volume_group.virtual_devices.first()
1039<<<<<<< TREE
980 expected_size = round_size_to_nearest_block(1040 expected_size = round_size_to_nearest_block(
981 lv_size, PARTITION_ALIGNMENT_SIZE, False)1041 lv_size, PARTITION_ALIGNMENT_SIZE, False)
982 self.assertEqual(expected_size, logical_volume.size)1042 self.assertEqual(expected_size, logical_volume.size)
983 self.assertEqual(layout.DEFAULT_LV_NAME, logical_volume.name)1043 self.assertEqual(layout.DEFAULT_LV_NAME, logical_volume.name)
1044=======
1045 expected_size = round_size_to_nearest_block(
1046 lv_size, PARTITION_ALIGNMENT_SIZE, False)
1047 self.assertEquals(expected_size, logical_volume.size)
1048 self.assertEquals(layout.DEFAULT_LV_NAME, logical_volume.name)
1049>>>>>>> MERGE-SOURCE
984 self.assertThat(1050 self.assertThat(
985 logical_volume.get_effective_filesystem(),1051 logical_volume.get_effective_filesystem(),
986 MatchesStructure.byEquality(1052 MatchesStructure.byEquality(
@@ -1006,9 +1072,15 @@
1006 self.assertEqual(1072 self.assertEqual(
1007 4, partition_table.partitions.count(),1073 4, partition_table.partitions.count(),
1008 "Should have 4 partitions.")1074 "Should have 4 partitions.")
1075<<<<<<< TREE
1009 expected_size = round_size_to_nearest_block(1076 expected_size = round_size_to_nearest_block(
1010 MAX_PARTITION_SIZE_FOR_MBR, PARTITION_ALIGNMENT_SIZE, False)1077 MAX_PARTITION_SIZE_FOR_MBR, PARTITION_ALIGNMENT_SIZE, False)
1011 self.assertEqual(expected_size, root_partition.size)1078 self.assertEqual(expected_size, root_partition.size)
1079=======
1080 expected_size = round_size_to_nearest_block(
1081 MAX_PARTITION_SIZE_FOR_MBR, PARTITION_ALIGNMENT_SIZE, False)
1082 self.assertEquals(expected_size, root_partition.size)
1083>>>>>>> MERGE-SOURCE
10121084
10131085
1014class TestBcacheStorageLayoutBase(MAASServerTestCase):1086class TestBcacheStorageLayoutBase(MAASServerTestCase):
@@ -1197,11 +1269,19 @@
1197 partition_table = ssd.get_partitiontable()1269 partition_table = ssd.get_partitiontable()
1198 self.assertIsNotNone(partition_table)1270 self.assertIsNotNone(partition_table)
1199 partition = partition_table.partitions.order_by('id').all()[0]1271 partition = partition_table.partitions.order_by('id').all()[0]
1272<<<<<<< TREE
1200 self.assertEqual(partition, cache_device)1273 self.assertEqual(partition, cache_device)
1201 self.assertEqual(1274 self.assertEqual(
1202 round_size_to_nearest_block(1275 round_size_to_nearest_block(
1203 cache_size, PARTITION_ALIGNMENT_SIZE, False),1276 cache_size, PARTITION_ALIGNMENT_SIZE, False),
1204 partition.size)1277 partition.size)
1278=======
1279 self.assertEquals(partition, cache_device)
1280 self.assertEquals(
1281 round_size_to_nearest_block(
1282 cache_size, PARTITION_ALIGNMENT_SIZE, False),
1283 partition.size)
1284>>>>>>> MERGE-SOURCE
12051285
1206 def test_raises_error_when_invalid_cache_device(self):1286 def test_raises_error_when_invalid_cache_device(self):
1207 node = make_Node_with_uefi_boot_method()1287 node = make_Node_with_uefi_boot_method()
12081288
=== modified file 'src/maasserver/urls_api.py'
=== modified file 'src/maasserver/utils/converters.py'
--- src/maasserver/utils/converters.py 2015-12-04 08:25:27 +0000
+++ src/maasserver/utils/converters.py 2016-01-10 08:29:39 +0000
@@ -102,8 +102,13 @@
102 :param block_size: The block size to round to.102 :param block_size: The block size to round to.
103 :param round_up: If True, will round up to fill current block, else down.103 :param round_up: If True, will round up to fill current block, else down.
104 """104 """
105<<<<<<< TREE
105 number_of_blocks = size // block_size106 number_of_blocks = size // block_size
106 if round_up and size % block_size > 0:107 if round_up and size % block_size > 0:
108=======
109 number_of_blocks = size / block_size
110 if round_up and size % block_size > 0:
111>>>>>>> MERGE-SOURCE
107 number_of_blocks += 1112 number_of_blocks += 1
108 return block_size * number_of_blocks113 return block_size * number_of_blocks
109114
110115
=== modified file 'src/maasserver/utils/orm.py'
--- src/maasserver/utils/orm.py 2016-01-05 19:56:43 +0000
+++ src/maasserver/utils/orm.py 2016-01-10 08:29:39 +0000
@@ -841,6 +841,7 @@
841 if specifier_types is None:841 if specifier_types is None:
842 raise NotImplementedError("Subclass must specify specifier_types.")842 raise NotImplementedError("Subclass must specify specifier_types.")
843 current_q = Q()843 current_q = Q()
844<<<<<<< TREE
844 if isinstance(specifiers, dict):845 if isinstance(specifiers, dict):
845 # If we got a dictionary, treat it as one of the entries in a846 # If we got a dictionary, treat it as one of the entries in a
846 # LabeledConstraintMap. That is, each key is a specifier, and847 # LabeledConstraintMap. That is, each key is a specifier, and
@@ -863,6 +864,30 @@
863 query = self.get_filter_function(864 query = self.get_filter_function(
864 specifier_type, specifier_types, item, separator=separator)865 specifier_type, specifier_types, item, separator=separator)
865 current_q = query(current_q, op, item)866 current_q = query(current_q, op, item)
867=======
868 if isinstance(specifiers, dict):
869 # If we got a dictionary, treat it as one of the entries in a
870 # LabeledConstraintMap. That is, each key is a specifier, and
871 # each value is a list of values (which must be OR'd together).
872 for key in specifiers.iterkeys():
873 assert isinstance(specifiers[key], list)
874 constraints = [
875 key + separator + value
876 for value in specifiers[key]
877 ]
878 # Leave off specifier_types here because this recursion
879 # will go back to the subclass to get the types filled in.
880 current_q &= self.get_specifiers_q(
881 constraints, separator=separator)
882 else:
883 for item in specifiers:
884 item, op = parse_item_operation(item)
885 item, specifier_type = parse_item_specifier_type(
886 item, spec_types=specifier_types, separator=separator)
887 query = self.get_filter_function(
888 specifier_type, specifier_types, item, separator=separator)
889 current_q = query(current_q, op, item)
890>>>>>>> MERGE-SOURCE
866 if len(kwargs) > 0:891 if len(kwargs) > 0:
867 current_q &= Q(**kwargs)892 current_q &= Q(**kwargs)
868 return current_q893 return current_q
869894
=== modified file 'src/maasserver/utils/tests/test_converters.py'
--- src/maasserver/utils/tests/test_converters.py 2015-12-01 18:12:59 +0000
+++ src/maasserver/utils/tests/test_converters.py 2016-01-10 08:29:39 +0000
@@ -116,23 +116,46 @@
116 def test__round_up_doesnt_add_extra_block(self):116 def test__round_up_doesnt_add_extra_block(self):
117 block_size = 4096117 block_size = 4096
118 size = block_size118 size = block_size
119 self.assertEqual(119<<<<<<< TREE
120 size,120 self.assertEqual(
121 round_size_to_nearest_block(size, block_size, True),121 size,
122 "Shouldn't add an extra block to the size.")122 round_size_to_nearest_block(size, block_size, True),
123123 "Shouldn't add an extra block to the size.")
124 def test__round_down_removes_block(self):124
125 block_size = 4096125 def test__round_down_removes_block(self):
126 size = block_size + 1126 block_size = 4096
127 self.assertEqual(127 size = block_size + 1
128 1 * block_size,128 self.assertEqual(
129 round_size_to_nearest_block(size, block_size, False),129 1 * block_size,
130 "Should remove block from the size.")130 round_size_to_nearest_block(size, block_size, False),
131131 "Should remove block from the size.")
132 def test__round_down_doesnt_remove_block(self):132
133 block_size = 4096133 def test__round_down_doesnt_remove_block(self):
134 size = block_size * 2134 block_size = 4096
135 self.assertEqual(135 size = block_size * 2
136 size,136 self.assertEqual(
137 round_size_to_nearest_block(size, block_size, False),137 size,
138 "Shouldn't remove a block from the size.")138 round_size_to_nearest_block(size, block_size, False),
139 "Shouldn't remove a block from the size.")
140=======
141 self.assertEquals(
142 size,
143 round_size_to_nearest_block(size, block_size, True),
144 "Shouldn't add an extra block to the size.")
145
146 def test__round_down_removes_block(self):
147 block_size = 4096
148 size = block_size + 1
149 self.assertEquals(
150 1 * block_size,
151 round_size_to_nearest_block(size, block_size, False),
152 "Should remove block from the size.")
153
154 def test__round_down_doesnt_remove_block(self):
155 block_size = 4096
156 size = block_size * 2
157 self.assertEquals(
158 size,
159 round_size_to_nearest_block(size, block_size, False),
160 "Shouldn't remove a block from the size.")
161>>>>>>> MERGE-SOURCE
139162
=== modified file 'src/maasserver/websockets/handlers/node.py'
=== modified file 'src/maasserver/websockets/handlers/tests/test_node.py'
--- src/maasserver/websockets/handlers/tests/test_node.py 2016-01-07 03:41:57 +0000
+++ src/maasserver/websockets/handlers/tests/test_node.py 2016-01-10 08:29:39 +0000
@@ -1446,23 +1446,41 @@
1446 interface=True,1446 interface=True,
1447 architecture=architecture,1447 architecture=architecture,
1448 status=NODE_STATUS.ALLOCATED)1448 status=NODE_STATUS.ALLOCATED)
1449<<<<<<< TREE
1449 block_device = factory.make_BlockDevice(node=node)1450 block_device = factory.make_BlockDevice(node=node)
1450 partition_table = factory.make_PartitionTable(1451 partition_table = factory.make_PartitionTable(
1451 block_device=block_device, node=node)1452 block_device=block_device, node=node)
1452 size = partition_table.block_device.size // 21453 size = partition_table.block_device.size // 2
1454=======
1455 block_device = factory.make_BlockDevice(node=node)
1456 partition_table = factory.make_PartitionTable(
1457 block_device=block_device, node=node)
1458 size = partition_table.block_device.size / 2
1459>>>>>>> MERGE-SOURCE
1453 handler.create_partition({1460 handler.create_partition({
1454 'system_id': node.system_id,1461 'system_id': node.system_id,
1455 'block_id': partition_table.block_device_id,1462 'block_id': partition_table.block_device_id,
1456 'partition_size': size1463 'partition_size': size
1457 })1464 })
1458 partition = partition_table.partitions.first()1465<<<<<<< TREE
1459 self.assertEqual(1466 partition = partition_table.partitions.first()
1460 2, Partition.objects.count())1467 self.assertEqual(
1461 self.assertEqual(1468 2, Partition.objects.count())
1462 human_readable_bytes(1469 self.assertEqual(
1463 round_size_to_nearest_block(1470 human_readable_bytes(
1464 size, PARTITION_ALIGNMENT_SIZE, False)),1471 round_size_to_nearest_block(
1465 human_readable_bytes(partition.size))1472 size, PARTITION_ALIGNMENT_SIZE, False)),
1473 human_readable_bytes(partition.size))
1474=======
1475 partition = partition_table.partitions.first()
1476 self.assertEquals(
1477 2, Partition.objects.count())
1478 self.assertEquals(
1479 human_readable_bytes(
1480 round_size_to_nearest_block(
1481 size, PARTITION_ALIGNMENT_SIZE, False)),
1482 human_readable_bytes(partition.size))
1483>>>>>>> MERGE-SOURCE
14661484
1467 def test_create_partition_with_filesystem(self):1485 def test_create_partition_with_filesystem(self):
1468 user = factory.make_admin()1486 user = factory.make_admin()
@@ -1472,11 +1490,19 @@
1472 interface=True,1490 interface=True,
1473 architecture=architecture,1491 architecture=architecture,
1474 status=NODE_STATUS.ALLOCATED)1492 status=NODE_STATUS.ALLOCATED)
1493<<<<<<< TREE
1475 block_device = factory.make_BlockDevice(node=node)1494 block_device = factory.make_BlockDevice(node=node)
1476 partition_table = factory.make_PartitionTable(1495 partition_table = factory.make_PartitionTable(
1477 block_device=block_device, node=node)1496 block_device=block_device, node=node)
1478 partition = partition_table.partitions.first()1497 partition = partition_table.partitions.first()
1479 size = partition_table.block_device.size // 21498 size = partition_table.block_device.size // 2
1499=======
1500 block_device = factory.make_BlockDevice(node=node)
1501 partition_table = factory.make_PartitionTable(
1502 block_device=block_device, node=node)
1503 partition = partition_table.partitions.first()
1504 size = partition_table.block_device.size / 2
1505>>>>>>> MERGE-SOURCE
1480 fstype = factory.pick_choice(FILESYSTEM_FORMAT_TYPE_CHOICES)1506 fstype = factory.pick_choice(FILESYSTEM_FORMAT_TYPE_CHOICES)
1481 mount_point = factory.make_absolute_path()1507 mount_point = factory.make_absolute_path()
1482 handler.create_partition({1508 handler.create_partition({
@@ -1486,18 +1512,35 @@
1486 'fstype': fstype,1512 'fstype': fstype,
1487 'mount_point': mount_point,1513 'mount_point': mount_point,
1488 })1514 })
1489 partition = partition_table.partitions.first()1515<<<<<<< TREE
1490 self.assertEqual(1516 partition = partition_table.partitions.first()
1491 2, Partition.objects.count())1517 self.assertEqual(
1492 self.assertEqual(1518 2, Partition.objects.count())
1493 human_readable_bytes(1519 self.assertEqual(
1494 round_size_to_nearest_block(1520 human_readable_bytes(
1495 size, PARTITION_ALIGNMENT_SIZE, False)),1521 round_size_to_nearest_block(
1496 human_readable_bytes(partition.size))1522 size, PARTITION_ALIGNMENT_SIZE, False)),
1497 self.assertEqual(1523 human_readable_bytes(partition.size))
1524 self.assertEqual(
1525=======
1526 partition = partition_table.partitions.first()
1527 self.assertEquals(
1528 2, Partition.objects.count())
1529 self.assertEquals(
1530 human_readable_bytes(
1531 round_size_to_nearest_block(
1532 size, PARTITION_ALIGNMENT_SIZE, False)),
1533 human_readable_bytes(partition.size))
1534 self.assertEquals(
1535>>>>>>> MERGE-SOURCE
1498 fstype,1536 fstype,
1537<<<<<<< TREE
1499 partition.get_effective_filesystem().fstype)1538 partition.get_effective_filesystem().fstype)
1500 self.assertEqual(1539 self.assertEqual(
1540=======
1541 partition.get_effective_filesystem().fstype)
1542 self.assertEquals(
1543>>>>>>> MERGE-SOURCE
1501 mount_point,1544 mount_point,
1502 partition.get_effective_filesystem().mount_point)1545 partition.get_effective_filesystem().mount_point)
15031546
15041547
=== modified file 'src/metadataserver/models/commissioningscript.py'
--- src/metadataserver/models/commissioningscript.py 2016-01-05 19:56:43 +0000
+++ src/metadataserver/models/commissioningscript.py 2016-01-10 08:29:39 +0000
@@ -682,6 +682,10 @@
682 'content': IPADDR_SCRIPT.encode('ascii'),682 'content': IPADDR_SCRIPT.encode('ascii'),
683 'hook': update_node_network_information,683 'hook': update_node_network_information,
684 },684 },
685 '99-maas-03-network-interfaces.out': {
686 'content': IPADDR_SCRIPT.encode('ascii'),
687 'hook': update_node_network_information,
688 },
685}689}
686690
687691
688692
=== modified file 'src/provisioningserver/cluster_config_command.py'
=== modified file 'src/provisioningserver/config.py'
--- src/provisioningserver/config.py 2015-12-10 09:42:55 +0000
+++ src/provisioningserver/config.py 2016-01-10 08:29:39 +0000
@@ -138,6 +138,10 @@
138)138)
139from formencode.declarative import DeclarativeMeta139from formencode.declarative import DeclarativeMeta
140from formencode.validators import (140from formencode.validators import (
141<<<<<<< TREE
142=======
143 Invalid,
144>>>>>>> MERGE-SOURCE
141 Number,145 Number,
142 Set,146 Set,
143)147)
@@ -343,7 +347,11 @@
343class ConfigurationDatabase:347class ConfigurationDatabase:
344 """Store configuration in an sqlite3 database."""348 """Store configuration in an sqlite3 database."""
345349
350<<<<<<< TREE
346 def __init__(self, database, *, mutable=False):351 def __init__(self, database, *, mutable=False):
352=======
353 def __init__(self, database, mutable=False):
354>>>>>>> MERGE-SOURCE
347 self.database = database355 self.database = database
348 self.mutable = mutable356 self.mutable = mutable
349 with self.cursor() as cursor:357 with self.cursor() as cursor:
@@ -383,6 +391,7 @@
383 "%s: Cannot set `%s'." % (self, name))391 "%s: Cannot set `%s'." % (self, name))
384392
385 def __delitem__(self, name):393 def __delitem__(self, name):
394<<<<<<< TREE
386 if self.mutable:395 if self.mutable:
387 with self.cursor() as cursor:396 with self.cursor() as cursor:
388 cursor.execute(397 cursor.execute(
@@ -393,7 +402,20 @@
393 "%s: Cannot set `%s'." % (self, name))402 "%s: Cannot set `%s'." % (self, name))
394403
395 def __str__(self):404 def __str__(self):
405=======
406 if self.mutable:
407 with self.cursor() as cursor:
408 cursor.execute(
409 "DELETE FROM configuration"
410 " WHERE name = ?", (name,))
411 else:
412 raise ConfigurationImmutable(
413 "%s: Cannot set `%s'." % (self, name))
414
415 def __unicode__(self):
416>>>>>>> MERGE-SOURCE
396 with self.cursor() as cursor:417 with self.cursor() as cursor:
418<<<<<<< TREE
397 # https://www.sqlite.org/pragma.html#pragma_database_list419 # https://www.sqlite.org/pragma.html#pragma_database_list
398 databases = "; ".join(420 databases = "; ".join(
399 "%s=%s" % (name, ":memory:" if path == "" else path)421 "%s=%s" % (name, ":memory:" if path == "" else path)
@@ -426,6 +448,38 @@
426 @contextmanager448 @contextmanager
427 @typed449 @typed
428 def open_for_update(cls, dbpath: str):450 def open_for_update(cls, dbpath: str):
451=======
452 # https://www.sqlite.org/pragma.html#pragma_database_list
453 databases = "; ".join(
454 "%s=%s" % (name, ":memory:" if path == "" else path)
455 for (_, name, path) in cursor.execute("PRAGMA database_list"))
456 return "%s(%s)" % (self.__class__.__name__, databases)
457
458 @classmethod
459 @contextmanager
460 def open(cls, dbpath):
461>>>>>>> MERGE-SOURCE
462 """Open a configuration database.
463
464 **Note** that this returns a context manager which will open the
465 database READ-ONLY.
466 """
467 # Ensure `dbpath` exists...
468 touch(dbpath)
469 # before opening it with sqlite.
470 database = sqlite3.connect(dbpath)
471 try:
472 yield cls(database, mutable=False)
473 except:
474 raise
475 else:
476 database.rollback()
477 finally:
478 database.close()
479
480 @classmethod
481 @contextmanager
482 def open_for_update(cls, dbpath):
429 """Open a configuration database.483 """Open a configuration database.
430484
431 **Note** that this returns a context manager which will close the485 **Note** that this returns a context manager which will close the
@@ -460,7 +514,11 @@
460 got to use this.514 got to use this.
461 """515 """
462516
517<<<<<<< TREE
463 def __init__(self, path, *, mutable=False):518 def __init__(self, path, *, mutable=False):
519=======
520 def __init__(self, path, mutable=False):
521>>>>>>> MERGE-SOURCE
464 super(ConfigurationFile, self).__init__()522 super(ConfigurationFile, self).__init__()
465 self.config = {}523 self.config = {}
466 self.dirty = False524 self.dirty = False
@@ -521,6 +579,7 @@
521 self.path, mode=mode)579 self.path, mode=mode)
522 self.dirty = False580 self.dirty = False
523581
582<<<<<<< TREE
524 def __str__(self):583 def __str__(self):
525 return "%s(%r)" % (self.__class__.__qualname__, self.path)584 return "%s(%r)" % (self.__class__.__qualname__, self.path)
526585
@@ -547,6 +606,32 @@
547 @contextmanager606 @contextmanager
548 @typed607 @typed
549 def open_for_update(cls, path: str):608 def open_for_update(cls, path: str):
609=======
610 def __unicode__(self):
611 return "%s(%r)" % (self.__class__.__name__, self.path)
612
613 @classmethod
614 @contextmanager
615 def open(cls, path):
616 """Open a configuration file read-only.
617
618 This avoids all the locking that happens in `open_for_update`. However,
619 it will create the configuration file if it does not yet exist.
620
621 **Note** that this returns a context manager which will DISCARD
622 changes to the configuration on exit.
623 """
624 # Ensure `path` exists...
625 touch(path)
626 # before loading it in.
627 configfile = cls(path, mutable=False)
628 configfile.load()
629 yield configfile
630
631 @classmethod
632 @contextmanager
633 def open_for_update(cls, path):
634>>>>>>> MERGE-SOURCE
550 """Open a configuration file.635 """Open a configuration file.
551636
552 Locks are taken so that there can only be *one* reader or writer for a637 Locks are taken so that there can only be *one* reader or writer for a
553638
=== modified file 'src/provisioningserver/dhcp/omshell.py'
=== modified file 'src/provisioningserver/dhcp/tests/test_omshell.py'
=== modified file 'src/provisioningserver/drivers/hardware/hmc.py'
=== modified file 'src/provisioningserver/drivers/hardware/virsh.py'
=== modified file 'src/provisioningserver/drivers/osystem/tests/test_custom.py'
=== modified file 'src/provisioningserver/drivers/power/__init__.py'
=== modified file 'src/provisioningserver/drivers/power/amt.py'
--- src/provisioningserver/drivers/power/amt.py 2015-12-17 08:14:09 +0000
+++ src/provisioningserver/drivers/power/amt.py 2016-01-10 08:29:39 +0000
@@ -43,6 +43,7 @@
43 missing_packages.append(package)43 missing_packages.append(package)
44 return missing_packages44 return missing_packages
4545
46<<<<<<< TREE
46 def _render_wsman_state_xml(self, power_change):47 def _render_wsman_state_xml(self, power_change):
47 """Render wsman state XML."""48 """Render wsman state XML."""
48 wsman_state_filename = join(dirname(__file__), "amt.wsman-state.xml")49 wsman_state_filename = join(dirname(__file__), "amt.wsman-state.xml")
@@ -366,3 +367,13 @@
366 return self.amttool_query_state(ip_address, power_pass)367 return self.amttool_query_state(ip_address, power_pass)
367 elif amt_command == 'wsman':368 elif amt_command == 'wsman':
368 return self.wsman_query_state(ip_address, power_pass)369 return self.wsman_query_state(ip_address, power_pass)
370=======
371 def power_on(self, system_id, context):
372 raise NotImplementedError
373
374 def power_off(self, system_id, context):
375 raise NotImplementedError
376
377 def power_query(self, system_id, context):
378 raise NotImplementedError
379>>>>>>> MERGE-SOURCE
369380
=== modified file 'src/provisioningserver/drivers/power/apc.py'
=== modified file 'src/provisioningserver/drivers/power/dli.py'
--- src/provisioningserver/drivers/power/dli.py 2015-12-04 22:06:07 +0000
+++ src/provisioningserver/drivers/power/dli.py 2016-01-10 08:29:39 +0000
@@ -87,6 +87,7 @@
8787
88 def power_on(self, system_id, context):88 def power_on(self, system_id, context):
89 """Power on DLI outlet."""89 """Power on DLI outlet."""
90<<<<<<< TREE
90 # Power off the outlet if it is currently on91 # Power off the outlet if it is currently on
91 if self._query_outlet_state(**context) == 'on':92 if self._query_outlet_state(**context) == 'on':
92 self._set_outlet_state('OFF', **context)93 self._set_outlet_state('OFF', **context)
@@ -96,6 +97,16 @@
96 "Unable to power off outlet %s that is already on."97 "Unable to power off outlet %s that is already on."
97 % context['outlet_id'])98 % context['outlet_id'])
98 self._set_outlet_state('ON', **context)99 self._set_outlet_state('ON', **context)
100=======
101 if self._query_outlet_state(**context) == 'on':
102 self._set_outlet_state('OFF', **context)
103 sleep(1)
104 if self._query_outlet_state(**context) != 'off':
105 raise PowerError(
106 "Unable to power off outlet %s that is already on."
107 % context['outlet_id'])
108 self._set_outlet_state('ON', **context)
109>>>>>>> MERGE-SOURCE
99110
100 def power_off(self, system_id, context):111 def power_off(self, system_id, context):
101 """Power off DLI outlet."""112 """Power off DLI outlet."""
102113
=== modified file 'src/provisioningserver/drivers/power/ether_wake.py'
=== modified file 'src/provisioningserver/drivers/power/fence_cdu.py'
=== modified file 'src/provisioningserver/drivers/power/hmc.py'
=== modified file 'src/provisioningserver/drivers/power/ipmi.py'
--- src/provisioningserver/drivers/power/ipmi.py 2015-12-01 18:12:59 +0000
+++ src/provisioningserver/drivers/power/ipmi.py 2016-01-10 08:29:39 +0000
@@ -34,7 +34,15 @@
34"""34"""
3535
3636
37maaslog = get_maas_logger("drivers.power.ipmi")37<<<<<<< TREE
38maaslog = get_maas_logger("drivers.power.ipmi")
39=======
40maaslog = get_maas_logger("drivers.power.ipmi")
41
42
43def is_set(setting):
44 return not (setting is None or setting == "" or setting.isspace())
45>>>>>>> MERGE-SOURCE
3846
3947
40class IPMIPowerDriver(PowerDriver):48class IPMIPowerDriver(PowerDriver):
@@ -49,10 +57,16 @@
49 return []57 return []
5058
51 @staticmethod59 @staticmethod
60<<<<<<< TREE
52 def _issue_ipmi_chassis_config_command(61 def _issue_ipmi_chassis_config_command(
53 command, power_change, power_address):62 command, power_change, power_address):
54 env = shell.select_c_utf8_locale()63 env = shell.select_c_utf8_locale()
55 with NamedTemporaryFile("w+", encoding="utf-8") as tmp_config:64 with NamedTemporaryFile("w+", encoding="utf-8") as tmp_config:
65=======
66 def _issue_ipmi_chassis_config_command(
67 command, power_change, power_address, env):
68 with NamedTemporaryFile() as tmp_config:
69>>>>>>> MERGE-SOURCE
56 # Write out the chassis configuration.70 # Write out the chassis configuration.
57 tmp_config.write(IPMI_CONFIG)71 tmp_config.write(IPMI_CONFIG)
58 tmp_config.flush()72 tmp_config.flush()
@@ -72,8 +86,12 @@
72 power_address, stderr))86 power_address, stderr))
7387
74 @staticmethod88 @staticmethod
89<<<<<<< TREE
75 def _issue_ipmi_power_command(command, power_change, power_address):90 def _issue_ipmi_power_command(command, power_change, power_address):
76 env = shell.select_c_utf8_locale()91 env = shell.select_c_utf8_locale()
92=======
93 def _issue_ipmi_power_command(command, power_change, power_address, env):
94>>>>>>> MERGE-SOURCE
77 command = tuple(command) # For consistency when testing.95 command = tuple(command) # For consistency when testing.
78 try:96 try:
79 output = call_and_check(command, env=env)97 output = call_and_check(command, env=env)
@@ -146,6 +164,7 @@
146164
147 # Update or query the power state.165 # Update or query the power state.
148 return self._issue_ipmi_power_command(166 return self._issue_ipmi_power_command(
167<<<<<<< TREE
149 ipmipower_command, power_change, power_address)168 ipmipower_command, power_change, power_address)
150169
151 def power_on(self, system_id, context):170 def power_on(self, system_id, context):
@@ -156,3 +175,15 @@
156175
157 def power_query(self, system_id, context):176 def power_query(self, system_id, context):
158 return self._issue_ipmi_command('query', **context)177 return self._issue_ipmi_command('query', **context)
178=======
179 ipmipower_command, power_change, power_address, env)
180
181 def power_on(self, system_id, context):
182 self._issue_ipmi_command('on', **context)
183
184 def power_off(self, system_id, context):
185 self._issue_ipmi_command('off', **context)
186
187 def power_query(self, system_id, context):
188 return self._issue_ipmi_command('query', **context)
189>>>>>>> MERGE-SOURCE
159190
=== modified file 'src/provisioningserver/drivers/power/moonshot.py'
=== modified file 'src/provisioningserver/drivers/power/mscm.py'
=== modified file 'src/provisioningserver/drivers/power/msftocs.py'
=== modified file 'src/provisioningserver/drivers/power/seamicro.py'
--- src/provisioningserver/drivers/power/seamicro.py 2015-12-01 18:12:59 +0000
+++ src/provisioningserver/drivers/power/seamicro.py 2016-01-10 08:29:39 +0000
@@ -82,10 +82,15 @@
82 """Power query SeaMicro node."""82 """Power query SeaMicro node."""
83 # Query the state.83 # Query the state.
84 # Only supported by REST v2.84 # Only supported by REST v2.
85<<<<<<< TREE
85 ip, username, password, _, power_control = (86 ip, username, password, _, power_control = (
86 extract_seamicro_parameters(context))87 extract_seamicro_parameters(context))
88=======
89 ip, username, password, server_id, power_control = (
90 extract_seamicro_parameters(context))
91>>>>>>> MERGE-SOURCE
87 if power_control == 'restapi2':92 if power_control == 'restapi2':
88 return power_query_seamicro15k_v2(93 return power_query_seamicro15k_v2(
89 ip, username, password, system_id)94 ip, username, password, server_id)
90 else:95 else:
91 return 'unknown'96 return 'unknown'
9297
=== modified file 'src/provisioningserver/drivers/power/tests/test_amt.py'
--- src/provisioningserver/drivers/power/tests/test_amt.py 2015-12-17 08:14:09 +0000
+++ src/provisioningserver/drivers/power/tests/test_amt.py 2016-01-10 08:29:39 +0000
@@ -94,6 +94,7 @@
94 missing = driver.detect_missing_packages()94 missing = driver.detect_missing_packages()
95 self.assertItemsEqual([], missing)95 self.assertItemsEqual([], missing)
9696
97<<<<<<< TREE
97 def test__render_wsman_state_xml_renders_xml(self):98 def test__render_wsman_state_xml_renders_xml(self):
98 amt_power_driver = AMTPowerDriver()99 amt_power_driver = AMTPowerDriver()
99 power_change = choice(['on', 'off', 'restart'])100 power_change = choice(['on', 'off', 'restart'])
@@ -778,3 +779,19 @@
778 wsman_query_state_mock, MockCalledOnceWith(779 wsman_query_state_mock, MockCalledOnceWith(
779 context['ip_address'], context['power_pass']))780 context['ip_address'], context['power_pass']))
780 self.expectThat(state, Equals('on'))781 self.expectThat(state, Equals('on'))
782=======
783 def test_power_on(self):
784 driver = amt_module.AMTPowerDriver()
785 self.assertRaises(
786 NotImplementedError, driver.power_on, "fake_id", {})
787
788 def test_power_off(self):
789 driver = amt_module.AMTPowerDriver()
790 self.assertRaises(
791 NotImplementedError, driver.power_off, "fake_id", {})
792
793 def test_power_query(self):
794 driver = amt_module.AMTPowerDriver()
795 self.assertRaises(
796 NotImplementedError, driver.power_query, "fake_id", {})
797>>>>>>> MERGE-SOURCE
781798
=== modified file 'src/provisioningserver/drivers/power/tests/test_apc.py'
=== modified file 'src/provisioningserver/drivers/power/tests/test_base.py'
=== modified file 'src/provisioningserver/drivers/power/tests/test_dli.py'
=== modified file 'src/provisioningserver/drivers/power/tests/test_ether_wake.py'
=== modified file 'src/provisioningserver/drivers/power/tests/test_fence_cdu.py'
=== modified file 'src/provisioningserver/drivers/power/tests/test_hmc.py'
=== modified file 'src/provisioningserver/drivers/power/tests/test_ipmi.py'
--- src/provisioningserver/drivers/power/tests/test_ipmi.py 2015-12-01 18:12:59 +0000
+++ src/provisioningserver/drivers/power/tests/test_ipmi.py 2016-01-10 08:29:39 +0000
@@ -260,8 +260,13 @@
260 ipmipower_command, env=env))260 ipmipower_command, env=env))
261 self.expectThat(result, Equals('other'))261 self.expectThat(result, Equals('other'))
262262
263<<<<<<< TREE
263 def test__issue_ipmi_command_issues_raises_power_auth_error(self):264 def test__issue_ipmi_command_issues_raises_power_auth_error(self):
264 _, _, _, _, _, _, _, context = make_parameters()265 _, _, _, _, _, _, _, context = make_parameters()
266=======
267 def test__issue_ipmi_command_raises_power_fatal_error(self):
268 _, _, _, _, _, _, _, context = make_parameters()
269>>>>>>> MERGE-SOURCE
265 ipmi_power_driver = IPMIPowerDriver()270 ipmi_power_driver = IPMIPowerDriver()
266 popen_mock = self.patch(ipmi_module, 'Popen')271 popen_mock = self.patch(ipmi_module, 'Popen')
267 process = popen_mock.return_value272 process = popen_mock.return_value
@@ -277,7 +282,11 @@
277 ipmi_power_driver = IPMIP282 ipmi_power_driver = IPMIP