<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://dok.wiki.uib.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mihho</id>
	<title>dok - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://dok.wiki.uib.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mihho"/>
	<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/Special:Contributions/Mihho"/>
	<updated>2026-05-23T15:48:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=451</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=451"/>
		<updated>2026-01-17T12:04:39Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================&lt;br /&gt;
   Calm Orange Theme for Timeless Skin&lt;br /&gt;
   MediaWiki:Common.css&lt;br /&gt;
   Perfect for: Warm, inviting documentation sites&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
:root {&lt;br /&gt;
    /* Calm Orange color palette */&lt;br /&gt;
    --deep-orange: #e65100;              /* Primary - deep orange */&lt;br /&gt;
    --orange: #ff9800;                   /* Secondary - bright orange */&lt;br /&gt;
    --light-orange-bg: #fff3e0;          /* Background - warm light orange */&lt;br /&gt;
    --peachy-white: #fffaf5;             /* Content background - peachy white */&lt;br /&gt;
    --light-orange: #ffe0b2;             /* Accent - light orange */&lt;br /&gt;
    --text-primary: #222222;             /* Main text - dark gray */&lt;br /&gt;
&lt;br /&gt;
    /* Extended palette for UI elements */&lt;br /&gt;
    --darker-orange: #f57c00;            /* Darker orange for hover */&lt;br /&gt;
    --very-dark-orange: #bf360c;         /* Very dark orange */&lt;br /&gt;
    --lighter-orange: #ffb74d;           /* Lighter orange for buttons */&lt;br /&gt;
    --highlight-yellow: #ffd54f;         /* Yellow-orange for highlights */&lt;br /&gt;
    --border-light: #ffe0b2;             /* Subtle borders */&lt;br /&gt;
    --bg-white: #ffffff;                 /* Pure white for content */&lt;br /&gt;
    --text-secondary: #4a4a4a;           /* Secondary text */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main page background */&lt;br /&gt;
body {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/top navigation - warm orange */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--deep-orange);&lt;br /&gt;
    border-bottom: 2px solid var(--orange);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack {&lt;br /&gt;
    background-color: var(--deep-orange);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site logo area */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navigation links in header */&lt;br /&gt;
#mw-header-nav-hack a,&lt;br /&gt;
#user-tools a {&lt;br /&gt;
    color: var(--peachy-white);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack a:hover,&lt;br /&gt;
#user-tools a:hover {&lt;br /&gt;
    color: var(--highlight-yellow);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar - warm style */&lt;br /&gt;
#mw-site-navigation,&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    border-right: 1px solid var(--border-light);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation .sidebar-chunk,&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation h3,&lt;br /&gt;
#mw-related-navigation h3 {&lt;br /&gt;
    background-color: var(--deep-orange);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border-bottom: 2px solid var(--orange);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar links */&lt;br /&gt;
#mw-site-navigation a,&lt;br /&gt;
#mw-related-navigation a {&lt;br /&gt;
    color: var(--text-secondary);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation a:hover,&lt;br /&gt;
#mw-related-navigation a:hover {&lt;br /&gt;
    color: var(--deep-orange);&lt;br /&gt;
    background-color: rgba(255, 224, 178, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main content area - clean white pages */&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
    box-shadow: 0 2px 8px rgba(230, 81, 0, 0.08);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content {&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page title - warm heading */&lt;br /&gt;
#firstHeading {&lt;br /&gt;
    color: var(--deep-orange);&lt;br /&gt;
    border-bottom: 3px solid var(--orange);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    padding-bottom: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content headings - hierarchical typography */&lt;br /&gt;
.mw-body h1 {&lt;br /&gt;
    color: var(--deep-orange);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
    color: var(--deep-orange);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    border-bottom: 2px solid var(--orange);&lt;br /&gt;
    padding-bottom: 8px;&lt;br /&gt;
    margin-top: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h3 {&lt;br /&gt;
    color: var(--darker-orange);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    margin-top: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h4 {&lt;br /&gt;
    color: var(--text-secondary);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text - optimal readability */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.mw-body p {&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
    line-height: 1.7;&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Links - warm style */&lt;br /&gt;
.mw-body a:not(.new) {&lt;br /&gt;
    color: var(--darker-orange);&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    border-bottom: 1px solid transparent;&lt;br /&gt;
    transition: border-color 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):hover {&lt;br /&gt;
    color: var(--deep-orange);&lt;br /&gt;
    border-bottom-color: var(--orange);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):visited {&lt;br /&gt;
    color: var(--very-dark-orange);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Red links (non-existent pages) */&lt;br /&gt;
.mw-body a.new {&lt;br /&gt;
    color: #c62828;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tabs (page actions) */&lt;br /&gt;
#p-namespaces ul li,&lt;br /&gt;
#p-views ul li {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected,&lt;br /&gt;
#p-views ul li.selected {&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    border-bottom-color: var(--peachy-white);&lt;br /&gt;
    border-top: 2px solid var(--orange);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces a,&lt;br /&gt;
#p-views a {&lt;br /&gt;
    color: var(--text-secondary);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected a,&lt;br /&gt;
#p-views ul li.selected a {&lt;br /&gt;
    color: var(--deep-orange);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Buttons - warm actions */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.oo-ui-buttonElement-button {&lt;br /&gt;
    background-color: var(--orange);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border: none;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 10px 20px;&lt;br /&gt;
    transition: background-color 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.oo-ui-buttonElement-button:hover {&lt;br /&gt;
    background-color: var(--darker-orange);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Info boxes - warm notes */&lt;br /&gt;
.infobox {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    border: 1px solid var(--light-orange);&lt;br /&gt;
    border-left: 4px solid var(--orange);&lt;br /&gt;
    box-shadow: 0 1px 3px rgba(230, 81, 0, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Table styling - warm data presentation */&lt;br /&gt;
table.wikitable {&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th {&lt;br /&gt;
    background-color: var(--deep-orange);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border: 1px solid var(--orange);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
    padding: 12px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable td {&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
    padding: 10px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:nth-child(even) {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:hover {&lt;br /&gt;
    background-color: rgba(255, 224, 178, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code blocks - technical documentation */&lt;br /&gt;
pre, code {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
    border-left: 3px solid var(--orange);&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
    font-family: &#039;Consolas&#039;, &#039;Monaco&#039;, &#039;Courier New&#039;, monospace;&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
code {&lt;br /&gt;
    padding: 2px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer - warm style */&lt;br /&gt;
#footer,&lt;br /&gt;
#mw-footer,&lt;br /&gt;
#mw-footer-container {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    border-top: 2px solid var(--orange);&lt;br /&gt;
    color: var(--text-primary) !important;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer text - dark for better contrast */&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-places,&lt;br /&gt;
#footer-list,&lt;br /&gt;
#mw-footer ul,&lt;br /&gt;
#mw-footer li {&lt;br /&gt;
    color: var(--text-primary) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer links */&lt;br /&gt;
#footer a,&lt;br /&gt;
#mw-footer a,&lt;br /&gt;
#footer-places a,&lt;br /&gt;
#footer-info a {&lt;br /&gt;
    color: var(--text-primary) !important;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a:hover,&lt;br /&gt;
#mw-footer a:hover {&lt;br /&gt;
    color: var(--deep-orange) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box */&lt;br /&gt;
#searchInput {&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
    padding: 8px 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
    border-color: var(--orange);&lt;br /&gt;
    box-shadow: 0 0 0 2px rgba(255, 152, 0, 0.1);&lt;br /&gt;
    outline: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
    color: var(--text-secondary);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Blockquotes - citations and references */&lt;br /&gt;
blockquote {&lt;br /&gt;
    border-left: 4px solid var(--orange);&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
    color: var(--text-secondary);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists - structured documentation */&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
    line-height: 1.8;&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Categories and metadata */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
    color: var(--text-secondary);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Edit forms and inputs */&lt;br /&gt;
textarea,&lt;br /&gt;
input[type=&amp;quot;text&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;search&amp;quot;] {&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    color: var(--text-primary);&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
textarea:focus,&lt;br /&gt;
input[type=&amp;quot;text&amp;quot;]:focus,&lt;br /&gt;
input[type=&amp;quot;search&amp;quot;]:focus {&lt;br /&gt;
    border-color: var(--orange);&lt;br /&gt;
    box-shadow: 0 0 0 2px rgba(255, 152, 0, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================&lt;br /&gt;
   Additional fixes for header text visibility&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
/* Wiki name/site title in top left */&lt;br /&gt;
#p-logo a,&lt;br /&gt;
#p-logo-text a,&lt;br /&gt;
.mw-wiki-title,&lt;br /&gt;
#sitelogo-text {&lt;br /&gt;
    color: var(--peachy-white) !important;&lt;br /&gt;
    font-weight: 600 !important;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a:hover,&lt;br /&gt;
#p-logo-text a:hover {&lt;br /&gt;
    color: var(--highlight-yellow) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Username in top right corner */&lt;br /&gt;
#user-tools .mw-ui-icon + span,&lt;br /&gt;
#user-tools #pt-userpage a,&lt;br /&gt;
#personal h2,&lt;br /&gt;
#personal .mw-portlet-heading {&lt;br /&gt;
    color: var(--peachy-white) !important;&lt;br /&gt;
    font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#user-tools #pt-userpage a:hover {&lt;br /&gt;
    color: var(--highlight-yellow) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dropdown menu from username */&lt;br /&gt;
#personal .mw-portlet-body,&lt;br /&gt;
#personal ul,&lt;br /&gt;
#user-tools .dropdown,&lt;br /&gt;
#personal .vector-menu-content {&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    border: 1px solid var(--border-light);&lt;br /&gt;
    box-shadow: 0 4px 12px rgba(230, 81, 0, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a,&lt;br /&gt;
#personal ul a,&lt;br /&gt;
#user-tools .dropdown a {&lt;br /&gt;
    color: var(--text-primary) !important;&lt;br /&gt;
    background-color: var(--peachy-white);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a:hover,&lt;br /&gt;
#personal ul a:hover,&lt;br /&gt;
#user-tools .dropdown a:hover {&lt;br /&gt;
    color: var(--deep-orange) !important;&lt;br /&gt;
    background-color: var(--light-orange-bg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================&lt;br /&gt;
   Icon Fixes for Dark Header Background&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
/* User icon - replace with light-colored version */&lt;br /&gt;
#personal h2 {&lt;br /&gt;
    background-image: url(&#039;data:image/svg+xml;utf8,&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; viewBox=&amp;quot;0 0 20 20&amp;quot;&amp;gt;&amp;lt;circle cx=&amp;quot;10&amp;quot; cy=&amp;quot;6&amp;quot; r=&amp;quot;3&amp;quot; fill=&amp;quot;%23FFFAF5&amp;quot;/&amp;gt;&amp;lt;path d=&amp;quot;M10 10c-3 0-7 2-7 5v2h14v-2c0-3-4-5-7-5z&amp;quot; fill=&amp;quot;%23FFFAF5&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site tools gear icon - replace with light-colored version */&lt;br /&gt;
#site-tools h2 {&lt;br /&gt;
    background-image: url(&#039;data:image/svg+xml;utf8,&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; viewBox=&amp;quot;0 0 20 20&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M10 1.5c-.85 0-1.6.55-1.85 1.35l-.35 1.1c-.25.05-.5.15-.75.25l-1-.6c-.75-.45-1.7-.3-2.3.35l-.7.7c-.65.65-.8 1.55-.35 2.3l.6 1c-.1.25-.2.5-.25.75l-1.1.35C1.05 9.4.5 10.15.5 11s.55 1.6 1.35 1.85l1.1.35c.05.25.15.5.25.75l-.6 1c-.45.75-.3 1.7.35 2.3l.7.7c.65.65 1.55.8 2.3.35l1-.6c.25.1.5.2.75.25l.35 1.1c.25.8 1 1.35 1.85 1.35s1.6-.55 1.85-1.35l.35-1.1c.25-.05.5-.15.75-.25l1 .6c.75.45 1.7.3 2.3-.35l.7-.7c.65-.65.8-1.55.35-2.3l-.6-1c.1-.25.2-.5.25-.75l1.1-.35c.8-.25 1.35-1 1.35-1.85s-.55-1.6-1.35-1.85l-1.1-.35c-.05-.25-.15-.5-.25-.75l.6-1c.45-.75.3-1.7-.35-2.3l-.7-.7c-.65-.65-1.55-.8-2.3-.35l-1 .6c-.25-.1-.5-.2-.75-.25l-.35-1.1C11.6 2.05 10.85 1.5 10 1.5zm0 5.5c1.65 0 3 1.35 3 3s-1.35 3-3 3-3-1.35-3-3 1.35-3 3-3z&amp;quot; fill=&amp;quot;%23FFFAF5&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site navigation hamburger menu icon - replace with light-colored version */&lt;br /&gt;
#site-navigation h2,&lt;br /&gt;
#mw-site-navigation h2 {&lt;br /&gt;
    background-image: url(&#039;data:image/svg+xml;utf8,&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot; width=&amp;quot;20&amp;quot; height=&amp;quot;20&amp;quot; viewBox=&amp;quot;0 0 20 20&amp;quot;&amp;gt;&amp;lt;path d=&amp;quot;M2 4h16v2H2zm0 5h16v2H2zm0 5h16v2H2z&amp;quot; fill=&amp;quot;%23FFFAF5&amp;quot;/&amp;gt;&amp;lt;/svg&amp;gt;&#039;) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* User tools icons in header - make light colored */&lt;br /&gt;
#user-tools .mw-ui-icon,&lt;br /&gt;
#user-tools .mw-ui-icon:before,&lt;br /&gt;
#user-tools .mw-ui-icon:after,&lt;br /&gt;
#personal .mw-ui-icon {&lt;br /&gt;
    color: var(--peachy-white) !important;&lt;br /&gt;
    fill: var(--peachy-white) !important;&lt;br /&gt;
    opacity: 0.9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#user-tools .mw-ui-icon:hover,&lt;br /&gt;
#personal .mw-ui-icon:hover {&lt;br /&gt;
    color: var(--highlight-yellow) !important;&lt;br /&gt;
    fill: var(--highlight-yellow) !important;&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=450</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=450"/>
		<updated>2026-01-05T14:10:11Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;rss&amp;gt;https://wiki.app.uib.no/info/all_wikis.rss&amp;lt;/rss&amp;gt;&lt;br /&gt;
&lt;br /&gt;
test&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=449</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=449"/>
		<updated>2025-12-19T19:58:34Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================&lt;br /&gt;
   UiB (University of Bergen) Theme for Timeless Skin&lt;br /&gt;
   MediaWiki:Common.css&lt;br /&gt;
   Based on www4.uib.no/forskning color scheme&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
:root {&lt;br /&gt;
    /* UiB primary colors */&lt;br /&gt;
    --uib-navy: #003d5c;              /* Deep UiB navy blue */&lt;br /&gt;
    --uib-blue: #005f8e;              /* Medium UiB blue */&lt;br /&gt;
    --uib-light-blue: #0077b3;        /* Lighter blue accent */&lt;br /&gt;
    --uib-sky: #4a94c4;               /* Sky blue for hover */&lt;br /&gt;
    &lt;br /&gt;
    /* Neutrals and backgrounds */&lt;br /&gt;
    --white: #ffffff;&lt;br /&gt;
    --light-gray: #f5f5f5;            /* Very light background */&lt;br /&gt;
    --medium-gray: #e0e0e0;           /* Borders */&lt;br /&gt;
    --text-dark: #333333;             /* Main text */&lt;br /&gt;
    --text-medium: #666666;           /* Secondary text */&lt;br /&gt;
    &lt;br /&gt;
    /* Accent colors */&lt;br /&gt;
    --accent-orange: #e67e22;         /* Warm accent */&lt;br /&gt;
    --success-green: #27ae60;         /* Success indicators */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main page background */&lt;br /&gt;
body {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/top navigation - UiB navy */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--uib-navy);&lt;br /&gt;
    border-bottom: 1px solid var(--medium-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack {&lt;br /&gt;
    background-color: var(--uib-navy);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site logo area */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navigation links in header */&lt;br /&gt;
#mw-header-nav-hack a,&lt;br /&gt;
#user-tools a {&lt;br /&gt;
    color: var(--white);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack a:hover,&lt;br /&gt;
#user-tools a:hover {&lt;br /&gt;
    color: var(--uib-sky);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar - clean and minimal */&lt;br /&gt;
#mw-site-navigation,&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border-right: 1px solid var(--medium-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation .sidebar-chunk,&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation h3,&lt;br /&gt;
#mw-related-navigation h3 {&lt;br /&gt;
    background-color: var(--uib-blue);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border-bottom: none;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    padding: 12px 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar links */&lt;br /&gt;
#mw-site-navigation a,&lt;br /&gt;
#mw-related-navigation a {&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    padding: 8px 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation a:hover,&lt;br /&gt;
#mw-related-navigation a:hover {&lt;br /&gt;
    color: var(--uib-navy);&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main content area - clean white */&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    box-shadow: 0 1px 3px rgba(0, 61, 92, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page title */&lt;br /&gt;
#firstHeading {&lt;br /&gt;
    color: var(--uib-navy);&lt;br /&gt;
    border-bottom: 3px solid var(--uib-blue);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    padding-bottom: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content headings */&lt;br /&gt;
.mw-body h1 {&lt;br /&gt;
    color: var(--uib-navy);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
    color: var(--uib-navy);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    border-bottom: 2px solid var(--medium-gray);&lt;br /&gt;
    padding-bottom: 8px;&lt;br /&gt;
    margin-top: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h3 {&lt;br /&gt;
    color: var(--uib-blue);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    margin-top: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h4 {&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.mw-body p {&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    line-height: 1.6;&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Links - UiB blue */&lt;br /&gt;
.mw-body a:not(.new) {&lt;br /&gt;
    color: var(--uib-light-blue);&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):hover {&lt;br /&gt;
    color: var(--uib-navy);&lt;br /&gt;
    text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):visited {&lt;br /&gt;
    color: var(--uib-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Red links (non-existent pages) */&lt;br /&gt;
.mw-body a.new {&lt;br /&gt;
    color: #c0392b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tabs (page actions) */&lt;br /&gt;
#p-namespaces ul li,&lt;br /&gt;
#p-views ul li {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected,&lt;br /&gt;
#p-views ul li.selected {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border-bottom: 2px solid var(--uib-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces a,&lt;br /&gt;
#p-views a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected a,&lt;br /&gt;
#p-views ul li.selected a {&lt;br /&gt;
    color: var(--uib-navy);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Buttons */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.oo-ui-buttonElement-button {&lt;br /&gt;
    background-color: var(--uib-blue);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border: none;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 10px 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.oo-ui-buttonElement-button:hover {&lt;br /&gt;
    background-color: var(--uib-navy);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Info boxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    border-left: 4px solid var(--uib-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Table styling */&lt;br /&gt;
table.wikitable {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th {&lt;br /&gt;
    background-color: var(--uib-blue);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    padding: 12px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable td {&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    padding: 10px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:nth-child(even) {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:hover {&lt;br /&gt;
    background-color: #e8f4f8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code blocks */&lt;br /&gt;
pre, code {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    font-family: &#039;Consolas&#039;, &#039;Monaco&#039;, &#039;Courier New&#039;, monospace;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
code {&lt;br /&gt;
    padding: 2px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border-top: 1px solid var(--medium-gray);&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a:hover {&lt;br /&gt;
    color: var(--uib-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box */&lt;br /&gt;
#searchInput {&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    padding: 8px 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
    border-color: var(--uib-blue);&lt;br /&gt;
    box-shadow: 0 0 0 2px rgba(0, 119, 179, 0.1);&lt;br /&gt;
    outline: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Blockquotes */&lt;br /&gt;
blockquote {&lt;br /&gt;
    border-left: 4px solid var(--uib-blue);&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================&lt;br /&gt;
   Additional fixes for header text visibility&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
/* Wiki name/site title in top left */&lt;br /&gt;
#p-logo a,&lt;br /&gt;
#p-logo-text a,&lt;br /&gt;
.mw-wiki-title,&lt;br /&gt;
#sitelogo-text {&lt;br /&gt;
    color: var(--white) !important;&lt;br /&gt;
    font-weight: 600 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a:hover,&lt;br /&gt;
#p-logo-text a:hover {&lt;br /&gt;
    color: var(--uib-sky) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Username in top right corner */&lt;br /&gt;
#user-tools .mw-ui-icon + span,&lt;br /&gt;
#user-tools #pt-userpage a,&lt;br /&gt;
#personal h2,&lt;br /&gt;
#personal .mw-portlet-heading {&lt;br /&gt;
    color: var(--white) !important;&lt;br /&gt;
    font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#user-tools #pt-userpage a:hover {&lt;br /&gt;
    color: var(--uib-sky) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dropdown menu from username */&lt;br /&gt;
#personal .mw-portlet-body,&lt;br /&gt;
#personal ul,&lt;br /&gt;
#user-tools .dropdown,&lt;br /&gt;
#personal .vector-menu-content {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--medium-gray);&lt;br /&gt;
    box-shadow: 0 4px 12px rgba(0, 61, 92, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a,&lt;br /&gt;
#personal ul a,&lt;br /&gt;
#user-tools .dropdown a {&lt;br /&gt;
    color: var(--text-dark) !important;&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a:hover,&lt;br /&gt;
#personal ul a:hover,&lt;br /&gt;
#user-tools .dropdown a:hover {&lt;br /&gt;
    color: var(--uib-navy) !important;&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=448</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=448"/>
		<updated>2025-12-19T19:23:51Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================&lt;br /&gt;
   Professional Business Theme for Timeless Skin&lt;br /&gt;
   MediaWiki:Common.css&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
:root {&lt;br /&gt;
    /* Professional color palette */&lt;br /&gt;
    --corporate-navy: #1a2f4f;        /* Deep navy blue */&lt;br /&gt;
    --business-blue: #2c5282;         /* Professional blue */&lt;br /&gt;
    --slate-gray: #475569;            /* Slate gray */&lt;br /&gt;
    --steel: #64748b;                 /* Steel gray */&lt;br /&gt;
    &lt;br /&gt;
    /* Accent colors */&lt;br /&gt;
    --executive-blue: #3b82f6;        /* Vibrant blue for links */&lt;br /&gt;
    --success-green: #059669;         /* Success/positive actions */&lt;br /&gt;
    --corporate-gold: #d97706;        /* Premium accent */&lt;br /&gt;
    &lt;br /&gt;
    /* Neutrals */&lt;br /&gt;
    --white: #ffffff;&lt;br /&gt;
    --light-gray: #f8fafc;&lt;br /&gt;
    --border-gray: #e2e8f0;&lt;br /&gt;
    --text-dark: #1e293b;&lt;br /&gt;
    --text-medium: #475569;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main page background */&lt;br /&gt;
body {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/top navigation - executive suite */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--corporate-navy);&lt;br /&gt;
    border-bottom: 1px solid var(--border-gray);&lt;br /&gt;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack {&lt;br /&gt;
    background-color: var(--corporate-navy);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site logo area */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navigation links in header */&lt;br /&gt;
#mw-header-nav-hack a,&lt;br /&gt;
#user-tools a {&lt;br /&gt;
    color: var(--white);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack a:hover,&lt;br /&gt;
#user-tools a:hover {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar - clean and minimal */&lt;br /&gt;
#mw-site-navigation,&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border-right: 1px solid var(--border-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation .sidebar-chunk,&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation h3,&lt;br /&gt;
#mw-related-navigation h3 {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    border-bottom: 2px solid var(--executive-blue);&lt;br /&gt;
    border-left: none;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
    padding: 12px 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar links */&lt;br /&gt;
#mw-site-navigation a,&lt;br /&gt;
#mw-related-navigation a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    padding: 8px 15px;&lt;br /&gt;
    transition: all 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation a:hover,&lt;br /&gt;
#mw-related-navigation a:hover {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    padding-left: 18px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main content area - clean white card */&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page title - executive header */&lt;br /&gt;
#firstHeading {&lt;br /&gt;
    color: var(--corporate-navy);&lt;br /&gt;
    border-bottom: 3px solid var(--executive-blue);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    padding-bottom: 12px;&lt;br /&gt;
    margin-bottom: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content headings */&lt;br /&gt;
.mw-body h1 {&lt;br /&gt;
    color: var(--corporate-navy);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
    color: var(--business-blue);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    border-bottom: 2px solid var(--border-gray);&lt;br /&gt;
    padding-bottom: 8px;&lt;br /&gt;
    margin-top: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h3 {&lt;br /&gt;
    color: var(--slate-gray);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    margin-top: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h4 {&lt;br /&gt;
    color: var(--steel);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text - professional typography */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.mw-body p {&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    line-height: 1.6;&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Links - professional blue */&lt;br /&gt;
.mw-body a:not(.new) {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):hover {&lt;br /&gt;
    color: var(--business-blue);&lt;br /&gt;
    text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):visited {&lt;br /&gt;
    color: var(--business-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Red links (non-existent pages) */&lt;br /&gt;
.mw-body a.new {&lt;br /&gt;
    color: #dc2626;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tabs (page actions) - clean tabs */&lt;br /&gt;
#p-namespaces ul li,&lt;br /&gt;
#p-views ul li {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    border-bottom: none;&lt;br /&gt;
    margin-right: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected,&lt;br /&gt;
#p-views ul li.selected {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border-bottom: 2px solid var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces a,&lt;br /&gt;
#p-views a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected a,&lt;br /&gt;
#p-views ul li.selected a {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Buttons - professional action buttons */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.oo-ui-buttonElement-button {&lt;br /&gt;
    background-color: var(--executive-blue);&lt;br /&gt;
    color: var(--white);&lt;br /&gt;
    border: none;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 10px 20px;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    transition: background-color 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.oo-ui-buttonElement-button:hover {&lt;br /&gt;
    background-color: var(--business-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Secondary buttons */&lt;br /&gt;
.mw-ui-button.mw-ui-quiet,&lt;br /&gt;
.oo-ui-buttonElement.oo-ui-buttonElement-frameless {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Info boxes - professional callouts */&lt;br /&gt;
.infobox {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    border-left: 4px solid var(--executive-blue);&lt;br /&gt;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Table styling - clean data tables */&lt;br /&gt;
table.wikitable {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
    padding: 12px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable td {&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    padding: 12px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:nth-child(even) {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:hover {&lt;br /&gt;
    background-color: #f1f5f9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code blocks - technical documentation style */&lt;br /&gt;
pre, code {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    font-family: &#039;Consolas&#039;, &#039;Monaco&#039;, &#039;Courier New&#039;, monospace;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
code {&lt;br /&gt;
    padding: 2px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer - minimal and clean */&lt;br /&gt;
#footer {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border-top: 1px solid var(--border-gray);&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a:hover {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box - modern search */&lt;br /&gt;
#searchInput {&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    padding: 8px 12px;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    transition: all 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
    border-color: var(--executive-blue);&lt;br /&gt;
    box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);&lt;br /&gt;
    outline: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
    color: var(--steel);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Blockquotes - professional quotes */&lt;br /&gt;
blockquote {&lt;br /&gt;
    border-left: 4px solid var(--executive-blue);&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists - clean formatting */&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
    line-height: 1.8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================&lt;br /&gt;
   Additional fixes for header text visibility&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
/* Wiki name/site title in top left */&lt;br /&gt;
#p-logo a,&lt;br /&gt;
#p-logo-text a,&lt;br /&gt;
.mw-wiki-title,&lt;br /&gt;
#sitelogo-text {&lt;br /&gt;
    color: var(--white) !important;&lt;br /&gt;
    font-weight: 600 !important;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    font-size: 1.125rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a:hover,&lt;br /&gt;
#p-logo-text a:hover {&lt;br /&gt;
    color: var(--executive-blue) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Username in top right corner */&lt;br /&gt;
#user-tools .mw-ui-icon + span,&lt;br /&gt;
#user-tools #pt-userpage a,&lt;br /&gt;
#personal h2,&lt;br /&gt;
#personal .mw-portlet-heading {&lt;br /&gt;
    color: var(--white) !important;&lt;br /&gt;
    font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#user-tools #pt-userpage a:hover {&lt;br /&gt;
    color: var(--executive-blue) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dropdown menu from username */&lt;br /&gt;
#personal .mw-portlet-body,&lt;br /&gt;
#personal ul,&lt;br /&gt;
#user-tools .dropdown,&lt;br /&gt;
#personal .vector-menu-content {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a,&lt;br /&gt;
#personal ul a,&lt;br /&gt;
#user-tools .dropdown a {&lt;br /&gt;
    color: var(--text-dark) !important;&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    padding: 10px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a:hover,&lt;br /&gt;
#personal ul a:hover,&lt;br /&gt;
#user-tools .dropdown a:hover {&lt;br /&gt;
    color: var(--executive-blue) !important;&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=447</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=447"/>
		<updated>2025-12-19T16:41:01Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================&lt;br /&gt;
   Bright Summer Theme for Timeless Skin&lt;br /&gt;
   MediaWiki:Common.css&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
:root {&lt;br /&gt;
    /* Primary summer colors - sun and sea! */&lt;br /&gt;
    --ocean-blue: #0891b2;            /* Deep ocean blue */&lt;br /&gt;
    --sky-blue: #38bdf8;              /* Bright sky blue */&lt;br /&gt;
    --sunshine-yellow: #fbbf24;       /* Warm sunshine yellow */&lt;br /&gt;
    --sand: #fef3c7;                  /* Beach sand */&lt;br /&gt;
    &lt;br /&gt;
    /* Accent colors */&lt;br /&gt;
    --coral: #f97316;                 /* Coral/sunset orange */&lt;br /&gt;
    --tropical-pink: #ec4899;         /* Tropical flower pink */&lt;br /&gt;
    --lime-green: #84cc16;            /* Fresh lime green */&lt;br /&gt;
    --turquoise: #06b6d4;             /* Tropical water */&lt;br /&gt;
    &lt;br /&gt;
    /* Neutrals */&lt;br /&gt;
    --summer-white: #fffbeb;&lt;br /&gt;
    --sunny-cream: #fef9e7;&lt;br /&gt;
    --warm-gray: #78716c;&lt;br /&gt;
    --deep-blue: #164e63;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main page background */&lt;br /&gt;
body {&lt;br /&gt;
    background-color: var(--summer-white);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/top navigation - ocean waves */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background: linear-gradient(135deg, var(--ocean-blue) 0%, var(--turquoise) 100%);&lt;br /&gt;
    border-bottom: 4px solid var(--sunshine-yellow);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack {&lt;br /&gt;
    background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site logo area */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navigation links in header */&lt;br /&gt;
#mw-header-nav-hack a,&lt;br /&gt;
#user-tools a {&lt;br /&gt;
    color: var(--summer-white);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack a:hover,&lt;br /&gt;
#user-tools a:hover {&lt;br /&gt;
    color: var(--sunshine-yellow);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar - beach vibes */&lt;br /&gt;
#mw-site-navigation,&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    background-color: var(--sand);&lt;br /&gt;
    border-right: 2px solid var(--sky-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation .sidebar-chunk,&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation h3,&lt;br /&gt;
#mw-related-navigation h3 {&lt;br /&gt;
    background: linear-gradient(90deg, var(--sky-blue) 0%, var(--turquoise) 100%);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border-bottom: 3px solid var(--sunshine-yellow);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar links */&lt;br /&gt;
#mw-site-navigation a,&lt;br /&gt;
#mw-related-navigation a {&lt;br /&gt;
    color: var(--ocean-blue);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation a:hover,&lt;br /&gt;
#mw-related-navigation a:hover {&lt;br /&gt;
    color: var(--coral);&lt;br /&gt;
    background-color: rgba(251, 191, 36, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main content area - sunny page */&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    border: 2px solid var(--sky-blue);&lt;br /&gt;
    box-shadow: 0 4px 12px rgba(8, 145, 178, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content {&lt;br /&gt;
    background-color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page title - bright and sunny */&lt;br /&gt;
#firstHeading {&lt;br /&gt;
    color: var(--ocean-blue);&lt;br /&gt;
    border-bottom: 4px solid var(--sunshine-yellow);&lt;br /&gt;
    text-shadow: 1px 1px 0px rgba(251, 191, 36, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content headings */&lt;br /&gt;
.mw-body h1,&lt;br /&gt;
.mw-body h2,&lt;br /&gt;
.mw-body h3,&lt;br /&gt;
.mw-body h4 {&lt;br /&gt;
    color: var(--ocean-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
    border-bottom: 3px solid var(--sky-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h3 {&lt;br /&gt;
    color: var(--turquoise);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Links - coral sunset colors */&lt;br /&gt;
.mw-body a:not(.new) {&lt;br /&gt;
    color: var(--coral);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):hover {&lt;br /&gt;
    color: var(--tropical-pink);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):visited {&lt;br /&gt;
    color: var(--ocean-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Red links (non-existent pages) */&lt;br /&gt;
.mw-body a.new {&lt;br /&gt;
    color: #dc2626;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tabs (page actions) */&lt;br /&gt;
#p-namespaces ul li,&lt;br /&gt;
#p-views ul li {&lt;br /&gt;
    background-color: var(--sand);&lt;br /&gt;
    border: 2px solid var(--sky-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected,&lt;br /&gt;
#p-views ul li.selected {&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    border-bottom-color: white;&lt;br /&gt;
    border-top: 3px solid var(--sunshine-yellow);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces a,&lt;br /&gt;
#p-views a {&lt;br /&gt;
    color: var(--ocean-blue);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Buttons - tropical colors */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.oo-ui-buttonElement-button {&lt;br /&gt;
    background: linear-gradient(135deg, var(--coral) 0%, var(--tropical-pink) 100%);&lt;br /&gt;
    color: white;&lt;br /&gt;
    border: 2px solid var(--sunshine-yellow);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.oo-ui-buttonElement-button:hover {&lt;br /&gt;
    background: linear-gradient(135deg, var(--tropical-pink) 0%, var(--coral) 100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Info boxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
    background-color: var(--sand);&lt;br /&gt;
    border: 2px solid var(--sky-blue);&lt;br /&gt;
    border-left: 5px solid var(--sunshine-yellow);&lt;br /&gt;
    box-shadow: 2px 2px 8px rgba(8, 145, 178, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Table styling - bright and clean */&lt;br /&gt;
table.wikitable {&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    border: 2px solid var(--sky-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th {&lt;br /&gt;
    background: linear-gradient(90deg, var(--sky-blue) 0%, var(--turquoise) 100%);&lt;br /&gt;
    color: white;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:nth-child(even) {&lt;br /&gt;
    background-color: var(--sunny-cream);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:nth-child(odd) {&lt;br /&gt;
    background-color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:hover {&lt;br /&gt;
    background-color: var(--sand);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable td {&lt;br /&gt;
    border: 1px solid var(--sky-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code blocks */&lt;br /&gt;
pre, code {&lt;br /&gt;
    background-color: var(--sand);&lt;br /&gt;
    border: 2px solid var(--lime-green);&lt;br /&gt;
    color: var(--deep-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer */&lt;br /&gt;
#footer {&lt;br /&gt;
    background: linear-gradient(90deg, var(--sand) 0%, var(--sunny-cream) 100%);&lt;br /&gt;
    border-top: 4px solid var(--sunshine-yellow);&lt;br /&gt;
    color: var(--warm-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a {&lt;br /&gt;
    color: var(--ocean-blue);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a:hover {&lt;br /&gt;
    color: var(--coral);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box */&lt;br /&gt;
#searchInput {&lt;br /&gt;
    border: 2px solid var(--sky-blue);&lt;br /&gt;
    background-color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
    border-color: var(--sunshine-yellow);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(251, 191, 36, 0.5);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Blockquotes */&lt;br /&gt;
blockquote {&lt;br /&gt;
    border-left: 5px solid var(--sunshine-yellow);&lt;br /&gt;
    background-color: var(--sand);&lt;br /&gt;
    padding: 15px 20px;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
    color: var(--warm-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================&lt;br /&gt;
   Additional fixes for header text visibility&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
/* Wiki name/site title in top left */&lt;br /&gt;
#p-logo a,&lt;br /&gt;
#p-logo-text a,&lt;br /&gt;
.mw-wiki-title,&lt;br /&gt;
#sitelogo-text {&lt;br /&gt;
    color: var(--summer-white) !important;&lt;br /&gt;
    font-weight: bold !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a:hover,&lt;br /&gt;
#p-logo-text a:hover {&lt;br /&gt;
    color: var(--sunshine-yellow) !important;&lt;br /&gt;
    text-shadow: 0 0 10px rgba(251, 191, 36, 0.8);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Username in top right corner */&lt;br /&gt;
#user-tools .mw-ui-icon + span,&lt;br /&gt;
#user-tools #pt-userpage a,&lt;br /&gt;
#personal h2,&lt;br /&gt;
#personal .mw-portlet-heading {&lt;br /&gt;
    color: var(--summer-white) !important;&lt;br /&gt;
    font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#user-tools #pt-userpage a:hover {&lt;br /&gt;
    color: var(--sunshine-yellow) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dropdown menu from username */&lt;br /&gt;
#personal .mw-portlet-body,&lt;br /&gt;
#personal ul,&lt;br /&gt;
#user-tools .dropdown,&lt;br /&gt;
#personal .vector-menu-content {&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    border: 2px solid var(--sky-blue);&lt;br /&gt;
    box-shadow: 0 4px 12px rgba(8, 145, 178, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a,&lt;br /&gt;
#personal ul a,&lt;br /&gt;
#user-tools .dropdown a {&lt;br /&gt;
    color: var(--ocean-blue) !important;&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a:hover,&lt;br /&gt;
#personal ul a:hover,&lt;br /&gt;
#user-tools .dropdown a:hover {&lt;br /&gt;
    color: var(--coral) !important;&lt;br /&gt;
    background-color: var(--sand);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=446</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=446"/>
		<updated>2025-12-19T16:35:53Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================&lt;br /&gt;
   Professional Business Theme for Timeless Skin&lt;br /&gt;
   MediaWiki:Common.css&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
:root {&lt;br /&gt;
    /* Professional color palette */&lt;br /&gt;
    --corporate-navy: #1a2f4f;        /* Deep navy blue */&lt;br /&gt;
    --business-blue: #2c5282;         /* Professional blue */&lt;br /&gt;
    --slate-gray: #475569;            /* Slate gray */&lt;br /&gt;
    --steel: #64748b;                 /* Steel gray */&lt;br /&gt;
    &lt;br /&gt;
    /* Accent colors */&lt;br /&gt;
    --executive-blue: #3b82f6;        /* Vibrant blue for links */&lt;br /&gt;
    --success-green: #059669;         /* Success/positive actions */&lt;br /&gt;
    --corporate-gold: #d97706;        /* Premium accent */&lt;br /&gt;
    &lt;br /&gt;
    /* Neutrals */&lt;br /&gt;
    --white: #ffffff;&lt;br /&gt;
    --light-gray: #f8fafc;&lt;br /&gt;
    --border-gray: #e2e8f0;&lt;br /&gt;
    --text-dark: #1e293b;&lt;br /&gt;
    --text-medium: #475569;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main page background */&lt;br /&gt;
body {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Header/top navigation - executive suite */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--corporate-navy);&lt;br /&gt;
    border-bottom: 1px solid var(--border-gray);&lt;br /&gt;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack {&lt;br /&gt;
    background-color: var(--corporate-navy);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site logo area */&lt;br /&gt;
#p-logo a {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navigation links in header */&lt;br /&gt;
#mw-header-nav-hack a,&lt;br /&gt;
#user-tools a {&lt;br /&gt;
    color: var(--white);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-header-nav-hack a:hover,&lt;br /&gt;
#user-tools a:hover {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar - clean and minimal */&lt;br /&gt;
#mw-site-navigation,&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border-right: 1px solid var(--border-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation .sidebar-chunk,&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation h3,&lt;br /&gt;
#mw-related-navigation h3 {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    border-bottom: 2px solid var(--executive-blue);&lt;br /&gt;
    border-left: none;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
    padding: 12px 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sidebar links */&lt;br /&gt;
#mw-site-navigation a,&lt;br /&gt;
#mw-related-navigation a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    padding: 8px 15px;&lt;br /&gt;
    transition: all 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-site-navigation a:hover,&lt;br /&gt;
#mw-related-navigation a:hover {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    padding-left: 18px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Main content area - clean white card */&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-content {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page title - executive header */&lt;br /&gt;
#firstHeading {&lt;br /&gt;
    color: var(--corporate-navy);&lt;br /&gt;
    border-bottom: 3px solid var(--executive-blue);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    padding-bottom: 12px;&lt;br /&gt;
    margin-bottom: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content headings */&lt;br /&gt;
.mw-body h1 {&lt;br /&gt;
    color: var(--corporate-navy);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
    color: var(--business-blue);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    border-bottom: 2px solid var(--border-gray);&lt;br /&gt;
    padding-bottom: 8px;&lt;br /&gt;
    margin-top: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h3 {&lt;br /&gt;
    color: var(--slate-gray);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    margin-top: 24px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body h4 {&lt;br /&gt;
    color: var(--steel);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text - professional typography */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.mw-body p {&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    line-height: 1.6;&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Links - professional blue */&lt;br /&gt;
.mw-body a:not(.new) {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):hover {&lt;br /&gt;
    color: var(--business-blue);&lt;br /&gt;
    text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body a:not(.new):visited {&lt;br /&gt;
    color: var(--business-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Red links (non-existent pages) */&lt;br /&gt;
.mw-body a.new {&lt;br /&gt;
    color: #dc2626;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tabs (page actions) - clean tabs */&lt;br /&gt;
#p-namespaces ul li,&lt;br /&gt;
#p-views ul li {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    border-bottom: none;&lt;br /&gt;
    margin-right: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected,&lt;br /&gt;
#p-views ul li.selected {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border-bottom: 2px solid var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces a,&lt;br /&gt;
#p-views a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-namespaces ul li.selected a,&lt;br /&gt;
#p-views ul li.selected a {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Buttons - professional action buttons */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.oo-ui-buttonElement-button {&lt;br /&gt;
    background-color: var(--executive-blue);&lt;br /&gt;
    color: var(--white);&lt;br /&gt;
    border: none;&lt;br /&gt;
    font-weight: 500;&lt;br /&gt;
    padding: 10px 20px;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    transition: background-color 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.oo-ui-buttonElement-button:hover {&lt;br /&gt;
    background-color: var(--business-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Secondary buttons */&lt;br /&gt;
.mw-ui-button.mw-ui-quiet,&lt;br /&gt;
.oo-ui-buttonElement.oo-ui-buttonElement-frameless {&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Info boxes - professional callouts */&lt;br /&gt;
.infobox {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    border-left: 4px solid var(--executive-blue);&lt;br /&gt;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Table styling - clean data tables */&lt;br /&gt;
table.wikitable {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable th {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    letter-spacing: 0.5px;&lt;br /&gt;
    padding: 12px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable td {&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    padding: 12px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:nth-child(even) {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.wikitable tr:hover {&lt;br /&gt;
    background-color: #f1f5f9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code blocks - technical documentation style */&lt;br /&gt;
pre, code {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    font-family: &#039;Consolas&#039;, &#039;Monaco&#039;, &#039;Courier New&#039;, monospace;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
code {&lt;br /&gt;
    padding: 2px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Footer - minimal and clean */&lt;br /&gt;
#footer {&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    border-top: 1px solid var(--border-gray);&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a {&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer a:hover {&lt;br /&gt;
    color: var(--executive-blue);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Search box - modern search */&lt;br /&gt;
#searchInput {&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    color: var(--text-dark);&lt;br /&gt;
    padding: 8px 12px;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
    transition: all 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
    border-color: var(--executive-blue);&lt;br /&gt;
    box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);&lt;br /&gt;
    outline: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
    color: var(--steel);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Blockquotes - professional quotes */&lt;br /&gt;
blockquote {&lt;br /&gt;
    border-left: 4px solid var(--executive-blue);&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
    padding: 16px 20px;&lt;br /&gt;
    margin: 20px 0;&lt;br /&gt;
    color: var(--text-medium);&lt;br /&gt;
    font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists - clean formatting */&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
    line-height: 1.8;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ================================================&lt;br /&gt;
   Additional fixes for header text visibility&lt;br /&gt;
   ================================================ */&lt;br /&gt;
&lt;br /&gt;
/* Wiki name/site title in top left */&lt;br /&gt;
#p-logo a,&lt;br /&gt;
#p-logo-text a,&lt;br /&gt;
.mw-wiki-title,&lt;br /&gt;
#sitelogo-text {&lt;br /&gt;
    color: var(--white) !important;&lt;br /&gt;
    font-weight: 600 !important;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    font-size: 1.125rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-logo a:hover,&lt;br /&gt;
#p-logo-text a:hover {&lt;br /&gt;
    color: var(--executive-blue) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Username in top right corner */&lt;br /&gt;
#user-tools .mw-ui-icon + span,&lt;br /&gt;
#user-tools #pt-userpage a,&lt;br /&gt;
#personal h2,&lt;br /&gt;
#personal .mw-portlet-heading {&lt;br /&gt;
    color: var(--white) !important;&lt;br /&gt;
    font-weight: 500 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#user-tools #pt-userpage a:hover {&lt;br /&gt;
    color: var(--executive-blue) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dropdown menu from username */&lt;br /&gt;
#personal .mw-portlet-body,&lt;br /&gt;
#personal ul,&lt;br /&gt;
#user-tools .dropdown,&lt;br /&gt;
#personal .vector-menu-content {&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    border: 1px solid var(--border-gray);&lt;br /&gt;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a,&lt;br /&gt;
#personal ul a,&lt;br /&gt;
#user-tools .dropdown a {&lt;br /&gt;
    color: var(--text-dark) !important;&lt;br /&gt;
    background-color: var(--white);&lt;br /&gt;
    font-weight: 400;&lt;br /&gt;
    padding: 10px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#personal .mw-portlet-body a:hover,&lt;br /&gt;
#personal ul a:hover,&lt;br /&gt;
#user-tools .dropdown a:hover {&lt;br /&gt;
    color: var(--executive-blue) !important;&lt;br /&gt;
    background-color: var(--light-gray);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Main_Page&amp;diff=445</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Main_Page&amp;diff=445"/>
		<updated>2024-04-09T10:51:48Z</updated>

		<summary type="html">&lt;p&gt;Mihho: Created page with &amp;quot;__NOTOC__ ==Velkomen til DOK wiki&amp;#039;en!== Interne rutiner, beskrivelser og dokumentasjon.  &amp;lt;inputbox&amp;gt; type=search break=no &amp;lt;/inputbox&amp;gt;  Formålet er at dette er et &amp;quot;Dokumentasjonsverktøy&amp;quot;, hvor deling av informasjon og kunnskap er viktig.  Les gjerne forslag til  retningslinjer før du/dere begynner.  Lykke til,  Spørsmål, diskusjon og svar, se: Diskusjon  &amp;lt;div class=&amp;quot;grid&amp;quot; data-masonry=&amp;#039;{ &amp;quot;itemSelector&amp;quot;: &amp;quot;.grid-item&amp;quot;, &amp;quot;columnWidth&amp;quot;: 240 }&amp;#039;&amp;gt; &amp;lt;di...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
==Velkomen til DOK wiki&#039;en!==&lt;br /&gt;
Interne rutiner, beskrivelser og dokumentasjon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Formålet er at dette er et &amp;quot;Dokumentasjonsverktøy&amp;quot;, hvor deling av informasjon og kunnskap er viktig.&lt;br /&gt;
&lt;br /&gt;
Les gjerne forslag til [[Retningslinjene | retningslinjer]] før du/dere begynner.&lt;br /&gt;
&lt;br /&gt;
Lykke til,&lt;br /&gt;
&lt;br /&gt;
Spørsmål, diskusjon og svar, se: [[Diskusjon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot; data-masonry=&#039;{ &amp;quot;itemSelector&amp;quot;: &amp;quot;.grid-item&amp;quot;, &amp;quot;columnWidth&amp;quot;: 240 }&#039;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid-item  w3-animate-left w3-btn w3-autumn-grey w3-border w3-border-teal w3-round-xlarge&amp;quot;&amp;gt;&lt;br /&gt;
==Nyheter og RSS==&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[Siste fra BORA]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[IT nyheter]]&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[På Høyden - UiB nettavis RSS strøm]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid-item w3-animate-right w3-white w3-btn w3-round-xlarge&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-round-xlarge&amp;quot;&amp;gt;[[File:autumn2.jpg|thumb|300px]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=444</id>
		<title>Chat</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=444"/>
		<updated>2022-12-22T12:35:07Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;livechat12833784&amp;lt;/htmlet&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=443</id>
		<title>Chat</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=443"/>
		<updated>2022-12-22T12:34:56Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;livechat12833784&amp;lt;htmlet&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=442</id>
		<title>Chat</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=442"/>
		<updated>2022-12-22T12:34:33Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;livechat12833784/htmlet&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=441</id>
		<title>Chat</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=441"/>
		<updated>2022-12-22T12:30:36Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;livechat2&amp;lt;/htmlet&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=440</id>
		<title>Chat</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Chat&amp;diff=440"/>
		<updated>2022-12-22T12:30:18Z</updated>

		<summary type="html">&lt;p&gt;Mihho: Ny side: &amp;lt;htmlet&amp;gt;chat2&amp;lt;/htmlet&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;chat2&amp;lt;/htmlet&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=439</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=439"/>
		<updated>2022-11-30T10:31:51Z</updated>

		<summary type="html">&lt;p&gt;Mihho: Erstatter siden med «&amp;lt;rss&amp;gt;https://wiki.app.uib.no/info/all_wikis.rss&amp;lt;/rss&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;rss&amp;gt;https://wiki.app.uib.no/info/all_wikis.rss&amp;lt;/rss&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Testsiden&amp;diff=438</id>
		<title>Testsiden</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Testsiden&amp;diff=438"/>
		<updated>2022-11-11T14:27:14Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Sandkassa}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mediaplayer&amp;gt;https://www.youtube.com/watch?v=y8Kyi0WNg40&amp;lt;/mediaplayer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
test&lt;br /&gt;
test2&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Testsiden&amp;diff=437</id>
		<title>Testsiden</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Testsiden&amp;diff=437"/>
		<updated>2022-11-11T14:21:54Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{:Sandkassa}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mediaplayer&amp;gt;https://www.youtube.com/watch?v=y8Kyi0WNg40&amp;lt;/mediaplayer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
test&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=436</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=436"/>
		<updated>2021-04-21T09:06:48Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Preparing Files for Analysis==&lt;br /&gt;
* Connect to NeuroMus01: $ ssh -X NeuroMus01&lt;br /&gt;
* In your Experiment folder you need a folder &amp;quot;DataFiles&amp;quot;. &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles&lt;br /&gt;
* In this folder you create a subfolder for each participant &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles/&#039;experimentname_VP##&#039;&lt;br /&gt;
* All these folders need to contain again a Subfolder &amp;quot;RawData&amp;quot; &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles/&#039;experimentname_VP##&#039;/RawData&lt;br /&gt;
* Or you can type the following command to create the required number of folders and subfolders: &lt;br /&gt;
  $ for R in 1,2,...; do mkdir -p expName_sbj0${R}/RawData; done &lt;br /&gt;
* Copy the three eeg files for one participant into this folder &amp;quot;RawData&amp;quot;, do that for each participant.&lt;br /&gt;
* Change file permissions for all eeg files from all participants. Go to your experiments directory and change permission and type:&lt;br /&gt;
  chmod -&amp;gt; find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod 440 {} &amp;quot;;&amp;quot;  or   &lt;br /&gt;
   $ find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod u=rwx,g=rwx,o=r {} &amp;quot;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  e.g.: (in command line)&lt;br /&gt;
  $ cd /scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles&lt;br /&gt;
  $ find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod 440 {} &amp;quot;;&amp;quot;Preparing Files for Analysis&lt;br /&gt;
&lt;br /&gt;
==How to use the EEG analysis Script==&lt;br /&gt;
&lt;br /&gt;
The script consists of several files. The file YourStudy.m is the main script (should have the name of the study from which you copied the files. E.g. DevDet.m, HiScore.m, …).&lt;br /&gt;
&lt;br /&gt;
===Procedure of the Analysis (flowchart)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Prepare the Script===&lt;br /&gt;
&lt;br /&gt;
Copy analysis script files and folders from a previous (similar is best) experiment and put in your &#039;scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/&#039; folder. Rename main script to &#039;YourStudy&#039;, and rename the function within the script (first line of the file).&lt;br /&gt;
&lt;br /&gt;
===DefSettings.m===&lt;br /&gt;
 &lt;br /&gt;
(Based on DefSettings.m from study DevDet)&lt;br /&gt;
The file DefSettings.m contains all settings for your analysis and has to be adapted to your needs. Within DefSettings.m, make sure the name of the study is correct again.&lt;br /&gt;
&lt;br /&gt;
DefSettings is subdivided in different &#039;cases&#039; which will be discussed in the following. Also have a look at the comments in the file DefSettings (depicted in green). They explain which values you have to choose.&lt;br /&gt;
&lt;br /&gt;
Case &#039;S&#039;&lt;br /&gt;
&lt;br /&gt;
Settings.MthICA = &#039;0&#039;;&lt;br /&gt;
&lt;br /&gt;
* Change this value to 0 for processing your data with only an EOG correction (first step)&lt;br /&gt;
&lt;br /&gt;
* Change this value to 1 for processing your data with ICA (to clean data in a second step)&lt;br /&gt;
&lt;br /&gt;
Settings.RefChn = &#039;M1|M2&#039;;&lt;br /&gt;
&lt;br /&gt;
* Should be your reference channels, normally M1 and M2 is correct&lt;br /&gt;
&lt;br /&gt;
Case {&#039;YourStudy&#039;, &#039;LoadData&#039;}&lt;br /&gt;
&lt;br /&gt;
Here you can find the filter settings that are used while loading your data. You don&#039;t have to change them unless your study does not need any special filter settings.&lt;br /&gt;
&lt;br /&gt;
Case &#039;LoadRaw&#039;&lt;br /&gt;
&lt;br /&gt;
Settings.SettFIR&lt;br /&gt;
&lt;br /&gt;
* again specifies some filters&lt;br /&gt;
&amp;lt;tt&amp;gt;Settings.CutTRG  =&amp;lt;/tt&amp;gt;&lt;br /&gt;
 {{{},                            [],  [], {&#039;^0021$&#039;, &#039;^0016$&#039;},                 2,   1};&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0022$&#039;},                      1,   1, {&#039;^0022$&#039;, &#039;^0016$&#039;},                 2,   1}; ...&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0023$&#039;},                      1,   1, {&#039;^0023$&#039;, &#039;^0016$&#039;},                 2,   1}; ...&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0024$&#039;, &#039;^0016$&#039;, &#039;^0024$&#039;},  1,   1,  {},                                 [],  []}};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Cuts out epochs that are not required for your analysis (like for example pauses)&lt;br /&gt;
&lt;br /&gt;
* Epochs are always cut out from a certain trigger combination (green) to a certain trigger combination (red)&lt;br /&gt;
&lt;br /&gt;
* If the brackets are empty like in the first line, epochs will be cut out from the beginning of the data file to a certain trigger combination (trigger 0021 followed by trigger 0016). Same holds for the last line. Empty brackets at the end means, that trigger are cut out from the trigger combination until the end.&lt;br /&gt;
&lt;br /&gt;
* If your study does not require you to cut out any epochs, you can make a comment out of these lines (type &#039;%&#039; in front of each line). These lines will then not be processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoRmBdCh&#039;&lt;br /&gt;
&lt;br /&gt;
Settings for the channel rejection (throw out bad channels), with settings for the plot and thresholds for the rejection. Does not have to be adapted unless you need special settings for your experiment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoManRej&#039;&lt;br /&gt;
&lt;br /&gt;
Settings for the manual rejection window. No changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoClnEOG&#039;&lt;br /&gt;
&lt;br /&gt;
-No Changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoSelCmp&#039;&lt;br /&gt;
&lt;br /&gt;
Settings for component rejection of the ICA. No changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoRejAvr&#039;&lt;br /&gt;
&lt;br /&gt;
This function combines two steps, the automatic rejection and the calculation of the averages. Most of the variables do not have to be changed.&lt;br /&gt;
Settings.SelElc&lt;br /&gt;
&lt;br /&gt;
* Specify all electrodes for the automatic rejection (all electrodes besides EOG channels and references)&lt;br /&gt;
&lt;br /&gt;
Other parameters specify thresholds for the automatic rejection à no changes unless you need them&lt;br /&gt;
&lt;br /&gt;
Settings.Sett4Avr&lt;br /&gt;
&lt;br /&gt;
* Parameters for calculating averages&lt;br /&gt;
&lt;br /&gt;
* There are two forms of this variable. Use the one with  the list to specify your conditions if you have only one experiment. If you have more than one experiment in your study choose the Settings.Sett4Avr variable with the &#039;if, elseif - loop&#039;. Comment out the one you don&#039;t need for your study&lt;br /&gt;
&lt;br /&gt;
* Fill in all trigger codes belonging to one condition that need to be averaged under one condition code&lt;br /&gt;
&lt;br /&gt;
* Give a name for this condition under cond. Name (this name should not be too long)&lt;br /&gt;
&lt;br /&gt;
* Set the epoch for this average (-0.2 to 1.2 should usually be fine, unless you are investigating later components)&lt;br /&gt;
&lt;br /&gt;
* Set a baseline (-0.2 to 0.0 should usually be fine).  ATTENTION: Setting the baseline should be done before running STEP 5 (see table below). Changing the baseline after STEP 5 and running ExpGrdAgv will not make any change! &lt;br /&gt;
&lt;br /&gt;
* Specify if there are triggers that need to be cut out before averaging (e.g. button presses). Do this in the last bracket: [1 2]&lt;br /&gt;
&lt;br /&gt;
* All these information need to be specified for all conditions you want to average. Make sure that you always follow the syntax that is predefined for other experiments (don&#039;t forget brackets or &#039;;&#039; or &#039;…&#039;&lt;br /&gt;
Settings.TrgCutOut&lt;br /&gt;
&lt;br /&gt;
* Specifies triggers that need to be cut out before averaging (for example button presses or stimuli from a cover task)&lt;br /&gt;
&lt;br /&gt;
{triggers that need to be cut out, range between two triggers also possible}, [search range for the second trigger], [time to add if only one trigger is found], [time to add if both triggers are found]&lt;br /&gt;
&lt;br /&gt;
* It is thus possible to cut out a stimulus followed by a button press, or to cut out a button press together with the 0.x seconds before the button press, etc.&lt;br /&gt;
&lt;br /&gt;
Other parameters: no changes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;ExpGrdAvg&#039;&lt;br /&gt;
&lt;br /&gt;
In case &#039;ExpGrdAvr&#039;, divide the conditions to facilitate any statistical comparison you may be interested in making.&lt;br /&gt;
&lt;br /&gt;
Settings.ExpPfx&lt;br /&gt;
&lt;br /&gt;
Fill in the prefix of your study (YourStudy)&lt;br /&gt;
&lt;br /&gt;
Settings.ExpStt&lt;br /&gt;
&lt;br /&gt;
Here you will find a matrix in which you can specify some parameters for the grand averages you want to calculate. The matrix has several rows, separated with a semicolon at the end of each line, and several columns, separated by comma in each line. The parameter belonging to a specific column is written above the matrix in green comments. Now the parameters you have to specify in each column will be explained.&lt;br /&gt;
&lt;br /&gt;
* Specify the conditions that need to be averaged and compared under cond. Code (you need the condition codes you specified in Calc_AVR here)&lt;br /&gt;
&lt;br /&gt;
* Specify SPSS codes (should be short, because these are a part of the variable names, otherwise variable names get too long)&lt;br /&gt;
&lt;br /&gt;
* Specify which of the two conditions should be added and which should be subtracted (no changes)&lt;br /&gt;
&lt;br /&gt;
* Specify the baseline (-200 to 0 should usually be fine)&lt;br /&gt;
&lt;br /&gt;
* List all time windows you are interested in. For your first analysis you can leave them as they are to explore your data. In a second analysis you can specify time windows for your effect. If you have a time window of interest, based on previous research, you can just add it. Make a comma after the last time window and add your time window in brackets [ ].&lt;br /&gt;
&lt;br /&gt;
* If you have more than one experiment, you can add the experiment name. Otherwise you leave this field empty --&amp;gt; &#039;&#039;&lt;br /&gt;
* Specify in which color the different conditions should be depicted in the figure. Specify a color for the condition that is added (e.g. &#039;r&#039; for red), a color for the condition that is subtracted (e.g. &#039;b&#039; for blue), and a colour for the difference wave (e.g. &#039;k&#039; for black). --&amp;gt; {&#039;r&#039;, &#039;b&#039;, &#039;k&#039;}&lt;br /&gt;
You can also specify the line-width of the waveforms by adding it in a bracket after the color like this: {&#039;r&#039;, &#039;b&#039;, {&#039;k&#039;, &#039;linewidth&#039;, 2}}&lt;br /&gt;
Now the difference line should be depicted in black, with a line-width of 2.&lt;br /&gt;
&lt;br /&gt;
If you want to use different colors or change other parameters for the lines you can find information about how to do it in the matlab documentation:&lt;br /&gt;
http://www.mathworks.de/de/help/matlab/ref/plot.html#inputarg_LineSpec&lt;br /&gt;
&lt;br /&gt;
* Specify amplitude limits for your plots.&lt;br /&gt;
Specify the scale for your averages. [-6:2:12] would for example result in a scale from -6 to 12 in steps of 2.&lt;br /&gt;
Specify the amplitude limits for the headplots. Here you need one specification for each timewindow, and amplitude limits should always range from -x to x. So for example from -3 to 3 --&amp;gt; [-3 3].&lt;br /&gt;
Thus if you specified for example 5 different timewindows, and you want to set the amplitude limits for all headplots to -3 to 3, it should look like this:&lt;br /&gt;
{[-3 3], [-3 3], [-3 3], [-3 3], [-3 3]}&lt;br /&gt;
Settings.ExpElc&lt;br /&gt;
&lt;br /&gt;
* Enter all electrodes that should be used to calculate the grand average (all electrodes besides EOG and reference channels)&lt;br /&gt;
Settings.ExpROI&lt;br /&gt;
&lt;br /&gt;
* Specify your regions of interest&lt;br /&gt;
&lt;br /&gt;
* If you need frontal left, frontal right, parietal left, parietal right, the settings should be fine&lt;br /&gt;
Settings.FigStt&lt;br /&gt;
&lt;br /&gt;
Settings for the figures you want to export. Choose the ones you need or leave all in.&lt;br /&gt;
                      {{&#039;lowpass&#039;, 10},               &#039;__&#039;; ...  % low-pass filtered 10 Hz, no running t-test&lt;br /&gt;
                      {},                             &#039;UF&#039;; ...  % data are unfiltered, no running t-test&lt;br /&gt;
                      {&#039;lowpass&#039;, 10, &#039;alpha&#039;, 0.05}, &#039;T5&#039;; ...  % low-pass filtered 10 Hz, running t-test (p &amp;lt; 0.05)&lt;br /&gt;
                      {&#039;lowpass&#039;, 10, &#039;alpha&#039;, 0.01}, &#039;T1&#039;};...  % low-pass filtered 10 Hz, running t-test (p &amp;lt; 0.01)&lt;br /&gt;
Settings.FigScp&lt;br /&gt;
* 1 = show / export figures with plots of the grand averages like the scalp position on the scalp; 0 = don&#039;t export&lt;br /&gt;
Settings.LimGrd&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the grand average scalp and array plots (otherwise they will be calculated from the data) --&amp;gt; for the scalp plots&lt;br /&gt;
Settings.FigArr&lt;br /&gt;
* 1 = show / export figures with plots of the grand averages in a rectangular array, 0 = don&#039;t export&lt;br /&gt;
Settings.ArrElc&lt;br /&gt;
&lt;br /&gt;
* Specify electrodes for which the grand average should be depicted in the rectangular array figure.&lt;br /&gt;
Settings.LimGrd&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the grand average scalp and array plots (otherwise they will be calculated from the data) --&amp;gt; for the array plots&lt;br /&gt;
Settings.FigIdA&lt;br /&gt;
&lt;br /&gt;
* 1 = show / export individual averages, 0 = don&#039;t export&lt;br /&gt;
Settings.PltIdA&lt;br /&gt;
&lt;br /&gt;
* &#039;S&#039; - scalp array, &#039;R&#039; - rectangular array - takes the respective electrode settings defined above (ScpElc or ScpTyp and ArrElc or ArrTyp)&lt;br /&gt;
Settings.LimIdA&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the single subject averages (otherwise they will be calculated from the data)&lt;br /&gt;
Other parameters: no changes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;N&#039;&lt;br /&gt;
&lt;br /&gt;
In case &#039;N&#039;, make sure that all of the subject data that you have are correctly named and arranged.&lt;br /&gt;
Settings = {&#039;YourStudy_VP01&#039;, &#039;YourStudy_VP02&#039;}&lt;br /&gt;
&lt;br /&gt;
* All participants you want to process need to be specified here&lt;br /&gt;
&lt;br /&gt;
* Make sure that they have the same name as the eeg files in your folder (case-sensitive)&lt;br /&gt;
&lt;br /&gt;
* Any participants that need to be thrown out can be arranged next to the SubjRmvd header (which is made a comment by the &#039;%&#039;) as well as an explanation for why the participant was removed.&lt;br /&gt;
&lt;br /&gt;
===Run the Script===&lt;br /&gt;
&lt;br /&gt;
* Start EEGLab (should be &#039;el&#039; within terminal), and run on a computer with decent RAM or else it will be slow&lt;br /&gt;
&lt;br /&gt;
* Change the directory to YourStudy directory by using :&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; cd /scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; cd /SCR/EXPERIMENTS/&#039;YourStudy&#039;/&lt;br /&gt;
&lt;br /&gt;
* Run the Script by just calling the main script:&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; ProcessSubject&lt;br /&gt;
&lt;br /&gt;
* You can call the ProcessSubject function with some arguments that are listed below&lt;br /&gt;
&lt;br /&gt;
 Interact = carry out processing steps requiring user interaction&lt;br /&gt;
      0   - carry out steps not requiring user interaction&lt;br /&gt;
      1   - carry out steps requiring user interaction&lt;br /&gt;
      2   - revise steps that were already carried out&lt;br /&gt;
&lt;br /&gt;
 ProcStep = carry out the following processing steps              (0-7, byte)&lt;br /&gt;
      1   - bad channel removal&lt;br /&gt;
      2   - manual rejections&lt;br /&gt;
      4   - component selection&lt;br /&gt;
(those can be combined, e.g., 3 would be the revision of bad channels and of manual rejections)&lt;br /&gt;
&lt;br /&gt;
Here is the sequence of steps that you should follow:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;table style=&amp;quot;width:100%&amp;quot;  border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Command&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Output Files&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;File Description&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;30%&amp;quot;&amp;gt;STEP 1:  Call the script without interaction  Loading REFs, Filtered data, trigger file, channel locations&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;30%&amp;quot;&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;.set &amp;amp; .fdt&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;.set:  contains information about the sampling rate, the subject Nr and the events  .fdt:  contains the data matrix, channels x sampling points. &amp;lt;/td&amp;gt;    &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  STEP 2:  Call the script with interaction  Manual rejection of bad channels/epochs, adjust the scale accordingly @ 200mV for Channel removal and @ 100mV for bad epochs. Criteria for bad channel removal [[BadChannels]]. Examples of bad epochs that should be removed: [[BadEpochs]].    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(1) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .rmc &amp;amp; .out &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .rmc:  contains the channel you selected for removal, which at a later point will be interpolated   .out:  contains the periods you manually selected for rejection &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt; Procedure: ICA [MthICA = &#039;1&#039;] &amp;lt;/font&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; STEP 3:  Non-Interactive Computation of ICA (binica)&amp;lt;/td&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(0,NaN,&#039;1&#039;) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .ic1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .ic1:  binica &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  STEP 4:   &lt;br /&gt;
Call the script with interaction to remove bad components. [see section Criteria to remove ICA components further down for instructions.  NOTE: During data scrolling we might see noisy parts that we wouldn&#039;t expect given the fact that a manual rejection of bad epochs preceded. The reason is that in STEP 2 the data are filtered so that we remove only too noisy parts whereas in STEP 4 we see unfiltered data because ICA requires unfiltered data.   &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(1,4,&#039;1&#039;)     &amp;gt;&amp;gt; ProcessSubject(1,255,&#039;1&#039;) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .sc1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .sc1:  contains information about which ICA components were manually selected for removal. We can copy the file .sc1 and rename it to file.mat and then we can load it from matlab to check the included components. &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;STEP 5:  Non-Interactive  Filtering, rejecting epochs, averaging per condition and per subject&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(0,255,&#039;1&#039;) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av1:  computed based on the files .ic1 &amp;amp; .av1 &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;STEP 6:  Calculate Grand Averages &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ExpGrdAvg(&#039;1&#039;) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .dat  ...ArrERP___.eps  ...ArrERP_T1.eps  ...ArrERP_T5.eps  ...ArrERP_UF.eps  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  .dat:  ta data file you need to import to SPSS in order to run the statistics   ...ArrERP___.eps: ERP plots (filtered for visualisation) in an array form   ...ArrERP_T1.eps: ERP plots (filtered for visualisation) in an array form with grey boxes for stat. sig. differences at p = 0.01    ...ArrERP_T5.eps:ERP plots (filtered for visualisation) in an array form with grey boxes for stat. sig. differences at p = 0.05    ...ArrERP_UF.eps: unfiltered ERP plots in an array form &lt;br /&gt;
 All files are in the folder GrandAVR &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  Optional Revision Steps &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Example 1:  Call the script to revise the manual bad channel rejection &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(2,1) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Example 2:  Call the script to revise the manual rejection  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(2,2) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt; Example 3:  Call the script to revise manual rejection and bad channel removal &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(2,3) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Example 4:  Call the script to revise manual rejection and bad components &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(2,4,&#039;1&#039;) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt; Procedure: EOG - Regression [MthICA = &#039;9&#039;]&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;STEP 3:  Non-Interactive  Ocular Correction, &amp;quot;quick and dirty&amp;quot; method. Prototypical eye blinks and movements are computed and by using regression method it is deduced what has to be removed from the data. &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ProcessSubject(0,NaN,&#039;9&#039;) &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av9  .eog &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av9:  average    .eog  eye correction &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;STEP 4:  Grand Averaging &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;gt;&amp;gt; ExpGrdAvg(&#039;9&#039;)   &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you encounter an error while running any of the scripts, use function &#039;dbstop if error&#039; to troubleshoot. This will open the script where the error was found and give an arrow on the problematic line. Make sure that all expressions are balanced and that there are no typos, there are the correct number of arguments for each function, and that each variable is properly assigned. Then try calling that script alone within the &#039;dbstop&#039; shell to see if it runs. If not, look at the parameters for that script/the individual functions called to see where the problem may lie. If the problem is beyond your ability, ask another group member (not Sebastian, if possible) to see if they can help.&lt;br /&gt;
&lt;br /&gt;
Also, if you find any errors in running the scripts, you can run each one of the scripts in the &#039;YourStudy&#039; folder individually. In this way, you may be able to better identify what the specific problem entails. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Redo steps===&lt;br /&gt;
&lt;br /&gt;
If you want to redo steps (for example redo the manual rejection, because you think you did something wrong), please call the script with the »Revise« parameter (see help ProcessSubject for usage). The files that are created in the processing steps that follow the step you revised will be moved away (they have to be recalculated). You can check which steps have to be redone, with the file extensions corresponding to the specific steps that can be found in the flowchart.&lt;br /&gt;
&lt;br /&gt;
Some specific remarks about how to do the revision steps:&lt;br /&gt;
&lt;br /&gt;
If you changed the channels to be removed (because of them having bad data quality) this also means that the manual rejections have to be revised. Please check whether some of the rejections made before can be removed due to the fact that the channel that contained these artifacts has been removed from the data due to bad quality.&lt;br /&gt;
&lt;br /&gt;
===ICA-Method 4 (Binary ICA)===&lt;br /&gt;
&lt;br /&gt;
The binary ICA is much faster than the one in MATLAB. If you have set the ICA-Method to 4 in your DefSettings, the third step (no interaction) will produce a .bc file in your Data directories. You then have to run ica_linux_i686 on this file.&lt;br /&gt;
To process a single participant, cd to your Study directory in a shell, then type&lt;br /&gt;
./ica_linux_$(uname -i) &amp;lt; DataFiles/vp_xx/vp_xx.bc&lt;br /&gt;
(replace vp_xx with the appropriate directory/filenames).&lt;br /&gt;
&lt;br /&gt;
You can use the following two shell commands to run the binary ICA on all (unprocessed) participants:&lt;br /&gt;
 /scr/neuromusXX/EXPERIMENTS/Your_Study_Directory&lt;br /&gt;
 for F in $(find DataFiles/*/*.bc); do if [ ! -e $(grep WeightsOutFile ${F} | cut -d&amp;quot; &amp;quot; -f2) ] &amp;amp;&amp;amp; [ ! -e $(grep SphereFile ${F} | cut -d&amp;quot; &amp;quot; -f2) ]; then ./ica_linux_$(uname -i) &amp;lt; ${F}; fi; done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Comparing two experimental groups===&lt;br /&gt;
&lt;br /&gt;
If you want to compare two groups in your experiment, for example to compare musicians with nonmusicians, you have to perform several steps.&lt;br /&gt;
&lt;br /&gt;
1. Create a text file with your grouping information&lt;br /&gt;
&lt;br /&gt;
Open Calc or Excel (or SPSS or whatever you prefer). You need three columns for most of our experiments, with headers SubjCode, SelSubj, and ExpGroup. List all your Subjects in the column SubjCode like you did it in     case &#039;N&#039; in the variable &#039;Settings&#039;. It is important, that all Subjects that are in your grouping file, are also in your DefSettings &#039;N&#039; list, otherwise the script will not work. In the column SelSubj you can specify   which subjects should be excluded (because of bad data ect). Use 0 for exclude and 1 for include. In the last column ExpGroup you can specify the experimental group. Choose for example 1 for musicians and 2 for         nonmusicians, or &#039;M&#039; for musicians and &#039;NM&#039; for nonmusicians (numbers and letters are both ok, it will be used as extension in the name of your average files). Specify all your experimental groups in this way&lt;br /&gt;
&lt;br /&gt;
Save the file&lt;br /&gt;
Click &#039;Save as&#039;, and save the file again as .csv or .dat file (you can choose the extension by clicking on &#039;All Formats&#039;). Be sure that you choose tab or semicolon as file delimiter. Otherwise it will not work.&lt;br /&gt;
&lt;br /&gt;
The text file should look like this (or seperated by &#039;;&#039; if you choose this as delimiter):&lt;br /&gt;
&lt;br /&gt;
 SubjCode        SelSubj  ExpGroup&lt;br /&gt;
 yourstudy_vp01  1        1&lt;br /&gt;
 yourstudy_vp02  1        1&lt;br /&gt;
 yourstudy_vp03  1        1&lt;br /&gt;
 yourstudy_vp04  1        1&lt;br /&gt;
 yourstudy_vp05  1        1&lt;br /&gt;
 yourstudy_vp06  0        2&lt;br /&gt;
 yourstudy_vp07  1        1&lt;br /&gt;
 yourstudy_vp08  1        2&lt;br /&gt;
 yourstudy_vp09  1        1&lt;br /&gt;
 yourstudy_vp10  0        2&lt;br /&gt;
 yourstudy_vp11  1        1&lt;br /&gt;
&lt;br /&gt;
2. Save this file in you experiment directory in the folder Databases/SPSS. When this folder does not exist you can create it.&lt;br /&gt;
&lt;br /&gt;
/scr/neuromusXX/EXPERIMENTS/&amp;lt;YourStudy&amp;gt;/Databases/SPSS&lt;br /&gt;
&lt;br /&gt;
3. Enter the filename in DefSettings&lt;br /&gt;
&lt;br /&gt;
In case &#039;ExpGrdAvg&#039; right at the end, you will find the variable --&amp;gt; Settings.FleDAT&lt;br /&gt;
Set the variable to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Settings.FleDAT = [pwd, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;Databases&#039;&amp;lt;/span&amp;gt;, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;SPSS&#039;&amp;lt;/span&amp;gt;, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;YourGroupingFile.dat&#039;&amp;lt;/span&amp;gt;]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Export your Grand Averages&lt;br /&gt;
&lt;br /&gt;
When you export your Grand Averages by typing&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;ExpGrdAvg&lt;br /&gt;
&lt;br /&gt;
A window will pop up asking you: &#039;Please choose variable to select participants&#039; &lt;br /&gt;
Here you choose SelSubj, to select all subjects you want to have in your analysis. All subjects with a 0 in the column under SelSubj in your grouping file will be excluded. This is of course also possible in the DefSettings file, but in this way you have your data complete and can switch Subjects on and off very easily. It is important, that all Subjects that are in your grouping file, are also in your DefSettings &#039;N&#039; list, otherwise the script will not work.&lt;br /&gt;
&lt;br /&gt;
The next window asks you: &#039;Please choose variable(s) to group participants&#039; &lt;br /&gt;
Here you choose ExpGroup, to divide your subjects into the experimental groups you specified in your grouping file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful EEGLAB commands and tools for running scripts==&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; EEG = pop_loadset()&lt;br /&gt;
&lt;br /&gt;
-        Loads a specific dataset (.set) so that you can examine one participant&#039;s data at a time. This includes loading sets in order to run scripts for individual participants.&lt;br /&gt;
&lt;br /&gt;
-        Now, the set that you are working with will be assigned to: EEG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; EEG&lt;br /&gt;
&lt;br /&gt;
-        running this command tells you which dataset is currently loaded. It also gives you information about all the fields available under this structure, including comments, events, epochs, chanlocs, etc.&lt;br /&gt;
&lt;br /&gt;
-        The Fields under this structure often have subfields of their own. Thus,&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; {EEG.event.latency}&lt;br /&gt;
&lt;br /&gt;
will return a matrix containing all of the latencies (in samples: divide by *500 to get seconds) of the marked events. The brackets prevent each event from being listed on                     its own line. This is useful in determining if the timing of the EEG recording corresponds to the length of your stimuli. If there is a discrepancy, it could affect your results.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; &#039;YourStudy&#039;(EEG)&lt;br /&gt;
&lt;br /&gt;
-        This command will run the entire script on only one dataset. Additionally, you can use other scripts, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; Calc_AVR(EEG)&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; Strg + c&lt;br /&gt;
&lt;br /&gt;
-        Typing Ctrl, or Strg and the letter c will stop any process that is running.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; eeglab&lt;br /&gt;
&lt;br /&gt;
-        This will open the GUI again, if you need to work with it.&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; edit DefSettings.m&lt;br /&gt;
&lt;br /&gt;
-        Provided your directory is set correctly, this will allow you to edit DefSettings (or any other script) from the command line. Most Matlab commands work in the same way in EEGLAB, such as &#039;whos&#039;, &#039;help&#039;, and &#039;exit&#039;.&lt;br /&gt;
&lt;br /&gt;
Check single-subject averages (Example from Experiment DevDet VP18)&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;load DataFiles/devdet1_VP18/devdet1_VP18.av1 -MAT&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;{AVR.setname}&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;help pop_comperp  à shows you all parameters you may set for pop_comperp&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;pop_comperp(AVR, 1, [1], [2], &#039;addavg&#039;, &#039;on&#039;, &#039;subavg&#039;, &#039;on&#039;, &#039;diffavg&#039;, &#039;on&#039;, &#039;diffstd&#039;, &#039;off&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Processing of specific Subjects===&lt;br /&gt;
&lt;br /&gt;
If you run the script with revision you will be asked which specific subjects you want to revise. However, you will not be asked when you are running the normal analysis. If you never the less want to process only specific subjects, this is how it works:&lt;br /&gt;
&lt;br /&gt;
1. open the ProcessSubject.m file by typing in the command line&lt;br /&gt;
&amp;gt;&amp;gt;edit ProcessSubject&lt;br /&gt;
Set a breakepoint to Line 31 by clicking in the gray area at the left, where the line numbers are depicted.&lt;br /&gt;
&lt;br /&gt;
2.Start the script with or without interaction, depending on what the steps are you want to run. So e.g.&lt;br /&gt;
&amp;gt;&amp;gt;ProcessSubject(1)&lt;br /&gt;
The script will start, but only up to line 31. &lt;br /&gt;
&lt;br /&gt;
3. The Subjectlist is already loaded and you can ask for it by typing&lt;br /&gt;
K&amp;gt;&amp;gt;SubjList&lt;br /&gt;
EEGLAB will show you the Subject List and the number of the columns belonging to the specific subjects. E.g.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: green&amp;quot;&amp;gt;Columns 273 through 280&lt;br /&gt;
&lt;br /&gt;
 &#039;021&#039;    &#039;020&#039;    &#039;019&#039;    &#039;018&#039;    &#039;017&#039;    &#039;016&#039;    &#039;015&#039;    &#039;014&#039;&lt;br /&gt;
&lt;br /&gt;
 Columns 281 through 288&lt;br /&gt;
&lt;br /&gt;
 &#039;013&#039;    &#039;012&#039;    &#039;011&#039;    &#039;010&#039;    &#039;009&#039;    &#039;008&#039;    &#039;007&#039;    &#039;006&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You know now that Subject 021 is stored in column 273 and Subject 014 in Column 280 etc.&lt;br /&gt;
&lt;br /&gt;
4. You have to search for the columns that you are interested in, and change the subject list to only these columns. So if you want to process e.g. subject 021 to 014 you type&lt;br /&gt;
&lt;br /&gt;
K&amp;gt;&amp;gt;SubjList=SubjList(273:280)&lt;br /&gt;
&lt;br /&gt;
5. The last step is to continue the script&lt;br /&gt;
&lt;br /&gt;
K&amp;gt;&amp;gt;dbcont&lt;br /&gt;
Now the script will only process the subjects in the columns you specified&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Processing a subject list backwards===&lt;br /&gt;
&lt;br /&gt;
Sometimes it may be useful to process a subject list backwards. For example when you start an analysis on two different computers to process your data more quickly.&lt;br /&gt;
&lt;br /&gt;
Carry out steps 1. - 3. from &#039;Processing of specific subjects&#039;. &lt;br /&gt;
&lt;br /&gt;
In step 4. you do not have to give specific columns, but you want to flip the whole subject list. Do this by typing&lt;br /&gt;
&lt;br /&gt;
K&amp;gt;&amp;gt;SubjList=fliplr(SubjList)&lt;br /&gt;
EEGLAB will show you the new subject list.&lt;br /&gt;
&lt;br /&gt;
Now continue the script&lt;br /&gt;
K&amp;gt;&amp;gt;dbcont&lt;br /&gt;
&lt;br /&gt;
Now the script will process the subject list backwards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Criteria to remove ICA components==&lt;br /&gt;
We have two ways of checking which components to remove. The one way is checking at the headplots, what the scalp distribution is. The other approach is checking in the components, which of them looks like an eye related component (eye blink, eye movement), or ECG or other kind of artifact. &lt;br /&gt;
&lt;br /&gt;
Rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Stop removal at component 10 (after comp. 10).&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Do not remove more than 6 components&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Do not remove a noisy component (ex: this may be the mastoid) unless it has a clear artifact&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Remove only repetitive artifacts&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
Typical patterns of artifact that we should remove: &lt;br /&gt;
1) Typical artifact for eye-blink (many dispersed red spots)  Think of it orthogonally, the major component, the longer direction of the eye blink will load on the component 1 and a bit of vertical component in another number.&lt;br /&gt;
[[File:typical_eyeBlink_artifact.jpg]]&lt;br /&gt;
&lt;br /&gt;
2) Horizontal eye movement  &lt;br /&gt;
[[File:hor_eye.jpg]]&lt;br /&gt;
&lt;br /&gt;
3) ECG: Typical peaks at around 10Hz&lt;br /&gt;
May be useful to set the scale or the raw data @ 100 mV so that the heart-bit can be viewed.&lt;br /&gt;
[[File:ECG.jpg]]&lt;br /&gt;
&lt;br /&gt;
 NOTE: always check that eye artifact in  the raw data coincide with the eye artifact as captured in the component you are planning to remove, as shown in the figure below&lt;br /&gt;
[[File:check_comp_rawdata.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Videos:&lt;br /&gt;
&lt;br /&gt;
1) Identifying ICA components for removal [https://drive.google.com/file/d/1N4tGm-0pd8q6EKNCB2JUtm_06kzK5UiE/view?usp=sharing Sebastian_video_1] and [https://drive.google.com/file/d/1cHrXk76fXK9xrnPZEpHTn_pTrN-sFCqe/view?usp=sharing Sebastian_video_2] &lt;br /&gt;
2) Description of the ICA capturing the typical artifact of the blinks [https://drive.google.com/file/d/1YxZCaHezzLi4M89YrO4lzLQoiPwr-QFN/view?usp=sharing Sebastian_video_3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SPSS Tips==&lt;br /&gt;
&lt;br /&gt;
In order to import .dat file in SPSS: &lt;br /&gt;
Open SPSS, File &amp;gt; Import Data &amp;gt; Text Data &amp;gt; select the file you want to import and press OK. Then the Text Import Wizard window opens where in Steps 1,2,3,5 just press Next. In Step 4: tick the Semicolon, Remove leading spaces from string values and Remove trailing spaces from string values. Uncheck the Space. In Step 6: In &amp;quot;Would you like to paste the syntax?&amp;quot; select Yes and press Finish.  &lt;br /&gt;
&lt;br /&gt;
Analysis: &lt;br /&gt;
Analyze &amp;gt; General Linear Model &amp;gt; Repeated Measures Compare 2 conditions&lt;br /&gt;
&lt;br /&gt;
==Further information (lecture slides from SJ)==&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/f/fc/EEGLAB_-_Introduction_1_%282013-01-24%29.pdf EEGLAB - Introduction 1]&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/a/a3/EEGLAB_-_Introduction_2_%282013-02-14%29.pdf EEGLAB - Introduction 2]&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/c/c0/EEGLAB_-_Introduction_3_%282012-02-09%29.pdf EEGLAB - Introduction 3]&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/a/a8/EEGLAB_-_Introduction_4_%282012-02-16%29.pdf EEGLAB - Introduction 4]&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=435</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=435"/>
		<updated>2021-04-21T09:02:54Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Preparing Files for Analysis==&lt;br /&gt;
&lt;br /&gt;
* Connect to NeuroMus01: $ ssh -X NeuroMus01&lt;br /&gt;
&lt;br /&gt;
* In your Experiment folder you need a folder &amp;quot;DataFiles&amp;quot;. &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles&lt;br /&gt;
&lt;br /&gt;
* In this folder you create a subfolder for each participant &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles/&#039;experimentname_VP##&#039;&lt;br /&gt;
&lt;br /&gt;
* All these folders need to contain again a Subfolder &amp;quot;RawData&amp;quot; &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles/&#039;experimentname_VP##&#039;/RawData&lt;br /&gt;
&lt;br /&gt;
* Or you can type the following command to create the required number of folders and subfolders: &lt;br /&gt;
  &amp;lt;code&amp;gt;$ for R in 1,2,...; do mkdir -p expName_sbj0${R}/RawData; done &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Copy the three eeg files for one participant into this folder &amp;quot;RawData&amp;quot;, do that for each participant.&lt;br /&gt;
&lt;br /&gt;
* Change file permissions for all eeg files from all participants. Go to your experiments directory and change permission and type:&lt;br /&gt;
  &amp;lt;code&amp;gt;chmod -&amp;gt; &amp;lt;code&amp;gt;find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod 440 {} &amp;quot;;&amp;quot;&amp;lt;/code&amp;gt;  or   &lt;br /&gt;
  &amp;lt;code&amp;gt; $ find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod u=rwx,g=rwx,o=r {} &amp;quot;;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  e.g.: (in command line)&lt;br /&gt;
  &amp;lt;code&amp;gt;$ cd /scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;$ find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod 440 {} &amp;quot;;&amp;quot;Preparing Files for Analysis&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to use the EEG analysis Script==&lt;br /&gt;
&lt;br /&gt;
The script consists of several files. The file YourStudy.m is the main script (should have the name of the study from which you copied the files. E.g. DevDet.m, HiScore.m, …).&lt;br /&gt;
&lt;br /&gt;
===Procedure of the Analysis (flowchart)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Prepare the Script===&lt;br /&gt;
&lt;br /&gt;
Copy analysis script files and folders from a previous (similar is best) experiment and put in your &#039;scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/&#039; folder. Rename main script to &#039;YourStudy&#039;, and rename the function within the script (first line of the file).&lt;br /&gt;
&lt;br /&gt;
===DefSettings.m===&lt;br /&gt;
 &lt;br /&gt;
(Based on DefSettings.m from study DevDet)&lt;br /&gt;
The file DefSettings.m contains all settings for your analysis and has to be adapted to your needs. Within DefSettings.m, make sure the name of the study is correct again.&lt;br /&gt;
&lt;br /&gt;
DefSettings is subdivided in different &#039;cases&#039; which will be discussed in the following. Also have a look at the comments in the file DefSettings (depicted in green). They explain which values you have to choose.&lt;br /&gt;
&lt;br /&gt;
Case &#039;S&#039;&lt;br /&gt;
&lt;br /&gt;
Settings.MthICA = &#039;0&#039;;&lt;br /&gt;
&lt;br /&gt;
* Change this value to 0 for processing your data with only an EOG correction (first step)&lt;br /&gt;
&lt;br /&gt;
* Change this value to 1 for processing your data with ICA (to clean data in a second step)&lt;br /&gt;
&lt;br /&gt;
Settings.RefChn = &#039;M1|M2&#039;;&lt;br /&gt;
&lt;br /&gt;
* Should be your reference channels, normally M1 and M2 is correct&lt;br /&gt;
&lt;br /&gt;
Case {&#039;YourStudy&#039;, &#039;LoadData&#039;}&lt;br /&gt;
&lt;br /&gt;
Here you can find the filter settings that are used while loading your data. You don&#039;t have to change them unless your study does not need any special filter settings.&lt;br /&gt;
&lt;br /&gt;
Case &#039;LoadRaw&#039;&lt;br /&gt;
&lt;br /&gt;
Settings.SettFIR&lt;br /&gt;
&lt;br /&gt;
* again specifies some filters&lt;br /&gt;
&amp;lt;tt&amp;gt;Settings.CutTRG  =&amp;lt;/tt&amp;gt;&lt;br /&gt;
 {{{},                            [],  [], {&#039;^0021$&#039;, &#039;^0016$&#039;},                 2,   1};&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0022$&#039;},                      1,   1, {&#039;^0022$&#039;, &#039;^0016$&#039;},                 2,   1}; ...&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0023$&#039;},                      1,   1, {&#039;^0023$&#039;, &#039;^0016$&#039;},                 2,   1}; ...&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0024$&#039;, &#039;^0016$&#039;, &#039;^0024$&#039;},  1,   1,  {},                                 [],  []}};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Cuts out epochs that are not required for your analysis (like for example pauses)&lt;br /&gt;
&lt;br /&gt;
* Epochs are always cut out from a certain trigger combination (green) to a certain trigger combination (red)&lt;br /&gt;
&lt;br /&gt;
* If the brackets are empty like in the first line, epochs will be cut out from the beginning of the data file to a certain trigger combination (trigger 0021 followed by trigger 0016). Same holds for the last line. Empty brackets at the end means, that trigger are cut out from the trigger combination until the end.&lt;br /&gt;
&lt;br /&gt;
* If your study does not require you to cut out any epochs, you can make a comment out of these lines (type &#039;%&#039; in front of each line). These lines will then not be processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoRmBdCh&#039;&lt;br /&gt;
&lt;br /&gt;
Settings for the channel rejection (throw out bad channels), with settings for the plot and thresholds for the rejection. Does not have to be adapted unless you need special settings for your experiment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoManRej&#039;&lt;br /&gt;
&lt;br /&gt;
Settings for the manual rejection window. No changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoClnEOG&#039;&lt;br /&gt;
&lt;br /&gt;
-No Changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoSelCmp&#039;&lt;br /&gt;
&lt;br /&gt;
Settings for component rejection of the ICA. No changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;DoRejAvr&#039;&lt;br /&gt;
&lt;br /&gt;
This function combines two steps, the automatic rejection and the calculation of the averages. Most of the variables do not have to be changed.&lt;br /&gt;
Settings.SelElc&lt;br /&gt;
&lt;br /&gt;
* Specify all electrodes for the automatic rejection (all electrodes besides EOG channels and references)&lt;br /&gt;
&lt;br /&gt;
Other parameters specify thresholds for the automatic rejection à no changes unless you need them&lt;br /&gt;
&lt;br /&gt;
Settings.Sett4Avr&lt;br /&gt;
&lt;br /&gt;
* Parameters for calculating averages&lt;br /&gt;
&lt;br /&gt;
* There are two forms of this variable. Use the one with  the list to specify your conditions if you have only one experiment. If you have more than one experiment in your study choose the Settings.Sett4Avr variable with the &#039;if, elseif - loop&#039;. Comment out the one you don&#039;t need for your study&lt;br /&gt;
&lt;br /&gt;
* Fill in all trigger codes belonging to one condition that need to be averaged under one condition code&lt;br /&gt;
&lt;br /&gt;
* Give a name for this condition under cond. Name (this name should not be too long)&lt;br /&gt;
&lt;br /&gt;
* Set the epoch for this average (-0.2 to 1.2 should usually be fine, unless you are investigating later components)&lt;br /&gt;
&lt;br /&gt;
* Set a baseline (-0.2 to 0.0 should usually be fine).  ATTENTION: Setting the baseline should be done before running STEP 5 (see table below). Changing the baseline after STEP 5 and running ExpGrdAgv will not make any change! &lt;br /&gt;
&lt;br /&gt;
* Specify if there are triggers that need to be cut out before averaging (e.g. button presses). Do this in the last bracket: [1 2]&lt;br /&gt;
&lt;br /&gt;
* All these information need to be specified for all conditions you want to average. Make sure that you always follow the syntax that is predefined for other experiments (don&#039;t forget brackets or &#039;;&#039; or &#039;…&#039;&lt;br /&gt;
Settings.TrgCutOut&lt;br /&gt;
&lt;br /&gt;
* Specifies triggers that need to be cut out before averaging (for example button presses or stimuli from a cover task)&lt;br /&gt;
&lt;br /&gt;
{triggers that need to be cut out, range between two triggers also possible}, [search range for the second trigger], [time to add if only one trigger is found], [time to add if both triggers are found]&lt;br /&gt;
&lt;br /&gt;
* It is thus possible to cut out a stimulus followed by a button press, or to cut out a button press together with the 0.x seconds before the button press, etc.&lt;br /&gt;
&lt;br /&gt;
Other parameters: no changes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;ExpGrdAvg&#039;&lt;br /&gt;
&lt;br /&gt;
In case &#039;ExpGrdAvr&#039;, divide the conditions to facilitate any statistical comparison you may be interested in making.&lt;br /&gt;
&lt;br /&gt;
Settings.ExpPfx&lt;br /&gt;
&lt;br /&gt;
Fill in the prefix of your study (YourStudy)&lt;br /&gt;
&lt;br /&gt;
Settings.ExpStt&lt;br /&gt;
&lt;br /&gt;
Here you will find a matrix in which you can specify some parameters for the grand averages you want to calculate. The matrix has several rows, separated with a semicolon at the end of each line, and several columns, separated by comma in each line. The parameter belonging to a specific column is written above the matrix in green comments. Now the parameters you have to specify in each column will be explained.&lt;br /&gt;
&lt;br /&gt;
* Specify the conditions that need to be averaged and compared under cond. Code (you need the condition codes you specified in Calc_AVR here)&lt;br /&gt;
&lt;br /&gt;
* Specify SPSS codes (should be short, because these are a part of the variable names, otherwise variable names get too long)&lt;br /&gt;
&lt;br /&gt;
* Specify which of the two conditions should be added and which should be subtracted (no changes)&lt;br /&gt;
&lt;br /&gt;
* Specify the baseline (-200 to 0 should usually be fine)&lt;br /&gt;
&lt;br /&gt;
* List all time windows you are interested in. For your first analysis you can leave them as they are to explore your data. In a second analysis you can specify time windows for your effect. If you have a time window of interest, based on previous research, you can just add it. Make a comma after the last time window and add your time window in brackets [ ].&lt;br /&gt;
&lt;br /&gt;
* If you have more than one experiment, you can add the experiment name. Otherwise you leave this field empty --&amp;gt; &#039;&#039;&lt;br /&gt;
* Specify in which color the different conditions should be depicted in the figure. Specify a color for the condition that is added (e.g. &#039;r&#039; for red), a color for the condition that is subtracted (e.g. &#039;b&#039; for blue), and a colour for the difference wave (e.g. &#039;k&#039; for black). --&amp;gt; {&#039;r&#039;, &#039;b&#039;, &#039;k&#039;}&lt;br /&gt;
You can also specify the line-width of the waveforms by adding it in a bracket after the color like this: {&#039;r&#039;, &#039;b&#039;, {&#039;k&#039;, &#039;linewidth&#039;, 2}}&lt;br /&gt;
Now the difference line should be depicted in black, with a line-width of 2.&lt;br /&gt;
&lt;br /&gt;
If you want to use different colors or change other parameters for the lines you can find information about how to do it in the matlab documentation:&lt;br /&gt;
http://www.mathworks.de/de/help/matlab/ref/plot.html#inputarg_LineSpec&lt;br /&gt;
&lt;br /&gt;
* Specify amplitude limits for your plots.&lt;br /&gt;
Specify the scale for your averages. [-6:2:12] would for example result in a scale from -6 to 12 in steps of 2.&lt;br /&gt;
Specify the amplitude limits for the headplots. Here you need one specification for each timewindow, and amplitude limits should always range from -x to x. So for example from -3 to 3 --&amp;gt; [-3 3].&lt;br /&gt;
Thus if you specified for example 5 different timewindows, and you want to set the amplitude limits for all headplots to -3 to 3, it should look like this:&lt;br /&gt;
{[-3 3], [-3 3], [-3 3], [-3 3], [-3 3]}&lt;br /&gt;
Settings.ExpElc&lt;br /&gt;
&lt;br /&gt;
* Enter all electrodes that should be used to calculate the grand average (all electrodes besides EOG and reference channels)&lt;br /&gt;
Settings.ExpROI&lt;br /&gt;
&lt;br /&gt;
* Specify your regions of interest&lt;br /&gt;
&lt;br /&gt;
* If you need frontal left, frontal right, parietal left, parietal right, the settings should be fine&lt;br /&gt;
Settings.FigStt&lt;br /&gt;
&lt;br /&gt;
Settings for the figures you want to export. Choose the ones you need or leave all in.&lt;br /&gt;
                      {{&#039;lowpass&#039;, 10},               &#039;__&#039;; ...  % low-pass filtered 10 Hz, no running t-test&lt;br /&gt;
                      {},                             &#039;UF&#039;; ...  % data are unfiltered, no running t-test&lt;br /&gt;
                      {&#039;lowpass&#039;, 10, &#039;alpha&#039;, 0.05}, &#039;T5&#039;; ...  % low-pass filtered 10 Hz, running t-test (p &amp;lt; 0.05)&lt;br /&gt;
                      {&#039;lowpass&#039;, 10, &#039;alpha&#039;, 0.01}, &#039;T1&#039;};...  % low-pass filtered 10 Hz, running t-test (p &amp;lt; 0.01)&lt;br /&gt;
Settings.FigScp&lt;br /&gt;
* 1 = show / export figures with plots of the grand averages like the scalp position on the scalp; 0 = don&#039;t export&lt;br /&gt;
Settings.LimGrd&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the grand average scalp and array plots (otherwise they will be calculated from the data) --&amp;gt; for the scalp plots&lt;br /&gt;
Settings.FigArr&lt;br /&gt;
* 1 = show / export figures with plots of the grand averages in a rectangular array, 0 = don&#039;t export&lt;br /&gt;
Settings.ArrElc&lt;br /&gt;
&lt;br /&gt;
* Specify electrodes for which the grand average should be depicted in the rectangular array figure.&lt;br /&gt;
Settings.LimGrd&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the grand average scalp and array plots (otherwise they will be calculated from the data) --&amp;gt; for the array plots&lt;br /&gt;
Settings.FigIdA&lt;br /&gt;
&lt;br /&gt;
* 1 = show / export individual averages, 0 = don&#039;t export&lt;br /&gt;
Settings.PltIdA&lt;br /&gt;
&lt;br /&gt;
* &#039;S&#039; - scalp array, &#039;R&#039; - rectangular array - takes the respective electrode settings defined above (ScpElc or ScpTyp and ArrElc or ArrTyp)&lt;br /&gt;
Settings.LimIdA&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the single subject averages (otherwise they will be calculated from the data)&lt;br /&gt;
Other parameters: no changes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Case &#039;N&#039;&lt;br /&gt;
&lt;br /&gt;
In case &#039;N&#039;, make sure that all of the subject data that you have are correctly named and arranged.&lt;br /&gt;
Settings = {&#039;YourStudy_VP01&#039;, &#039;YourStudy_VP02&#039;}&lt;br /&gt;
&lt;br /&gt;
* All participants you want to process need to be specified here&lt;br /&gt;
&lt;br /&gt;
* Make sure that they have the same name as the eeg files in your folder (case-sensitive)&lt;br /&gt;
&lt;br /&gt;
* Any participants that need to be thrown out can be arranged next to the SubjRmvd header (which is made a comment by the &#039;%&#039;) as well as an explanation for why the participant was removed.&lt;br /&gt;
&lt;br /&gt;
===Run the Script===&lt;br /&gt;
&lt;br /&gt;
* Start EEGLab (should be &#039;el&#039; within terminal), and run on a computer with decent RAM or else it will be slow&lt;br /&gt;
&lt;br /&gt;
* Change the directory to YourStudy directory by using :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; cd /scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; cd /SCR/EXPERIMENTS/&#039;YourStudy&#039;/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run the Script by just calling the main script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; ProcessSubject&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You can call the ProcessSubject function with some arguments that are listed below&lt;br /&gt;
&lt;br /&gt;
 Interact = carry out processing steps requiring user interaction&lt;br /&gt;
      0   - carry out steps not requiring user interaction&lt;br /&gt;
      1   - carry out steps requiring user interaction&lt;br /&gt;
      2   - revise steps that were already carried out&lt;br /&gt;
&lt;br /&gt;
 ProcStep = carry out the following processing steps              (0-7, byte)&lt;br /&gt;
      1   - bad channel removal&lt;br /&gt;
      2   - manual rejections&lt;br /&gt;
      4   - component selection&lt;br /&gt;
(those can be combined, e.g., 3 would be the revision of bad channels and of manual rejections)&lt;br /&gt;
&lt;br /&gt;
Here is the sequence of steps that you should follow:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;table style=&amp;quot;width:100%&amp;quot;  border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Command&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Output Files&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;File Description&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;30%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;STEP 1:&amp;lt;/b&amp;gt;  Call the script without interaction  Loading REFs, Filtered data, trigger file, channel locations&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;30%&amp;quot;&amp;gt;&amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;.set &amp;amp; .fdt&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;.set: &amp;lt;/b&amp;gt; contains information about the sampling rate, the subject Nr and the events  &amp;lt;b&amp;gt;.fdt: &amp;lt;/b&amp;gt; contains the data matrix, channels x sampling points. &amp;lt;/td&amp;gt;    &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; STEP 2: &amp;lt;/b&amp;gt; Call the script with interaction  Manual rejection of bad channels/epochs, adjust the scale accordingly @ 200mV for Channel removal and @ 100mV for bad epochs. Criteria for bad channel removal [[BadChannels]]. Examples of bad epochs that should be removed: [[BadEpochs]].    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(1) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .rmc &amp;amp; .out &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.rmc: &amp;lt;/b&amp;gt; contains the channel you selected for removal, which at a later point will be interpolated  &amp;lt;b&amp;gt; .out: &amp;lt;/b&amp;gt; contains the periods you manually selected for rejection &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt; Procedure: ICA [MthICA = &#039;1&#039;] &amp;lt;/font&amp;gt; &amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;STEP 3: &amp;lt;/b&amp;gt; Non-Interactive Computation of ICA (binica)&amp;lt;/td&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0,NaN,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .ic1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.ic1: &amp;lt;/b&amp;gt; binica &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; STEP 4: &amp;lt;/b&amp;gt;  &lt;br /&gt;
Call the script with interaction to remove bad components. [see section Criteria to remove ICA components further down for instructions.  NOTE: During data scrolling we might see noisy parts that we wouldn&#039;t expect given the fact that a manual rejection of bad epochs preceded. The reason is that in STEP 2 the data are filtered so that we remove only too noisy parts whereas in STEP 4 we see unfiltered data because ICA requires unfiltered data.   &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(1,4,&#039;1&#039;) &amp;lt;/code&amp;gt;   &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(1,255,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .sc1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.sc1: &amp;lt;/b&amp;gt; contains information about which ICA components were manually selected for removal. We can copy the file &amp;lt;b&amp;gt;.sc1&amp;lt;/b&amp;gt; and rename it to &amp;lt;b&amp;gt;file.mat&amp;lt;/b&amp;gt; and then we can load it from matlab to check the included components. &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 5:&amp;lt;/b&amp;gt;  Non-Interactive  Filtering, rejecting epochs, averaging per condition and per subject&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0,255,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.av1: &amp;lt;/b&amp;gt; computed based on the files .ic1 &amp;amp; .av1 &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 6:&amp;lt;/b&amp;gt;  Calculate Grand Averages &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ExpGrdAvg(&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .dat  ...ArrERP___.eps  ...ArrERP_T1.eps  ...ArrERP_T5.eps  ...ArrERP_UF.eps  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; .dat: &amp;lt;/b&amp;gt; ta data file you need to import to SPSS in order to run the statistics  &amp;lt;b&amp;gt; ...ArrERP___.eps:&amp;lt;/b&amp;gt; ERP plots (filtered for visualisation) in an array form  &amp;lt;b&amp;gt; ...ArrERP_T1.eps:&amp;lt;/b&amp;gt; ERP plots (filtered for visualisation) in an array form with grey boxes for stat. sig. differences at p = 0.01   &amp;lt;b&amp;gt; ...ArrERP_T5.eps:&amp;lt;/b&amp;gt;ERP plots (filtered for visualisation) in an array form with grey boxes for stat. sig. differences at p = 0.05   &amp;lt;b&amp;gt; ...ArrERP_UF.eps:&amp;lt;/b&amp;gt; unfiltered ERP plots in an array form &lt;br /&gt;
 All files are in the folder GrandAVR &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; Optional Revision Steps &amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Example 1:  Call the script to revise the manual bad channel rejection &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,1) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Example 2:  Call the script to revise the manual rejection  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,2) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt; Example 3:  Call the script to revise manual rejection and bad channel removal &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,3) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Example 4:  Call the script to revise manual rejection and bad components &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,4,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt; Procedure: EOG - Regression [MthICA = &#039;9&#039;]&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 3: &amp;lt;/b&amp;gt; Non-Interactive  Ocular Correction, &amp;quot;quick and dirty&amp;quot; method. Prototypical eye blinks and movements are computed and by using regression method it is deduced what has to be removed from the data. &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0,NaN,&#039;9&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av9  .eog &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.av9: &amp;lt;/b&amp;gt; average   &amp;lt;b&amp;gt; .eog &amp;lt;b&amp;gt; eye correction &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 4: &amp;lt;/b&amp;gt; Grand Averaging &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ExpGrdAvg(&#039;9&#039;) &amp;lt;/code&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you encounter an error while running any of the scripts, use function &#039;dbstop if error&#039; to troubleshoot. This will open the script where the error was found and give an arrow on the problematic line. Make sure that all expressions are balanced and that there are no typos, there are the correct number of arguments for each function, and that each variable is properly assigned. Then try calling that script alone within the &#039;dbstop&#039; shell to see if it runs. If not, look at the parameters for that script/the individual functions called to see where the problem may lie. If the problem is beyond your ability, ask another group member (not Sebastian, if possible) to see if they can help.&lt;br /&gt;
&lt;br /&gt;
Also, if you find any errors in running the scripts, you can run each one of the scripts in the &#039;YourStudy&#039; folder individually. In this way, you may be able to better identify what the specific problem entails. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Redo steps===&lt;br /&gt;
&lt;br /&gt;
If you want to redo steps (for example redo the manual rejection, because you think you did something wrong), please call the script with the »Revise« parameter (see help ProcessSubject for usage). The files that are created in the processing steps that follow the step you revised will be moved away (they have to be recalculated). You can check which steps have to be redone, with the file extensions corresponding to the specific steps that can be found in the flowchart.&lt;br /&gt;
&lt;br /&gt;
Some specific remarks about how to do the revision steps:&lt;br /&gt;
&lt;br /&gt;
If you changed the channels to be removed (because of them having bad data quality) this also means that the manual rejections have to be revised. Please check whether some of the rejections made before can be removed due to the fact that the channel that contained these artifacts has been removed from the data due to bad quality.&lt;br /&gt;
&lt;br /&gt;
===ICA-Method 4 (Binary ICA)===&lt;br /&gt;
&lt;br /&gt;
The binary ICA is much faster than the one in MATLAB. If you have set the ICA-Method to 4 in your DefSettings, the third step (no interaction) will produce a .bc file in your Data directories. You then have to run ica_linux_i686 on this file.&lt;br /&gt;
To process a single participant, cd to your Study directory in a shell, then type&lt;br /&gt;
&amp;lt;code&amp;gt;./ica_linux_$(uname -i) &amp;lt; DataFiles/vp_xx/vp_xx.bc&amp;lt;/code&amp;gt;&lt;br /&gt;
(replace vp_xx with the appropriate directory/filenames).&lt;br /&gt;
&lt;br /&gt;
You can use the following two shell commands to run the binary ICA on all (unprocessed) participants:&lt;br /&gt;
 /scr/neuromusXX/EXPERIMENTS/Your_Study_Directory&lt;br /&gt;
 for F in $(find DataFiles/*/*.bc); do if [ ! -e $(grep WeightsOutFile ${F} | cut -d&amp;quot; &amp;quot; -f2) ] &amp;amp;&amp;amp; [ ! -e $(grep SphereFile ${F} | cut -d&amp;quot; &amp;quot; -f2) ]; then ./ica_linux_$(uname -i) &amp;lt; ${F}; fi; done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Comparing two experimental groups===&lt;br /&gt;
&lt;br /&gt;
If you want to compare two groups in your experiment, for example to compare musicians with nonmusicians, you have to perform several steps.&lt;br /&gt;
&lt;br /&gt;
1. Create a text file with your grouping information&lt;br /&gt;
&lt;br /&gt;
Open Calc or Excel (or SPSS or whatever you prefer). You need three columns for most of our experiments, with headers SubjCode, SelSubj, and ExpGroup. List all your Subjects in the column SubjCode like you did it in     case &#039;N&#039; in the variable &#039;Settings&#039;. It is important, that all Subjects that are in your grouping file, are also in your DefSettings &#039;N&#039; list, otherwise the script will not work. In the column SelSubj you can specify   which subjects should be excluded (because of bad data ect). Use 0 for exclude and 1 for include. In the last column ExpGroup you can specify the experimental group. Choose for example 1 for musicians and 2 for         nonmusicians, or &#039;M&#039; for musicians and &#039;NM&#039; for nonmusicians (numbers and letters are both ok, it will be used as extension in the name of your average files). Specify all your experimental groups in this way&lt;br /&gt;
&lt;br /&gt;
Save the file&lt;br /&gt;
Click &#039;Save as&#039;, and save the file again as .csv or .dat file (you can choose the extension by clicking on &#039;All Formats&#039;). Be sure that you choose tab or semicolon as file delimiter. Otherwise it will not work.&lt;br /&gt;
&lt;br /&gt;
The text file should look like this (or seperated by &#039;;&#039; if you choose this as delimiter):&lt;br /&gt;
&lt;br /&gt;
 SubjCode        SelSubj  ExpGroup&lt;br /&gt;
 yourstudy_vp01  1        1&lt;br /&gt;
 yourstudy_vp02  1        1&lt;br /&gt;
 yourstudy_vp03  1        1&lt;br /&gt;
 yourstudy_vp04  1        1&lt;br /&gt;
 yourstudy_vp05  1        1&lt;br /&gt;
 yourstudy_vp06  0        2&lt;br /&gt;
 yourstudy_vp07  1        1&lt;br /&gt;
 yourstudy_vp08  1        2&lt;br /&gt;
 yourstudy_vp09  1        1&lt;br /&gt;
 yourstudy_vp10  0        2&lt;br /&gt;
 yourstudy_vp11  1        1&lt;br /&gt;
&lt;br /&gt;
2. Save this file in you experiment directory in the folder Databases/SPSS. When this folder does not exist you can create it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/scr/neuromusXX/EXPERIMENTS/&amp;lt;YourStudy&amp;gt;/Databases/SPSS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Enter the filename in DefSettings&lt;br /&gt;
&lt;br /&gt;
In case &#039;ExpGrdAvg&#039; right at the end, you will find the variable --&amp;gt; Settings.FleDAT&lt;br /&gt;
Set the variable to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Settings.FleDAT = [pwd, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;Databases&#039;&amp;lt;/span&amp;gt;, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;SPSS&#039;&amp;lt;/span&amp;gt;, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;YourGroupingFile.dat&#039;&amp;lt;/span&amp;gt;]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Export your Grand Averages&lt;br /&gt;
&lt;br /&gt;
When you export your Grand Averages by typing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;ExpGrdAvg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A window will pop up asking you: &#039;Please choose variable to select participants&#039; &lt;br /&gt;
Here you choose SelSubj, to select all subjects you want to have in your analysis. All subjects with a 0 in the column under SelSubj in your grouping file will be excluded. This is of course also possible in the DefSettings file, but in this way you have your data complete and can switch Subjects on and off very easily. It is important, that all Subjects that are in your grouping file, are also in your DefSettings &#039;N&#039; list, otherwise the script will not work.&lt;br /&gt;
&lt;br /&gt;
The next window asks you: &#039;Please choose variable(s) to group participants&#039; &lt;br /&gt;
Here you choose ExpGroup, to divide your subjects into the experimental groups you specified in your grouping file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Useful EEGLAB commands and tools for running scripts==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; EEG = pop_loadset()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        Loads a specific dataset (.set) so that you can examine one participant&#039;s data at a time. This includes loading sets in order to run scripts for individual participants.&lt;br /&gt;
&lt;br /&gt;
-        Now, the set that you are working with will be assigned to: EEG&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; EEG&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        running this command tells you which dataset is currently loaded. It also gives you information about all the fields available under this structure, including comments, events, epochs, chanlocs, etc.&lt;br /&gt;
&lt;br /&gt;
-        The Fields under this structure often have subfields of their own. Thus,&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; {EEG.event.latency}&lt;br /&gt;
&lt;br /&gt;
will return a matrix containing all of the latencies (in samples: divide by *500 to get seconds) of the marked events. The brackets prevent each event from being listed on                     its own line. This is useful in determining if the timing of the EEG recording corresponds to the length of your stimuli. If there is a discrepancy, it could affect your results.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; &#039;YourStudy&#039;(EEG)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        This command will run the entire script on only one dataset. Additionally, you can use other scripts, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; Calc_AVR(EEG)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; Strg + c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        Typing Ctrl, or Strg and the letter c will stop any process that is running.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; eeglab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        This will open the GUI again, if you need to work with it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; edit DefSettings.m&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        Provided your directory is set correctly, this will allow you to edit DefSettings (or any other script) from the command line. Most Matlab commands work in the same way in EEGLAB, such as &#039;whos&#039;, &#039;help&#039;, and &#039;exit&#039;.&lt;br /&gt;
&lt;br /&gt;
Check single-subject averages (Example from Experiment DevDet VP18)&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;load DataFiles/devdet1_VP18/devdet1_VP18.av1 -MAT&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;{AVR.setname}&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;help pop_comperp  à shows you all parameters you may set for pop_comperp&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;pop_comperp(AVR, 1, [1], [2], &#039;addavg&#039;, &#039;on&#039;, &#039;subavg&#039;, &#039;on&#039;, &#039;diffavg&#039;, &#039;on&#039;, &#039;diffstd&#039;, &#039;off&#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Processing of specific Subjects===&lt;br /&gt;
&lt;br /&gt;
If you run the script with revision you will be asked which specific subjects you want to revise. However, you will not be asked when you are running the normal analysis. If you never the less want to process only specific subjects, this is how it works:&lt;br /&gt;
&lt;br /&gt;
1. open the ProcessSubject.m file by typing in the command line&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;edit ProcessSubject&amp;lt;/code&amp;gt;&lt;br /&gt;
Set a breakepoint to Line 31 by clicking in the gray area at the left, where the line numbers are depicted.&lt;br /&gt;
&lt;br /&gt;
2.Start the script with or without interaction, depending on what the steps are you want to run. So e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;ProcessSubject(1)&amp;lt;/code&amp;gt;&lt;br /&gt;
The script will start, but only up to line 31. &lt;br /&gt;
&lt;br /&gt;
3. The Subjectlist is already loaded and you can ask for it by typing&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;SubjList&amp;lt;/code&amp;gt;&lt;br /&gt;
EEGLAB will show you the Subject List and the number of the columns belonging to the specific subjects. E.g.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: green&amp;quot;&amp;gt;Columns 273 through 280&lt;br /&gt;
&lt;br /&gt;
 &#039;021&#039;    &#039;020&#039;    &#039;019&#039;    &#039;018&#039;    &#039;017&#039;    &#039;016&#039;    &#039;015&#039;    &#039;014&#039;&lt;br /&gt;
&lt;br /&gt;
 Columns 281 through 288&lt;br /&gt;
&lt;br /&gt;
 &#039;013&#039;    &#039;012&#039;    &#039;011&#039;    &#039;010&#039;    &#039;009&#039;    &#039;008&#039;    &#039;007&#039;    &#039;006&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You know now that Subject 021 is stored in column 273 and Subject 014 in Column 280 etc.&lt;br /&gt;
&lt;br /&gt;
4. You have to search for the columns that you are interested in, and change the subject list to only these columns. So if you want to process e.g. subject 021 to 014 you type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;SubjList=SubjList(273:280)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. The last step is to continue the script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;dbcont&amp;lt;/code&amp;gt;&lt;br /&gt;
Now the script will only process the subjects in the columns you specified&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Processing a subject list backwards===&lt;br /&gt;
&lt;br /&gt;
Sometimes it may be useful to process a subject list backwards. For example when you start an analysis on two different computers to process your data more quickly.&lt;br /&gt;
&lt;br /&gt;
Carry out steps 1. - 3. from &#039;Processing of specific subjects&#039;. &lt;br /&gt;
&lt;br /&gt;
In step 4. you do not have to give specific columns, but you want to flip the whole subject list. Do this by typing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;SubjList=fliplr(SubjList)&amp;lt;/code&amp;gt;&lt;br /&gt;
EEGLAB will show you the new subject list.&lt;br /&gt;
&lt;br /&gt;
Now continue the script&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;dbcont&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the script will process the subject list backwards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Criteria to remove ICA components==&lt;br /&gt;
We have two ways of checking which components to remove. The one way is checking at the headplots, what the scalp distribution is. The other approach is checking in the components, which of them looks like an eye related component (eye blink, eye movement), or ECG or other kind of artifact. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Rules:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Stop removal at component 10 (after comp. 10).&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Do not remove more than 6 components&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Do not remove a noisy component (ex: this may be the mastoid) unless it has a clear artifact&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Remove only repetitive artifacts&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Examples:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typical patterns of artifact that we should remove: &lt;br /&gt;
1) Typical artifact for eye-blink (many dispersed red spots)  Think of it orthogonally, the major component, the longer direction of the eye blink will load on the component 1 and a bit of vertical component in another number.&lt;br /&gt;
[[File:typical_eyeBlink_artifact.jpg]]&lt;br /&gt;
&lt;br /&gt;
2) Horizontal eye movement  &lt;br /&gt;
[[File:hor_eye.jpg]]&lt;br /&gt;
&lt;br /&gt;
3) ECG: Typical peaks at around 10Hz&lt;br /&gt;
May be useful to set the scale or the raw data @ 100 mV so that the heart-bit can be viewed.&lt;br /&gt;
[[File:ECG.jpg]]&lt;br /&gt;
&lt;br /&gt;
 NOTE: always check that eye artifact in  the raw data coincide with the eye artifact as captured in the component you are planning to remove, as shown in the figure below&lt;br /&gt;
[[File:check_comp_rawdata.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Videos:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;1)&amp;lt;/b&amp;gt; Identifying ICA components for removal [https://drive.google.com/file/d/1N4tGm-0pd8q6EKNCB2JUtm_06kzK5UiE/view?usp=sharing Sebastian_video_1] and [https://drive.google.com/file/d/1cHrXk76fXK9xrnPZEpHTn_pTrN-sFCqe/view?usp=sharing Sebastian_video_2] &lt;br /&gt;
&amp;lt;b&amp;gt;2)&amp;lt;/b&amp;gt; Description of the ICA capturing the typical artifact of the blinks [https://drive.google.com/file/d/1YxZCaHezzLi4M89YrO4lzLQoiPwr-QFN/view?usp=sharing Sebastian_video_3]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SPSS Tips==&lt;br /&gt;
&lt;br /&gt;
In order to import .dat file in SPSS: &lt;br /&gt;
Open SPSS, File &amp;gt; Import Data &amp;gt; Text Data &amp;gt; select the file you want to import and press OK. Then the Text Import Wizard window opens where in Steps 1,2,3,5 just press Next. In Step 4: tick the Semicolon, Remove leading spaces from string values and Remove trailing spaces from string values. Uncheck the Space. In Step 6: In &amp;quot;Would you like to paste the syntax?&amp;quot; select Yes and press Finish.  &lt;br /&gt;
&lt;br /&gt;
Analysis: &lt;br /&gt;
Analyze &amp;gt; General Linear Model &amp;gt; Repeated Measures Compare 2 conditions&lt;br /&gt;
&lt;br /&gt;
==Further information (lecture slides from SJ)==&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/f/fc/EEGLAB_-_Introduction_1_%282013-01-24%29.pdf EEGLAB - Introduction 1]&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/a/a3/EEGLAB_-_Introduction_2_%282013-02-14%29.pdf EEGLAB - Introduction 2]&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/c/c0/EEGLAB_-_Introduction_3_%282012-02-09%29.pdf EEGLAB - Introduction 3]&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/a/a8/EEGLAB_-_Introduction_4_%282012-02-16%29.pdf EEGLAB - Introduction 4]&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=434</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=434"/>
		<updated>2021-04-21T09:00:32Z</updated>

		<summary type="html">&lt;p&gt;Mihho: temp dok&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&#039;&#039;&#039;Preparing Files for Analysis&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
* Connect to NeuroMus01: $ ssh -X NeuroMus01&lt;br /&gt;
&lt;br /&gt;
* In your Experiment folder you need a folder &amp;quot;DataFiles&amp;quot;. &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles&lt;br /&gt;
&lt;br /&gt;
* In this folder you create a subfolder for each participant &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles/&#039;experimentname_VP##&#039;&lt;br /&gt;
&lt;br /&gt;
* All these folders need to contain again a Subfolder &amp;quot;RawData&amp;quot; &lt;br /&gt;
  e.g. scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles/&#039;experimentname_VP##&#039;/RawData&lt;br /&gt;
&lt;br /&gt;
* Or you can type the following command to create the required number of folders and subfolders: &lt;br /&gt;
  &amp;lt;code&amp;gt;$ for R in 1,2,...; do mkdir -p expName_sbj0${R}/RawData; done &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Copy the three eeg files for one participant into this folder &amp;quot;RawData&amp;quot;, do that for each participant.&lt;br /&gt;
&lt;br /&gt;
* Change file permissions for all eeg files from all participants. Go to your experiments directory and change permission and type:&lt;br /&gt;
  &amp;lt;code&amp;gt;chmod -&amp;gt; &amp;lt;code&amp;gt;find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod 440 {} &amp;quot;;&amp;quot;&amp;lt;/code&amp;gt;  or &amp;lt;br&amp;gt;  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod u=rwx,g=rwx,o=r {} &amp;quot;;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  e.g.: (in command line)&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;$ cd /scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/DataFiles&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;$ find * -name *.[v,e][m,h,e][r,d,g]* -exec chmod 440 {} &amp;quot;;&amp;quot;Preparing Files for Analysis&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;How to use the EEG analysis Script&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
The script consists of several files. The file YourStudy.m is the main script (should have the name of the study from which you copied the files. E.g. DevDet.m, HiScore.m, …).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Procedure of the Analysis (flowchart)===&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Prepare the Script===&lt;br /&gt;
&lt;br /&gt;
Copy analysis script files and folders from a previous (similar is best) experiment and put in your &#039;scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/&#039; folder. Rename main script to &#039;YourStudy&#039;, and rename the function within the script (first line of the file).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DefSettings.m===&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
(Based on DefSettings.m from study DevDet)&amp;lt;br&amp;gt;&lt;br /&gt;
The file DefSettings.m contains all settings for your analysis and has to be adapted to your needs. Within DefSettings.m, make sure the name of the study is correct again.&lt;br /&gt;
&lt;br /&gt;
DefSettings is subdivided in different &#039;cases&#039; which will be discussed in the following. Also have a look at the comments in the file DefSettings (depicted in green). They explain which values you have to choose.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;S&#039;&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Settings.MthICA = &#039;0&#039;;&lt;br /&gt;
&lt;br /&gt;
* Change this value to 0 for processing your data with only an EOG correction (first step)&lt;br /&gt;
&lt;br /&gt;
* Change this value to 1 for processing your data with ICA (to clean data in a second step)&lt;br /&gt;
&lt;br /&gt;
Settings.RefChn = &#039;M1|M2&#039;;&lt;br /&gt;
&lt;br /&gt;
* Should be your reference channels, normally M1 and M2 is correct&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case {&#039;YourStudy&#039;, &#039;LoadData&#039;}&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Here you can find the filter settings that are used while loading your data. You don&#039;t have to change them unless your study does not need any special filter settings.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;LoadRaw&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Settings.SettFIR&lt;br /&gt;
&lt;br /&gt;
* again specifies some filters&lt;br /&gt;
&amp;lt;tt&amp;gt;Settings.CutTRG  =&amp;lt;/tt&amp;gt;&lt;br /&gt;
 {{{},                            [],  [], {&#039;^0021$&#039;, &#039;^0016$&#039;},                 2,   1};&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0022$&#039;},                      1,   1, {&#039;^0022$&#039;, &#039;^0016$&#039;},                 2,   1}; ...&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0023$&#039;},                      1,   1, {&#039;^0023$&#039;, &#039;^0016$&#039;},                 2,   1}; ...&lt;br /&gt;
&lt;br /&gt;
 {{&#039;^0024$&#039;, &#039;^0016$&#039;, &#039;^0024$&#039;},  1,   1,  {},                                 [],  []}};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Cuts out epochs that are not required for your analysis (like for example pauses)&lt;br /&gt;
&lt;br /&gt;
* Epochs are always cut out from a certain trigger combination (green) to a certain trigger combination (red)&lt;br /&gt;
&lt;br /&gt;
* If the brackets are empty like in the first line, epochs will be cut out from the beginning of the data file to a certain trigger combination (trigger 0021 followed by trigger 0016). Same holds for the last line. Empty brackets at the end means, that trigger are cut out from the trigger combination until the end.&lt;br /&gt;
&lt;br /&gt;
* If your study does not require you to cut out any epochs, you can make a comment out of these lines (type &#039;%&#039; in front of each line). These lines will then not be processed.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;DoRmBdCh&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Settings for the channel rejection (throw out bad channels), with settings for the plot and thresholds for the rejection. Does not have to be adapted unless you need special settings for your experiment.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;DoManRej&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Settings for the manual rejection window. No changes.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;DoClnEOG&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-No Changes.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;DoSelCmp&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Settings for component rejection of the ICA. No changes.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;DoRejAvr&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This function combines two steps, the automatic rejection and the calculation of the averages. Most of the variables do not have to be changed.&lt;br /&gt;
Settings.SelElc&lt;br /&gt;
&lt;br /&gt;
* Specify all electrodes for the automatic rejection (all electrodes besides EOG channels and references)&lt;br /&gt;
&lt;br /&gt;
Other parameters specify thresholds for the automatic rejection à no changes unless you need them&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Settings.Sett4Avr&lt;br /&gt;
&lt;br /&gt;
* Parameters for calculating averages&lt;br /&gt;
&lt;br /&gt;
* There are two forms of this variable. Use the one with  the list to specify your conditions if you have only one experiment. If you have more than one experiment in your study choose the Settings.Sett4Avr variable with the &#039;if, elseif - loop&#039;. Comment out the one you don&#039;t need for your study&lt;br /&gt;
&lt;br /&gt;
* Fill in all trigger codes belonging to one condition that need to be averaged under one condition code&lt;br /&gt;
&lt;br /&gt;
* Give a name for this condition under cond. Name (this name should not be too long)&lt;br /&gt;
&lt;br /&gt;
* Set the epoch for this average (-0.2 to 1.2 should usually be fine, unless you are investigating later components)&lt;br /&gt;
&lt;br /&gt;
* Set a baseline (-0.2 to 0.0 should usually be fine). &amp;lt;i&amp;gt; ATTENTION: Setting the baseline should be done before running STEP 5 (see table below). Changing the baseline after STEP 5 and running ExpGrdAgv will not make any change! &amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Specify if there are triggers that need to be cut out before averaging (e.g. button presses). Do this in the last bracket: [1 2]&lt;br /&gt;
&lt;br /&gt;
* All these information need to be specified for all conditions you want to average. Make sure that you always follow the syntax that is predefined for other experiments (don&#039;t forget brackets or &#039;;&#039; or &#039;…&#039;&lt;br /&gt;
Settings.TrgCutOut&lt;br /&gt;
&lt;br /&gt;
* Specifies triggers that need to be cut out before averaging (for example button presses or stimuli from a cover task)&lt;br /&gt;
&lt;br /&gt;
{triggers that need to be cut out, range between two triggers also possible}, [search range for the second trigger], [time to add if only one trigger is found], [time to add if both triggers are found]&lt;br /&gt;
&lt;br /&gt;
* It is thus possible to cut out a stimulus followed by a button press, or to cut out a button press together with the 0.x seconds before the button press, etc.&lt;br /&gt;
&lt;br /&gt;
Other parameters: no changes&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;ExpGrdAvg&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
In case &#039;ExpGrdAvr&#039;, divide the conditions to facilitate any statistical comparison you may be interested in making.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Settings.ExpPfx&lt;br /&gt;
&lt;br /&gt;
Fill in the prefix of your study (YourStudy)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Settings.ExpStt&lt;br /&gt;
&lt;br /&gt;
Here you will find a matrix in which you can specify some parameters for the grand averages you want to calculate. The matrix has several rows, separated with a semicolon at the end of each line, and several columns, separated by comma in each line. The parameter belonging to a specific column is written above the matrix in green comments. Now the parameters you have to specify in each column will be explained.&lt;br /&gt;
&lt;br /&gt;
* Specify the conditions that need to be averaged and compared under cond. Code (you need the condition codes you specified in Calc_AVR here)&lt;br /&gt;
&lt;br /&gt;
* Specify SPSS codes (should be short, because these are a part of the variable names, otherwise variable names get too long)&lt;br /&gt;
&lt;br /&gt;
* Specify which of the two conditions should be added and which should be subtracted (no changes)&lt;br /&gt;
&lt;br /&gt;
* Specify the baseline (-200 to 0 should usually be fine)&lt;br /&gt;
&lt;br /&gt;
* List all time windows you are interested in. For your first analysis you can leave them as they are to explore your data. In a second analysis you can specify time windows for your effect. If you have a time window of interest, based on previous research, you can just add it. Make a comma after the last time window and add your time window in brackets [ ].&lt;br /&gt;
&lt;br /&gt;
* If you have more than one experiment, you can add the experiment name. Otherwise you leave this field empty --&amp;gt; &#039;&#039;&lt;br /&gt;
* Specify in which color the different conditions should be depicted in the figure. Specify a color for the condition that is added (e.g. &#039;r&#039; for red), a color for the condition that is subtracted (e.g. &#039;b&#039; for blue), and a colour for the difference wave (e.g. &#039;k&#039; for black). --&amp;gt; {&#039;r&#039;, &#039;b&#039;, &#039;k&#039;}&lt;br /&gt;
You can also specify the line-width of the waveforms by adding it in a bracket after the color like this: {&#039;r&#039;, &#039;b&#039;, {&#039;k&#039;, &#039;linewidth&#039;, 2}}&lt;br /&gt;
Now the difference line should be depicted in black, with a line-width of 2.&lt;br /&gt;
&lt;br /&gt;
If you want to use different colors or change other parameters for the lines you can find information about how to do it in the matlab documentation:&lt;br /&gt;
http://www.mathworks.de/de/help/matlab/ref/plot.html#inputarg_LineSpec&lt;br /&gt;
&lt;br /&gt;
* Specify amplitude limits for your plots.&lt;br /&gt;
Specify the scale for your averages. [-6:2:12] would for example result in a scale from -6 to 12 in steps of 2.&lt;br /&gt;
Specify the amplitude limits for the headplots. Here you need one specification for each timewindow, and amplitude limits should always range from -x to x. So for example from -3 to 3 --&amp;gt; [-3 3].&lt;br /&gt;
Thus if you specified for example 5 different timewindows, and you want to set the amplitude limits for all headplots to -3 to 3, it should look like this:&lt;br /&gt;
{[-3 3], [-3 3], [-3 3], [-3 3], [-3 3]}&lt;br /&gt;
Settings.ExpElc&lt;br /&gt;
&lt;br /&gt;
* Enter all electrodes that should be used to calculate the grand average (all electrodes besides EOG and reference channels)&lt;br /&gt;
Settings.ExpROI&lt;br /&gt;
&lt;br /&gt;
* Specify your regions of interest&lt;br /&gt;
&lt;br /&gt;
* If you need frontal left, frontal right, parietal left, parietal right, the settings should be fine&lt;br /&gt;
Settings.FigStt&lt;br /&gt;
&lt;br /&gt;
Settings for the figures you want to export. Choose the ones you need or leave all in.&lt;br /&gt;
                      {{&#039;lowpass&#039;, 10},               &#039;__&#039;; ...  % low-pass filtered 10 Hz, no running t-test&lt;br /&gt;
                      {},                             &#039;UF&#039;; ...  % data are unfiltered, no running t-test&lt;br /&gt;
                      {&#039;lowpass&#039;, 10, &#039;alpha&#039;, 0.05}, &#039;T5&#039;; ...  % low-pass filtered 10 Hz, running t-test (p &amp;lt; 0.05)&lt;br /&gt;
                      {&#039;lowpass&#039;, 10, &#039;alpha&#039;, 0.01}, &#039;T1&#039;};...  % low-pass filtered 10 Hz, running t-test (p &amp;lt; 0.01)&lt;br /&gt;
Settings.FigScp&lt;br /&gt;
* 1 = show / export figures with plots of the grand averages like the scalp position on the scalp; 0 = don&#039;t export&lt;br /&gt;
Settings.LimGrd&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the grand average scalp and array plots (otherwise they will be calculated from the data) --&amp;gt; for the scalp plots&lt;br /&gt;
Settings.FigArr&lt;br /&gt;
* 1 = show / export figures with plots of the grand averages in a rectangular array, 0 = don&#039;t export&lt;br /&gt;
Settings.ArrElc&lt;br /&gt;
&lt;br /&gt;
* Specify electrodes for which the grand average should be depicted in the rectangular array figure.&lt;br /&gt;
Settings.LimGrd&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the grand average scalp and array plots (otherwise they will be calculated from the data) --&amp;gt; for the array plots&lt;br /&gt;
Settings.FigIdA&lt;br /&gt;
&lt;br /&gt;
* 1 = show / export individual averages, 0 = don&#039;t export&lt;br /&gt;
Settings.PltIdA&lt;br /&gt;
&lt;br /&gt;
* &#039;S&#039; - scalp array, &#039;R&#039; - rectangular array - takes the respective electrode settings defined above (ScpElc or ScpTyp and ArrElc or ArrTyp)&lt;br /&gt;
Settings.LimIdA&lt;br /&gt;
&lt;br /&gt;
* define amplitude limits for the single subject averages (otherwise they will be calculated from the data)&lt;br /&gt;
Other parameters: no changes&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Case &#039;N&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
In case &#039;N&#039;, make sure that all of the subject data that you have are correctly named and arranged.&lt;br /&gt;
Settings = {&#039;YourStudy_VP01&#039;, &#039;YourStudy_VP02&#039;}&lt;br /&gt;
&lt;br /&gt;
* All participants you want to process need to be specified here&lt;br /&gt;
&lt;br /&gt;
* Make sure that they have the same name as the eeg files in your folder (case-sensitive)&lt;br /&gt;
&lt;br /&gt;
* Any participants that need to be thrown out can be arranged next to the SubjRmvd header (which is made a comment by the &#039;%&#039;) as well as an explanation for why the participant was removed.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Run the Script===&lt;br /&gt;
&lt;br /&gt;
* Start EEGLab (should be &#039;el&#039; within terminal), and run on a computer with decent RAM or else it will be slow&lt;br /&gt;
&lt;br /&gt;
* Change the directory to YourStudy directory by using :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; cd /scr/neuromus##/EXPERIMENTS/&#039;YourStudy&#039;/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; cd /SCR/EXPERIMENTS/&#039;YourStudy&#039;/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run the Script by just calling the main script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; ProcessSubject&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* You can call the ProcessSubject function with some arguments that are listed below&lt;br /&gt;
&lt;br /&gt;
 Interact = carry out processing steps requiring user interaction&lt;br /&gt;
      0   - carry out steps not requiring user interaction&lt;br /&gt;
      1   - carry out steps requiring user interaction&lt;br /&gt;
      2   - revise steps that were already carried out&lt;br /&gt;
&lt;br /&gt;
 ProcStep = carry out the following processing steps              (0-7, byte)&lt;br /&gt;
      1   - bad channel removal&lt;br /&gt;
      2   - manual rejections&lt;br /&gt;
      4   - component selection&lt;br /&gt;
(those can be combined, e.g., 3 would be the revision of bad channels and of manual rejections)&lt;br /&gt;
&lt;br /&gt;
Here is the sequence of steps that you should follow:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;table style=&amp;quot;width:100%&amp;quot;  border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Command&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;Output Files&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;File Description&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;30%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;STEP 1:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt; Call the script without interaction &amp;lt;br&amp;gt; Loading REFs, Filtered data, trigger file, channel locations&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;30%&amp;quot;&amp;gt;&amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;.set &amp;amp; .fdt&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;20%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;.set: &amp;lt;/b&amp;gt; contains information about the sampling rate, the subject Nr and the events &amp;lt;br&amp;gt; &amp;lt;b&amp;gt;.fdt: &amp;lt;/b&amp;gt; contains the data matrix, channels x sampling points. &amp;lt;/td&amp;gt;    &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; STEP 2: &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; Call the script with interaction &amp;lt;br&amp;gt; Manual rejection of bad channels/epochs, adjust the scale accordingly @ 200mV for Channel removal and @ 100mV for bad epochs. Criteria for bad channel removal [[BadChannels]]. Examples of bad epochs that should be removed: [[BadEpochs]].    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(1) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .rmc &amp;amp; .out &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.rmc: &amp;lt;/b&amp;gt; contains the channel you selected for removal, which at a later point will be interpolated &amp;lt;br&amp;gt; &amp;lt;b&amp;gt; .out: &amp;lt;/b&amp;gt; contains the periods you manually selected for rejection &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt; Procedure: ICA [MthICA = &#039;1&#039;] &amp;lt;/font&amp;gt; &amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;STEP 3: &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; Non-Interactive Computation of ICA (binica)&amp;lt;/td&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0,NaN,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .ic1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.ic1: &amp;lt;/b&amp;gt; binica &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; STEP 4: &amp;lt;/b&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
Call the script with interaction to remove bad components. [see section &amp;lt;i&amp;gt;Criteria to remove ICA components&amp;lt;/i&amp;gt; further down for instructions.  &amp;lt;i&amp;gt;NOTE: During data scrolling we might see noisy parts that we wouldn&#039;t expect given the fact that a manual rejection of bad epochs preceded. The reason is that in STEP 2 the data are filtered so that we remove only too noisy parts whereas in STEP 4 we see unfiltered data because ICA requires unfiltered data. &amp;lt;/i&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(1,4,&#039;1&#039;) &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;  &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(1,255,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .sc1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.sc1: &amp;lt;/b&amp;gt; contains information about which ICA components were manually selected for removal. We can copy the file &amp;lt;b&amp;gt;.sc1&amp;lt;/b&amp;gt; and rename it to &amp;lt;b&amp;gt;file.mat&amp;lt;/b&amp;gt; and then we can load it from matlab to check the included components. &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 5:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt; Non-Interactive &amp;lt;br&amp;gt; Filtering, rejecting epochs, averaging per condition and per subject&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0,255,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av1 &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.av1: &amp;lt;/b&amp;gt; computed based on the files .ic1 &amp;amp; .av1 &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 6:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt; Calculate Grand Averages &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ExpGrdAvg(&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .dat &amp;lt;br&amp;gt; ...ArrERP___.eps &amp;lt;br&amp;gt; ...ArrERP_T1.eps &amp;lt;br&amp;gt; ...ArrERP_T5.eps &amp;lt;br&amp;gt; ...ArrERP_UF.eps &amp;lt;br&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; .dat: &amp;lt;/b&amp;gt; ta data file you need to import to SPSS in order to run the statistics &amp;lt;br&amp;gt; &amp;lt;b&amp;gt; ...ArrERP___.eps:&amp;lt;/b&amp;gt; ERP plots (filtered for visualisation) in an array form &amp;lt;br&amp;gt; &amp;lt;b&amp;gt; ...ArrERP_T1.eps:&amp;lt;/b&amp;gt; ERP plots (filtered for visualisation) in an array form with grey boxes for stat. sig. differences at p = 0.01  &amp;lt;br&amp;gt; &amp;lt;b&amp;gt; ...ArrERP_T5.eps:&amp;lt;/b&amp;gt;ERP plots (filtered for visualisation) in an array form with grey boxes for stat. sig. differences at p = 0.05  &amp;lt;br&amp;gt; &amp;lt;b&amp;gt; ...ArrERP_UF.eps:&amp;lt;/b&amp;gt; unfiltered ERP plots in an array form &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt; All files are in the folder GrandAVR &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt; Optional Revision Steps &amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Example 1: &amp;lt;br&amp;gt; Call the script to revise the manual bad channel rejection &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,1) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;Example 2: &amp;lt;br&amp;gt; Call the script to revise the manual rejection  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,2) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt; Example 3: &amp;lt;br&amp;gt; Call the script to revise manual rejection and bad channel removal &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,3) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; Example 4: &amp;lt;br&amp;gt; Call the script to revise manual rejection and bad components &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(2,4,&#039;1&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;  &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt; Procedure: EOG - Regression [MthICA = &#039;9&#039;]&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 3: &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; Non-Interactive &amp;lt;br&amp;gt; Ocular Correction, &amp;quot;quick and dirty&amp;quot; method. Prototypical eye blinks and movements are computed and by using regression method it is deduced what has to be removed from the data. &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ProcessSubject(0,NaN,&#039;9&#039;) &amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; .av9 &amp;lt;br&amp;gt; .eog &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;b&amp;gt;.av9: &amp;lt;/b&amp;gt; average  &amp;lt;br&amp;gt; &amp;lt;b&amp;gt; .eog &amp;lt;b&amp;gt; eye correction &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;STEP 4: &amp;lt;/b&amp;gt;&amp;lt;br&amp;gt; Grand Averaging &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;code&amp;gt; &amp;gt;&amp;gt; ExpGrdAvg(&#039;9&#039;) &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt; &amp;lt;/td&amp;gt; &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you encounter an error while running any of the scripts, use function &#039;dbstop if error&#039; to troubleshoot. This will open the script where the error was found and give an arrow on the problematic line. Make sure that all expressions are balanced and that there are no typos, there are the correct number of arguments for each function, and that each variable is properly assigned. Then try calling that script alone within the &#039;dbstop&#039; shell to see if it runs. If not, look at the parameters for that script/the individual functions called to see where the problem may lie. If the problem is beyond your ability, ask another group member (not Sebastian, if possible) to see if they can help.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Also, if you find any errors in running the scripts, you can run each one of the scripts in the &#039;YourStudy&#039; folder individually. In this way, you may be able to better identify what the specific problem entails. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Redo steps===&lt;br /&gt;
&lt;br /&gt;
If you want to redo steps (for example redo the manual rejection, because you think you did something wrong), please call the script with the »Revise« parameter (see help ProcessSubject for usage). The files that are created in the processing steps that follow the step you revised will be moved away (they have to be recalculated). You can check which steps have to be redone, with the file extensions corresponding to the specific steps that can be found in the flowchart.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Some specific remarks about how to do the revision steps:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If you changed the channels to be removed (because of them having bad data quality) this also means that the manual rejections have to be revised. Please check whether some of the rejections made before can be removed due to the fact that the channel that contained these artifacts has been removed from the data due to bad quality.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===ICA-Method 4 (Binary ICA)===&lt;br /&gt;
&lt;br /&gt;
The binary ICA is much faster than the one in MATLAB. If you have set the ICA-Method to 4 in your DefSettings, the third step (no interaction) will produce a .bc file in your Data directories. You then have to run ica_linux_i686 on this file.&lt;br /&gt;
To process a single participant, cd to your Study directory in a shell, then type&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;./ica_linux_$(uname -i) &amp;lt; DataFiles/vp_xx/vp_xx.bc&amp;lt;/code&amp;gt;&lt;br /&gt;
(replace vp_xx with the appropriate directory/filenames).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You can use the following two shell commands to run the binary ICA on all (unprocessed) participants:&lt;br /&gt;
 /scr/neuromusXX/EXPERIMENTS/Your_Study_Directory&lt;br /&gt;
 for F in $(find DataFiles/*/*.bc); do if [ ! -e $(grep WeightsOutFile ${F} | cut -d&amp;quot; &amp;quot; -f2) ] &amp;amp;&amp;amp; [ ! -e $(grep SphereFile ${F} | cut -d&amp;quot; &amp;quot; -f2) ]; then ./ica_linux_$(uname -i) &amp;lt; ${F}; fi; done&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comparing two experimental groups===&lt;br /&gt;
&lt;br /&gt;
If you want to compare two groups in your experiment, for example to compare musicians with nonmusicians, you have to perform several steps.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1. Create a text file with your grouping information&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Open Calc or Excel (or SPSS or whatever you prefer). You need three columns for most of our experiments, with headers SubjCode, SelSubj, and ExpGroup. List all your Subjects in the column SubjCode like you did it in     case &#039;N&#039; in the variable &#039;Settings&#039;. It is important, that all Subjects that are in your grouping file, are also in your DefSettings &#039;N&#039; list, otherwise the script will not work. In the column SelSubj you can specify   which subjects should be excluded (because of bad data ect). Use 0 for exclude and 1 for include. In the last column ExpGroup you can specify the experimental group. Choose for example 1 for musicians and 2 for         nonmusicians, or &#039;M&#039; for musicians and &#039;NM&#039; for nonmusicians (numbers and letters are both ok, it will be used as extension in the name of your average files). Specify all your experimental groups in this way&lt;br /&gt;
&lt;br /&gt;
Save the file&lt;br /&gt;
Click &#039;Save as&#039;, and save the file again as .csv or .dat file (you can choose the extension by clicking on &#039;All Formats&#039;). Be sure that you choose tab or semicolon as file delimiter. Otherwise it will not work.&lt;br /&gt;
&lt;br /&gt;
The text file should look like this (or seperated by &#039;;&#039; if you choose this as delimiter):&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 SubjCode        SelSubj  ExpGroup&lt;br /&gt;
 yourstudy_vp01  1        1&lt;br /&gt;
 yourstudy_vp02  1        1&lt;br /&gt;
 yourstudy_vp03  1        1&lt;br /&gt;
 yourstudy_vp04  1        1&lt;br /&gt;
 yourstudy_vp05  1        1&lt;br /&gt;
 yourstudy_vp06  0        2&lt;br /&gt;
 yourstudy_vp07  1        1&lt;br /&gt;
 yourstudy_vp08  1        2&lt;br /&gt;
 yourstudy_vp09  1        1&lt;br /&gt;
 yourstudy_vp10  0        2&lt;br /&gt;
 yourstudy_vp11  1        1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2. Save this file in you experiment directory in the folder Databases/SPSS. When this folder does not exist you can create it.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;/scr/neuromusXX/EXPERIMENTS/&amp;lt;YourStudy&amp;gt;/Databases/SPSS&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enter the filename in DefSettings&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
In case &#039;ExpGrdAvg&#039; right at the end, you will find the variable --&amp;gt; Settings.FleDAT&lt;br /&gt;
Set the variable to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Settings.FleDAT = [pwd, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;Databases&#039;&amp;lt;/span&amp;gt;, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;SPSS&#039;&amp;lt;/span&amp;gt;, filesep, &amp;lt;span style=&amp;quot;color: #C00000&amp;quot;&amp;gt;&#039;YourGroupingFile.dat&#039;&amp;lt;/span&amp;gt;]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
4. Export your Grand Averages&lt;br /&gt;
&lt;br /&gt;
When you export your Grand Averages by typing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;ExpGrdAvg&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A window will pop up asking you: &#039;Please choose variable to select participants&#039; &lt;br /&gt;
Here you choose SelSubj, to select all subjects you want to have in your analysis. All subjects with a 0 in the column under SelSubj in your grouping file will be excluded. This is of course also possible in the DefSettings file, but in this way you have your data complete and can switch Subjects on and off very easily. It is important, that all Subjects that are in your grouping file, are also in your DefSettings &#039;N&#039; list, otherwise the script will not work.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The next window asks you: &#039;Please choose variable(s) to group participants&#039; &lt;br /&gt;
Here you choose ExpGroup, to divide your subjects into the experimental groups you specified in your grouping file.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Useful EEGLAB commands and tools for running scripts==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; EEG = pop_loadset()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        Loads a specific dataset (.set) so that you can examine one participant&#039;s data at a time. This includes loading sets in order to run scripts for individual participants.&lt;br /&gt;
&lt;br /&gt;
-        Now, the set that you are working with will be assigned to: EEG&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; EEG&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        running this command tells you which dataset is currently loaded. It also gives you information about all the fields available under this structure, including comments, events, epochs, chanlocs, etc.&lt;br /&gt;
&lt;br /&gt;
-        The Fields under this structure often have subfields of their own. Thus,&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt; {EEG.event.latency}&lt;br /&gt;
&lt;br /&gt;
will return a matrix containing all of the latencies (in samples: divide by *500 to get seconds) of the marked events. The brackets prevent each event from being listed on                     its own line. This is useful in determining if the timing of the EEG recording corresponds to the length of your stimuli. If there is a discrepancy, it could affect your results.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; &#039;YourStudy&#039;(EEG)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        This command will run the entire script on only one dataset. Additionally, you can use other scripts, such as:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; Calc_AVR(EEG)&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; Strg + c&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        Typing Ctrl, or Strg and the letter c will stop any process that is running.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; eeglab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        This will open the GUI again, if you need to work with it.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt; edit DefSettings.m&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-        Provided your directory is set correctly, this will allow you to edit DefSettings (or any other script) from the command line. Most Matlab commands work in the same way in EEGLAB, such as &#039;whos&#039;, &#039;help&#039;, and &#039;exit&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Check single-subject averages&amp;lt;/u&amp;gt; &amp;lt;br&amp;gt;(Example from Experiment DevDet VP18)&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;load DataFiles/devdet1_VP18/devdet1_VP18.av1 -MAT&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;{AVR.setname}&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;help pop_comperp  à shows you all parameters you may set for pop_comperp&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;pop_comperp(AVR, 1, [1], [2], &#039;addavg&#039;, &#039;on&#039;, &#039;subavg&#039;, &#039;on&#039;, &#039;diffavg&#039;, &#039;on&#039;, &#039;diffstd&#039;, &#039;off&#039;);&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Processing of specific Subjects===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you run the script with revision you will be asked which specific subjects you want to revise. However, you will not be asked when you are running the normal analysis. If you never the less want to process only specific subjects, this is how it works:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. open the ProcessSubject.m file by typing in the command line&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;edit ProcessSubject&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Set a breakepoint to Line 31 by clicking in the gray area at the left, where the line numbers are depicted.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.Start the script with or without interaction, depending on what the steps are you want to run. So e.g.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;ProcessSubject(1)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The script will start, but only up to line 31. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The Subjectlist is already loaded and you can ask for it by typing&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;SubjList&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
EEGLAB will show you the Subject List and the number of the columns belonging to the specific subjects. E.g.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;color: green&amp;quot;&amp;gt;Columns 273 through 280&lt;br /&gt;
&lt;br /&gt;
 &#039;021&#039;    &#039;020&#039;    &#039;019&#039;    &#039;018&#039;    &#039;017&#039;    &#039;016&#039;    &#039;015&#039;    &#039;014&#039;&lt;br /&gt;
&lt;br /&gt;
 Columns 281 through 288&lt;br /&gt;
&lt;br /&gt;
 &#039;013&#039;    &#039;012&#039;    &#039;011&#039;    &#039;010&#039;    &#039;009&#039;    &#039;008&#039;    &#039;007&#039;    &#039;006&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
You know now that Subject 021 is stored in column 273 and Subject 014 in Column 280 etc.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. You have to search for the columns that you are interested in, and change the subject list to only these columns. So if you want to process e.g. subject 021 to 014 you type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;SubjList=SubjList(273:280)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. The last step is to continue the script&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;dbcont&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now the script will only process the subjects in the columns you specified&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Processing a subject list backwards===&lt;br /&gt;
&lt;br /&gt;
Sometimes it may be useful to process a subject list backwards. For example when you start an analysis on two different computers to process your data more quickly.&lt;br /&gt;
&lt;br /&gt;
Carry out steps 1. - 3. from &#039;Processing of specific subjects&#039;. &lt;br /&gt;
&lt;br /&gt;
In step 4. you do not have to give specific columns, but you want to flip the whole subject list. Do this by typing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;SubjList=fliplr(SubjList)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
EEGLAB will show you the new subject list.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now continue the script&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;K&amp;gt;&amp;gt;dbcont&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the script will process the subject list backwards&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Criteria to remove ICA components==&lt;br /&gt;
We have two ways of checking which components to remove. The one way is checking at the headplots, what the scalp distribution is. The other approach is checking in the components, which of them looks like an eye related component (eye blink, eye movement), or ECG or other kind of artifact. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Rules:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Stop removal at component 10 (after comp. 10).&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Do not remove more than 6 components&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Do not remove a noisy component (ex: this may be the mastoid) unless it has a clear artifact&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Remove only repetitive artifacts&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Examples:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Typical patterns of artifact that we should remove: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;1) Typical artifact for eye-blink (many dispersed red spots)&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;  Think of it orthogonally, the major component, the longer direction of the eye blink will load on the component 1 and a bit of vertical component in another number.&lt;br /&gt;
[[File:typical_eyeBlink_artifact.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;2) Horizontal eye movement &amp;lt;/i&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:hor_eye.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;3) ECG: Typical peaks at around 10Hz&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
May be useful to set the scale or the raw data @ 100 mV so that the heart-bit can be viewed.&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:ECG.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt; NOTE: always check that eye artifact in  the raw data coincide with the eye artifact as captured in the component you are planning to remove, as shown in the figure below&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:check_comp_rawdata.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Videos:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;1)&amp;lt;/b&amp;gt; Identifying ICA components for removal [https://drive.google.com/file/d/1N4tGm-0pd8q6EKNCB2JUtm_06kzK5UiE/view?usp=sharing Sebastian_video_1] and [https://drive.google.com/file/d/1cHrXk76fXK9xrnPZEpHTn_pTrN-sFCqe/view?usp=sharing Sebastian_video_2] &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;2)&amp;lt;/b&amp;gt; Description of the ICA capturing the typical artifact of the blinks [https://drive.google.com/file/d/1YxZCaHezzLi4M89YrO4lzLQoiPwr-QFN/view?usp=sharing Sebastian_video_3]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;SPSS Tips&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
In order to import .dat file in SPSS: &amp;lt;br&amp;gt;&lt;br /&gt;
Open SPSS, File &amp;gt; Import Data &amp;gt; Text Data &amp;gt; select the file you want to import and press OK. Then the Text Import Wizard window opens where in Steps 1,2,3,5 just press Next. In Step 4: tick the Semicolon, Remove leading spaces from string values and Remove trailing spaces from string values. Uncheck the Space. In Step 6: In &amp;quot;Would you like to paste the syntax?&amp;quot; select Yes and press Finish.  &lt;br /&gt;
&lt;br /&gt;
Analysis: &lt;br /&gt;
Analyze &amp;gt; General Linear Model &amp;gt; Repeated Measures Compare 2 conditions&lt;br /&gt;
&lt;br /&gt;
==&#039;&#039;&#039;Further information (lecture slides from SJ)&#039;&#039;&#039;==&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/f/fc/EEGLAB_-_Introduction_1_%282013-01-24%29.pdf EEGLAB - Introduction 1]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/a/a3/EEGLAB_-_Introduction_2_%282013-02-14%29.pdf EEGLAB - Introduction 2]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/c/c0/EEGLAB_-_Introduction_3_%282012-02-09%29.pdf EEGLAB - Introduction 3]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://wiki.uib.no/neuromus/img_auth.php/a/a8/EEGLAB_-_Introduction_4_%282012-02-16%29.pdf EEGLAB - Introduction 4]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Template:Test&amp;diff=433</id>
		<title>Template:Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Template:Test&amp;diff=433"/>
		<updated>2021-02-09T11:42:37Z</updated>

		<summary type="html">&lt;p&gt;Mihho: Ny side: &amp;lt;noinclude&amp;gt; Dette er malen «test». Den burde kalles opp med følgende format: &amp;lt;pre&amp;gt; {{test |1= |2= |3= }} &amp;lt;/pre&amp;gt; Rediger siden for å se malteksten. &amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt; {| class=…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Dette er malen «test». Den burde kalles opp med følgende format:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{test&lt;br /&gt;
|1=&lt;br /&gt;
|2=&lt;br /&gt;
|3=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Rediger siden for å se malteksten.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! test1&lt;br /&gt;
| {{{1|}}}&lt;br /&gt;
|-&lt;br /&gt;
! test2&lt;br /&gt;
| {{{2|}}}&lt;br /&gt;
|-&lt;br /&gt;
| test3&lt;br /&gt;
| {{{3|}}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Kategori:test]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=432</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=432"/>
		<updated>2021-02-09T11:42:00Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Test|Synergy, TildeleProgramTilFlereMaskiner&lt;br /&gt;
|Fornavn=Helge test&lt;br /&gt;
|Etternavn=test&lt;br /&gt;
|Bilde=sdlfj&lt;br /&gt;
|Telefon=lsg&lt;br /&gt;
|Mobil=ljkg&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Forside&amp;diff=431</id>
		<title>Forside</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Forside&amp;diff=431"/>
		<updated>2021-02-02T09:44:25Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
==Velkomen til DOK wiki&#039;en!==&lt;br /&gt;
Interne rutiner, beskrivelser og dokumentasjon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Formålet er at dette er et &amp;quot;Dokumentasjonsverktøy&amp;quot;, hvor deling av informasjon og kunnskap er viktig.&lt;br /&gt;
&lt;br /&gt;
Les gjerne forslag til [[Retningslinjene | retningslinjer]] før du/dere begynner.&lt;br /&gt;
&lt;br /&gt;
Lykke til,&lt;br /&gt;
&lt;br /&gt;
Spørsmål, diskusjon og svar, se: [[Diskusjon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot; data-masonry=&#039;{ &amp;quot;itemSelector&amp;quot;: &amp;quot;.grid-item&amp;quot;, &amp;quot;columnWidth&amp;quot;: 240 }&#039;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid-item  w3-animate-left w3-btn w3-autumn-grey w3-border w3-border-teal w3-round-xlarge&amp;quot;&amp;gt;&lt;br /&gt;
==Nyheter og RSS==&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[Siste fra BORA]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[IT nyheter]]&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[På Høyden - UiB nettavis RSS strøm]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid-item w3-animate-right w3-white w3-btn w3-round-xlarge&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-round-xlarge&amp;quot;&amp;gt;[[File:autumn2.jpg|thumb|300px]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Forside&amp;diff=430</id>
		<title>Forside</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Forside&amp;diff=430"/>
		<updated>2021-02-02T09:43:49Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
==Velkomen til DOK wiki&#039;en!==&lt;br /&gt;
Interne rutiner, beskrivelser og dokumentasjon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
break=no&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Formålet er at dette er et &amp;quot;Dokumentasjonsverktøy&amp;quot;, hvor deling av informasjon og kunnskap er viktig.&lt;br /&gt;
&lt;br /&gt;
Les gjerne forslag til [[Retningslinjene | retningslinjer]] før du/dere begynner.&lt;br /&gt;
&lt;br /&gt;
Lykke til,&lt;br /&gt;
&lt;br /&gt;
Spørsmål, diskusjon og svar, se: [[Diskusjon]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot; data-masonry=&#039;{ &amp;quot;itemSelector&amp;quot;: &amp;quot;.grid-item&amp;quot;, &amp;quot;columnWidth&amp;quot;: 240 }&#039;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid-item  w3-animate-left w3-btn w3-autumn-grey w3-border w3-border-teal w3-round-xlarge&amp;quot;&amp;gt;&lt;br /&gt;
==Nyheter og RSS==&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[Siste fra BORA]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[IT nyheter]]&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-border w3-border-indigo w3-round-xlarge&amp;quot;&amp;gt;[[På Høyden - UiB nettavis RSS strøm]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid-item w3-animate-right w3-white w3-btn w3-round-xlarge&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;w3-btn w3-white w3-round-xlarge&amp;quot;&amp;gt;[[File:autumn2.jpg|thumb|300px]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=429</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=429"/>
		<updated>2021-01-27T17:34:54Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=428</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=428"/>
		<updated>2021-01-27T17:33:47Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=427</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=427"/>
		<updated>2021-01-27T17:27:41Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=426</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=426"/>
		<updated>2021-01-27T17:27:17Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disse ser ikke ut til å funke. Hvorfor?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=425</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=425"/>
		<updated>2021-01-27T17:26:54Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
	var myElement = document.getElementById(&#039;mw-mywiki-example&#039;);&lt;br /&gt;
	myElement.innerHTML = &#039;inserted text in wiki article&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=424</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=424"/>
		<updated>2021-01-27T17:25:57Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/* Denne funker...se siden Test. hmmm snodig... */&lt;br /&gt;
$(function () {&lt;br /&gt;
	var myElement = document.getElementById(&#039;mw-mywiki-example&#039;);&lt;br /&gt;
	myElement.innerHTML = &#039;inserted text in wiki article&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=423</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=423"/>
		<updated>2021-01-27T17:25:09Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/* Denne funker...se siden Test. hmmm snodig... */&lt;br /&gt;
$(function () {&lt;br /&gt;
	var myElement = document.getElementById(&#039;mw-mywiki-example&#039;);&lt;br /&gt;
	myElement.innerHTML = &#039;inserted text in wiki article&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  var myElement = document.getElementById(&#039;mw-hello-world&#039;);&lt;br /&gt;
  myElement.innerHTML = &#039;&amp;lt;html&amp;gt;Hello World!!!&amp;lt;/html&amp;gt;&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license&lt;br /&gt;
//@ sourceMappingURL=jquery.min.map&lt;br /&gt;
*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p=&amp;quot;1.9.1&amp;quot;,f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(&amp;lt;[\w\W]+&amp;gt;)[^&amp;gt;]*|#([\w-]*))$/,C=/^&amp;lt;(\w+)\s*\/?&amp;gt;(?:&amp;lt;\/\1&amp;gt;|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:[&amp;quot;\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/&amp;quot;[^&amp;quot;\\\r\n]*&amp;quot;|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||&amp;quot;load&amp;quot;===e.type||&amp;quot;complete&amp;quot;===o.readyState)&amp;amp;&amp;amp;(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener(&amp;quot;DOMContentLoaded&amp;quot;,H,!1),e.removeEventListener(&amp;quot;load&amp;quot;,H,!1)):(o.detachEvent(&amp;quot;onreadystatechange&amp;quot;,H),e.detachEvent(&amp;quot;onload&amp;quot;,H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if(&amp;quot;string&amp;quot;==typeof e){if(i=&amp;quot;&amp;lt;&amp;quot;===e.charAt(0)&amp;amp;&amp;amp;&amp;quot;&amp;gt;&amp;quot;===e.charAt(e.length-1)&amp;amp;&amp;amp;e.length&amp;gt;=3?[null,e,null]:N.exec(e),!i||!i[1]&amp;amp;&amp;amp;n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&amp;amp;&amp;amp;n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&amp;amp;&amp;amp;b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&amp;amp;&amp;amp;a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&amp;amp;&amp;amp;(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:&amp;quot;&amp;quot;,length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0&amp;gt;e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0&amp;gt;e?t:0);return this.pushStack(n&amp;gt;=0&amp;amp;&amp;amp;t&amp;gt;n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for(&amp;quot;boolean&amp;quot;==typeof s&amp;amp;&amp;amp;(c=s,s=arguments[1]||{},u=2),&amp;quot;object&amp;quot;==typeof s||b.isFunction(s)||(s={}),l===u&amp;amp;&amp;amp;(s=this,--u);l&amp;gt;u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&amp;amp;&amp;amp;(c&amp;amp;&amp;amp;r&amp;amp;&amp;amp;(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&amp;amp;&amp;amp;b.isArray(e)?e:[]):a=e&amp;amp;&amp;amp;b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&amp;amp;&amp;amp;(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&amp;amp;&amp;amp;(e.$=u),t&amp;amp;&amp;amp;e.jQuery===b&amp;amp;&amp;amp;(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&amp;amp;&amp;amp;--b.readyWait&amp;gt;0||(n.resolveWith(o,[b]),b.fn.trigger&amp;amp;&amp;amp;b(o).trigger(&amp;quot;ready&amp;quot;).off(&amp;quot;ready&amp;quot;))}},isFunction:function(e){return&amp;quot;function&amp;quot;===b.type(e)},isArray:Array.isArray||function(e){return&amp;quot;array&amp;quot;===b.type(e)},isWindow:function(e){return null!=e&amp;amp;&amp;amp;e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&amp;amp;&amp;amp;isFinite(e)},type:function(e){return null==e?e+&amp;quot;&amp;quot;:&amp;quot;object&amp;quot;==typeof e||&amp;quot;function&amp;quot;==typeof e?l[m.call(e)]||&amp;quot;object&amp;quot;:typeof e},isPlainObject:function(e){if(!e||&amp;quot;object&amp;quot;!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&amp;amp;&amp;amp;!y.call(e,&amp;quot;constructor&amp;quot;)&amp;amp;&amp;amp;!y.call(e.constructor.prototype,&amp;quot;isPrototypeOf&amp;quot;))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||&amp;quot;string&amp;quot;!=typeof e)return null;&amp;quot;boolean&amp;quot;==typeof t&amp;amp;&amp;amp;(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&amp;amp;&amp;amp;[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&amp;amp;&amp;amp;b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&amp;amp;&amp;amp;e.JSON.parse?e.JSON.parse(n):null===n?n:&amp;quot;string&amp;quot;==typeof n&amp;amp;&amp;amp;(n=b.trim(n),n&amp;amp;&amp;amp;k.test(n.replace(S,&amp;quot;@&amp;quot;).replace(A,&amp;quot;]&amp;quot;).replace(E,&amp;quot;&amp;quot;)))?Function(&amp;quot;return &amp;quot;+n)():(b.error(&amp;quot;Invalid JSON: &amp;quot;+n),t)},parseXML:function(n){var r,i;if(!n||&amp;quot;string&amp;quot;!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,&amp;quot;text/xml&amp;quot;)):(r=new ActiveXObject(&amp;quot;Microsoft.XMLDOM&amp;quot;),r.async=&amp;quot;false&amp;quot;,r.loadXML(n))}catch(o){r=t}return r&amp;amp;&amp;amp;r.documentElement&amp;amp;&amp;amp;!r.getElementsByTagName(&amp;quot;parsererror&amp;quot;).length||b.error(&amp;quot;Invalid XML: &amp;quot;+n),r},noop:function(){},globalEval:function(t){t&amp;amp;&amp;amp;b.trim(t)&amp;amp;&amp;amp;(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,&amp;quot;ms-&amp;quot;).replace(D,L)},nodeName:function(e,t){return e.nodeName&amp;amp;&amp;amp;e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o&amp;gt;i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o&amp;gt;i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&amp;amp;&amp;amp;!v.call(&amp;quot;\ufeff\u00a0&amp;quot;)?function(e){return null==e?&amp;quot;&amp;quot;:v.call(e)}:function(e){return null==e?&amp;quot;&amp;quot;:(e+&amp;quot;&amp;quot;).replace(T,&amp;quot;&amp;quot;)},makeArray:function(e,t){var n=t||[];return null!=e&amp;amp;&amp;amp;(M(Object(e))?b.merge(n,&amp;quot;string&amp;quot;==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0&amp;gt;n?Math.max(0,r+n):n:0;r&amp;gt;n;n++)if(n in t&amp;amp;&amp;amp;t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(&amp;quot;number&amp;quot;==typeof r)for(;r&amp;gt;o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a&amp;gt;o;o++)r=!!t(e[o],o),n!==r&amp;amp;&amp;amp;i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o&amp;gt;i;i++)r=t(e[i],i,n),null!=r&amp;amp;&amp;amp;(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&amp;amp;&amp;amp;(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return&amp;quot;string&amp;quot;==typeof n&amp;amp;&amp;amp;(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if(&amp;quot;object&amp;quot;===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&amp;amp;&amp;amp;(o=!0,b.isFunction(i)||(s=!0),c&amp;amp;&amp;amp;(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l&amp;gt;u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),&amp;quot;complete&amp;quot;===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;,H,!1),e.addEventListener(&amp;quot;load&amp;quot;,H,!1);else{o.attachEvent(&amp;quot;onreadystatechange&amp;quot;,H),e.attachEvent(&amp;quot;onload&amp;quot;,H);var r=!1;try{r=null==e.frameElement&amp;amp;&amp;amp;o.documentElement}catch(i){}r&amp;amp;&amp;amp;r.doScroll&amp;amp;&amp;amp;function a(){if(!b.isReady){try{r.doScroll(&amp;quot;left&amp;quot;)}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each(&amp;quot;Boolean Number String Function Array Date RegExp Object Error&amp;quot;.split(&amp;quot; &amp;quot;),function(e,t){l[&amp;quot;[object &amp;quot;+t+&amp;quot;]&amp;quot;]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&amp;amp;&amp;amp;t?!0:&amp;quot;array&amp;quot;===n||&amp;quot;function&amp;quot;!==n&amp;amp;&amp;amp;(0===t||&amp;quot;number&amp;quot;==typeof t&amp;amp;&amp;amp;t&amp;gt;0&amp;amp;&amp;amp;t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e=&amp;quot;string&amp;quot;==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&amp;amp;&amp;amp;[],c=function(t){for(r=e.memory&amp;amp;&amp;amp;t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&amp;amp;&amp;amp;o&amp;gt;a;a++)if(u[a].apply(t[0],t[1])===!1&amp;amp;&amp;amp;e.stopOnFalse){r=!1;break}n=!1,u&amp;amp;&amp;amp;(l?l.length&amp;amp;&amp;amp;c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);&amp;quot;function&amp;quot;===r?e.unique&amp;amp;&amp;amp;p.has(n)||u.push(n):n&amp;amp;&amp;amp;n.length&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!==r&amp;amp;&amp;amp;i(n)})})(arguments),n?o=u.length:r&amp;amp;&amp;amp;(s=t,c(r))}return this},remove:function(){return u&amp;amp;&amp;amp;b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))&amp;gt;-1)u.splice(r,1),n&amp;amp;&amp;amp;(o&amp;gt;=r&amp;amp;&amp;amp;o--,a&amp;gt;=r&amp;amp;&amp;amp;a--)}),this},has:function(e){return e?b.inArray(e,u)&amp;gt;-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&amp;amp;&amp;amp;!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[[&amp;quot;resolve&amp;quot;,&amp;quot;done&amp;quot;,b.Callbacks(&amp;quot;once memory&amp;quot;),&amp;quot;resolved&amp;quot;],[&amp;quot;reject&amp;quot;,&amp;quot;fail&amp;quot;,b.Callbacks(&amp;quot;once memory&amp;quot;),&amp;quot;rejected&amp;quot;],[&amp;quot;notify&amp;quot;,&amp;quot;progress&amp;quot;,b.Callbacks(&amp;quot;memory&amp;quot;)]],n=&amp;quot;pending&amp;quot;,r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&amp;amp;&amp;amp;e[t];i[o[1]](function(){var e=s&amp;amp;&amp;amp;s.apply(this,arguments);e&amp;amp;&amp;amp;b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+&amp;quot;With&amp;quot;](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&amp;amp;&amp;amp;a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+&amp;quot;With&amp;quot;](this===i?r:this,arguments),this},i[o[0]+&amp;quot;With&amp;quot;]=a.fireWith}),r.promise(i),e&amp;amp;&amp;amp;e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&amp;amp;&amp;amp;b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length&amp;gt;1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r&amp;gt;1)for(s=Array(r),u=Array(r),l=Array(r);r&amp;gt;t;t++)n[t]&amp;amp;&amp;amp;b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement(&amp;quot;div&amp;quot;);if(d.setAttribute(&amp;quot;className&amp;quot;,&amp;quot;t&amp;quot;),d.innerHTML=&amp;quot;  &amp;lt;link/&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;a href=&#039;/a&#039;&amp;gt;a&amp;lt;/a&amp;gt;&amp;lt;input type=&#039;checkbox&#039;/&amp;gt;&amp;quot;,n=d.getElementsByTagName(&amp;quot;*&amp;quot;),r=d.getElementsByTagName(&amp;quot;a&amp;quot;)[0],!n||!r||!n.length)return{};s=o.createElement(&amp;quot;select&amp;quot;),l=s.appendChild(o.createElement(&amp;quot;option&amp;quot;)),a=d.getElementsByTagName(&amp;quot;input&amp;quot;)[0],r.style.cssText=&amp;quot;top:1px;float:left;opacity:.5&amp;quot;,t={getSetAttribute:&amp;quot;t&amp;quot;!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName(&amp;quot;tbody&amp;quot;).length,htmlSerialize:!!d.getElementsByTagName(&amp;quot;link&amp;quot;).length,style:/top/.test(r.getAttribute(&amp;quot;style&amp;quot;)),hrefNormalized:&amp;quot;/a&amp;quot;===r.getAttribute(&amp;quot;href&amp;quot;),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement(&amp;quot;form&amp;quot;).enctype,html5Clone:&amp;quot;&amp;lt;:nav&amp;gt;&amp;lt;/:nav&amp;gt;&amp;quot;!==o.createElement(&amp;quot;nav&amp;quot;).cloneNode(!0).outerHTML,boxModel:&amp;quot;CSS1Compat&amp;quot;===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement(&amp;quot;input&amp;quot;),a.setAttribute(&amp;quot;value&amp;quot;,&amp;quot;&amp;quot;),t.input=&amp;quot;&amp;quot;===a.getAttribute(&amp;quot;value&amp;quot;),a.value=&amp;quot;t&amp;quot;,a.setAttribute(&amp;quot;type&amp;quot;,&amp;quot;radio&amp;quot;),t.radioValue=&amp;quot;t&amp;quot;===a.value,a.setAttribute(&amp;quot;checked&amp;quot;,&amp;quot;t&amp;quot;),a.setAttribute(&amp;quot;name&amp;quot;,&amp;quot;t&amp;quot;),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&amp;amp;&amp;amp;(d.attachEvent(&amp;quot;onclick&amp;quot;,function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=&amp;quot;on&amp;quot;+f,&amp;quot;t&amp;quot;),t[f+&amp;quot;Bubbles&amp;quot;]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip=&amp;quot;content-box&amp;quot;,d.cloneNode(!0).style.backgroundClip=&amp;quot;&amp;quot;,t.clearCloneStyle=&amp;quot;content-box&amp;quot;===d.style.backgroundClip,b(function(){var n,r,a,s=&amp;quot;padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;&amp;quot;,u=o.getElementsByTagName(&amp;quot;body&amp;quot;)[0];u&amp;amp;&amp;amp;(n=o.createElement(&amp;quot;div&amp;quot;),n.style.cssText=&amp;quot;border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px&amp;quot;,u.appendChild(n).appendChild(d),d.innerHTML=&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;t&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;,a=d.getElementsByTagName(&amp;quot;td&amp;quot;),a[0].style.cssText=&amp;quot;padding:0;margin:0;border:0;display:none&amp;quot;,p=0===a[0].offsetHeight,a[0].style.display=&amp;quot;&amp;quot;,a[1].style.display=&amp;quot;none&amp;quot;,t.reliableHiddenOffsets=p&amp;amp;&amp;amp;0===a[0].offsetHeight,d.innerHTML=&amp;quot;&amp;quot;,d.style.cssText=&amp;quot;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;&amp;quot;,t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&amp;amp;&amp;amp;(t.pixelPosition=&amp;quot;1%&amp;quot;!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=&amp;quot;4px&amp;quot;===(e.getComputedStyle(d,null)||{width:&amp;quot;4px&amp;quot;}).width,r=d.appendChild(o.createElement(&amp;quot;div&amp;quot;)),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=&amp;quot;0&amp;quot;,d.style.width=&amp;quot;1px&amp;quot;,t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&amp;amp;&amp;amp;(d.innerHTML=&amp;quot;&amp;quot;,d.style.cssText=s+&amp;quot;width:1px;padding:1px;display:inline;zoom:1&amp;quot;,t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=&amp;quot;block&amp;quot;,d.innerHTML=&amp;quot;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,d.firstChild.style.width=&amp;quot;5px&amp;quot;,t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&amp;amp;&amp;amp;(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u=&amp;quot;string&amp;quot;==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&amp;amp;&amp;amp;s;if(f&amp;amp;&amp;amp;p[f]&amp;amp;&amp;amp;(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),(&amp;quot;object&amp;quot;==typeof n||&amp;quot;function&amp;quot;==typeof n)&amp;amp;&amp;amp;(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&amp;amp;&amp;amp;(o[b.camelCase(n)]=r),u?(a=o[n],null==a&amp;amp;&amp;amp;(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&amp;amp;&amp;amp;(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(&amp;quot; &amp;quot;));for(r=0,i=t.length;i&amp;gt;r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&amp;amp;&amp;amp;(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:&amp;quot;jQuery&amp;quot;+(p+Math.random()).replace(/\D/g,&amp;quot;&amp;quot;),noData:{embed:!0,object:&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot;,applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&amp;amp;&amp;amp;!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&amp;amp;&amp;amp;1!==e.nodeType&amp;amp;&amp;amp;9!==e.nodeType)return!1;var t=e.nodeName&amp;amp;&amp;amp;b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&amp;amp;&amp;amp;e.getAttribute(&amp;quot;classid&amp;quot;)===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&amp;amp;&amp;amp;(s=b.data(o),1===o.nodeType&amp;amp;&amp;amp;!b._data(o,&amp;quot;parsedAttrs&amp;quot;))){for(r=o.attributes;r.length&amp;gt;a;a++)i=r[a].name,i.indexOf(&amp;quot;data-&amp;quot;)||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,&amp;quot;parsedAttrs&amp;quot;,!0)}return s}return&amp;quot;object&amp;quot;==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length&amp;gt;1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&amp;amp;&amp;amp;1===e.nodeType){var i=&amp;quot;data-&amp;quot;+n.replace(B,&amp;quot;-$1&amp;quot;).toLowerCase();if(r=e.getAttribute(i),&amp;quot;string&amp;quot;==typeof r){try{r=&amp;quot;true&amp;quot;===r?!0:&amp;quot;false&amp;quot;===r?!1:&amp;quot;null&amp;quot;===r?null:+r+&amp;quot;&amp;quot;===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if((&amp;quot;data&amp;quot;!==t||!b.isEmptyObject(e[t]))&amp;amp;&amp;amp;&amp;quot;toJSON&amp;quot;!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||&amp;quot;fx&amp;quot;)+&amp;quot;queue&amp;quot;,i=b._data(e,n),r&amp;amp;&amp;amp;(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||&amp;quot;fx&amp;quot;;var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};&amp;quot;inprogress&amp;quot;===i&amp;amp;&amp;amp;(i=n.shift(),r--),o.cur=i,i&amp;amp;&amp;amp;(&amp;quot;fx&amp;quot;===t&amp;amp;&amp;amp;n.unshift(&amp;quot;inprogress&amp;quot;),delete o.stop,i.call(e,a,o)),!r&amp;amp;&amp;amp;o&amp;amp;&amp;amp;o.empty.fire()},_queueHooks:function(e,t){var n=t+&amp;quot;queueHooks&amp;quot;;return b._data(e,n)||b._data(e,n,{empty:b.Callbacks(&amp;quot;once memory&amp;quot;).add(function(){b._removeData(e,t+&amp;quot;queue&amp;quot;),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(n=e,e=&amp;quot;fx&amp;quot;,r--),r&amp;gt;arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),&amp;quot;fx&amp;quot;===e&amp;amp;&amp;amp;&amp;quot;inprogress&amp;quot;!==t[0]&amp;amp;&amp;amp;b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||&amp;quot;fx&amp;quot;,this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||&amp;quot;fx&amp;quot;,[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(n=e,e=t),e=e||&amp;quot;fx&amp;quot;;while(s--)r=b._data(a[s],e+&amp;quot;queueHooks&amp;quot;),r&amp;amp;&amp;amp;r.empty&amp;amp;&amp;amp;(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length&amp;gt;1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length&amp;gt;1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||&amp;quot;&amp;quot;).match(w)||[];s&amp;gt;a;a++)if(n=this[a],r=1===n.nodeType&amp;amp;&amp;amp;(n.className?(&amp;quot; &amp;quot;+n.className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;):&amp;quot; &amp;quot;)){o=0;while(i=t[o++])0&amp;gt;r.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;)&amp;amp;&amp;amp;(r+=i+&amp;quot; &amp;quot;);n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||&amp;quot;&amp;quot;).match(w)||[];s&amp;gt;a;a++)if(n=this[a],r=1===n.nodeType&amp;amp;&amp;amp;(n.className?(&amp;quot; &amp;quot;+n.className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;):&amp;quot;&amp;quot;)){o=0;while(i=t[o++])while(r.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;)&amp;gt;=0)r=r.replace(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;,&amp;quot; &amp;quot;);n.className=e?b.trim(r):&amp;quot;&amp;quot;}return this},toggleClass:function(e,t){var n=typeof e,r=&amp;quot;boolean&amp;quot;==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(&amp;quot;string&amp;quot;===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?&amp;quot;addClass&amp;quot;:&amp;quot;removeClass&amp;quot;](o)}else(n===i||&amp;quot;boolean&amp;quot;===n)&amp;amp;&amp;amp;(this.className&amp;amp;&amp;amp;b._data(this,&amp;quot;__className__&amp;quot;,this.className),this.className=this.className||e===!1?&amp;quot;&amp;quot;:b._data(this,&amp;quot;__className__&amp;quot;)||&amp;quot;&amp;quot;)})},hasClass:function(e){var t=&amp;quot; &amp;quot;+e+&amp;quot; &amp;quot;,n=0,r=this.length;for(;r&amp;gt;n;n++)if(1===this[n].nodeType&amp;amp;&amp;amp;(&amp;quot; &amp;quot;+this[n].className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;).indexOf(t)&amp;gt;=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&amp;amp;&amp;amp;(o=i?e.call(this,n,a.val()):e,null==o?o=&amp;quot;&amp;quot;:&amp;quot;number&amp;quot;==typeof o?o+=&amp;quot;&amp;quot;:b.isArray(o)&amp;amp;&amp;amp;(o=b.map(o,function(e){return null==e?&amp;quot;&amp;quot;:e+&amp;quot;&amp;quot;})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in r&amp;amp;&amp;amp;r.set(this,o,&amp;quot;value&amp;quot;)!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in r&amp;amp;&amp;amp;(n=r.get(o,&amp;quot;value&amp;quot;))!==t?n:(n=o.value,&amp;quot;string&amp;quot;==typeof n?n.replace(U,&amp;quot;&amp;quot;):null==n?&amp;quot;&amp;quot;:n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=&amp;quot;select-one&amp;quot;===e.type||0&amp;gt;i,a=o?null:[],s=o?i+1:r.length,u=0&amp;gt;i?s:o?i:0;for(;s&amp;gt;u;u++)if(n=r[u],!(!n.selected&amp;amp;&amp;amp;u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute(&amp;quot;disabled&amp;quot;))||n.parentNode.disabled&amp;amp;&amp;amp;b.nodeName(n.parentNode,&amp;quot;optgroup&amp;quot;))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find(&amp;quot;option&amp;quot;).each(function(){this.selected=b.inArray(b(this).val(),n)&amp;gt;=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&amp;amp;&amp;amp;3!==u&amp;amp;&amp;amp;8!==u&amp;amp;&amp;amp;2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&amp;amp;&amp;amp;(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&amp;amp;&amp;amp;a&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in o&amp;amp;&amp;amp;null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&amp;amp;&amp;amp;(s=e.getAttribute(n)),null==s?t:s):null!==r?o&amp;amp;&amp;amp;a&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in o&amp;amp;&amp;amp;(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+&amp;quot;&amp;quot;),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&amp;amp;&amp;amp;t.match(w);if(o&amp;amp;&amp;amp;1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&amp;amp;&amp;amp;G.test(n)?e[b.camelCase(&amp;quot;default-&amp;quot;+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,&amp;quot;&amp;quot;),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&amp;amp;&amp;amp;&amp;quot;radio&amp;quot;===t&amp;amp;&amp;amp;b.nodeName(e,&amp;quot;input&amp;quot;)){var n=e.value;return e.setAttribute(&amp;quot;type&amp;quot;,t),n&amp;amp;&amp;amp;(e.value=n),t}}}},propFix:{tabindex:&amp;quot;tabIndex&amp;quot;,readonly:&amp;quot;readOnly&amp;quot;,&amp;quot;for&amp;quot;:&amp;quot;htmlFor&amp;quot;,&amp;quot;class&amp;quot;:&amp;quot;className&amp;quot;,maxlength:&amp;quot;maxLength&amp;quot;,cellspacing:&amp;quot;cellSpacing&amp;quot;,cellpadding:&amp;quot;cellPadding&amp;quot;,rowspan:&amp;quot;rowSpan&amp;quot;,colspan:&amp;quot;colSpan&amp;quot;,usemap:&amp;quot;useMap&amp;quot;,frameborder:&amp;quot;frameBorder&amp;quot;,contenteditable:&amp;quot;contentEditable&amp;quot;},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&amp;amp;&amp;amp;3!==s&amp;amp;&amp;amp;8!==s&amp;amp;&amp;amp;2!==s)return a=1!==s||!b.isXMLDoc(e),a&amp;amp;&amp;amp;(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in o&amp;amp;&amp;amp;(i=o.set(e,r,n))!==t?i:e[n]=r:o&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in o&amp;amp;&amp;amp;null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode(&amp;quot;tabindex&amp;quot;);return n&amp;amp;&amp;amp;n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&amp;amp;&amp;amp;e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i=&amp;quot;boolean&amp;quot;==typeof r&amp;amp;&amp;amp;e.getAttribute(n),o=&amp;quot;boolean&amp;quot;==typeof r?K&amp;amp;&amp;amp;Q?null!=i:G.test(n)?e[b.camelCase(&amp;quot;default-&amp;quot;+n)]:!!i:e.getAttributeNode(n);return o&amp;amp;&amp;amp;o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&amp;amp;&amp;amp;Q||!G.test(n)?e.setAttribute(!Q&amp;amp;&amp;amp;b.propFix[n]||n,n):e[b.camelCase(&amp;quot;default-&amp;quot;+n)]=e[n]=!0,n}},K&amp;amp;&amp;amp;Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,&amp;quot;input&amp;quot;)?e.defaultValue:r&amp;amp;&amp;amp;r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,&amp;quot;input&amp;quot;)?(e.defaultValue=n,t):I&amp;amp;&amp;amp;I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&amp;amp;&amp;amp;(&amp;quot;id&amp;quot;===n||&amp;quot;name&amp;quot;===n||&amp;quot;coords&amp;quot;===n?&amp;quot;&amp;quot;!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=&amp;quot;&amp;quot;,&amp;quot;value&amp;quot;===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,&amp;quot;&amp;quot;===t?!1:t,n)}},b.each([&amp;quot;width&amp;quot;,&amp;quot;height&amp;quot;],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return&amp;quot;&amp;quot;===r?(e.setAttribute(n,&amp;quot;auto&amp;quot;),r):t}})})),b.support.hrefNormalized||(b.each([&amp;quot;href&amp;quot;,&amp;quot;src&amp;quot;,&amp;quot;width&amp;quot;,&amp;quot;height&amp;quot;],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each([&amp;quot;href&amp;quot;,&amp;quot;src&amp;quot;],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+&amp;quot;&amp;quot;}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;(t.selectedIndex,t.parentNode&amp;amp;&amp;amp;t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype=&amp;quot;encoding&amp;quot;),b.support.checkOn||b.each([&amp;quot;radio&amp;quot;,&amp;quot;checkbox&amp;quot;],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute(&amp;quot;value&amp;quot;)?&amp;quot;on&amp;quot;:e.value}}}),b.each([&amp;quot;radio&amp;quot;,&amp;quot;checkbox&amp;quot;],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)&amp;gt;=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&amp;amp;&amp;amp;(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&amp;amp;&amp;amp;b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||&amp;quot;&amp;quot;).match(w)||[&amp;quot;&amp;quot;],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&amp;amp;&amp;amp;b.expr.match.needsContext.test(a),namespace:m.join(&amp;quot;.&amp;quot;)},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&amp;amp;&amp;amp;p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&amp;amp;&amp;amp;e.attachEvent(&amp;quot;on&amp;quot;+g,f))),p.add&amp;amp;&amp;amp;(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&amp;amp;&amp;amp;b._data(e);if(m&amp;amp;&amp;amp;(c=m.events)){t=(t||&amp;quot;&amp;quot;).match(w)||[&amp;quot;&amp;quot;],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&amp;amp;&amp;amp;RegExp(&amp;quot;(^|\\.)&amp;quot;+h.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;),u=o=f.length;while(o--)a=f[o],!i&amp;amp;&amp;amp;g!==a.origType||n&amp;amp;&amp;amp;n.guid!==a.guid||s&amp;amp;&amp;amp;!s.test(a.namespace)||r&amp;amp;&amp;amp;r!==a.selector&amp;amp;&amp;amp;(&amp;quot;**&amp;quot;!==r||!a.selector)||(f.splice(o,1),a.selector&amp;amp;&amp;amp;f.delegateCount--,p.remove&amp;amp;&amp;amp;p.remove.call(e,a));u&amp;amp;&amp;amp;!f.length&amp;amp;&amp;amp;(p.teardown&amp;amp;&amp;amp;p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&amp;amp;&amp;amp;(delete m.handle,b._removeData(e,&amp;quot;events&amp;quot;))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,&amp;quot;type&amp;quot;)?n.type:n,m=y.call(n,&amp;quot;namespace&amp;quot;)?n.namespace.split(&amp;quot;.&amp;quot;):[];if(l=f=i=i||o,3!==i.nodeType&amp;amp;&amp;amp;8!==i.nodeType&amp;amp;&amp;amp;!nt.test(g+b.event.triggered)&amp;amp;&amp;amp;(g.indexOf(&amp;quot;.&amp;quot;)&amp;gt;=0&amp;amp;&amp;amp;(m=g.split(&amp;quot;.&amp;quot;),g=m.shift(),m.sort()),u=0&amp;gt;g.indexOf(&amp;quot;:&amp;quot;)&amp;amp;&amp;amp;&amp;quot;on&amp;quot;+g,n=n[b.expando]?n:new b.Event(g,&amp;quot;object&amp;quot;==typeof n&amp;amp;&amp;amp;n),n.isTrigger=!0,n.namespace=m.join(&amp;quot;.&amp;quot;),n.namespace_re=n.namespace?RegExp(&amp;quot;(^|\\.)&amp;quot;+m.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&amp;amp;&amp;amp;!p.noBubble&amp;amp;&amp;amp;!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&amp;amp;&amp;amp;h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&amp;amp;&amp;amp;!n.isPropagationStopped())n.type=d&amp;gt;1?c:p.bindType||g,s=(b._data(l,&amp;quot;events&amp;quot;)||{})[n.type]&amp;amp;&amp;amp;b._data(l,&amp;quot;handle&amp;quot;),s&amp;amp;&amp;amp;s.apply(l,r),s=u&amp;amp;&amp;amp;l[u],s&amp;amp;&amp;amp;b.acceptData(l)&amp;amp;&amp;amp;s.apply&amp;amp;&amp;amp;s.apply(l,r)===!1&amp;amp;&amp;amp;n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&amp;amp;&amp;amp;p._default.apply(i.ownerDocument,r)!==!1||&amp;quot;click&amp;quot;===g&amp;amp;&amp;amp;b.nodeName(i,&amp;quot;a&amp;quot;)||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&amp;amp;&amp;amp;(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&amp;amp;&amp;amp;(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,&amp;quot;events&amp;quot;)||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&amp;amp;&amp;amp;!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&amp;amp;&amp;amp;!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&amp;amp;&amp;amp;(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&amp;amp;&amp;amp;(e.result=r)===!1&amp;amp;&amp;amp;(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&amp;amp;&amp;amp;c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&amp;amp;&amp;amp;l.nodeType&amp;amp;&amp;amp;(!e.button||&amp;quot;click&amp;quot;!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&amp;amp;&amp;amp;(l.disabled!==!0||&amp;quot;click&amp;quot;!==e.type)){for(o=[],a=0;u&amp;gt;a;a++)i=n[a],r=i.selector+&amp;quot; &amp;quot;,o[r]===t&amp;amp;&amp;amp;(o[r]=i.needsContext?b(r,this).index(l)&amp;gt;=0:b.find(r,this,null,[l]).length),o[r]&amp;amp;&amp;amp;o.push(i);o.length&amp;amp;&amp;amp;s.push({elem:l,handlers:o})}return n.length&amp;gt;u&amp;amp;&amp;amp;s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&amp;amp;&amp;amp;(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:&amp;quot;altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which&amp;quot;.split(&amp;quot; &amp;quot;),fixHooks:{},keyHooks:{props:&amp;quot;char charCode key keyCode&amp;quot;.split(&amp;quot; &amp;quot;),filter:function(e,t){return null==e.which&amp;amp;&amp;amp;(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:&amp;quot;button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement&amp;quot;.split(&amp;quot; &amp;quot;),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&amp;amp;&amp;amp;null!=n.clientX&amp;amp;&amp;amp;(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&amp;amp;&amp;amp;a.scrollLeft||r&amp;amp;&amp;amp;r.scrollLeft||0)-(a&amp;amp;&amp;amp;a.clientLeft||r&amp;amp;&amp;amp;r.clientLeft||0),e.pageY=n.clientY+(a&amp;amp;&amp;amp;a.scrollTop||r&amp;amp;&amp;amp;r.scrollTop||0)-(a&amp;amp;&amp;amp;a.clientTop||r&amp;amp;&amp;amp;r.clientTop||0)),!e.relatedTarget&amp;amp;&amp;amp;u&amp;amp;&amp;amp;(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&amp;amp;s?1:2&amp;amp;s?3:4&amp;amp;s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;&amp;quot;checkbox&amp;quot;===this.type&amp;amp;&amp;amp;this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&amp;amp;&amp;amp;this.focus)try{return this.focus(),!1}catch(e){}},delegateType:&amp;quot;focusin&amp;quot;},blur:{trigger:function(){return this===o.activeElement&amp;amp;&amp;amp;this.blur?(this.blur(),!1):t},delegateType:&amp;quot;focusout&amp;quot;},beforeunload:{postDispatch:function(e){e.result!==t&amp;amp;&amp;amp;(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&amp;amp;&amp;amp;n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&amp;amp;&amp;amp;e.removeEventListener(t,n,!1)}:function(e,t,n){var r=&amp;quot;on&amp;quot;+t;e.detachEvent&amp;amp;&amp;amp;(typeof e[r]===i&amp;amp;&amp;amp;(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&amp;amp;&amp;amp;e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&amp;amp;&amp;amp;e.getPreventDefault()?it:ot):this.type=e,n&amp;amp;&amp;amp;b.extend(this,n),this.timeStamp=e&amp;amp;&amp;amp;e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&amp;amp;&amp;amp;(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&amp;amp;&amp;amp;(e.stopPropagation&amp;amp;&amp;amp;e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:&amp;quot;mouseover&amp;quot;,mouseleave:&amp;quot;mouseout&amp;quot;},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;&lt;br /&gt;
return(!i||i!==r&amp;amp;&amp;amp;!b.contains(r,i))&amp;amp;&amp;amp;(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,&amp;quot;form&amp;quot;)?!1:(b.event.add(this,&amp;quot;click._submit keypress._submit&amp;quot;,function(e){var n=e.target,r=b.nodeName(n,&amp;quot;input&amp;quot;)||b.nodeName(n,&amp;quot;button&amp;quot;)?n.form:t;r&amp;amp;&amp;amp;!b._data(r,&amp;quot;submitBubbles&amp;quot;)&amp;amp;&amp;amp;(b.event.add(r,&amp;quot;submit._submit&amp;quot;,function(e){e._submit_bubble=!0}),b._data(r,&amp;quot;submitBubbles&amp;quot;,!0))}),t)},postDispatch:function(e){e._submit_bubble&amp;amp;&amp;amp;(delete e._submit_bubble,this.parentNode&amp;amp;&amp;amp;!e.isTrigger&amp;amp;&amp;amp;b.event.simulate(&amp;quot;submit&amp;quot;,this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,&amp;quot;form&amp;quot;)?!1:(b.event.remove(this,&amp;quot;._submit&amp;quot;),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?((&amp;quot;checkbox&amp;quot;===this.type||&amp;quot;radio&amp;quot;===this.type)&amp;amp;&amp;amp;(b.event.add(this,&amp;quot;propertychange._change&amp;quot;,function(e){&amp;quot;checked&amp;quot;===e.originalEvent.propertyName&amp;amp;&amp;amp;(this._just_changed=!0)}),b.event.add(this,&amp;quot;click._change&amp;quot;,function(e){this._just_changed&amp;amp;&amp;amp;!e.isTrigger&amp;amp;&amp;amp;(this._just_changed=!1),b.event.simulate(&amp;quot;change&amp;quot;,this,e,!0)})),!1):(b.event.add(this,&amp;quot;beforeactivate._change&amp;quot;,function(e){var t=e.target;Z.test(t.nodeName)&amp;amp;&amp;amp;!b._data(t,&amp;quot;changeBubbles&amp;quot;)&amp;amp;&amp;amp;(b.event.add(t,&amp;quot;change._change&amp;quot;,function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate(&amp;quot;change&amp;quot;,this.parentNode,e,!0)}),b._data(t,&amp;quot;changeBubbles&amp;quot;,!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||&amp;quot;radio&amp;quot;!==n.type&amp;amp;&amp;amp;&amp;quot;checkbox&amp;quot;!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,&amp;quot;._change&amp;quot;),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:&amp;quot;focusin&amp;quot;,blur:&amp;quot;focusout&amp;quot;},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&amp;amp;&amp;amp;o.addEventListener(e,r,!0)},teardown:function(){0===--n&amp;amp;&amp;amp;o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if(&amp;quot;object&amp;quot;==typeof e){&amp;quot;string&amp;quot;!=typeof n&amp;amp;&amp;amp;(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&amp;amp;&amp;amp;null==i?(i=n,r=n=t):null==i&amp;amp;&amp;amp;(&amp;quot;string&amp;quot;==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&amp;amp;&amp;amp;(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&amp;amp;&amp;amp;e.preventDefault&amp;amp;&amp;amp;e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+&amp;quot;.&amp;quot;+i.namespace:i.origType,i.selector,i.handler),this;if(&amp;quot;object&amp;quot;==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||&amp;quot;function&amp;quot;==typeof n)&amp;amp;&amp;amp;(r=n,n=t),r===!1&amp;amp;&amp;amp;(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,&amp;quot;**&amp;quot;):this.off(t,e||&amp;quot;**&amp;quot;,n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x=&amp;quot;sizzle&amp;quot;+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1&amp;lt;&amp;lt;31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n&amp;gt;t;t++)if(this[t]===e)return t;return-1},_=&amp;quot;[\\x20\\t\\r\\n\\f]&amp;quot;,F=&amp;quot;(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+&amp;quot;,O=F.replace(&amp;quot;w&amp;quot;,&amp;quot;w#&amp;quot;),B=&amp;quot;([*^$|!~]?=)&amp;quot;,P=&amp;quot;\\[&amp;quot;+_+&amp;quot;*(&amp;quot;+F+&amp;quot;)&amp;quot;+_+&amp;quot;*(?:&amp;quot;+B+_+&amp;quot;*(?:([&#039;\&amp;quot;])((?:\\\\.|[^\\\\])*?)\\3|(&amp;quot;+O+&amp;quot;)|)|)&amp;quot;+_+&amp;quot;*\\]&amp;quot;,R=&amp;quot;:(&amp;quot;+F+&amp;quot;)(?:\\((([&#039;\&amp;quot;])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|&amp;quot;+P.replace(3,8)+&amp;quot;)*)|.*)\\)|)&amp;quot;,W=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;+|((?:^|[^\\\\])(?:\\\\.)*)&amp;quot;+_+&amp;quot;+$&amp;quot;,&amp;quot;g&amp;quot;),$=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*,&amp;quot;+_+&amp;quot;*&amp;quot;),I=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*([\\x20\\t\\r\\n\\f&amp;gt;+~])&amp;quot;+_+&amp;quot;*&amp;quot;),z=RegExp(R),X=RegExp(&amp;quot;^&amp;quot;+O+&amp;quot;$&amp;quot;),U={ID:RegExp(&amp;quot;^#(&amp;quot;+F+&amp;quot;)&amp;quot;),CLASS:RegExp(&amp;quot;^\\.(&amp;quot;+F+&amp;quot;)&amp;quot;),NAME:RegExp(&amp;quot;^\\[name=[&#039;\&amp;quot;]?(&amp;quot;+F+&amp;quot;)[&#039;\&amp;quot;]?\\]&amp;quot;),TAG:RegExp(&amp;quot;^(&amp;quot;+F.replace(&amp;quot;w&amp;quot;,&amp;quot;w*&amp;quot;)+&amp;quot;)&amp;quot;),ATTR:RegExp(&amp;quot;^&amp;quot;+P),PSEUDO:RegExp(&amp;quot;^&amp;quot;+R),CHILD:RegExp(&amp;quot;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(&amp;quot;+_+&amp;quot;*(even|odd|(([+-]|)(\\d*)n|)&amp;quot;+_+&amp;quot;*(?:([+-]|)&amp;quot;+_+&amp;quot;*(\\d+)|))&amp;quot;+_+&amp;quot;*\\)|)&amp;quot;,&amp;quot;i&amp;quot;),needsContext:RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*[&amp;gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(&amp;quot;+_+&amp;quot;*((?:-\\d)?\\d*)&amp;quot;+_+&amp;quot;*\\)|)(?=[^-]|$)&amp;quot;,&amp;quot;i&amp;quot;)},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/&#039;|\\/g,Z=/\=[\x20\t\r\n\f]*([^&#039;&amp;quot;\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n=&amp;quot;0x&amp;quot;+t-65536;return n!==n?t:0&amp;gt;n?String.fromCharCode(n+65536):String.fromCharCode(55296|n&amp;gt;&amp;gt;10,56320|1023&amp;amp;n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+&amp;quot;&amp;quot;)}function it(){var e,t=[];return e=function(n,r){return t.push(n+=&amp;quot; &amp;quot;)&amp;gt;i.cacheLength&amp;amp;&amp;amp;delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement(&amp;quot;div&amp;quot;);try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&amp;amp;&amp;amp;c(t),t=t||p,n=n||[],!e||&amp;quot;string&amp;quot;!=typeof e)return n;if(1!==(s=t.nodeType)&amp;amp;&amp;amp;9!==s)return[];if(!d&amp;amp;&amp;amp;!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&amp;amp;&amp;amp;(o=t.ownerDocument.getElementById(a))&amp;amp;&amp;amp;y(t,o)&amp;amp;&amp;amp;o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&amp;amp;&amp;amp;T.getByClassName&amp;amp;&amp;amp;t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&amp;amp;&amp;amp;!h.test(e)){if(f=!0,g=x,m=t,v=9===s&amp;amp;&amp;amp;e,1===s&amp;amp;&amp;amp;&amp;quot;object&amp;quot;!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute(&amp;quot;id&amp;quot;))?g=f.replace(K,&amp;quot;\\$&amp;amp;&amp;quot;):t.setAttribute(&amp;quot;id&amp;quot;,g),g=&amp;quot;[id=&#039;&amp;quot;+g+&amp;quot;&#039;] &amp;quot;,u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&amp;amp;&amp;amp;t.parentNode||t,v=l.join(&amp;quot;,&amp;quot;)}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute(&amp;quot;id&amp;quot;)}}}return wt(e.replace(W,&amp;quot;$1&amp;quot;),t,n,r)}a=st.isXML=function(e){var t=e&amp;amp;&amp;amp;(e.ownerDocument||e).documentElement;return t?&amp;quot;HTML&amp;quot;!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&amp;amp;&amp;amp;9===n.nodeType&amp;amp;&amp;amp;n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment(&amp;quot;&amp;quot;)),!e.getElementsByTagName(&amp;quot;*&amp;quot;).length}),T.attributes=at(function(e){e.innerHTML=&amp;quot;&amp;lt;select&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;;var t=typeof e.lastChild.getAttribute(&amp;quot;multiple&amp;quot;);return&amp;quot;boolean&amp;quot;!==t&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!==t}),T.getByClassName=at(function(e){return e.innerHTML=&amp;quot;&amp;lt;div class=&#039;hidden e&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&#039;hidden&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,e.getElementsByClassName&amp;amp;&amp;amp;e.getElementsByClassName(&amp;quot;e&amp;quot;).length?(e.lastChild.className=&amp;quot;e&amp;quot;,2===e.getElementsByClassName(&amp;quot;e&amp;quot;).length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML=&amp;quot;&amp;lt;a name=&#039;&amp;quot;+x+&amp;quot;&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;div name=&#039;&amp;quot;+x+&amp;quot;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,f.insertBefore(e,f.firstChild);var t=n.getElementsByName&amp;amp;&amp;amp;n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML=&amp;quot;&amp;lt;a href=&#039;#&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;quot;,e.firstChild&amp;amp;&amp;amp;typeof e.firstChild.getAttribute!==A&amp;amp;&amp;amp;&amp;quot;#&amp;quot;===e.firstChild.getAttribute(&amp;quot;href&amp;quot;)})?{}:{href:function(e){return e.getAttribute(&amp;quot;href&amp;quot;,2)},type:function(e){return e.getAttribute(&amp;quot;type&amp;quot;)}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&amp;amp;&amp;amp;!d){var n=t.getElementById(e);return n&amp;amp;&amp;amp;n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute(&amp;quot;id&amp;quot;)===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&amp;amp;&amp;amp;!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&amp;amp;&amp;amp;r.getAttributeNode(&amp;quot;id&amp;quot;).value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&amp;amp;&amp;amp;e.getAttributeNode(&amp;quot;id&amp;quot;);return n&amp;amp;&amp;amp;n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(&amp;quot;*&amp;quot;===e){while(n=o[i++])1===n.nodeType&amp;amp;&amp;amp;r.push(n);return r}return o},i.find.NAME=T.getByName&amp;amp;&amp;amp;function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&amp;amp;&amp;amp;function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[&amp;quot;:focus&amp;quot;],(T.qsa=rt(n.querySelectorAll))&amp;amp;&amp;amp;(at(function(e){e.innerHTML=&amp;quot;&amp;lt;select&amp;gt;&amp;lt;option selected=&#039;&#039;&amp;gt;&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;,e.querySelectorAll(&amp;quot;[selected]&amp;quot;).length||h.push(&amp;quot;\\[&amp;quot;+_+&amp;quot;*(?:checked|disabled|ismap|multiple|readonly|selected|value)&amp;quot;),e.querySelectorAll(&amp;quot;:checked&amp;quot;).length||h.push(&amp;quot;:checked&amp;quot;)}),at(function(e){e.innerHTML=&amp;quot;&amp;lt;input type=&#039;hidden&#039; i=&#039;&#039;/&amp;gt;&amp;quot;,e.querySelectorAll(&amp;quot;[i^=&#039;&#039;]&amp;quot;).length&amp;amp;&amp;amp;h.push(&amp;quot;[*^$]=&amp;quot;+_+&amp;quot;*(?:\&amp;quot;\&amp;quot;|&#039;&#039;)&amp;quot;),e.querySelectorAll(&amp;quot;:enabled&amp;quot;).length||h.push(&amp;quot;:enabled&amp;quot;,&amp;quot;:disabled&amp;quot;),e.querySelectorAll(&amp;quot;*,:x&amp;quot;),h.push(&amp;quot;,.*:&amp;quot;)})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&amp;amp;&amp;amp;at(function(e){T.disconnectedMatch=m.call(e,&amp;quot;div&amp;quot;),m.call(e,&amp;quot;[s!=&#039;&#039;]:x&amp;quot;),g.push(&amp;quot;!=&amp;quot;,R)}),h=RegExp(h.join(&amp;quot;|&amp;quot;)),g=RegExp(g.join(&amp;quot;|&amp;quot;)),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&amp;amp;&amp;amp;t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&amp;amp;&amp;amp;16&amp;amp;e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&amp;amp;&amp;amp;e.compareDocumentPosition&amp;amp;&amp;amp;e.compareDocumentPosition(t))?1&amp;amp;r||e.parentNode&amp;amp;&amp;amp;11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&amp;amp;r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),t=t.replace(Z,&amp;quot;=&#039;$1&#039;]&amp;quot;),!(!T.matchesSelector||d||g&amp;amp;&amp;amp;g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&amp;amp;&amp;amp;11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length&amp;gt;0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&amp;amp;&amp;amp;e[t]===!0?t:n&amp;amp;&amp;amp;n.specified?n.value:null},st.error=function(e){throw Error(&amp;quot;Syntax error, unrecognized expression: &amp;quot;+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&amp;amp;&amp;amp;(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&amp;amp;&amp;amp;e,r=n&amp;amp;&amp;amp;(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===n&amp;amp;&amp;amp;t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return(&amp;quot;input&amp;quot;===n||&amp;quot;button&amp;quot;===n)&amp;amp;&amp;amp;t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&amp;amp;&amp;amp;(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n=&amp;quot;&amp;quot;,r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(&amp;quot;string&amp;quot;==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{&amp;quot;&amp;gt;&amp;quot;:{dir:&amp;quot;parentNode&amp;quot;,first:!0},&amp;quot; &amp;quot;:{dir:&amp;quot;parentNode&amp;quot;},&amp;quot;+&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;,first:!0},&amp;quot;~&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||&amp;quot;&amp;quot;).replace(et,tt),&amp;quot;~=&amp;quot;===e[2]&amp;amp;&amp;amp;(e[3]=&amp;quot; &amp;quot;+e[3]+&amp;quot; &amp;quot;),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),&amp;quot;nth&amp;quot;===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(&amp;quot;even&amp;quot;===e[3]||&amp;quot;odd&amp;quot;===e[3])),e[5]=+(e[7]+e[8]||&amp;quot;odd&amp;quot;===e[3])):e[3]&amp;amp;&amp;amp;st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&amp;amp;&amp;amp;e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&amp;amp;&amp;amp;z.test(n)&amp;amp;&amp;amp;(t=ft(n,!0))&amp;amp;&amp;amp;(t=n.indexOf(&amp;quot;)&amp;quot;,n.length-t)-n.length)&amp;amp;&amp;amp;(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return&amp;quot;*&amp;quot;===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&amp;amp;&amp;amp;t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+&amp;quot; &amp;quot;];return t||(t=RegExp(&amp;quot;(^|&amp;quot;+_+&amp;quot;)&amp;quot;+e+&amp;quot;(&amp;quot;+_+&amp;quot;|$)&amp;quot;))&amp;amp;&amp;amp;k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&amp;amp;&amp;amp;e.getAttribute(&amp;quot;class&amp;quot;)||&amp;quot;&amp;quot;)})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?&amp;quot;!=&amp;quot;===t:t?(i+=&amp;quot;&amp;quot;,&amp;quot;=&amp;quot;===t?i===n:&amp;quot;!=&amp;quot;===t?i!==n:&amp;quot;^=&amp;quot;===t?n&amp;amp;&amp;amp;0===i.indexOf(n):&amp;quot;*=&amp;quot;===t?n&amp;amp;&amp;amp;i.indexOf(n)&amp;gt;-1:&amp;quot;$=&amp;quot;===t?n&amp;amp;&amp;amp;i.slice(-n.length)===n:&amp;quot;~=&amp;quot;===t?(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;).indexOf(n)&amp;gt;-1:&amp;quot;|=&amp;quot;===t?i===n||i.slice(0,n.length+1)===n+&amp;quot;-&amp;quot;:!1):!0}},CHILD:function(e,t,n,r,i){var o=&amp;quot;nth&amp;quot;!==e.slice(0,3),a=&amp;quot;last&amp;quot;!==e.slice(-4),s=&amp;quot;of-type&amp;quot;===t;return 1===r&amp;amp;&amp;amp;0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?&amp;quot;nextSibling&amp;quot;:&amp;quot;previousSibling&amp;quot;,m=t.parentNode,y=s&amp;amp;&amp;amp;t.nodeName.toLowerCase(),v=!u&amp;amp;&amp;amp;!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=&amp;quot;only&amp;quot;===e&amp;amp;&amp;amp;!h&amp;amp;&amp;amp;&amp;quot;nextSibling&amp;quot;}return!0}if(h=[a?m.firstChild:m.lastChild],a&amp;amp;&amp;amp;v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&amp;amp;&amp;amp;l[1],f=l[0]===N&amp;amp;&amp;amp;l[2],p=d&amp;amp;&amp;amp;m.childNodes[d];while(p=++d&amp;amp;&amp;amp;p&amp;amp;&amp;amp;p[g]||(f=d=0)||h.pop())if(1===p.nodeType&amp;amp;&amp;amp;++f&amp;amp;&amp;amp;p===t){c[e]=[N,d,f];break}}else if(v&amp;amp;&amp;amp;(l=(t[x]||(t[x]={}))[e])&amp;amp;&amp;amp;l[0]===N)f=l[1];else while(p=++d&amp;amp;&amp;amp;p&amp;amp;&amp;amp;p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&amp;amp;&amp;amp;++f&amp;amp;&amp;amp;(v&amp;amp;&amp;amp;((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&amp;amp;&amp;amp;f/r&amp;gt;=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error(&amp;quot;unsupported pseudo: &amp;quot;+e);return r[x]?r(t):r.length&amp;gt;1?(n=[e,e,&amp;quot;&amp;quot;,t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,&amp;quot;$1&amp;quot;));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&amp;amp;&amp;amp;(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length&amp;gt;0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)&amp;gt;-1}}),lang:ot(function(e){return X.test(e||&amp;quot;&amp;quot;)||st.error(&amp;quot;unsupported lang: &amp;quot;+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute(&amp;quot;xml:lang&amp;quot;)||t.getAttribute(&amp;quot;lang&amp;quot;):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+&amp;quot;-&amp;quot;);while((t=t.parentNode)&amp;amp;&amp;amp;1===t.nodeType);return!1}}),target:function(t){var n=e.location&amp;amp;&amp;amp;e.location.hash;return n&amp;amp;&amp;amp;n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&amp;amp;&amp;amp;(!p.hasFocus||p.hasFocus())&amp;amp;&amp;amp;!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===t&amp;amp;&amp;amp;!!e.checked||&amp;quot;option&amp;quot;===t&amp;amp;&amp;amp;!!e.selected},selected:function(e){return e.parentNode&amp;amp;&amp;amp;e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName&amp;gt;&amp;quot;@&amp;quot;||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===t&amp;amp;&amp;amp;&amp;quot;button&amp;quot;===e.type||&amp;quot;button&amp;quot;===t},text:function(e){var t;return&amp;quot;input&amp;quot;===e.nodeName.toLowerCase()&amp;amp;&amp;amp;&amp;quot;text&amp;quot;===e.type&amp;amp;&amp;amp;(null==(t=e.getAttribute(&amp;quot;type&amp;quot;))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0&amp;gt;n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t&amp;gt;n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t&amp;gt;n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0&amp;gt;n?n+t:n;for(;--r&amp;gt;=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0&amp;gt;n?n+t:n;for(;t&amp;gt;++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+&amp;quot; &amp;quot;];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&amp;amp;&amp;amp;(r&amp;amp;&amp;amp;(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&amp;amp;&amp;amp;(n=r.shift(),o.push({value:n,type:r[0].replace(W,&amp;quot; &amp;quot;)}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&amp;amp;&amp;amp;!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r=&amp;quot;&amp;quot;;for(;n&amp;gt;t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&amp;amp;&amp;amp;&amp;quot;parentNode&amp;quot;===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+&amp;quot; &amp;quot;+a;if(s){while(t=t[i])if((1===t.nodeType||o)&amp;amp;&amp;amp;e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&amp;amp;&amp;amp;l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length&amp;gt;1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u&amp;gt;s;s++)(o=e[s])&amp;amp;&amp;amp;(!n||n(o,r,i))&amp;amp;&amp;amp;(a.push(o),l&amp;amp;&amp;amp;t.push(s));return a}function yt(e,t,n,r,i,o){return r&amp;amp;&amp;amp;!r[x]&amp;amp;&amp;amp;(r=yt(r)),i&amp;amp;&amp;amp;!i[x]&amp;amp;&amp;amp;(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||&amp;quot;*&amp;quot;,s.nodeType?[s]:s,[]),m=!e||!o&amp;amp;&amp;amp;t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&amp;amp;&amp;amp;n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&amp;amp;&amp;amp;(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&amp;amp;&amp;amp;l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&amp;amp;&amp;amp;(l=i?M.call(o,p):f[c])&amp;gt;-1&amp;amp;&amp;amp;(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[&amp;quot; &amp;quot;],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)&amp;gt;-1},s,!0),f=[function(e,n,r){return!a&amp;amp;&amp;amp;(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o&amp;gt;u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o&amp;gt;r;r++)if(i.relative[e[r].type])break;return yt(u&amp;gt;1&amp;amp;&amp;amp;gt(f),u&amp;gt;1&amp;amp;&amp;amp;dt(e.slice(0,u-1)).replace(W,&amp;quot;$1&amp;quot;),n,r&amp;gt;u&amp;amp;&amp;amp;vt(e.slice(u,r)),o&amp;gt;r&amp;amp;&amp;amp;vt(e=e.slice(r)),o&amp;gt;r&amp;amp;&amp;amp;dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length&amp;gt;0,a=e.length&amp;gt;0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b=&amp;quot;0&amp;quot;,x=s&amp;amp;&amp;amp;[],w=null!=d,T=l,C=s||a&amp;amp;&amp;amp;i.find.TAG(&amp;quot;*&amp;quot;,d&amp;amp;&amp;amp;u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&amp;amp;&amp;amp;(l=u!==p&amp;amp;&amp;amp;u,r=n);null!=(h=C[b]);b++){if(a&amp;amp;&amp;amp;h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&amp;amp;&amp;amp;(N=k,r=++n)}o&amp;amp;&amp;amp;((h=!m&amp;amp;&amp;amp;h)&amp;amp;&amp;amp;v--,s&amp;amp;&amp;amp;x.push(h))}if(v+=b,o&amp;amp;&amp;amp;b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v&amp;gt;0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&amp;amp;&amp;amp;!s&amp;amp;&amp;amp;y.length&amp;gt;0&amp;amp;&amp;amp;v+t.length&amp;gt;1&amp;amp;&amp;amp;st.uniqueSort(f)}return w&amp;amp;&amp;amp;(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+&amp;quot; &amp;quot;];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i&amp;gt;r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&amp;amp;&amp;amp;1===p.length){if(a=p[0]=p[0].slice(0),a.length&amp;gt;2&amp;amp;&amp;amp;&amp;quot;ID&amp;quot;===(u=a[0]).type&amp;amp;&amp;amp;9===t.nodeType&amp;amp;&amp;amp;!d&amp;amp;&amp;amp;i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&amp;amp;&amp;amp;(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&amp;amp;&amp;amp;t.parentNode||t))){if(a.splice(o,1),e=r.length&amp;amp;&amp;amp;dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[&amp;quot;:&amp;quot;]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if(&amp;quot;string&amp;quot;!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i&amp;gt;t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i&amp;gt;t;t++)b.find(e,this[t],n);return n=this.pushStack(i&amp;gt;1?b.unique(n):n),n.selector=(this.selector?this.selector+&amp;quot; &amp;quot;:&amp;quot;&amp;quot;)+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r&amp;gt;t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&amp;amp;&amp;amp;(&amp;quot;string&amp;quot;==typeof e?lt.test(e)?b(e,this.context).index(this[0])&amp;gt;=0:b.filter(e,this).length&amp;gt;0:this.filter(e).length&amp;gt;0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||&amp;quot;string&amp;quot;!=typeof e?b(e,t||this.context):0;for(;i&amp;gt;r;r++){n=this[r];while(n&amp;amp;&amp;amp;n.ownerDocument&amp;amp;&amp;amp;n!==t&amp;amp;&amp;amp;11!==n.nodeType){if(a?a.index(n)&amp;gt;-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length&amp;gt;1?b.unique(o):o)},index:function(e){return e?&amp;quot;string&amp;quot;==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&amp;amp;&amp;amp;this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=&amp;quot;string&amp;quot;==typeof e?b(e,t):b.makeArray(e&amp;amp;&amp;amp;e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&amp;amp;&amp;amp;1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;11!==t.nodeType?t:null},parents:function(e){return b.dir(e,&amp;quot;parentNode&amp;quot;)},parentsUntil:function(e,t,n){return b.dir(e,&amp;quot;parentNode&amp;quot;,n)},next:function(e){return pt(e,&amp;quot;nextSibling&amp;quot;)},prev:function(e){return pt(e,&amp;quot;previousSibling&amp;quot;)},nextAll:function(e){return b.dir(e,&amp;quot;nextSibling&amp;quot;)},prevAll:function(e){return b.dir(e,&amp;quot;previousSibling&amp;quot;)},nextUntil:function(e,t,n){return b.dir(e,&amp;quot;nextSibling&amp;quot;,n)},prevUntil:function(e,t,n){return b.dir(e,&amp;quot;previousSibling&amp;quot;,n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,&amp;quot;iframe&amp;quot;)?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof r&amp;amp;&amp;amp;(i=b.filter(r,i)),i=this.length&amp;gt;1&amp;amp;&amp;amp;!ct[e]?b.unique(i):i,this.length&amp;gt;1&amp;amp;&amp;amp;st.test(e)&amp;amp;&amp;amp;(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&amp;amp;&amp;amp;(e=&amp;quot;:not(&amp;quot;+e+&amp;quot;)&amp;quot;),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&amp;amp;&amp;amp;9!==o.nodeType&amp;amp;&amp;amp;(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&amp;amp;&amp;amp;i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&amp;amp;&amp;amp;e!==t&amp;amp;&amp;amp;n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if(&amp;quot;string&amp;quot;==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)&amp;gt;=0===n})}function dt(e){var t=ht.split(&amp;quot;|&amp;quot;),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=&amp;quot;abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video&amp;quot;,gt=/ jQuery\d+=&amp;quot;(?:null|\d+)&amp;quot;/g,mt=RegExp(&amp;quot;&amp;lt;(?:&amp;quot;+ht+&amp;quot;)[\\s/&amp;gt;]&amp;quot;,&amp;quot;i&amp;quot;),yt=/^\s+/,vt=/&amp;lt;(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^&amp;gt;]*)\/&amp;gt;/gi,bt=/&amp;lt;([\w:]+)/,xt=/&amp;lt;tbody/i,wt=/&amp;lt;|&amp;amp;#?\w+;/,Tt=/&amp;lt;(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*&amp;lt;!(?:\[CDATA\[|--)|(?:\]\]|--)&amp;gt;\s*$/g,At={option:[1,&amp;quot;&amp;lt;select multiple=&#039;multiple&#039;&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/select&amp;gt;&amp;quot;],legend:[1,&amp;quot;&amp;lt;fieldset&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/fieldset&amp;gt;&amp;quot;],area:[1,&amp;quot;&amp;lt;map&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/map&amp;gt;&amp;quot;],param:[1,&amp;quot;&amp;lt;object&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/object&amp;gt;&amp;quot;],thead:[1,&amp;quot;&amp;lt;table&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;],tr:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],col:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;colgroup&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/colgroup&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],td:[3,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],_default:b.support.htmlSerialize?[0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]:[1,&amp;quot;X&amp;lt;div&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;]},jt=dt(o),Dt=jt.appendChild(o.createElement(&amp;quot;div&amp;quot;));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&amp;amp;&amp;amp;this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&amp;amp;&amp;amp;t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&amp;amp;&amp;amp;1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,&amp;quot;body&amp;quot;)||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&amp;amp;&amp;amp;this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&amp;amp;&amp;amp;this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length&amp;gt;0)&amp;amp;&amp;amp;(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&amp;amp;&amp;amp;(t&amp;amp;&amp;amp;b.contains(n.ownerDocument,n)&amp;amp;&amp;amp;Mt(Ot(n,&amp;quot;script&amp;quot;)),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&amp;amp;&amp;amp;b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&amp;amp;&amp;amp;b.nodeName(e,&amp;quot;select&amp;quot;)&amp;amp;&amp;amp;(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,&amp;quot;&amp;quot;):t;if(!(&amp;quot;string&amp;quot;!=typeof e||Tt.test(e)||!b.support.htmlSerialize&amp;amp;&amp;amp;mt.test(e)||!b.support.leadingWhitespace&amp;amp;&amp;amp;yt.test(e)||At[(bt.exec(e)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase()])){e=e.replace(vt,&amp;quot;&amp;lt;$1&amp;gt;&amp;lt;/$2&amp;gt;&amp;quot;);try{for(;i&amp;gt;r;r++)n=this[r]||{},1===n.nodeType&amp;amp;&amp;amp;(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&amp;amp;&amp;amp;this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||&amp;quot;string&amp;quot;==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&amp;amp;&amp;amp;(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1&amp;gt;=p||&amp;quot;string&amp;quot;!=typeof g||b.support.checkClone)&amp;amp;&amp;amp;Ct.test(g))return this.each(function(i){var o=d.eq(i);m&amp;amp;&amp;amp;(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&amp;amp;&amp;amp;(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&amp;amp;&amp;amp;(l=i),i)){for(n=n&amp;amp;&amp;amp;b.nodeName(i,&amp;quot;tr&amp;quot;),s=b.map(Ot(l,&amp;quot;script&amp;quot;),Ht),a=s.length;p&amp;gt;c;c++)o=l,c!==h&amp;amp;&amp;amp;(o=b.clone(o,!0,!0),a&amp;amp;&amp;amp;b.merge(s,Ot(o,&amp;quot;script&amp;quot;))),r.call(n&amp;amp;&amp;amp;b.nodeName(this[c],&amp;quot;table&amp;quot;)?Lt(this[c],&amp;quot;tbody&amp;quot;):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a&amp;gt;c;c++)o=s[c],kt.test(o.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;!b._data(o,&amp;quot;globalEval&amp;quot;)&amp;amp;&amp;amp;b.contains(u,o)&amp;amp;&amp;amp;(o.src?b.ajax({url:o.src,type:&amp;quot;GET&amp;quot;,dataType:&amp;quot;script&amp;quot;,async:!1,global:!1,&amp;quot;throws&amp;quot;:!0}):b.globalEval((o.text||o.textContent||o.innerHTML||&amp;quot;&amp;quot;).replace(St,&amp;quot;&amp;quot;)));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode(&amp;quot;type&amp;quot;);return e.type=(t&amp;amp;&amp;amp;t.specified)+&amp;quot;/&amp;quot;+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(&amp;quot;type&amp;quot;),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,&amp;quot;globalEval&amp;quot;,!t||b._data(t[r],&amp;quot;globalEval&amp;quot;))}function _t(e,t){if(1===t.nodeType&amp;amp;&amp;amp;b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i&amp;gt;r;r++)b.event.add(t,n,s[n][r])}a.data&amp;amp;&amp;amp;(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&amp;amp;&amp;amp;t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}&amp;quot;script&amp;quot;===n&amp;amp;&amp;amp;t.text!==e.text?(Ht(t).text=e.text,qt(t)):&amp;quot;object&amp;quot;===n?(t.parentNode&amp;amp;&amp;amp;(t.outerHTML=e.outerHTML),b.support.html5Clone&amp;amp;&amp;amp;e.innerHTML&amp;amp;&amp;amp;!b.trim(t.innerHTML)&amp;amp;&amp;amp;(t.innerHTML=e.innerHTML)):&amp;quot;input&amp;quot;===n&amp;amp;&amp;amp;Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&amp;amp;&amp;amp;(t.value=e.value)):&amp;quot;option&amp;quot;===n?t.defaultSelected=t.selected=e.defaultSelected:(&amp;quot;input&amp;quot;===n||&amp;quot;textarea&amp;quot;===n)&amp;amp;&amp;amp;(t.defaultValue=e.defaultValue)}}b.each({appendTo:&amp;quot;append&amp;quot;,prependTo:&amp;quot;prepend&amp;quot;,insertBefore:&amp;quot;before&amp;quot;,insertAfter:&amp;quot;after&amp;quot;,replaceAll:&amp;quot;replaceWith&amp;quot;},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a&amp;gt;=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||&amp;quot;*&amp;quot;):typeof e.querySelectorAll!==i?e.querySelectorAll(n||&amp;quot;*&amp;quot;):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&amp;amp;&amp;amp;b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&amp;amp;&amp;amp;(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test(&amp;quot;&amp;lt;&amp;quot;+e.nodeName+&amp;quot;&amp;gt;&amp;quot;)?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&amp;amp;&amp;amp;b.support.noCloneChecked||1!==e.nodeType&amp;amp;&amp;amp;11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&amp;amp;&amp;amp;Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,&amp;quot;script&amp;quot;),r.length&amp;gt;0&amp;amp;&amp;amp;Mt(r,!u&amp;amp;&amp;amp;Ot(e,&amp;quot;script&amp;quot;)),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p&amp;gt;h;h++)if(o=e[h],o||0===o)if(&amp;quot;object&amp;quot;===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(&amp;quot;div&amp;quot;)),u=(bt.exec(o)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,&amp;quot;&amp;lt;$1&amp;gt;&amp;lt;/$2&amp;gt;&amp;quot;)+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&amp;amp;&amp;amp;yt.test(o)&amp;amp;&amp;amp;d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o=&amp;quot;table&amp;quot;!==u||xt.test(o)?&amp;quot;&amp;lt;table&amp;gt;&amp;quot;!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&amp;amp;&amp;amp;o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],&amp;quot;tbody&amp;quot;)&amp;amp;&amp;amp;!l.childNodes.length&amp;amp;&amp;amp;o.removeChild(l)&lt;br /&gt;
}b.merge(d,s.childNodes),s.textContent=&amp;quot;&amp;quot;;while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&amp;amp;&amp;amp;f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,&amp;quot;input&amp;quot;),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&amp;amp;&amp;amp;(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),&amp;quot;script&amp;quot;),a&amp;amp;&amp;amp;Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&amp;amp;&amp;amp;(o=n[u],a=o&amp;amp;&amp;amp;l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&amp;amp;&amp;amp;(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(&amp;quot;^(&amp;quot;+x+&amp;quot;)(.*)$&amp;quot;,&amp;quot;i&amp;quot;),Yt=RegExp(&amp;quot;^(&amp;quot;+x+&amp;quot;)(?!px)[a-z%]+$&amp;quot;,&amp;quot;i&amp;quot;),Jt=RegExp(&amp;quot;^([+-])=(&amp;quot;+x+&amp;quot;)&amp;quot;,&amp;quot;i&amp;quot;),Gt={BODY:&amp;quot;block&amp;quot;},Qt={position:&amp;quot;absolute&amp;quot;,visibility:&amp;quot;hidden&amp;quot;,display:&amp;quot;block&amp;quot;},Kt={letterSpacing:0,fontWeight:400},Zt=[&amp;quot;Top&amp;quot;,&amp;quot;Right&amp;quot;,&amp;quot;Bottom&amp;quot;,&amp;quot;Left&amp;quot;],en=[&amp;quot;Webkit&amp;quot;,&amp;quot;O&amp;quot;,&amp;quot;Moz&amp;quot;,&amp;quot;ms&amp;quot;];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,&amp;quot;none&amp;quot;===b.css(e,&amp;quot;display&amp;quot;)||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s&amp;gt;a;a++)r=e[a],r.style&amp;amp;&amp;amp;(o[a]=b._data(r,&amp;quot;olddisplay&amp;quot;),n=r.style.display,t?(o[a]||&amp;quot;none&amp;quot;!==n||(r.style.display=&amp;quot;&amp;quot;),&amp;quot;&amp;quot;===r.style.display&amp;amp;&amp;amp;nn(r)&amp;amp;&amp;amp;(o[a]=b._data(r,&amp;quot;olddisplay&amp;quot;,un(r.nodeName)))):o[a]||(i=nn(r),(n&amp;amp;&amp;amp;&amp;quot;none&amp;quot;!==n||!i)&amp;amp;&amp;amp;b._data(r,&amp;quot;olddisplay&amp;quot;,i?n:b.css(r,&amp;quot;display&amp;quot;))));for(a=0;s&amp;gt;a;a++)r=e[a],r.style&amp;amp;&amp;amp;(t&amp;amp;&amp;amp;&amp;quot;none&amp;quot;!==r.style.display&amp;amp;&amp;amp;&amp;quot;&amp;quot;!==r.style.display||(r.style.display=t?o[a]||&amp;quot;&amp;quot;:&amp;quot;none&amp;quot;));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i&amp;gt;s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length&amp;gt;1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t=&amp;quot;boolean&amp;quot;==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,&amp;quot;opacity&amp;quot;);return&amp;quot;&amp;quot;===n?&amp;quot;1&amp;quot;:n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{&amp;quot;float&amp;quot;:b.support.cssFloat?&amp;quot;cssFloat&amp;quot;:&amp;quot;styleFloat&amp;quot;},style:function(e,n,r,i){if(e&amp;amp;&amp;amp;3!==e.nodeType&amp;amp;&amp;amp;8!==e.nodeType&amp;amp;&amp;amp;e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in s&amp;amp;&amp;amp;(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,&amp;quot;string&amp;quot;===a&amp;amp;&amp;amp;(o=Jt.exec(r))&amp;amp;&amp;amp;(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a=&amp;quot;number&amp;quot;),!(null==r||&amp;quot;number&amp;quot;===a&amp;amp;&amp;amp;isNaN(r)||(&amp;quot;number&amp;quot;!==a||b.cssNumber[u]||(r+=&amp;quot;px&amp;quot;),b.support.clearCloneStyle||&amp;quot;&amp;quot;!==r||0!==n.indexOf(&amp;quot;background&amp;quot;)||(l[n]=&amp;quot;inherit&amp;quot;),s&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in s&amp;amp;&amp;amp;(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in s&amp;amp;&amp;amp;(a=s.get(e,!0,r)),a===t&amp;amp;&amp;amp;(a=Wt(e,n,i)),&amp;quot;normal&amp;quot;===a&amp;amp;&amp;amp;n in Kt&amp;amp;&amp;amp;(a=Kt[n]),&amp;quot;&amp;quot;===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&amp;amp;&amp;amp;(&amp;quot;&amp;quot;!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&amp;amp;&amp;amp;Ut.test(n)&amp;amp;&amp;amp;(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&amp;amp;&amp;amp;(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&amp;amp;&amp;amp;l&amp;amp;&amp;amp;l[n]&amp;amp;&amp;amp;(u=l[n]),Yt.test(u)&amp;amp;&amp;amp;!zt.test(n)&amp;amp;&amp;amp;(i=l.left,o=e.runtimeStyle,a=o&amp;amp;&amp;amp;o.left,a&amp;amp;&amp;amp;(o.left=e.currentStyle.left),l.left=&amp;quot;fontSize&amp;quot;===n?&amp;quot;1em&amp;quot;:u,u=l.pixelLeft+&amp;quot;px&amp;quot;,l.left=i,a&amp;amp;&amp;amp;(o.left=a)),&amp;quot;&amp;quot;===u?&amp;quot;auto&amp;quot;:u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||&amp;quot;px&amp;quot;):t}function an(e,t,n,r,i){var o=n===(r?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;)?4:&amp;quot;width&amp;quot;===t?1:0,a=0;for(;4&amp;gt;o;o+=2)&amp;quot;margin&amp;quot;===n&amp;amp;&amp;amp;(a+=b.css(e,n+Zt[o],!0,i)),r?(&amp;quot;content&amp;quot;===n&amp;amp;&amp;amp;(a-=b.css(e,&amp;quot;padding&amp;quot;+Zt[o],!0,i)),&amp;quot;margin&amp;quot;!==n&amp;amp;&amp;amp;(a-=b.css(e,&amp;quot;border&amp;quot;+Zt[o]+&amp;quot;Width&amp;quot;,!0,i))):(a+=b.css(e,&amp;quot;padding&amp;quot;+Zt[o],!0,i),&amp;quot;padding&amp;quot;!==n&amp;amp;&amp;amp;(a+=b.css(e,&amp;quot;border&amp;quot;+Zt[o]+&amp;quot;Width&amp;quot;,!0,i)));return a}function sn(e,t,n){var r=!0,i=&amp;quot;width&amp;quot;===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===b.css(e,&amp;quot;boxSizing&amp;quot;,!1,o);if(0&amp;gt;=i||null==i){if(i=Wt(e,t,o),(0&amp;gt;i||null==i)&amp;amp;&amp;amp;(i=e.style[t]),Yt.test(i))return i;r=a&amp;amp;&amp;amp;(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;),r,o)+&amp;quot;px&amp;quot;}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),&amp;quot;none&amp;quot;!==n&amp;amp;&amp;amp;n||(Pt=(Pt||b(&amp;quot;&amp;lt;iframe frameborder=&#039;0&#039; width=&#039;0&#039; height=&#039;0&#039;/&amp;gt;&amp;quot;).css(&amp;quot;cssText&amp;quot;,&amp;quot;display:block !important&amp;quot;)).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(&amp;quot;&amp;lt;!doctype html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;quot;),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],&amp;quot;display&amp;quot;);return n.remove(),r}b.each([&amp;quot;height&amp;quot;,&amp;quot;width&amp;quot;],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&amp;amp;&amp;amp;Xt.test(b.css(e,&amp;quot;display&amp;quot;))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&amp;amp;&amp;amp;Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===b.css(e,&amp;quot;boxSizing&amp;quot;,!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&amp;amp;&amp;amp;e.currentStyle?e.currentStyle.filter:e.style.filter)||&amp;quot;&amp;quot;)?.01*parseFloat(RegExp.$1)+&amp;quot;&amp;quot;:t?&amp;quot;1&amp;quot;:&amp;quot;&amp;quot;},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?&amp;quot;alpha(opacity=&amp;quot;+100*t+&amp;quot;)&amp;quot;:&amp;quot;&amp;quot;,o=r&amp;amp;&amp;amp;r.filter||n.filter||&amp;quot;&amp;quot;;n.zoom=1,(t&amp;gt;=1||&amp;quot;&amp;quot;===t)&amp;amp;&amp;amp;&amp;quot;&amp;quot;===b.trim(o.replace($t,&amp;quot;&amp;quot;))&amp;amp;&amp;amp;n.removeAttribute&amp;amp;&amp;amp;(n.removeAttribute(&amp;quot;filter&amp;quot;),&amp;quot;&amp;quot;===t||r&amp;amp;&amp;amp;!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+&amp;quot; &amp;quot;+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:&amp;quot;inline-block&amp;quot;},Wt,[e,&amp;quot;marginRight&amp;quot;]):t}}),!b.support.pixelPosition&amp;amp;&amp;amp;b.fn.position&amp;amp;&amp;amp;b.each([&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+&amp;quot;px&amp;quot;:r):t}}})}),b.expr&amp;amp;&amp;amp;b.expr.filters&amp;amp;&amp;amp;(b.expr.filters.hidden=function(e){return 0&amp;gt;=e.offsetWidth&amp;amp;&amp;amp;0&amp;gt;=e.offsetHeight||!b.support.reliableHiddenOffsets&amp;amp;&amp;amp;&amp;quot;none&amp;quot;===(e.style&amp;amp;&amp;amp;e.style.display||b.css(e,&amp;quot;display&amp;quot;))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:&amp;quot;&amp;quot;,padding:&amp;quot;&amp;quot;,border:&amp;quot;Width&amp;quot;},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o=&amp;quot;string&amp;quot;==typeof n?n.split(&amp;quot; &amp;quot;):[n];for(;4&amp;gt;r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,&amp;quot;elements&amp;quot;);return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&amp;amp;&amp;amp;!b(this).is(&amp;quot;:disabled&amp;quot;)&amp;amp;&amp;amp;hn.test(this.nodeName)&amp;amp;&amp;amp;!dn.test(e)&amp;amp;&amp;amp;(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,&amp;quot;\r\n&amp;quot;)}}):{name:t.name,value:n.replace(fn,&amp;quot;\r\n&amp;quot;)}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?&amp;quot;&amp;quot;:t,i[i.length]=encodeURIComponent(e)+&amp;quot;=&amp;quot;+encodeURIComponent(t)};if(n===t&amp;amp;&amp;amp;(n=b.ajaxSettings&amp;amp;&amp;amp;b.ajaxSettings.traditional),b.isArray(e)||e.jquery&amp;amp;&amp;amp;!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(&amp;quot;&amp;amp;&amp;quot;).replace(cn,&amp;quot;+&amp;quot;)};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+&amp;quot;[&amp;quot;+(&amp;quot;object&amp;quot;==typeof i?t:&amp;quot;&amp;quot;)+&amp;quot;]&amp;quot;,i,n,r)});else if(n||&amp;quot;object&amp;quot;!==b.type(t))r(e,t);else for(i in t)gn(e+&amp;quot;[&amp;quot;+i+&amp;quot;]&amp;quot;,t[i],n,r)}b.each(&amp;quot;blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu&amp;quot;.split(&amp;quot; &amp;quot;),function(e,t){b.fn[t]=function(e,n){return arguments.length&amp;gt;0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&amp;amp;])_=[^&amp;amp;]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn=&amp;quot;*/&amp;quot;.concat(&amp;quot;*&amp;quot;);try{yn=a.href}catch(Ln){yn=o.createElement(&amp;quot;a&amp;quot;),yn.href=&amp;quot;&amp;quot;,yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){&amp;quot;string&amp;quot;!=typeof t&amp;amp;&amp;amp;(n=t,t=&amp;quot;*&amp;quot;);var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])&amp;quot;+&amp;quot;===r[0]?(r=r.slice(1)||&amp;quot;*&amp;quot;,(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return&amp;quot;string&amp;quot;!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o[&amp;quot;*&amp;quot;]&amp;amp;&amp;amp;s(&amp;quot;*&amp;quot;)}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&amp;amp;&amp;amp;((o[i]?e:r||(r={}))[i]=n[i]);return r&amp;amp;&amp;amp;b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if(&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(&amp;quot; &amp;quot;);return u&amp;gt;=0&amp;amp;&amp;amp;(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof n&amp;amp;&amp;amp;(a=&amp;quot;POST&amp;quot;),s.length&amp;gt;0&amp;amp;&amp;amp;b.ajax({url:e,type:a,dataType:&amp;quot;html&amp;quot;,data:n}).done(function(e){o=arguments,s.html(i?b(&amp;quot;&amp;lt;div&amp;gt;&amp;quot;).append(b.parseHTML(e)).find(i):e)}).complete(r&amp;amp;&amp;amp;function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each([&amp;quot;ajaxStart&amp;quot;,&amp;quot;ajaxStop&amp;quot;,&amp;quot;ajaxComplete&amp;quot;,&amp;quot;ajaxError&amp;quot;,&amp;quot;ajaxSuccess&amp;quot;,&amp;quot;ajaxSend&amp;quot;],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each([&amp;quot;get&amp;quot;,&amp;quot;post&amp;quot;],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&amp;amp;&amp;amp;(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:&amp;quot;GET&amp;quot;,isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:&amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;,accepts:{&amp;quot;*&amp;quot;:Dn,text:&amp;quot;text/plain&amp;quot;,html:&amp;quot;text/html&amp;quot;,xml:&amp;quot;application/xml, text/xml&amp;quot;,json:&amp;quot;application/json, text/javascript&amp;quot;},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:&amp;quot;responseXML&amp;quot;,text:&amp;quot;responseText&amp;quot;},converters:{&amp;quot;* text&amp;quot;:e.String,&amp;quot;text html&amp;quot;:!0,&amp;quot;text json&amp;quot;:b.parseJSON,&amp;quot;text xml&amp;quot;:b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){&amp;quot;object&amp;quot;==typeof e&amp;amp;&amp;amp;(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&amp;amp;&amp;amp;(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks(&amp;quot;once memory&amp;quot;),m=p.statusCode||{},y={},v={},x=0,T=&amp;quot;canceled&amp;quot;,N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2&amp;gt;x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&amp;amp;&amp;amp;l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+&amp;quot;&amp;quot;).replace(xn,&amp;quot;&amp;quot;).replace(kn,mn[1]+&amp;quot;//&amp;quot;),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||&amp;quot;*&amp;quot;).toLowerCase().match(w)||[&amp;quot;&amp;quot;],null==p.crossDomain&amp;amp;&amp;amp;(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&amp;amp;&amp;amp;r[2]===mn[2]&amp;amp;&amp;amp;(r[3]||(&amp;quot;http:&amp;quot;===r[1]?80:443))==(mn[3]||(&amp;quot;http:&amp;quot;===mn[1]?80:443)))),p.data&amp;amp;&amp;amp;p.processData&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!=typeof p.data&amp;amp;&amp;amp;(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&amp;amp;&amp;amp;0===b.active++&amp;amp;&amp;amp;b.event.trigger(&amp;quot;ajaxStart&amp;quot;),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&amp;amp;&amp;amp;(o=p.url+=(bn.test(o)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+p.data,delete p.data),p.cache===!1&amp;amp;&amp;amp;(p.url=wn.test(o)?o.replace(wn,&amp;quot;$1_=&amp;quot;+vn++):o+(bn.test(o)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+&amp;quot;_=&amp;quot;+vn++)),p.ifModified&amp;amp;&amp;amp;(b.lastModified[o]&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;If-Modified-Since&amp;quot;,b.lastModified[o]),b.etag[o]&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;If-None-Match&amp;quot;,b.etag[o])),(p.data&amp;amp;&amp;amp;p.hasContent&amp;amp;&amp;amp;p.contentType!==!1||n.contentType)&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;Content-Type&amp;quot;,p.contentType),N.setRequestHeader(&amp;quot;Accept&amp;quot;,p.dataTypes[0]&amp;amp;&amp;amp;p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(&amp;quot;*&amp;quot;!==p.dataTypes[0]?&amp;quot;, &amp;quot;+Dn+&amp;quot;; q=0.01&amp;quot;:&amp;quot;&amp;quot;):p.accepts[&amp;quot;*&amp;quot;]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&amp;amp;&amp;amp;(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T=&amp;quot;abort&amp;quot;;for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&amp;amp;&amp;amp;d.trigger(&amp;quot;ajaxSend&amp;quot;,[N,p]),p.async&amp;amp;&amp;amp;p.timeout&amp;gt;0&amp;amp;&amp;amp;(s=setTimeout(function(){N.abort(&amp;quot;timeout&amp;quot;)},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2&amp;gt;x))throw C;k(-1,C)}}else k(-1,&amp;quot;No Transport&amp;quot;);function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&amp;amp;&amp;amp;(x=2,s&amp;amp;&amp;amp;clearTimeout(s),l=t,a=i||&amp;quot;&amp;quot;,N.readyState=e&amp;gt;0?4:0,r&amp;amp;&amp;amp;(w=_n(p,N,r)),e&amp;gt;=200&amp;amp;&amp;amp;300&amp;gt;e||304===e?(p.ifModified&amp;amp;&amp;amp;(T=N.getResponseHeader(&amp;quot;Last-Modified&amp;quot;),T&amp;amp;&amp;amp;(b.lastModified[o]=T),T=N.getResponseHeader(&amp;quot;etag&amp;quot;),T&amp;amp;&amp;amp;(b.etag[o]=T)),204===e?(c=!0,C=&amp;quot;nocontent&amp;quot;):304===e?(c=!0,C=&amp;quot;notmodified&amp;quot;):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&amp;amp;&amp;amp;(C=&amp;quot;error&amp;quot;,0&amp;gt;e&amp;amp;&amp;amp;(e=0))),N.status=e,N.statusText=(n||C)+&amp;quot;&amp;quot;,c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&amp;amp;&amp;amp;d.trigger(c?&amp;quot;ajaxSuccess&amp;quot;:&amp;quot;ajaxError&amp;quot;,[N,p,c?y:v]),g.fireWith(f,[N,C]),u&amp;amp;&amp;amp;(d.trigger(&amp;quot;ajaxComplete&amp;quot;,[N,p]),--b.active||b.event.trigger(&amp;quot;ajaxStop&amp;quot;)))}return N},getScript:function(e,n){return b.get(e,t,n,&amp;quot;script&amp;quot;)},getJSON:function(e,t,n){return b.get(e,t,n,&amp;quot;json&amp;quot;)}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&amp;amp;&amp;amp;(n[c[s]]=r[s]);while(&amp;quot;*&amp;quot;===l[0])l.shift(),o===t&amp;amp;&amp;amp;(o=e.mimeType||n.getResponseHeader(&amp;quot;Content-Type&amp;quot;));if(o)for(s in u)if(u[s]&amp;amp;&amp;amp;u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+&amp;quot; &amp;quot;+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&amp;amp;&amp;amp;l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&amp;amp;&amp;amp;(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if(&amp;quot;*&amp;quot;!==r){if(&amp;quot;*&amp;quot;!==l&amp;amp;&amp;amp;l!==r){if(i=a[l+&amp;quot; &amp;quot;+r]||a[&amp;quot;* &amp;quot;+r],!i)for(n in a)if(o=n.split(&amp;quot; &amp;quot;),o[1]===r&amp;amp;&amp;amp;(i=a[l+&amp;quot; &amp;quot;+o[0]]||a[&amp;quot;* &amp;quot;+o[0]])){i===!0?i=a[n]:a[n]!==!0&amp;amp;&amp;amp;(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&amp;amp;&amp;amp;e[&amp;quot;throws&amp;quot;])t=i(t);else try{t=i(t)}catch(c){return{state:&amp;quot;parsererror&amp;quot;,error:i?c:&amp;quot;No conversion from &amp;quot;+l+&amp;quot; to &amp;quot;+r}}}l=r}return{state:&amp;quot;success&amp;quot;,data:t}}b.ajaxSetup({accepts:{script:&amp;quot;text/javascript, application/javascript, application/ecmascript, application/x-ecmascript&amp;quot;},contents:{script:/(?:java|ecma)script/},converters:{&amp;quot;text script&amp;quot;:function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter(&amp;quot;script&amp;quot;,function(e){e.cache===t&amp;amp;&amp;amp;(e.cache=!1),e.crossDomain&amp;amp;&amp;amp;(e.type=&amp;quot;GET&amp;quot;,e.global=!1)}),b.ajaxTransport(&amp;quot;script&amp;quot;,function(e){if(e.crossDomain){var n,r=o.head||b(&amp;quot;head&amp;quot;)[0]||o.documentElement;return{send:function(t,i){n=o.createElement(&amp;quot;script&amp;quot;),n.async=!0,e.scriptCharset&amp;amp;&amp;amp;(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&amp;amp;&amp;amp;(n.onload=n.onreadystatechange=null,n.parentNode&amp;amp;&amp;amp;n.parentNode.removeChild(n),n=null,t||i(200,&amp;quot;success&amp;quot;))},r.insertBefore(n,r.firstChild)},abort:function(){n&amp;amp;&amp;amp;n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&amp;amp;|$)|\?\?/;b.ajaxSetup({jsonp:&amp;quot;callback&amp;quot;,jsonpCallback:function(){var e=On.pop()||b.expando+&amp;quot;_&amp;quot;+vn++;return this[e]=!0,e}}),b.ajaxPrefilter(&amp;quot;json jsonp&amp;quot;,function(n,r,i){var o,a,s,u=n.jsonp!==!1&amp;amp;&amp;amp;(Bn.test(n.url)?&amp;quot;url&amp;quot;:&amp;quot;string&amp;quot;==typeof n.data&amp;amp;&amp;amp;!(n.contentType||&amp;quot;&amp;quot;).indexOf(&amp;quot;application/x-www-form-urlencoded&amp;quot;)&amp;amp;&amp;amp;Bn.test(n.data)&amp;amp;&amp;amp;&amp;quot;data&amp;quot;);return u||&amp;quot;jsonp&amp;quot;===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,&amp;quot;$1&amp;quot;+o):n.jsonp!==!1&amp;amp;&amp;amp;(n.url+=(bn.test(n.url)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+n.jsonp+&amp;quot;=&amp;quot;+o),n.converters[&amp;quot;script json&amp;quot;]=function(){return s||b.error(o+&amp;quot; was not called&amp;quot;),s[0]},n.dataTypes[0]=&amp;quot;json&amp;quot;,a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&amp;amp;&amp;amp;(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&amp;amp;&amp;amp;b.isFunction(a)&amp;amp;&amp;amp;a(s[0]),s=a=t}),&amp;quot;script&amp;quot;):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&amp;amp;&amp;amp;function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;)}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&amp;amp;&amp;amp;In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&amp;amp;&amp;amp;&amp;quot;withCredentials&amp;quot;in Rn,Rn=b.support.ajax=!!Rn,Rn&amp;amp;&amp;amp;b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&amp;amp;&amp;amp;u.overrideMimeType&amp;amp;&amp;amp;u.overrideMimeType(n.mimeType),n.crossDomain||i[&amp;quot;X-Requested-With&amp;quot;]||(i[&amp;quot;X-Requested-With&amp;quot;]=&amp;quot;XMLHttpRequest&amp;quot;);try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&amp;amp;&amp;amp;n.data||null),r=function(e,i){var s,l,c,p;try{if(r&amp;amp;&amp;amp;(i||4===u.readyState))if(r=t,a&amp;amp;&amp;amp;(u.onreadystatechange=b.noop,$n&amp;amp;&amp;amp;delete Pn[a]),i)4!==u.readyState&amp;amp;&amp;amp;u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),&amp;quot;string&amp;quot;==typeof u.responseText&amp;amp;&amp;amp;(p.text=u.responseText);try{c=u.statusText}catch(f){c=&amp;quot;&amp;quot;}s||!n.isLocal||n.crossDomain?1223===s&amp;amp;&amp;amp;(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&amp;amp;&amp;amp;o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&amp;amp;&amp;amp;(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&amp;amp;&amp;amp;r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(&amp;quot;^(?:([+-])=|)(&amp;quot;+x+&amp;quot;)([a-z%]*)$&amp;quot;,&amp;quot;i&amp;quot;),Jn=/queueHooks$/,Gn=[nr],Qn={&amp;quot;*&amp;quot;:[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;),&amp;quot;px&amp;quot;!==r&amp;amp;&amp;amp;s){s=b.css(i.elem,e,!0)||n||1;do u=u||&amp;quot;.5&amp;quot;,s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&amp;amp;&amp;amp;1!==u&amp;amp;&amp;amp;--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn[&amp;quot;*&amp;quot;]),i=0,o=r.length;for(;o&amp;gt;i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u&amp;gt;a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1&amp;gt;o&amp;amp;&amp;amp;u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r&amp;gt;n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a&amp;gt;o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&amp;amp;&amp;amp;l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&amp;amp;&amp;amp;(o=n[1],n=e[i]=n[0]),i!==r&amp;amp;&amp;amp;(e[r]=n,delete e[i]),a=b.cssHooks[r],a&amp;amp;&amp;amp;&amp;quot;expand&amp;quot;in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=[&amp;quot;*&amp;quot;]):e=e.split(&amp;quot; &amp;quot;);var n,r=0,i=e.length;for(;i&amp;gt;r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&amp;amp;&amp;amp;nn(e);n.queue||(c=b._queueHooks(e,&amp;quot;fx&amp;quot;),null==c.unqueued&amp;amp;&amp;amp;(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,&amp;quot;fx&amp;quot;).length||c.empty.fire()})})),1===e.nodeType&amp;amp;&amp;amp;(&amp;quot;height&amp;quot;in t||&amp;quot;width&amp;quot;in t)&amp;amp;&amp;amp;(n.overflow=[d.overflow,d.overflowX,d.overflowY],&amp;quot;inline&amp;quot;===b.css(e,&amp;quot;display&amp;quot;)&amp;amp;&amp;amp;&amp;quot;none&amp;quot;===b.css(e,&amp;quot;float&amp;quot;)&amp;amp;&amp;amp;(b.support.inlineBlockNeedsLayout&amp;amp;&amp;amp;&amp;quot;inline&amp;quot;!==un(e.nodeName)?d.zoom=1:d.display=&amp;quot;inline-block&amp;quot;)),n.overflow&amp;amp;&amp;amp;(d.overflow=&amp;quot;hidden&amp;quot;,b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||&amp;quot;toggle&amp;quot;===a,a===(m?&amp;quot;hide&amp;quot;:&amp;quot;show&amp;quot;))continue;g.push(i)}if(o=g.length){s=b._data(e,&amp;quot;fxshow&amp;quot;)||b._data(e,&amp;quot;fxshow&amp;quot;,{}),&amp;quot;hidden&amp;quot;in s&amp;amp;&amp;amp;(m=s.hidden),u&amp;amp;&amp;amp;(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,&amp;quot;fxshow&amp;quot;);for(t in h)b.style(e,t,h[t])});for(i=0;o&amp;gt;i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&amp;amp;&amp;amp;(l.end=l.start,l.start=&amp;quot;width&amp;quot;===r||&amp;quot;height&amp;quot;===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||&amp;quot;swing&amp;quot;,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;)},cur:function(){var e=rr.propHooks[this.prop];return e&amp;amp;&amp;amp;e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&amp;amp;&amp;amp;this.options.step.call(this.elem,this.now,this),n&amp;amp;&amp;amp;n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&amp;amp;&amp;amp;null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,&amp;quot;&amp;quot;),t&amp;amp;&amp;amp;&amp;quot;auto&amp;quot;!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&amp;amp;&amp;amp;(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&amp;amp;&amp;amp;e.elem.parentNode&amp;amp;&amp;amp;(e.elem[e.prop]=e.now)}},b.each([&amp;quot;toggle&amp;quot;,&amp;quot;show&amp;quot;,&amp;quot;hide&amp;quot;],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||&amp;quot;boolean&amp;quot;==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(&amp;quot;opacity&amp;quot;,0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,&amp;quot;finish&amp;quot;))&amp;amp;&amp;amp;t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(r=n,n=e,e=t),n&amp;amp;&amp;amp;e!==!1&amp;amp;&amp;amp;this.queue(e||&amp;quot;fx&amp;quot;,[]),this.each(function(){var t=!0,n=null!=e&amp;amp;&amp;amp;e+&amp;quot;queueHooks&amp;quot;,o=b.timers,a=b._data(this);if(n)a[n]&amp;amp;&amp;amp;a[n].stop&amp;amp;&amp;amp;i(a[n]);else for(n in a)a[n]&amp;amp;&amp;amp;a[n].stop&amp;amp;&amp;amp;Jn.test(n)&amp;amp;&amp;amp;i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&amp;amp;&amp;amp;o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&amp;amp;&amp;amp;b.dequeue(this,e)})},finish:function(e){return e!==!1&amp;amp;&amp;amp;(e=e||&amp;quot;fx&amp;quot;),this.each(function(){var t,n=b._data(this),r=n[e+&amp;quot;queue&amp;quot;],i=n[e+&amp;quot;queueHooks&amp;quot;],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&amp;amp;&amp;amp;i.cur&amp;amp;&amp;amp;i.cur.finish&amp;amp;&amp;amp;i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&amp;amp;&amp;amp;o[t].queue===e&amp;amp;&amp;amp;(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a&amp;gt;t;t++)r[t]&amp;amp;&amp;amp;r[t].finish&amp;amp;&amp;amp;r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4&amp;gt;i;i+=2-t)n=Zt[i],r[&amp;quot;margin&amp;quot;+n]=r[&amp;quot;padding&amp;quot;+n]=e;return t&amp;amp;&amp;amp;(r.opacity=r.width=e),r}b.each({slideDown:ir(&amp;quot;show&amp;quot;),slideUp:ir(&amp;quot;hide&amp;quot;),slideToggle:ir(&amp;quot;toggle&amp;quot;),fadeIn:{opacity:&amp;quot;show&amp;quot;},fadeOut:{opacity:&amp;quot;hide&amp;quot;},fadeToggle:{opacity:&amp;quot;toggle&amp;quot;}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof e?b.extend({},e):{complete:n||!n&amp;amp;&amp;amp;t||b.isFunction(e)&amp;amp;&amp;amp;e,duration:e,easing:n&amp;amp;&amp;amp;t||t&amp;amp;&amp;amp;!b.isFunction(t)&amp;amp;&amp;amp;t};return r.duration=b.fx.off?0:&amp;quot;number&amp;quot;==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&amp;amp;&amp;amp;(r.queue=&amp;quot;fx&amp;quot;),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&amp;amp;&amp;amp;r.old.call(this),r.queue&amp;amp;&amp;amp;b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length&amp;gt;r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&amp;amp;&amp;amp;b.timers.push(e)&amp;amp;&amp;amp;b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&amp;amp;&amp;amp;b.expr.filters&amp;amp;&amp;amp;(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&amp;amp;&amp;amp;a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&amp;amp;&amp;amp;(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,&amp;quot;position&amp;quot;);&amp;quot;static&amp;quot;===r&amp;amp;&amp;amp;(e.style.position=&amp;quot;relative&amp;quot;);var i=b(e),o=i.offset(),a=b.css(e,&amp;quot;top&amp;quot;),s=b.css(e,&amp;quot;left&amp;quot;),u=(&amp;quot;absolute&amp;quot;===r||&amp;quot;fixed&amp;quot;===r)&amp;amp;&amp;amp;b.inArray(&amp;quot;auto&amp;quot;,[a,s])&amp;gt;-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&amp;amp;&amp;amp;(t=t.call(e,n,o)),null!=t.top&amp;amp;&amp;amp;(l.top=t.top-o.top+p),null!=t.left&amp;amp;&amp;amp;(l.left=t.left-o.left+f),&amp;quot;using&amp;quot;in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return&amp;quot;fixed&amp;quot;===b.css(r,&amp;quot;position&amp;quot;)?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],&amp;quot;html&amp;quot;)||(n=e.offset()),n.top+=b.css(e[0],&amp;quot;borderTopWidth&amp;quot;,!0),n.left+=b.css(e[0],&amp;quot;borderLeftWidth&amp;quot;,!0)),{top:t.top-n.top-b.css(r,&amp;quot;marginTop&amp;quot;,!0),left:t.left-n.left-b.css(r,&amp;quot;marginLeft&amp;quot;,!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&amp;amp;&amp;amp;!b.nodeName(e,&amp;quot;html&amp;quot;)&amp;amp;&amp;amp;&amp;quot;static&amp;quot;===b.css(e,&amp;quot;position&amp;quot;))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:&amp;quot;pageXOffset&amp;quot;,scrollTop:&amp;quot;pageYOffset&amp;quot;},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:&amp;quot;height&amp;quot;,Width:&amp;quot;width&amp;quot;},function(e,n){b.each({padding:&amp;quot;inner&amp;quot;+e,content:n,&amp;quot;&amp;quot;:&amp;quot;outer&amp;quot;+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&amp;amp;&amp;amp;(r||&amp;quot;boolean&amp;quot;!=typeof i),s=r||(i===!0||o===!0?&amp;quot;margin&amp;quot;:&amp;quot;border&amp;quot;);return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement[&amp;quot;client&amp;quot;+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[&amp;quot;scroll&amp;quot;+e],o[&amp;quot;scroll&amp;quot;+e],n.body[&amp;quot;offset&amp;quot;+e],o[&amp;quot;offset&amp;quot;+e],o[&amp;quot;client&amp;quot;+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,&amp;quot;function&amp;quot;==typeof define&amp;amp;&amp;amp;define.amd&amp;amp;&amp;amp;define.amd.jQuery&amp;amp;&amp;amp;define(&amp;quot;jquery&amp;quot;,[],function(){return b})})(window);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.jqplot-xaxis,.jqplot-xaxis-label{margin-top:10px}.jqplot-x2axis,.jqplot-x2axis-label{margin-bottom:10px}.jqplot-target{position:relative;color:#666;font-family:&amp;quot;Trebuchet MS&amp;quot;,Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-x2axis-tick,.jqplot-xaxis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick,.jqplot-yaxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px;z-index:2;font-size:1.5em}.jqplot-x2axis-label,.jqplot-xaxis-label,.jqplot-yMidAxis-label,.jqplot-yaxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-yaxis-label{margin-right:10px}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin:12px}table.jqplot-cursor-legend,table.jqplot-table-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:active,td.jqplot-seriesToggle:hover{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-width:5px 6px;border-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-canvasOverlay-tooltip,.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%)}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,.3)}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=422</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=422"/>
		<updated>2021-01-27T17:24:36Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disse ser ikke ut til å funke. Hvorfor?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=421</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=421"/>
		<updated>2021-01-27T17:24:18Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disse ser ikke ut til å funke. Hvorfor?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=420</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=420"/>
		<updated>2021-01-27T17:22:07Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disse ser ikke ut til å funke. Hvorfor?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=419</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=419"/>
		<updated>2021-01-27T17:21:31Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/* Denne virker ikke */&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/chart/helge.js&#039; );&lt;br /&gt;
&lt;br /&gt;
/* Denne funker...se siden Test. hmmm snodig... */&lt;br /&gt;
$(function () {&lt;br /&gt;
	var myElement = document.getElementById(&#039;mw-mywiki-example&#039;);&lt;br /&gt;
	myElement.innerHTML = &#039;inserted text in wiki article&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  var myElement = document.getElementById(&#039;mw-hello-world&#039;);&lt;br /&gt;
  myElement.innerHTML = &#039;&amp;lt;html&amp;gt;Hello World!!!&amp;lt;/html&amp;gt;&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license&lt;br /&gt;
//@ sourceMappingURL=jquery.min.map&lt;br /&gt;
*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p=&amp;quot;1.9.1&amp;quot;,f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(&amp;lt;[\w\W]+&amp;gt;)[^&amp;gt;]*|#([\w-]*))$/,C=/^&amp;lt;(\w+)\s*\/?&amp;gt;(?:&amp;lt;\/\1&amp;gt;|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:[&amp;quot;\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/&amp;quot;[^&amp;quot;\\\r\n]*&amp;quot;|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||&amp;quot;load&amp;quot;===e.type||&amp;quot;complete&amp;quot;===o.readyState)&amp;amp;&amp;amp;(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener(&amp;quot;DOMContentLoaded&amp;quot;,H,!1),e.removeEventListener(&amp;quot;load&amp;quot;,H,!1)):(o.detachEvent(&amp;quot;onreadystatechange&amp;quot;,H),e.detachEvent(&amp;quot;onload&amp;quot;,H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if(&amp;quot;string&amp;quot;==typeof e){if(i=&amp;quot;&amp;lt;&amp;quot;===e.charAt(0)&amp;amp;&amp;amp;&amp;quot;&amp;gt;&amp;quot;===e.charAt(e.length-1)&amp;amp;&amp;amp;e.length&amp;gt;=3?[null,e,null]:N.exec(e),!i||!i[1]&amp;amp;&amp;amp;n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&amp;amp;&amp;amp;n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&amp;amp;&amp;amp;b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&amp;amp;&amp;amp;a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&amp;amp;&amp;amp;(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:&amp;quot;&amp;quot;,length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0&amp;gt;e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0&amp;gt;e?t:0);return this.pushStack(n&amp;gt;=0&amp;amp;&amp;amp;t&amp;gt;n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for(&amp;quot;boolean&amp;quot;==typeof s&amp;amp;&amp;amp;(c=s,s=arguments[1]||{},u=2),&amp;quot;object&amp;quot;==typeof s||b.isFunction(s)||(s={}),l===u&amp;amp;&amp;amp;(s=this,--u);l&amp;gt;u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&amp;amp;&amp;amp;(c&amp;amp;&amp;amp;r&amp;amp;&amp;amp;(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&amp;amp;&amp;amp;b.isArray(e)?e:[]):a=e&amp;amp;&amp;amp;b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&amp;amp;&amp;amp;(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&amp;amp;&amp;amp;(e.$=u),t&amp;amp;&amp;amp;e.jQuery===b&amp;amp;&amp;amp;(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&amp;amp;&amp;amp;--b.readyWait&amp;gt;0||(n.resolveWith(o,[b]),b.fn.trigger&amp;amp;&amp;amp;b(o).trigger(&amp;quot;ready&amp;quot;).off(&amp;quot;ready&amp;quot;))}},isFunction:function(e){return&amp;quot;function&amp;quot;===b.type(e)},isArray:Array.isArray||function(e){return&amp;quot;array&amp;quot;===b.type(e)},isWindow:function(e){return null!=e&amp;amp;&amp;amp;e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&amp;amp;&amp;amp;isFinite(e)},type:function(e){return null==e?e+&amp;quot;&amp;quot;:&amp;quot;object&amp;quot;==typeof e||&amp;quot;function&amp;quot;==typeof e?l[m.call(e)]||&amp;quot;object&amp;quot;:typeof e},isPlainObject:function(e){if(!e||&amp;quot;object&amp;quot;!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&amp;amp;&amp;amp;!y.call(e,&amp;quot;constructor&amp;quot;)&amp;amp;&amp;amp;!y.call(e.constructor.prototype,&amp;quot;isPrototypeOf&amp;quot;))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||&amp;quot;string&amp;quot;!=typeof e)return null;&amp;quot;boolean&amp;quot;==typeof t&amp;amp;&amp;amp;(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&amp;amp;&amp;amp;[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&amp;amp;&amp;amp;b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&amp;amp;&amp;amp;e.JSON.parse?e.JSON.parse(n):null===n?n:&amp;quot;string&amp;quot;==typeof n&amp;amp;&amp;amp;(n=b.trim(n),n&amp;amp;&amp;amp;k.test(n.replace(S,&amp;quot;@&amp;quot;).replace(A,&amp;quot;]&amp;quot;).replace(E,&amp;quot;&amp;quot;)))?Function(&amp;quot;return &amp;quot;+n)():(b.error(&amp;quot;Invalid JSON: &amp;quot;+n),t)},parseXML:function(n){var r,i;if(!n||&amp;quot;string&amp;quot;!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,&amp;quot;text/xml&amp;quot;)):(r=new ActiveXObject(&amp;quot;Microsoft.XMLDOM&amp;quot;),r.async=&amp;quot;false&amp;quot;,r.loadXML(n))}catch(o){r=t}return r&amp;amp;&amp;amp;r.documentElement&amp;amp;&amp;amp;!r.getElementsByTagName(&amp;quot;parsererror&amp;quot;).length||b.error(&amp;quot;Invalid XML: &amp;quot;+n),r},noop:function(){},globalEval:function(t){t&amp;amp;&amp;amp;b.trim(t)&amp;amp;&amp;amp;(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,&amp;quot;ms-&amp;quot;).replace(D,L)},nodeName:function(e,t){return e.nodeName&amp;amp;&amp;amp;e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o&amp;gt;i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o&amp;gt;i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&amp;amp;&amp;amp;!v.call(&amp;quot;\ufeff\u00a0&amp;quot;)?function(e){return null==e?&amp;quot;&amp;quot;:v.call(e)}:function(e){return null==e?&amp;quot;&amp;quot;:(e+&amp;quot;&amp;quot;).replace(T,&amp;quot;&amp;quot;)},makeArray:function(e,t){var n=t||[];return null!=e&amp;amp;&amp;amp;(M(Object(e))?b.merge(n,&amp;quot;string&amp;quot;==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0&amp;gt;n?Math.max(0,r+n):n:0;r&amp;gt;n;n++)if(n in t&amp;amp;&amp;amp;t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(&amp;quot;number&amp;quot;==typeof r)for(;r&amp;gt;o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a&amp;gt;o;o++)r=!!t(e[o],o),n!==r&amp;amp;&amp;amp;i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o&amp;gt;i;i++)r=t(e[i],i,n),null!=r&amp;amp;&amp;amp;(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&amp;amp;&amp;amp;(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return&amp;quot;string&amp;quot;==typeof n&amp;amp;&amp;amp;(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if(&amp;quot;object&amp;quot;===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&amp;amp;&amp;amp;(o=!0,b.isFunction(i)||(s=!0),c&amp;amp;&amp;amp;(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l&amp;gt;u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),&amp;quot;complete&amp;quot;===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;,H,!1),e.addEventListener(&amp;quot;load&amp;quot;,H,!1);else{o.attachEvent(&amp;quot;onreadystatechange&amp;quot;,H),e.attachEvent(&amp;quot;onload&amp;quot;,H);var r=!1;try{r=null==e.frameElement&amp;amp;&amp;amp;o.documentElement}catch(i){}r&amp;amp;&amp;amp;r.doScroll&amp;amp;&amp;amp;function a(){if(!b.isReady){try{r.doScroll(&amp;quot;left&amp;quot;)}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each(&amp;quot;Boolean Number String Function Array Date RegExp Object Error&amp;quot;.split(&amp;quot; &amp;quot;),function(e,t){l[&amp;quot;[object &amp;quot;+t+&amp;quot;]&amp;quot;]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&amp;amp;&amp;amp;t?!0:&amp;quot;array&amp;quot;===n||&amp;quot;function&amp;quot;!==n&amp;amp;&amp;amp;(0===t||&amp;quot;number&amp;quot;==typeof t&amp;amp;&amp;amp;t&amp;gt;0&amp;amp;&amp;amp;t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e=&amp;quot;string&amp;quot;==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&amp;amp;&amp;amp;[],c=function(t){for(r=e.memory&amp;amp;&amp;amp;t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&amp;amp;&amp;amp;o&amp;gt;a;a++)if(u[a].apply(t[0],t[1])===!1&amp;amp;&amp;amp;e.stopOnFalse){r=!1;break}n=!1,u&amp;amp;&amp;amp;(l?l.length&amp;amp;&amp;amp;c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);&amp;quot;function&amp;quot;===r?e.unique&amp;amp;&amp;amp;p.has(n)||u.push(n):n&amp;amp;&amp;amp;n.length&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!==r&amp;amp;&amp;amp;i(n)})})(arguments),n?o=u.length:r&amp;amp;&amp;amp;(s=t,c(r))}return this},remove:function(){return u&amp;amp;&amp;amp;b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))&amp;gt;-1)u.splice(r,1),n&amp;amp;&amp;amp;(o&amp;gt;=r&amp;amp;&amp;amp;o--,a&amp;gt;=r&amp;amp;&amp;amp;a--)}),this},has:function(e){return e?b.inArray(e,u)&amp;gt;-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&amp;amp;&amp;amp;!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[[&amp;quot;resolve&amp;quot;,&amp;quot;done&amp;quot;,b.Callbacks(&amp;quot;once memory&amp;quot;),&amp;quot;resolved&amp;quot;],[&amp;quot;reject&amp;quot;,&amp;quot;fail&amp;quot;,b.Callbacks(&amp;quot;once memory&amp;quot;),&amp;quot;rejected&amp;quot;],[&amp;quot;notify&amp;quot;,&amp;quot;progress&amp;quot;,b.Callbacks(&amp;quot;memory&amp;quot;)]],n=&amp;quot;pending&amp;quot;,r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&amp;amp;&amp;amp;e[t];i[o[1]](function(){var e=s&amp;amp;&amp;amp;s.apply(this,arguments);e&amp;amp;&amp;amp;b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+&amp;quot;With&amp;quot;](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&amp;amp;&amp;amp;a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+&amp;quot;With&amp;quot;](this===i?r:this,arguments),this},i[o[0]+&amp;quot;With&amp;quot;]=a.fireWith}),r.promise(i),e&amp;amp;&amp;amp;e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&amp;amp;&amp;amp;b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length&amp;gt;1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r&amp;gt;1)for(s=Array(r),u=Array(r),l=Array(r);r&amp;gt;t;t++)n[t]&amp;amp;&amp;amp;b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement(&amp;quot;div&amp;quot;);if(d.setAttribute(&amp;quot;className&amp;quot;,&amp;quot;t&amp;quot;),d.innerHTML=&amp;quot;  &amp;lt;link/&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;a href=&#039;/a&#039;&amp;gt;a&amp;lt;/a&amp;gt;&amp;lt;input type=&#039;checkbox&#039;/&amp;gt;&amp;quot;,n=d.getElementsByTagName(&amp;quot;*&amp;quot;),r=d.getElementsByTagName(&amp;quot;a&amp;quot;)[0],!n||!r||!n.length)return{};s=o.createElement(&amp;quot;select&amp;quot;),l=s.appendChild(o.createElement(&amp;quot;option&amp;quot;)),a=d.getElementsByTagName(&amp;quot;input&amp;quot;)[0],r.style.cssText=&amp;quot;top:1px;float:left;opacity:.5&amp;quot;,t={getSetAttribute:&amp;quot;t&amp;quot;!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName(&amp;quot;tbody&amp;quot;).length,htmlSerialize:!!d.getElementsByTagName(&amp;quot;link&amp;quot;).length,style:/top/.test(r.getAttribute(&amp;quot;style&amp;quot;)),hrefNormalized:&amp;quot;/a&amp;quot;===r.getAttribute(&amp;quot;href&amp;quot;),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement(&amp;quot;form&amp;quot;).enctype,html5Clone:&amp;quot;&amp;lt;:nav&amp;gt;&amp;lt;/:nav&amp;gt;&amp;quot;!==o.createElement(&amp;quot;nav&amp;quot;).cloneNode(!0).outerHTML,boxModel:&amp;quot;CSS1Compat&amp;quot;===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement(&amp;quot;input&amp;quot;),a.setAttribute(&amp;quot;value&amp;quot;,&amp;quot;&amp;quot;),t.input=&amp;quot;&amp;quot;===a.getAttribute(&amp;quot;value&amp;quot;),a.value=&amp;quot;t&amp;quot;,a.setAttribute(&amp;quot;type&amp;quot;,&amp;quot;radio&amp;quot;),t.radioValue=&amp;quot;t&amp;quot;===a.value,a.setAttribute(&amp;quot;checked&amp;quot;,&amp;quot;t&amp;quot;),a.setAttribute(&amp;quot;name&amp;quot;,&amp;quot;t&amp;quot;),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&amp;amp;&amp;amp;(d.attachEvent(&amp;quot;onclick&amp;quot;,function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=&amp;quot;on&amp;quot;+f,&amp;quot;t&amp;quot;),t[f+&amp;quot;Bubbles&amp;quot;]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip=&amp;quot;content-box&amp;quot;,d.cloneNode(!0).style.backgroundClip=&amp;quot;&amp;quot;,t.clearCloneStyle=&amp;quot;content-box&amp;quot;===d.style.backgroundClip,b(function(){var n,r,a,s=&amp;quot;padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;&amp;quot;,u=o.getElementsByTagName(&amp;quot;body&amp;quot;)[0];u&amp;amp;&amp;amp;(n=o.createElement(&amp;quot;div&amp;quot;),n.style.cssText=&amp;quot;border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px&amp;quot;,u.appendChild(n).appendChild(d),d.innerHTML=&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;t&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;,a=d.getElementsByTagName(&amp;quot;td&amp;quot;),a[0].style.cssText=&amp;quot;padding:0;margin:0;border:0;display:none&amp;quot;,p=0===a[0].offsetHeight,a[0].style.display=&amp;quot;&amp;quot;,a[1].style.display=&amp;quot;none&amp;quot;,t.reliableHiddenOffsets=p&amp;amp;&amp;amp;0===a[0].offsetHeight,d.innerHTML=&amp;quot;&amp;quot;,d.style.cssText=&amp;quot;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;&amp;quot;,t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&amp;amp;&amp;amp;(t.pixelPosition=&amp;quot;1%&amp;quot;!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=&amp;quot;4px&amp;quot;===(e.getComputedStyle(d,null)||{width:&amp;quot;4px&amp;quot;}).width,r=d.appendChild(o.createElement(&amp;quot;div&amp;quot;)),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=&amp;quot;0&amp;quot;,d.style.width=&amp;quot;1px&amp;quot;,t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&amp;amp;&amp;amp;(d.innerHTML=&amp;quot;&amp;quot;,d.style.cssText=s+&amp;quot;width:1px;padding:1px;display:inline;zoom:1&amp;quot;,t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=&amp;quot;block&amp;quot;,d.innerHTML=&amp;quot;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,d.firstChild.style.width=&amp;quot;5px&amp;quot;,t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&amp;amp;&amp;amp;(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u=&amp;quot;string&amp;quot;==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&amp;amp;&amp;amp;s;if(f&amp;amp;&amp;amp;p[f]&amp;amp;&amp;amp;(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),(&amp;quot;object&amp;quot;==typeof n||&amp;quot;function&amp;quot;==typeof n)&amp;amp;&amp;amp;(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&amp;amp;&amp;amp;(o[b.camelCase(n)]=r),u?(a=o[n],null==a&amp;amp;&amp;amp;(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&amp;amp;&amp;amp;(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(&amp;quot; &amp;quot;));for(r=0,i=t.length;i&amp;gt;r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&amp;amp;&amp;amp;(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:&amp;quot;jQuery&amp;quot;+(p+Math.random()).replace(/\D/g,&amp;quot;&amp;quot;),noData:{embed:!0,object:&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot;,applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&amp;amp;&amp;amp;!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&amp;amp;&amp;amp;1!==e.nodeType&amp;amp;&amp;amp;9!==e.nodeType)return!1;var t=e.nodeName&amp;amp;&amp;amp;b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&amp;amp;&amp;amp;e.getAttribute(&amp;quot;classid&amp;quot;)===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&amp;amp;&amp;amp;(s=b.data(o),1===o.nodeType&amp;amp;&amp;amp;!b._data(o,&amp;quot;parsedAttrs&amp;quot;))){for(r=o.attributes;r.length&amp;gt;a;a++)i=r[a].name,i.indexOf(&amp;quot;data-&amp;quot;)||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,&amp;quot;parsedAttrs&amp;quot;,!0)}return s}return&amp;quot;object&amp;quot;==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length&amp;gt;1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&amp;amp;&amp;amp;1===e.nodeType){var i=&amp;quot;data-&amp;quot;+n.replace(B,&amp;quot;-$1&amp;quot;).toLowerCase();if(r=e.getAttribute(i),&amp;quot;string&amp;quot;==typeof r){try{r=&amp;quot;true&amp;quot;===r?!0:&amp;quot;false&amp;quot;===r?!1:&amp;quot;null&amp;quot;===r?null:+r+&amp;quot;&amp;quot;===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if((&amp;quot;data&amp;quot;!==t||!b.isEmptyObject(e[t]))&amp;amp;&amp;amp;&amp;quot;toJSON&amp;quot;!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||&amp;quot;fx&amp;quot;)+&amp;quot;queue&amp;quot;,i=b._data(e,n),r&amp;amp;&amp;amp;(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||&amp;quot;fx&amp;quot;;var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};&amp;quot;inprogress&amp;quot;===i&amp;amp;&amp;amp;(i=n.shift(),r--),o.cur=i,i&amp;amp;&amp;amp;(&amp;quot;fx&amp;quot;===t&amp;amp;&amp;amp;n.unshift(&amp;quot;inprogress&amp;quot;),delete o.stop,i.call(e,a,o)),!r&amp;amp;&amp;amp;o&amp;amp;&amp;amp;o.empty.fire()},_queueHooks:function(e,t){var n=t+&amp;quot;queueHooks&amp;quot;;return b._data(e,n)||b._data(e,n,{empty:b.Callbacks(&amp;quot;once memory&amp;quot;).add(function(){b._removeData(e,t+&amp;quot;queue&amp;quot;),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(n=e,e=&amp;quot;fx&amp;quot;,r--),r&amp;gt;arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),&amp;quot;fx&amp;quot;===e&amp;amp;&amp;amp;&amp;quot;inprogress&amp;quot;!==t[0]&amp;amp;&amp;amp;b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||&amp;quot;fx&amp;quot;,this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||&amp;quot;fx&amp;quot;,[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(n=e,e=t),e=e||&amp;quot;fx&amp;quot;;while(s--)r=b._data(a[s],e+&amp;quot;queueHooks&amp;quot;),r&amp;amp;&amp;amp;r.empty&amp;amp;&amp;amp;(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length&amp;gt;1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length&amp;gt;1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||&amp;quot;&amp;quot;).match(w)||[];s&amp;gt;a;a++)if(n=this[a],r=1===n.nodeType&amp;amp;&amp;amp;(n.className?(&amp;quot; &amp;quot;+n.className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;):&amp;quot; &amp;quot;)){o=0;while(i=t[o++])0&amp;gt;r.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;)&amp;amp;&amp;amp;(r+=i+&amp;quot; &amp;quot;);n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||&amp;quot;&amp;quot;).match(w)||[];s&amp;gt;a;a++)if(n=this[a],r=1===n.nodeType&amp;amp;&amp;amp;(n.className?(&amp;quot; &amp;quot;+n.className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;):&amp;quot;&amp;quot;)){o=0;while(i=t[o++])while(r.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;)&amp;gt;=0)r=r.replace(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;,&amp;quot; &amp;quot;);n.className=e?b.trim(r):&amp;quot;&amp;quot;}return this},toggleClass:function(e,t){var n=typeof e,r=&amp;quot;boolean&amp;quot;==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(&amp;quot;string&amp;quot;===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?&amp;quot;addClass&amp;quot;:&amp;quot;removeClass&amp;quot;](o)}else(n===i||&amp;quot;boolean&amp;quot;===n)&amp;amp;&amp;amp;(this.className&amp;amp;&amp;amp;b._data(this,&amp;quot;__className__&amp;quot;,this.className),this.className=this.className||e===!1?&amp;quot;&amp;quot;:b._data(this,&amp;quot;__className__&amp;quot;)||&amp;quot;&amp;quot;)})},hasClass:function(e){var t=&amp;quot; &amp;quot;+e+&amp;quot; &amp;quot;,n=0,r=this.length;for(;r&amp;gt;n;n++)if(1===this[n].nodeType&amp;amp;&amp;amp;(&amp;quot; &amp;quot;+this[n].className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;).indexOf(t)&amp;gt;=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&amp;amp;&amp;amp;(o=i?e.call(this,n,a.val()):e,null==o?o=&amp;quot;&amp;quot;:&amp;quot;number&amp;quot;==typeof o?o+=&amp;quot;&amp;quot;:b.isArray(o)&amp;amp;&amp;amp;(o=b.map(o,function(e){return null==e?&amp;quot;&amp;quot;:e+&amp;quot;&amp;quot;})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in r&amp;amp;&amp;amp;r.set(this,o,&amp;quot;value&amp;quot;)!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in r&amp;amp;&amp;amp;(n=r.get(o,&amp;quot;value&amp;quot;))!==t?n:(n=o.value,&amp;quot;string&amp;quot;==typeof n?n.replace(U,&amp;quot;&amp;quot;):null==n?&amp;quot;&amp;quot;:n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=&amp;quot;select-one&amp;quot;===e.type||0&amp;gt;i,a=o?null:[],s=o?i+1:r.length,u=0&amp;gt;i?s:o?i:0;for(;s&amp;gt;u;u++)if(n=r[u],!(!n.selected&amp;amp;&amp;amp;u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute(&amp;quot;disabled&amp;quot;))||n.parentNode.disabled&amp;amp;&amp;amp;b.nodeName(n.parentNode,&amp;quot;optgroup&amp;quot;))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find(&amp;quot;option&amp;quot;).each(function(){this.selected=b.inArray(b(this).val(),n)&amp;gt;=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&amp;amp;&amp;amp;3!==u&amp;amp;&amp;amp;8!==u&amp;amp;&amp;amp;2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&amp;amp;&amp;amp;(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&amp;amp;&amp;amp;a&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in o&amp;amp;&amp;amp;null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&amp;amp;&amp;amp;(s=e.getAttribute(n)),null==s?t:s):null!==r?o&amp;amp;&amp;amp;a&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in o&amp;amp;&amp;amp;(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+&amp;quot;&amp;quot;),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&amp;amp;&amp;amp;t.match(w);if(o&amp;amp;&amp;amp;1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&amp;amp;&amp;amp;G.test(n)?e[b.camelCase(&amp;quot;default-&amp;quot;+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,&amp;quot;&amp;quot;),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&amp;amp;&amp;amp;&amp;quot;radio&amp;quot;===t&amp;amp;&amp;amp;b.nodeName(e,&amp;quot;input&amp;quot;)){var n=e.value;return e.setAttribute(&amp;quot;type&amp;quot;,t),n&amp;amp;&amp;amp;(e.value=n),t}}}},propFix:{tabindex:&amp;quot;tabIndex&amp;quot;,readonly:&amp;quot;readOnly&amp;quot;,&amp;quot;for&amp;quot;:&amp;quot;htmlFor&amp;quot;,&amp;quot;class&amp;quot;:&amp;quot;className&amp;quot;,maxlength:&amp;quot;maxLength&amp;quot;,cellspacing:&amp;quot;cellSpacing&amp;quot;,cellpadding:&amp;quot;cellPadding&amp;quot;,rowspan:&amp;quot;rowSpan&amp;quot;,colspan:&amp;quot;colSpan&amp;quot;,usemap:&amp;quot;useMap&amp;quot;,frameborder:&amp;quot;frameBorder&amp;quot;,contenteditable:&amp;quot;contentEditable&amp;quot;},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&amp;amp;&amp;amp;3!==s&amp;amp;&amp;amp;8!==s&amp;amp;&amp;amp;2!==s)return a=1!==s||!b.isXMLDoc(e),a&amp;amp;&amp;amp;(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in o&amp;amp;&amp;amp;(i=o.set(e,r,n))!==t?i:e[n]=r:o&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in o&amp;amp;&amp;amp;null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode(&amp;quot;tabindex&amp;quot;);return n&amp;amp;&amp;amp;n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&amp;amp;&amp;amp;e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i=&amp;quot;boolean&amp;quot;==typeof r&amp;amp;&amp;amp;e.getAttribute(n),o=&amp;quot;boolean&amp;quot;==typeof r?K&amp;amp;&amp;amp;Q?null!=i:G.test(n)?e[b.camelCase(&amp;quot;default-&amp;quot;+n)]:!!i:e.getAttributeNode(n);return o&amp;amp;&amp;amp;o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&amp;amp;&amp;amp;Q||!G.test(n)?e.setAttribute(!Q&amp;amp;&amp;amp;b.propFix[n]||n,n):e[b.camelCase(&amp;quot;default-&amp;quot;+n)]=e[n]=!0,n}},K&amp;amp;&amp;amp;Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,&amp;quot;input&amp;quot;)?e.defaultValue:r&amp;amp;&amp;amp;r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,&amp;quot;input&amp;quot;)?(e.defaultValue=n,t):I&amp;amp;&amp;amp;I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&amp;amp;&amp;amp;(&amp;quot;id&amp;quot;===n||&amp;quot;name&amp;quot;===n||&amp;quot;coords&amp;quot;===n?&amp;quot;&amp;quot;!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=&amp;quot;&amp;quot;,&amp;quot;value&amp;quot;===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,&amp;quot;&amp;quot;===t?!1:t,n)}},b.each([&amp;quot;width&amp;quot;,&amp;quot;height&amp;quot;],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return&amp;quot;&amp;quot;===r?(e.setAttribute(n,&amp;quot;auto&amp;quot;),r):t}})})),b.support.hrefNormalized||(b.each([&amp;quot;href&amp;quot;,&amp;quot;src&amp;quot;,&amp;quot;width&amp;quot;,&amp;quot;height&amp;quot;],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each([&amp;quot;href&amp;quot;,&amp;quot;src&amp;quot;],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+&amp;quot;&amp;quot;}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;(t.selectedIndex,t.parentNode&amp;amp;&amp;amp;t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype=&amp;quot;encoding&amp;quot;),b.support.checkOn||b.each([&amp;quot;radio&amp;quot;,&amp;quot;checkbox&amp;quot;],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute(&amp;quot;value&amp;quot;)?&amp;quot;on&amp;quot;:e.value}}}),b.each([&amp;quot;radio&amp;quot;,&amp;quot;checkbox&amp;quot;],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)&amp;gt;=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&amp;amp;&amp;amp;(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&amp;amp;&amp;amp;b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||&amp;quot;&amp;quot;).match(w)||[&amp;quot;&amp;quot;],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&amp;amp;&amp;amp;b.expr.match.needsContext.test(a),namespace:m.join(&amp;quot;.&amp;quot;)},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&amp;amp;&amp;amp;p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&amp;amp;&amp;amp;e.attachEvent(&amp;quot;on&amp;quot;+g,f))),p.add&amp;amp;&amp;amp;(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&amp;amp;&amp;amp;b._data(e);if(m&amp;amp;&amp;amp;(c=m.events)){t=(t||&amp;quot;&amp;quot;).match(w)||[&amp;quot;&amp;quot;],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&amp;amp;&amp;amp;RegExp(&amp;quot;(^|\\.)&amp;quot;+h.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;),u=o=f.length;while(o--)a=f[o],!i&amp;amp;&amp;amp;g!==a.origType||n&amp;amp;&amp;amp;n.guid!==a.guid||s&amp;amp;&amp;amp;!s.test(a.namespace)||r&amp;amp;&amp;amp;r!==a.selector&amp;amp;&amp;amp;(&amp;quot;**&amp;quot;!==r||!a.selector)||(f.splice(o,1),a.selector&amp;amp;&amp;amp;f.delegateCount--,p.remove&amp;amp;&amp;amp;p.remove.call(e,a));u&amp;amp;&amp;amp;!f.length&amp;amp;&amp;amp;(p.teardown&amp;amp;&amp;amp;p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&amp;amp;&amp;amp;(delete m.handle,b._removeData(e,&amp;quot;events&amp;quot;))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,&amp;quot;type&amp;quot;)?n.type:n,m=y.call(n,&amp;quot;namespace&amp;quot;)?n.namespace.split(&amp;quot;.&amp;quot;):[];if(l=f=i=i||o,3!==i.nodeType&amp;amp;&amp;amp;8!==i.nodeType&amp;amp;&amp;amp;!nt.test(g+b.event.triggered)&amp;amp;&amp;amp;(g.indexOf(&amp;quot;.&amp;quot;)&amp;gt;=0&amp;amp;&amp;amp;(m=g.split(&amp;quot;.&amp;quot;),g=m.shift(),m.sort()),u=0&amp;gt;g.indexOf(&amp;quot;:&amp;quot;)&amp;amp;&amp;amp;&amp;quot;on&amp;quot;+g,n=n[b.expando]?n:new b.Event(g,&amp;quot;object&amp;quot;==typeof n&amp;amp;&amp;amp;n),n.isTrigger=!0,n.namespace=m.join(&amp;quot;.&amp;quot;),n.namespace_re=n.namespace?RegExp(&amp;quot;(^|\\.)&amp;quot;+m.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&amp;amp;&amp;amp;!p.noBubble&amp;amp;&amp;amp;!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&amp;amp;&amp;amp;h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&amp;amp;&amp;amp;!n.isPropagationStopped())n.type=d&amp;gt;1?c:p.bindType||g,s=(b._data(l,&amp;quot;events&amp;quot;)||{})[n.type]&amp;amp;&amp;amp;b._data(l,&amp;quot;handle&amp;quot;),s&amp;amp;&amp;amp;s.apply(l,r),s=u&amp;amp;&amp;amp;l[u],s&amp;amp;&amp;amp;b.acceptData(l)&amp;amp;&amp;amp;s.apply&amp;amp;&amp;amp;s.apply(l,r)===!1&amp;amp;&amp;amp;n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&amp;amp;&amp;amp;p._default.apply(i.ownerDocument,r)!==!1||&amp;quot;click&amp;quot;===g&amp;amp;&amp;amp;b.nodeName(i,&amp;quot;a&amp;quot;)||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&amp;amp;&amp;amp;(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&amp;amp;&amp;amp;(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,&amp;quot;events&amp;quot;)||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&amp;amp;&amp;amp;!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&amp;amp;&amp;amp;!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&amp;amp;&amp;amp;(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&amp;amp;&amp;amp;(e.result=r)===!1&amp;amp;&amp;amp;(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&amp;amp;&amp;amp;c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&amp;amp;&amp;amp;l.nodeType&amp;amp;&amp;amp;(!e.button||&amp;quot;click&amp;quot;!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&amp;amp;&amp;amp;(l.disabled!==!0||&amp;quot;click&amp;quot;!==e.type)){for(o=[],a=0;u&amp;gt;a;a++)i=n[a],r=i.selector+&amp;quot; &amp;quot;,o[r]===t&amp;amp;&amp;amp;(o[r]=i.needsContext?b(r,this).index(l)&amp;gt;=0:b.find(r,this,null,[l]).length),o[r]&amp;amp;&amp;amp;o.push(i);o.length&amp;amp;&amp;amp;s.push({elem:l,handlers:o})}return n.length&amp;gt;u&amp;amp;&amp;amp;s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&amp;amp;&amp;amp;(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:&amp;quot;altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which&amp;quot;.split(&amp;quot; &amp;quot;),fixHooks:{},keyHooks:{props:&amp;quot;char charCode key keyCode&amp;quot;.split(&amp;quot; &amp;quot;),filter:function(e,t){return null==e.which&amp;amp;&amp;amp;(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:&amp;quot;button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement&amp;quot;.split(&amp;quot; &amp;quot;),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&amp;amp;&amp;amp;null!=n.clientX&amp;amp;&amp;amp;(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&amp;amp;&amp;amp;a.scrollLeft||r&amp;amp;&amp;amp;r.scrollLeft||0)-(a&amp;amp;&amp;amp;a.clientLeft||r&amp;amp;&amp;amp;r.clientLeft||0),e.pageY=n.clientY+(a&amp;amp;&amp;amp;a.scrollTop||r&amp;amp;&amp;amp;r.scrollTop||0)-(a&amp;amp;&amp;amp;a.clientTop||r&amp;amp;&amp;amp;r.clientTop||0)),!e.relatedTarget&amp;amp;&amp;amp;u&amp;amp;&amp;amp;(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&amp;amp;s?1:2&amp;amp;s?3:4&amp;amp;s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;&amp;quot;checkbox&amp;quot;===this.type&amp;amp;&amp;amp;this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&amp;amp;&amp;amp;this.focus)try{return this.focus(),!1}catch(e){}},delegateType:&amp;quot;focusin&amp;quot;},blur:{trigger:function(){return this===o.activeElement&amp;amp;&amp;amp;this.blur?(this.blur(),!1):t},delegateType:&amp;quot;focusout&amp;quot;},beforeunload:{postDispatch:function(e){e.result!==t&amp;amp;&amp;amp;(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&amp;amp;&amp;amp;n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&amp;amp;&amp;amp;e.removeEventListener(t,n,!1)}:function(e,t,n){var r=&amp;quot;on&amp;quot;+t;e.detachEvent&amp;amp;&amp;amp;(typeof e[r]===i&amp;amp;&amp;amp;(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&amp;amp;&amp;amp;e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&amp;amp;&amp;amp;e.getPreventDefault()?it:ot):this.type=e,n&amp;amp;&amp;amp;b.extend(this,n),this.timeStamp=e&amp;amp;&amp;amp;e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&amp;amp;&amp;amp;(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&amp;amp;&amp;amp;(e.stopPropagation&amp;amp;&amp;amp;e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:&amp;quot;mouseover&amp;quot;,mouseleave:&amp;quot;mouseout&amp;quot;},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;&lt;br /&gt;
return(!i||i!==r&amp;amp;&amp;amp;!b.contains(r,i))&amp;amp;&amp;amp;(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,&amp;quot;form&amp;quot;)?!1:(b.event.add(this,&amp;quot;click._submit keypress._submit&amp;quot;,function(e){var n=e.target,r=b.nodeName(n,&amp;quot;input&amp;quot;)||b.nodeName(n,&amp;quot;button&amp;quot;)?n.form:t;r&amp;amp;&amp;amp;!b._data(r,&amp;quot;submitBubbles&amp;quot;)&amp;amp;&amp;amp;(b.event.add(r,&amp;quot;submit._submit&amp;quot;,function(e){e._submit_bubble=!0}),b._data(r,&amp;quot;submitBubbles&amp;quot;,!0))}),t)},postDispatch:function(e){e._submit_bubble&amp;amp;&amp;amp;(delete e._submit_bubble,this.parentNode&amp;amp;&amp;amp;!e.isTrigger&amp;amp;&amp;amp;b.event.simulate(&amp;quot;submit&amp;quot;,this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,&amp;quot;form&amp;quot;)?!1:(b.event.remove(this,&amp;quot;._submit&amp;quot;),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?((&amp;quot;checkbox&amp;quot;===this.type||&amp;quot;radio&amp;quot;===this.type)&amp;amp;&amp;amp;(b.event.add(this,&amp;quot;propertychange._change&amp;quot;,function(e){&amp;quot;checked&amp;quot;===e.originalEvent.propertyName&amp;amp;&amp;amp;(this._just_changed=!0)}),b.event.add(this,&amp;quot;click._change&amp;quot;,function(e){this._just_changed&amp;amp;&amp;amp;!e.isTrigger&amp;amp;&amp;amp;(this._just_changed=!1),b.event.simulate(&amp;quot;change&amp;quot;,this,e,!0)})),!1):(b.event.add(this,&amp;quot;beforeactivate._change&amp;quot;,function(e){var t=e.target;Z.test(t.nodeName)&amp;amp;&amp;amp;!b._data(t,&amp;quot;changeBubbles&amp;quot;)&amp;amp;&amp;amp;(b.event.add(t,&amp;quot;change._change&amp;quot;,function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate(&amp;quot;change&amp;quot;,this.parentNode,e,!0)}),b._data(t,&amp;quot;changeBubbles&amp;quot;,!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||&amp;quot;radio&amp;quot;!==n.type&amp;amp;&amp;amp;&amp;quot;checkbox&amp;quot;!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,&amp;quot;._change&amp;quot;),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:&amp;quot;focusin&amp;quot;,blur:&amp;quot;focusout&amp;quot;},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&amp;amp;&amp;amp;o.addEventListener(e,r,!0)},teardown:function(){0===--n&amp;amp;&amp;amp;o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if(&amp;quot;object&amp;quot;==typeof e){&amp;quot;string&amp;quot;!=typeof n&amp;amp;&amp;amp;(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&amp;amp;&amp;amp;null==i?(i=n,r=n=t):null==i&amp;amp;&amp;amp;(&amp;quot;string&amp;quot;==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&amp;amp;&amp;amp;(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&amp;amp;&amp;amp;e.preventDefault&amp;amp;&amp;amp;e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+&amp;quot;.&amp;quot;+i.namespace:i.origType,i.selector,i.handler),this;if(&amp;quot;object&amp;quot;==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||&amp;quot;function&amp;quot;==typeof n)&amp;amp;&amp;amp;(r=n,n=t),r===!1&amp;amp;&amp;amp;(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,&amp;quot;**&amp;quot;):this.off(t,e||&amp;quot;**&amp;quot;,n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x=&amp;quot;sizzle&amp;quot;+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1&amp;lt;&amp;lt;31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n&amp;gt;t;t++)if(this[t]===e)return t;return-1},_=&amp;quot;[\\x20\\t\\r\\n\\f]&amp;quot;,F=&amp;quot;(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+&amp;quot;,O=F.replace(&amp;quot;w&amp;quot;,&amp;quot;w#&amp;quot;),B=&amp;quot;([*^$|!~]?=)&amp;quot;,P=&amp;quot;\\[&amp;quot;+_+&amp;quot;*(&amp;quot;+F+&amp;quot;)&amp;quot;+_+&amp;quot;*(?:&amp;quot;+B+_+&amp;quot;*(?:([&#039;\&amp;quot;])((?:\\\\.|[^\\\\])*?)\\3|(&amp;quot;+O+&amp;quot;)|)|)&amp;quot;+_+&amp;quot;*\\]&amp;quot;,R=&amp;quot;:(&amp;quot;+F+&amp;quot;)(?:\\((([&#039;\&amp;quot;])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|&amp;quot;+P.replace(3,8)+&amp;quot;)*)|.*)\\)|)&amp;quot;,W=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;+|((?:^|[^\\\\])(?:\\\\.)*)&amp;quot;+_+&amp;quot;+$&amp;quot;,&amp;quot;g&amp;quot;),$=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*,&amp;quot;+_+&amp;quot;*&amp;quot;),I=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*([\\x20\\t\\r\\n\\f&amp;gt;+~])&amp;quot;+_+&amp;quot;*&amp;quot;),z=RegExp(R),X=RegExp(&amp;quot;^&amp;quot;+O+&amp;quot;$&amp;quot;),U={ID:RegExp(&amp;quot;^#(&amp;quot;+F+&amp;quot;)&amp;quot;),CLASS:RegExp(&amp;quot;^\\.(&amp;quot;+F+&amp;quot;)&amp;quot;),NAME:RegExp(&amp;quot;^\\[name=[&#039;\&amp;quot;]?(&amp;quot;+F+&amp;quot;)[&#039;\&amp;quot;]?\\]&amp;quot;),TAG:RegExp(&amp;quot;^(&amp;quot;+F.replace(&amp;quot;w&amp;quot;,&amp;quot;w*&amp;quot;)+&amp;quot;)&amp;quot;),ATTR:RegExp(&amp;quot;^&amp;quot;+P),PSEUDO:RegExp(&amp;quot;^&amp;quot;+R),CHILD:RegExp(&amp;quot;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(&amp;quot;+_+&amp;quot;*(even|odd|(([+-]|)(\\d*)n|)&amp;quot;+_+&amp;quot;*(?:([+-]|)&amp;quot;+_+&amp;quot;*(\\d+)|))&amp;quot;+_+&amp;quot;*\\)|)&amp;quot;,&amp;quot;i&amp;quot;),needsContext:RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*[&amp;gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(&amp;quot;+_+&amp;quot;*((?:-\\d)?\\d*)&amp;quot;+_+&amp;quot;*\\)|)(?=[^-]|$)&amp;quot;,&amp;quot;i&amp;quot;)},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/&#039;|\\/g,Z=/\=[\x20\t\r\n\f]*([^&#039;&amp;quot;\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n=&amp;quot;0x&amp;quot;+t-65536;return n!==n?t:0&amp;gt;n?String.fromCharCode(n+65536):String.fromCharCode(55296|n&amp;gt;&amp;gt;10,56320|1023&amp;amp;n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+&amp;quot;&amp;quot;)}function it(){var e,t=[];return e=function(n,r){return t.push(n+=&amp;quot; &amp;quot;)&amp;gt;i.cacheLength&amp;amp;&amp;amp;delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement(&amp;quot;div&amp;quot;);try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&amp;amp;&amp;amp;c(t),t=t||p,n=n||[],!e||&amp;quot;string&amp;quot;!=typeof e)return n;if(1!==(s=t.nodeType)&amp;amp;&amp;amp;9!==s)return[];if(!d&amp;amp;&amp;amp;!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&amp;amp;&amp;amp;(o=t.ownerDocument.getElementById(a))&amp;amp;&amp;amp;y(t,o)&amp;amp;&amp;amp;o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&amp;amp;&amp;amp;T.getByClassName&amp;amp;&amp;amp;t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&amp;amp;&amp;amp;!h.test(e)){if(f=!0,g=x,m=t,v=9===s&amp;amp;&amp;amp;e,1===s&amp;amp;&amp;amp;&amp;quot;object&amp;quot;!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute(&amp;quot;id&amp;quot;))?g=f.replace(K,&amp;quot;\\$&amp;amp;&amp;quot;):t.setAttribute(&amp;quot;id&amp;quot;,g),g=&amp;quot;[id=&#039;&amp;quot;+g+&amp;quot;&#039;] &amp;quot;,u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&amp;amp;&amp;amp;t.parentNode||t,v=l.join(&amp;quot;,&amp;quot;)}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute(&amp;quot;id&amp;quot;)}}}return wt(e.replace(W,&amp;quot;$1&amp;quot;),t,n,r)}a=st.isXML=function(e){var t=e&amp;amp;&amp;amp;(e.ownerDocument||e).documentElement;return t?&amp;quot;HTML&amp;quot;!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&amp;amp;&amp;amp;9===n.nodeType&amp;amp;&amp;amp;n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment(&amp;quot;&amp;quot;)),!e.getElementsByTagName(&amp;quot;*&amp;quot;).length}),T.attributes=at(function(e){e.innerHTML=&amp;quot;&amp;lt;select&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;;var t=typeof e.lastChild.getAttribute(&amp;quot;multiple&amp;quot;);return&amp;quot;boolean&amp;quot;!==t&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!==t}),T.getByClassName=at(function(e){return e.innerHTML=&amp;quot;&amp;lt;div class=&#039;hidden e&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&#039;hidden&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,e.getElementsByClassName&amp;amp;&amp;amp;e.getElementsByClassName(&amp;quot;e&amp;quot;).length?(e.lastChild.className=&amp;quot;e&amp;quot;,2===e.getElementsByClassName(&amp;quot;e&amp;quot;).length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML=&amp;quot;&amp;lt;a name=&#039;&amp;quot;+x+&amp;quot;&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;div name=&#039;&amp;quot;+x+&amp;quot;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,f.insertBefore(e,f.firstChild);var t=n.getElementsByName&amp;amp;&amp;amp;n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML=&amp;quot;&amp;lt;a href=&#039;#&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;quot;,e.firstChild&amp;amp;&amp;amp;typeof e.firstChild.getAttribute!==A&amp;amp;&amp;amp;&amp;quot;#&amp;quot;===e.firstChild.getAttribute(&amp;quot;href&amp;quot;)})?{}:{href:function(e){return e.getAttribute(&amp;quot;href&amp;quot;,2)},type:function(e){return e.getAttribute(&amp;quot;type&amp;quot;)}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&amp;amp;&amp;amp;!d){var n=t.getElementById(e);return n&amp;amp;&amp;amp;n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute(&amp;quot;id&amp;quot;)===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&amp;amp;&amp;amp;!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&amp;amp;&amp;amp;r.getAttributeNode(&amp;quot;id&amp;quot;).value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&amp;amp;&amp;amp;e.getAttributeNode(&amp;quot;id&amp;quot;);return n&amp;amp;&amp;amp;n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(&amp;quot;*&amp;quot;===e){while(n=o[i++])1===n.nodeType&amp;amp;&amp;amp;r.push(n);return r}return o},i.find.NAME=T.getByName&amp;amp;&amp;amp;function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&amp;amp;&amp;amp;function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[&amp;quot;:focus&amp;quot;],(T.qsa=rt(n.querySelectorAll))&amp;amp;&amp;amp;(at(function(e){e.innerHTML=&amp;quot;&amp;lt;select&amp;gt;&amp;lt;option selected=&#039;&#039;&amp;gt;&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;,e.querySelectorAll(&amp;quot;[selected]&amp;quot;).length||h.push(&amp;quot;\\[&amp;quot;+_+&amp;quot;*(?:checked|disabled|ismap|multiple|readonly|selected|value)&amp;quot;),e.querySelectorAll(&amp;quot;:checked&amp;quot;).length||h.push(&amp;quot;:checked&amp;quot;)}),at(function(e){e.innerHTML=&amp;quot;&amp;lt;input type=&#039;hidden&#039; i=&#039;&#039;/&amp;gt;&amp;quot;,e.querySelectorAll(&amp;quot;[i^=&#039;&#039;]&amp;quot;).length&amp;amp;&amp;amp;h.push(&amp;quot;[*^$]=&amp;quot;+_+&amp;quot;*(?:\&amp;quot;\&amp;quot;|&#039;&#039;)&amp;quot;),e.querySelectorAll(&amp;quot;:enabled&amp;quot;).length||h.push(&amp;quot;:enabled&amp;quot;,&amp;quot;:disabled&amp;quot;),e.querySelectorAll(&amp;quot;*,:x&amp;quot;),h.push(&amp;quot;,.*:&amp;quot;)})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&amp;amp;&amp;amp;at(function(e){T.disconnectedMatch=m.call(e,&amp;quot;div&amp;quot;),m.call(e,&amp;quot;[s!=&#039;&#039;]:x&amp;quot;),g.push(&amp;quot;!=&amp;quot;,R)}),h=RegExp(h.join(&amp;quot;|&amp;quot;)),g=RegExp(g.join(&amp;quot;|&amp;quot;)),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&amp;amp;&amp;amp;t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&amp;amp;&amp;amp;16&amp;amp;e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&amp;amp;&amp;amp;e.compareDocumentPosition&amp;amp;&amp;amp;e.compareDocumentPosition(t))?1&amp;amp;r||e.parentNode&amp;amp;&amp;amp;11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&amp;amp;r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),t=t.replace(Z,&amp;quot;=&#039;$1&#039;]&amp;quot;),!(!T.matchesSelector||d||g&amp;amp;&amp;amp;g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&amp;amp;&amp;amp;11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length&amp;gt;0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&amp;amp;&amp;amp;e[t]===!0?t:n&amp;amp;&amp;amp;n.specified?n.value:null},st.error=function(e){throw Error(&amp;quot;Syntax error, unrecognized expression: &amp;quot;+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&amp;amp;&amp;amp;(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&amp;amp;&amp;amp;e,r=n&amp;amp;&amp;amp;(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===n&amp;amp;&amp;amp;t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return(&amp;quot;input&amp;quot;===n||&amp;quot;button&amp;quot;===n)&amp;amp;&amp;amp;t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&amp;amp;&amp;amp;(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n=&amp;quot;&amp;quot;,r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(&amp;quot;string&amp;quot;==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{&amp;quot;&amp;gt;&amp;quot;:{dir:&amp;quot;parentNode&amp;quot;,first:!0},&amp;quot; &amp;quot;:{dir:&amp;quot;parentNode&amp;quot;},&amp;quot;+&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;,first:!0},&amp;quot;~&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||&amp;quot;&amp;quot;).replace(et,tt),&amp;quot;~=&amp;quot;===e[2]&amp;amp;&amp;amp;(e[3]=&amp;quot; &amp;quot;+e[3]+&amp;quot; &amp;quot;),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),&amp;quot;nth&amp;quot;===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(&amp;quot;even&amp;quot;===e[3]||&amp;quot;odd&amp;quot;===e[3])),e[5]=+(e[7]+e[8]||&amp;quot;odd&amp;quot;===e[3])):e[3]&amp;amp;&amp;amp;st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&amp;amp;&amp;amp;e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&amp;amp;&amp;amp;z.test(n)&amp;amp;&amp;amp;(t=ft(n,!0))&amp;amp;&amp;amp;(t=n.indexOf(&amp;quot;)&amp;quot;,n.length-t)-n.length)&amp;amp;&amp;amp;(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return&amp;quot;*&amp;quot;===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&amp;amp;&amp;amp;t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+&amp;quot; &amp;quot;];return t||(t=RegExp(&amp;quot;(^|&amp;quot;+_+&amp;quot;)&amp;quot;+e+&amp;quot;(&amp;quot;+_+&amp;quot;|$)&amp;quot;))&amp;amp;&amp;amp;k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&amp;amp;&amp;amp;e.getAttribute(&amp;quot;class&amp;quot;)||&amp;quot;&amp;quot;)})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?&amp;quot;!=&amp;quot;===t:t?(i+=&amp;quot;&amp;quot;,&amp;quot;=&amp;quot;===t?i===n:&amp;quot;!=&amp;quot;===t?i!==n:&amp;quot;^=&amp;quot;===t?n&amp;amp;&amp;amp;0===i.indexOf(n):&amp;quot;*=&amp;quot;===t?n&amp;amp;&amp;amp;i.indexOf(n)&amp;gt;-1:&amp;quot;$=&amp;quot;===t?n&amp;amp;&amp;amp;i.slice(-n.length)===n:&amp;quot;~=&amp;quot;===t?(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;).indexOf(n)&amp;gt;-1:&amp;quot;|=&amp;quot;===t?i===n||i.slice(0,n.length+1)===n+&amp;quot;-&amp;quot;:!1):!0}},CHILD:function(e,t,n,r,i){var o=&amp;quot;nth&amp;quot;!==e.slice(0,3),a=&amp;quot;last&amp;quot;!==e.slice(-4),s=&amp;quot;of-type&amp;quot;===t;return 1===r&amp;amp;&amp;amp;0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?&amp;quot;nextSibling&amp;quot;:&amp;quot;previousSibling&amp;quot;,m=t.parentNode,y=s&amp;amp;&amp;amp;t.nodeName.toLowerCase(),v=!u&amp;amp;&amp;amp;!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=&amp;quot;only&amp;quot;===e&amp;amp;&amp;amp;!h&amp;amp;&amp;amp;&amp;quot;nextSibling&amp;quot;}return!0}if(h=[a?m.firstChild:m.lastChild],a&amp;amp;&amp;amp;v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&amp;amp;&amp;amp;l[1],f=l[0]===N&amp;amp;&amp;amp;l[2],p=d&amp;amp;&amp;amp;m.childNodes[d];while(p=++d&amp;amp;&amp;amp;p&amp;amp;&amp;amp;p[g]||(f=d=0)||h.pop())if(1===p.nodeType&amp;amp;&amp;amp;++f&amp;amp;&amp;amp;p===t){c[e]=[N,d,f];break}}else if(v&amp;amp;&amp;amp;(l=(t[x]||(t[x]={}))[e])&amp;amp;&amp;amp;l[0]===N)f=l[1];else while(p=++d&amp;amp;&amp;amp;p&amp;amp;&amp;amp;p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&amp;amp;&amp;amp;++f&amp;amp;&amp;amp;(v&amp;amp;&amp;amp;((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&amp;amp;&amp;amp;f/r&amp;gt;=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error(&amp;quot;unsupported pseudo: &amp;quot;+e);return r[x]?r(t):r.length&amp;gt;1?(n=[e,e,&amp;quot;&amp;quot;,t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,&amp;quot;$1&amp;quot;));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&amp;amp;&amp;amp;(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length&amp;gt;0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)&amp;gt;-1}}),lang:ot(function(e){return X.test(e||&amp;quot;&amp;quot;)||st.error(&amp;quot;unsupported lang: &amp;quot;+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute(&amp;quot;xml:lang&amp;quot;)||t.getAttribute(&amp;quot;lang&amp;quot;):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+&amp;quot;-&amp;quot;);while((t=t.parentNode)&amp;amp;&amp;amp;1===t.nodeType);return!1}}),target:function(t){var n=e.location&amp;amp;&amp;amp;e.location.hash;return n&amp;amp;&amp;amp;n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&amp;amp;&amp;amp;(!p.hasFocus||p.hasFocus())&amp;amp;&amp;amp;!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===t&amp;amp;&amp;amp;!!e.checked||&amp;quot;option&amp;quot;===t&amp;amp;&amp;amp;!!e.selected},selected:function(e){return e.parentNode&amp;amp;&amp;amp;e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName&amp;gt;&amp;quot;@&amp;quot;||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===t&amp;amp;&amp;amp;&amp;quot;button&amp;quot;===e.type||&amp;quot;button&amp;quot;===t},text:function(e){var t;return&amp;quot;input&amp;quot;===e.nodeName.toLowerCase()&amp;amp;&amp;amp;&amp;quot;text&amp;quot;===e.type&amp;amp;&amp;amp;(null==(t=e.getAttribute(&amp;quot;type&amp;quot;))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0&amp;gt;n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t&amp;gt;n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t&amp;gt;n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0&amp;gt;n?n+t:n;for(;--r&amp;gt;=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0&amp;gt;n?n+t:n;for(;t&amp;gt;++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+&amp;quot; &amp;quot;];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&amp;amp;&amp;amp;(r&amp;amp;&amp;amp;(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&amp;amp;&amp;amp;(n=r.shift(),o.push({value:n,type:r[0].replace(W,&amp;quot; &amp;quot;)}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&amp;amp;&amp;amp;!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r=&amp;quot;&amp;quot;;for(;n&amp;gt;t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&amp;amp;&amp;amp;&amp;quot;parentNode&amp;quot;===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+&amp;quot; &amp;quot;+a;if(s){while(t=t[i])if((1===t.nodeType||o)&amp;amp;&amp;amp;e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&amp;amp;&amp;amp;l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length&amp;gt;1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u&amp;gt;s;s++)(o=e[s])&amp;amp;&amp;amp;(!n||n(o,r,i))&amp;amp;&amp;amp;(a.push(o),l&amp;amp;&amp;amp;t.push(s));return a}function yt(e,t,n,r,i,o){return r&amp;amp;&amp;amp;!r[x]&amp;amp;&amp;amp;(r=yt(r)),i&amp;amp;&amp;amp;!i[x]&amp;amp;&amp;amp;(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||&amp;quot;*&amp;quot;,s.nodeType?[s]:s,[]),m=!e||!o&amp;amp;&amp;amp;t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&amp;amp;&amp;amp;n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&amp;amp;&amp;amp;(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&amp;amp;&amp;amp;l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&amp;amp;&amp;amp;(l=i?M.call(o,p):f[c])&amp;gt;-1&amp;amp;&amp;amp;(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[&amp;quot; &amp;quot;],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)&amp;gt;-1},s,!0),f=[function(e,n,r){return!a&amp;amp;&amp;amp;(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o&amp;gt;u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o&amp;gt;r;r++)if(i.relative[e[r].type])break;return yt(u&amp;gt;1&amp;amp;&amp;amp;gt(f),u&amp;gt;1&amp;amp;&amp;amp;dt(e.slice(0,u-1)).replace(W,&amp;quot;$1&amp;quot;),n,r&amp;gt;u&amp;amp;&amp;amp;vt(e.slice(u,r)),o&amp;gt;r&amp;amp;&amp;amp;vt(e=e.slice(r)),o&amp;gt;r&amp;amp;&amp;amp;dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length&amp;gt;0,a=e.length&amp;gt;0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b=&amp;quot;0&amp;quot;,x=s&amp;amp;&amp;amp;[],w=null!=d,T=l,C=s||a&amp;amp;&amp;amp;i.find.TAG(&amp;quot;*&amp;quot;,d&amp;amp;&amp;amp;u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&amp;amp;&amp;amp;(l=u!==p&amp;amp;&amp;amp;u,r=n);null!=(h=C[b]);b++){if(a&amp;amp;&amp;amp;h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&amp;amp;&amp;amp;(N=k,r=++n)}o&amp;amp;&amp;amp;((h=!m&amp;amp;&amp;amp;h)&amp;amp;&amp;amp;v--,s&amp;amp;&amp;amp;x.push(h))}if(v+=b,o&amp;amp;&amp;amp;b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v&amp;gt;0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&amp;amp;&amp;amp;!s&amp;amp;&amp;amp;y.length&amp;gt;0&amp;amp;&amp;amp;v+t.length&amp;gt;1&amp;amp;&amp;amp;st.uniqueSort(f)}return w&amp;amp;&amp;amp;(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+&amp;quot; &amp;quot;];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i&amp;gt;r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&amp;amp;&amp;amp;1===p.length){if(a=p[0]=p[0].slice(0),a.length&amp;gt;2&amp;amp;&amp;amp;&amp;quot;ID&amp;quot;===(u=a[0]).type&amp;amp;&amp;amp;9===t.nodeType&amp;amp;&amp;amp;!d&amp;amp;&amp;amp;i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&amp;amp;&amp;amp;(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&amp;amp;&amp;amp;t.parentNode||t))){if(a.splice(o,1),e=r.length&amp;amp;&amp;amp;dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[&amp;quot;:&amp;quot;]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if(&amp;quot;string&amp;quot;!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i&amp;gt;t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i&amp;gt;t;t++)b.find(e,this[t],n);return n=this.pushStack(i&amp;gt;1?b.unique(n):n),n.selector=(this.selector?this.selector+&amp;quot; &amp;quot;:&amp;quot;&amp;quot;)+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r&amp;gt;t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&amp;amp;&amp;amp;(&amp;quot;string&amp;quot;==typeof e?lt.test(e)?b(e,this.context).index(this[0])&amp;gt;=0:b.filter(e,this).length&amp;gt;0:this.filter(e).length&amp;gt;0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||&amp;quot;string&amp;quot;!=typeof e?b(e,t||this.context):0;for(;i&amp;gt;r;r++){n=this[r];while(n&amp;amp;&amp;amp;n.ownerDocument&amp;amp;&amp;amp;n!==t&amp;amp;&amp;amp;11!==n.nodeType){if(a?a.index(n)&amp;gt;-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length&amp;gt;1?b.unique(o):o)},index:function(e){return e?&amp;quot;string&amp;quot;==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&amp;amp;&amp;amp;this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=&amp;quot;string&amp;quot;==typeof e?b(e,t):b.makeArray(e&amp;amp;&amp;amp;e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&amp;amp;&amp;amp;1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;11!==t.nodeType?t:null},parents:function(e){return b.dir(e,&amp;quot;parentNode&amp;quot;)},parentsUntil:function(e,t,n){return b.dir(e,&amp;quot;parentNode&amp;quot;,n)},next:function(e){return pt(e,&amp;quot;nextSibling&amp;quot;)},prev:function(e){return pt(e,&amp;quot;previousSibling&amp;quot;)},nextAll:function(e){return b.dir(e,&amp;quot;nextSibling&amp;quot;)},prevAll:function(e){return b.dir(e,&amp;quot;previousSibling&amp;quot;)},nextUntil:function(e,t,n){return b.dir(e,&amp;quot;nextSibling&amp;quot;,n)},prevUntil:function(e,t,n){return b.dir(e,&amp;quot;previousSibling&amp;quot;,n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,&amp;quot;iframe&amp;quot;)?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof r&amp;amp;&amp;amp;(i=b.filter(r,i)),i=this.length&amp;gt;1&amp;amp;&amp;amp;!ct[e]?b.unique(i):i,this.length&amp;gt;1&amp;amp;&amp;amp;st.test(e)&amp;amp;&amp;amp;(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&amp;amp;&amp;amp;(e=&amp;quot;:not(&amp;quot;+e+&amp;quot;)&amp;quot;),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&amp;amp;&amp;amp;9!==o.nodeType&amp;amp;&amp;amp;(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&amp;amp;&amp;amp;i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&amp;amp;&amp;amp;e!==t&amp;amp;&amp;amp;n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if(&amp;quot;string&amp;quot;==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)&amp;gt;=0===n})}function dt(e){var t=ht.split(&amp;quot;|&amp;quot;),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=&amp;quot;abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video&amp;quot;,gt=/ jQuery\d+=&amp;quot;(?:null|\d+)&amp;quot;/g,mt=RegExp(&amp;quot;&amp;lt;(?:&amp;quot;+ht+&amp;quot;)[\\s/&amp;gt;]&amp;quot;,&amp;quot;i&amp;quot;),yt=/^\s+/,vt=/&amp;lt;(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^&amp;gt;]*)\/&amp;gt;/gi,bt=/&amp;lt;([\w:]+)/,xt=/&amp;lt;tbody/i,wt=/&amp;lt;|&amp;amp;#?\w+;/,Tt=/&amp;lt;(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*&amp;lt;!(?:\[CDATA\[|--)|(?:\]\]|--)&amp;gt;\s*$/g,At={option:[1,&amp;quot;&amp;lt;select multiple=&#039;multiple&#039;&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/select&amp;gt;&amp;quot;],legend:[1,&amp;quot;&amp;lt;fieldset&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/fieldset&amp;gt;&amp;quot;],area:[1,&amp;quot;&amp;lt;map&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/map&amp;gt;&amp;quot;],param:[1,&amp;quot;&amp;lt;object&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/object&amp;gt;&amp;quot;],thead:[1,&amp;quot;&amp;lt;table&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;],tr:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],col:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;colgroup&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/colgroup&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],td:[3,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],_default:b.support.htmlSerialize?[0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]:[1,&amp;quot;X&amp;lt;div&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;]},jt=dt(o),Dt=jt.appendChild(o.createElement(&amp;quot;div&amp;quot;));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&amp;amp;&amp;amp;this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&amp;amp;&amp;amp;t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&amp;amp;&amp;amp;1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,&amp;quot;body&amp;quot;)||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&amp;amp;&amp;amp;this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&amp;amp;&amp;amp;this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length&amp;gt;0)&amp;amp;&amp;amp;(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&amp;amp;&amp;amp;(t&amp;amp;&amp;amp;b.contains(n.ownerDocument,n)&amp;amp;&amp;amp;Mt(Ot(n,&amp;quot;script&amp;quot;)),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&amp;amp;&amp;amp;b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&amp;amp;&amp;amp;b.nodeName(e,&amp;quot;select&amp;quot;)&amp;amp;&amp;amp;(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,&amp;quot;&amp;quot;):t;if(!(&amp;quot;string&amp;quot;!=typeof e||Tt.test(e)||!b.support.htmlSerialize&amp;amp;&amp;amp;mt.test(e)||!b.support.leadingWhitespace&amp;amp;&amp;amp;yt.test(e)||At[(bt.exec(e)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase()])){e=e.replace(vt,&amp;quot;&amp;lt;$1&amp;gt;&amp;lt;/$2&amp;gt;&amp;quot;);try{for(;i&amp;gt;r;r++)n=this[r]||{},1===n.nodeType&amp;amp;&amp;amp;(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&amp;amp;&amp;amp;this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||&amp;quot;string&amp;quot;==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&amp;amp;&amp;amp;(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1&amp;gt;=p||&amp;quot;string&amp;quot;!=typeof g||b.support.checkClone)&amp;amp;&amp;amp;Ct.test(g))return this.each(function(i){var o=d.eq(i);m&amp;amp;&amp;amp;(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&amp;amp;&amp;amp;(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&amp;amp;&amp;amp;(l=i),i)){for(n=n&amp;amp;&amp;amp;b.nodeName(i,&amp;quot;tr&amp;quot;),s=b.map(Ot(l,&amp;quot;script&amp;quot;),Ht),a=s.length;p&amp;gt;c;c++)o=l,c!==h&amp;amp;&amp;amp;(o=b.clone(o,!0,!0),a&amp;amp;&amp;amp;b.merge(s,Ot(o,&amp;quot;script&amp;quot;))),r.call(n&amp;amp;&amp;amp;b.nodeName(this[c],&amp;quot;table&amp;quot;)?Lt(this[c],&amp;quot;tbody&amp;quot;):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a&amp;gt;c;c++)o=s[c],kt.test(o.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;!b._data(o,&amp;quot;globalEval&amp;quot;)&amp;amp;&amp;amp;b.contains(u,o)&amp;amp;&amp;amp;(o.src?b.ajax({url:o.src,type:&amp;quot;GET&amp;quot;,dataType:&amp;quot;script&amp;quot;,async:!1,global:!1,&amp;quot;throws&amp;quot;:!0}):b.globalEval((o.text||o.textContent||o.innerHTML||&amp;quot;&amp;quot;).replace(St,&amp;quot;&amp;quot;)));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode(&amp;quot;type&amp;quot;);return e.type=(t&amp;amp;&amp;amp;t.specified)+&amp;quot;/&amp;quot;+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(&amp;quot;type&amp;quot;),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,&amp;quot;globalEval&amp;quot;,!t||b._data(t[r],&amp;quot;globalEval&amp;quot;))}function _t(e,t){if(1===t.nodeType&amp;amp;&amp;amp;b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i&amp;gt;r;r++)b.event.add(t,n,s[n][r])}a.data&amp;amp;&amp;amp;(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&amp;amp;&amp;amp;t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}&amp;quot;script&amp;quot;===n&amp;amp;&amp;amp;t.text!==e.text?(Ht(t).text=e.text,qt(t)):&amp;quot;object&amp;quot;===n?(t.parentNode&amp;amp;&amp;amp;(t.outerHTML=e.outerHTML),b.support.html5Clone&amp;amp;&amp;amp;e.innerHTML&amp;amp;&amp;amp;!b.trim(t.innerHTML)&amp;amp;&amp;amp;(t.innerHTML=e.innerHTML)):&amp;quot;input&amp;quot;===n&amp;amp;&amp;amp;Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&amp;amp;&amp;amp;(t.value=e.value)):&amp;quot;option&amp;quot;===n?t.defaultSelected=t.selected=e.defaultSelected:(&amp;quot;input&amp;quot;===n||&amp;quot;textarea&amp;quot;===n)&amp;amp;&amp;amp;(t.defaultValue=e.defaultValue)}}b.each({appendTo:&amp;quot;append&amp;quot;,prependTo:&amp;quot;prepend&amp;quot;,insertBefore:&amp;quot;before&amp;quot;,insertAfter:&amp;quot;after&amp;quot;,replaceAll:&amp;quot;replaceWith&amp;quot;},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a&amp;gt;=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||&amp;quot;*&amp;quot;):typeof e.querySelectorAll!==i?e.querySelectorAll(n||&amp;quot;*&amp;quot;):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&amp;amp;&amp;amp;b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&amp;amp;&amp;amp;(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test(&amp;quot;&amp;lt;&amp;quot;+e.nodeName+&amp;quot;&amp;gt;&amp;quot;)?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&amp;amp;&amp;amp;b.support.noCloneChecked||1!==e.nodeType&amp;amp;&amp;amp;11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&amp;amp;&amp;amp;Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,&amp;quot;script&amp;quot;),r.length&amp;gt;0&amp;amp;&amp;amp;Mt(r,!u&amp;amp;&amp;amp;Ot(e,&amp;quot;script&amp;quot;)),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p&amp;gt;h;h++)if(o=e[h],o||0===o)if(&amp;quot;object&amp;quot;===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(&amp;quot;div&amp;quot;)),u=(bt.exec(o)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,&amp;quot;&amp;lt;$1&amp;gt;&amp;lt;/$2&amp;gt;&amp;quot;)+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&amp;amp;&amp;amp;yt.test(o)&amp;amp;&amp;amp;d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o=&amp;quot;table&amp;quot;!==u||xt.test(o)?&amp;quot;&amp;lt;table&amp;gt;&amp;quot;!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&amp;amp;&amp;amp;o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],&amp;quot;tbody&amp;quot;)&amp;amp;&amp;amp;!l.childNodes.length&amp;amp;&amp;amp;o.removeChild(l)&lt;br /&gt;
}b.merge(d,s.childNodes),s.textContent=&amp;quot;&amp;quot;;while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&amp;amp;&amp;amp;f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,&amp;quot;input&amp;quot;),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&amp;amp;&amp;amp;(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),&amp;quot;script&amp;quot;),a&amp;amp;&amp;amp;Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&amp;amp;&amp;amp;(o=n[u],a=o&amp;amp;&amp;amp;l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&amp;amp;&amp;amp;(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(&amp;quot;^(&amp;quot;+x+&amp;quot;)(.*)$&amp;quot;,&amp;quot;i&amp;quot;),Yt=RegExp(&amp;quot;^(&amp;quot;+x+&amp;quot;)(?!px)[a-z%]+$&amp;quot;,&amp;quot;i&amp;quot;),Jt=RegExp(&amp;quot;^([+-])=(&amp;quot;+x+&amp;quot;)&amp;quot;,&amp;quot;i&amp;quot;),Gt={BODY:&amp;quot;block&amp;quot;},Qt={position:&amp;quot;absolute&amp;quot;,visibility:&amp;quot;hidden&amp;quot;,display:&amp;quot;block&amp;quot;},Kt={letterSpacing:0,fontWeight:400},Zt=[&amp;quot;Top&amp;quot;,&amp;quot;Right&amp;quot;,&amp;quot;Bottom&amp;quot;,&amp;quot;Left&amp;quot;],en=[&amp;quot;Webkit&amp;quot;,&amp;quot;O&amp;quot;,&amp;quot;Moz&amp;quot;,&amp;quot;ms&amp;quot;];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,&amp;quot;none&amp;quot;===b.css(e,&amp;quot;display&amp;quot;)||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s&amp;gt;a;a++)r=e[a],r.style&amp;amp;&amp;amp;(o[a]=b._data(r,&amp;quot;olddisplay&amp;quot;),n=r.style.display,t?(o[a]||&amp;quot;none&amp;quot;!==n||(r.style.display=&amp;quot;&amp;quot;),&amp;quot;&amp;quot;===r.style.display&amp;amp;&amp;amp;nn(r)&amp;amp;&amp;amp;(o[a]=b._data(r,&amp;quot;olddisplay&amp;quot;,un(r.nodeName)))):o[a]||(i=nn(r),(n&amp;amp;&amp;amp;&amp;quot;none&amp;quot;!==n||!i)&amp;amp;&amp;amp;b._data(r,&amp;quot;olddisplay&amp;quot;,i?n:b.css(r,&amp;quot;display&amp;quot;))));for(a=0;s&amp;gt;a;a++)r=e[a],r.style&amp;amp;&amp;amp;(t&amp;amp;&amp;amp;&amp;quot;none&amp;quot;!==r.style.display&amp;amp;&amp;amp;&amp;quot;&amp;quot;!==r.style.display||(r.style.display=t?o[a]||&amp;quot;&amp;quot;:&amp;quot;none&amp;quot;));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i&amp;gt;s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length&amp;gt;1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t=&amp;quot;boolean&amp;quot;==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,&amp;quot;opacity&amp;quot;);return&amp;quot;&amp;quot;===n?&amp;quot;1&amp;quot;:n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{&amp;quot;float&amp;quot;:b.support.cssFloat?&amp;quot;cssFloat&amp;quot;:&amp;quot;styleFloat&amp;quot;},style:function(e,n,r,i){if(e&amp;amp;&amp;amp;3!==e.nodeType&amp;amp;&amp;amp;8!==e.nodeType&amp;amp;&amp;amp;e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in s&amp;amp;&amp;amp;(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,&amp;quot;string&amp;quot;===a&amp;amp;&amp;amp;(o=Jt.exec(r))&amp;amp;&amp;amp;(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a=&amp;quot;number&amp;quot;),!(null==r||&amp;quot;number&amp;quot;===a&amp;amp;&amp;amp;isNaN(r)||(&amp;quot;number&amp;quot;!==a||b.cssNumber[u]||(r+=&amp;quot;px&amp;quot;),b.support.clearCloneStyle||&amp;quot;&amp;quot;!==r||0!==n.indexOf(&amp;quot;background&amp;quot;)||(l[n]=&amp;quot;inherit&amp;quot;),s&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in s&amp;amp;&amp;amp;(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in s&amp;amp;&amp;amp;(a=s.get(e,!0,r)),a===t&amp;amp;&amp;amp;(a=Wt(e,n,i)),&amp;quot;normal&amp;quot;===a&amp;amp;&amp;amp;n in Kt&amp;amp;&amp;amp;(a=Kt[n]),&amp;quot;&amp;quot;===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&amp;amp;&amp;amp;(&amp;quot;&amp;quot;!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&amp;amp;&amp;amp;Ut.test(n)&amp;amp;&amp;amp;(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&amp;amp;&amp;amp;(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&amp;amp;&amp;amp;l&amp;amp;&amp;amp;l[n]&amp;amp;&amp;amp;(u=l[n]),Yt.test(u)&amp;amp;&amp;amp;!zt.test(n)&amp;amp;&amp;amp;(i=l.left,o=e.runtimeStyle,a=o&amp;amp;&amp;amp;o.left,a&amp;amp;&amp;amp;(o.left=e.currentStyle.left),l.left=&amp;quot;fontSize&amp;quot;===n?&amp;quot;1em&amp;quot;:u,u=l.pixelLeft+&amp;quot;px&amp;quot;,l.left=i,a&amp;amp;&amp;amp;(o.left=a)),&amp;quot;&amp;quot;===u?&amp;quot;auto&amp;quot;:u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||&amp;quot;px&amp;quot;):t}function an(e,t,n,r,i){var o=n===(r?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;)?4:&amp;quot;width&amp;quot;===t?1:0,a=0;for(;4&amp;gt;o;o+=2)&amp;quot;margin&amp;quot;===n&amp;amp;&amp;amp;(a+=b.css(e,n+Zt[o],!0,i)),r?(&amp;quot;content&amp;quot;===n&amp;amp;&amp;amp;(a-=b.css(e,&amp;quot;padding&amp;quot;+Zt[o],!0,i)),&amp;quot;margin&amp;quot;!==n&amp;amp;&amp;amp;(a-=b.css(e,&amp;quot;border&amp;quot;+Zt[o]+&amp;quot;Width&amp;quot;,!0,i))):(a+=b.css(e,&amp;quot;padding&amp;quot;+Zt[o],!0,i),&amp;quot;padding&amp;quot;!==n&amp;amp;&amp;amp;(a+=b.css(e,&amp;quot;border&amp;quot;+Zt[o]+&amp;quot;Width&amp;quot;,!0,i)));return a}function sn(e,t,n){var r=!0,i=&amp;quot;width&amp;quot;===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===b.css(e,&amp;quot;boxSizing&amp;quot;,!1,o);if(0&amp;gt;=i||null==i){if(i=Wt(e,t,o),(0&amp;gt;i||null==i)&amp;amp;&amp;amp;(i=e.style[t]),Yt.test(i))return i;r=a&amp;amp;&amp;amp;(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;),r,o)+&amp;quot;px&amp;quot;}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),&amp;quot;none&amp;quot;!==n&amp;amp;&amp;amp;n||(Pt=(Pt||b(&amp;quot;&amp;lt;iframe frameborder=&#039;0&#039; width=&#039;0&#039; height=&#039;0&#039;/&amp;gt;&amp;quot;).css(&amp;quot;cssText&amp;quot;,&amp;quot;display:block !important&amp;quot;)).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(&amp;quot;&amp;lt;!doctype html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;quot;),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],&amp;quot;display&amp;quot;);return n.remove(),r}b.each([&amp;quot;height&amp;quot;,&amp;quot;width&amp;quot;],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&amp;amp;&amp;amp;Xt.test(b.css(e,&amp;quot;display&amp;quot;))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&amp;amp;&amp;amp;Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===b.css(e,&amp;quot;boxSizing&amp;quot;,!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&amp;amp;&amp;amp;e.currentStyle?e.currentStyle.filter:e.style.filter)||&amp;quot;&amp;quot;)?.01*parseFloat(RegExp.$1)+&amp;quot;&amp;quot;:t?&amp;quot;1&amp;quot;:&amp;quot;&amp;quot;},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?&amp;quot;alpha(opacity=&amp;quot;+100*t+&amp;quot;)&amp;quot;:&amp;quot;&amp;quot;,o=r&amp;amp;&amp;amp;r.filter||n.filter||&amp;quot;&amp;quot;;n.zoom=1,(t&amp;gt;=1||&amp;quot;&amp;quot;===t)&amp;amp;&amp;amp;&amp;quot;&amp;quot;===b.trim(o.replace($t,&amp;quot;&amp;quot;))&amp;amp;&amp;amp;n.removeAttribute&amp;amp;&amp;amp;(n.removeAttribute(&amp;quot;filter&amp;quot;),&amp;quot;&amp;quot;===t||r&amp;amp;&amp;amp;!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+&amp;quot; &amp;quot;+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:&amp;quot;inline-block&amp;quot;},Wt,[e,&amp;quot;marginRight&amp;quot;]):t}}),!b.support.pixelPosition&amp;amp;&amp;amp;b.fn.position&amp;amp;&amp;amp;b.each([&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+&amp;quot;px&amp;quot;:r):t}}})}),b.expr&amp;amp;&amp;amp;b.expr.filters&amp;amp;&amp;amp;(b.expr.filters.hidden=function(e){return 0&amp;gt;=e.offsetWidth&amp;amp;&amp;amp;0&amp;gt;=e.offsetHeight||!b.support.reliableHiddenOffsets&amp;amp;&amp;amp;&amp;quot;none&amp;quot;===(e.style&amp;amp;&amp;amp;e.style.display||b.css(e,&amp;quot;display&amp;quot;))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:&amp;quot;&amp;quot;,padding:&amp;quot;&amp;quot;,border:&amp;quot;Width&amp;quot;},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o=&amp;quot;string&amp;quot;==typeof n?n.split(&amp;quot; &amp;quot;):[n];for(;4&amp;gt;r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,&amp;quot;elements&amp;quot;);return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&amp;amp;&amp;amp;!b(this).is(&amp;quot;:disabled&amp;quot;)&amp;amp;&amp;amp;hn.test(this.nodeName)&amp;amp;&amp;amp;!dn.test(e)&amp;amp;&amp;amp;(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,&amp;quot;\r\n&amp;quot;)}}):{name:t.name,value:n.replace(fn,&amp;quot;\r\n&amp;quot;)}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?&amp;quot;&amp;quot;:t,i[i.length]=encodeURIComponent(e)+&amp;quot;=&amp;quot;+encodeURIComponent(t)};if(n===t&amp;amp;&amp;amp;(n=b.ajaxSettings&amp;amp;&amp;amp;b.ajaxSettings.traditional),b.isArray(e)||e.jquery&amp;amp;&amp;amp;!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(&amp;quot;&amp;amp;&amp;quot;).replace(cn,&amp;quot;+&amp;quot;)};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+&amp;quot;[&amp;quot;+(&amp;quot;object&amp;quot;==typeof i?t:&amp;quot;&amp;quot;)+&amp;quot;]&amp;quot;,i,n,r)});else if(n||&amp;quot;object&amp;quot;!==b.type(t))r(e,t);else for(i in t)gn(e+&amp;quot;[&amp;quot;+i+&amp;quot;]&amp;quot;,t[i],n,r)}b.each(&amp;quot;blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu&amp;quot;.split(&amp;quot; &amp;quot;),function(e,t){b.fn[t]=function(e,n){return arguments.length&amp;gt;0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&amp;amp;])_=[^&amp;amp;]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn=&amp;quot;*/&amp;quot;.concat(&amp;quot;*&amp;quot;);try{yn=a.href}catch(Ln){yn=o.createElement(&amp;quot;a&amp;quot;),yn.href=&amp;quot;&amp;quot;,yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){&amp;quot;string&amp;quot;!=typeof t&amp;amp;&amp;amp;(n=t,t=&amp;quot;*&amp;quot;);var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])&amp;quot;+&amp;quot;===r[0]?(r=r.slice(1)||&amp;quot;*&amp;quot;,(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return&amp;quot;string&amp;quot;!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o[&amp;quot;*&amp;quot;]&amp;amp;&amp;amp;s(&amp;quot;*&amp;quot;)}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&amp;amp;&amp;amp;((o[i]?e:r||(r={}))[i]=n[i]);return r&amp;amp;&amp;amp;b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if(&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(&amp;quot; &amp;quot;);return u&amp;gt;=0&amp;amp;&amp;amp;(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof n&amp;amp;&amp;amp;(a=&amp;quot;POST&amp;quot;),s.length&amp;gt;0&amp;amp;&amp;amp;b.ajax({url:e,type:a,dataType:&amp;quot;html&amp;quot;,data:n}).done(function(e){o=arguments,s.html(i?b(&amp;quot;&amp;lt;div&amp;gt;&amp;quot;).append(b.parseHTML(e)).find(i):e)}).complete(r&amp;amp;&amp;amp;function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each([&amp;quot;ajaxStart&amp;quot;,&amp;quot;ajaxStop&amp;quot;,&amp;quot;ajaxComplete&amp;quot;,&amp;quot;ajaxError&amp;quot;,&amp;quot;ajaxSuccess&amp;quot;,&amp;quot;ajaxSend&amp;quot;],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each([&amp;quot;get&amp;quot;,&amp;quot;post&amp;quot;],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&amp;amp;&amp;amp;(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:&amp;quot;GET&amp;quot;,isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:&amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;,accepts:{&amp;quot;*&amp;quot;:Dn,text:&amp;quot;text/plain&amp;quot;,html:&amp;quot;text/html&amp;quot;,xml:&amp;quot;application/xml, text/xml&amp;quot;,json:&amp;quot;application/json, text/javascript&amp;quot;},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:&amp;quot;responseXML&amp;quot;,text:&amp;quot;responseText&amp;quot;},converters:{&amp;quot;* text&amp;quot;:e.String,&amp;quot;text html&amp;quot;:!0,&amp;quot;text json&amp;quot;:b.parseJSON,&amp;quot;text xml&amp;quot;:b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){&amp;quot;object&amp;quot;==typeof e&amp;amp;&amp;amp;(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&amp;amp;&amp;amp;(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks(&amp;quot;once memory&amp;quot;),m=p.statusCode||{},y={},v={},x=0,T=&amp;quot;canceled&amp;quot;,N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2&amp;gt;x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&amp;amp;&amp;amp;l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+&amp;quot;&amp;quot;).replace(xn,&amp;quot;&amp;quot;).replace(kn,mn[1]+&amp;quot;//&amp;quot;),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||&amp;quot;*&amp;quot;).toLowerCase().match(w)||[&amp;quot;&amp;quot;],null==p.crossDomain&amp;amp;&amp;amp;(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&amp;amp;&amp;amp;r[2]===mn[2]&amp;amp;&amp;amp;(r[3]||(&amp;quot;http:&amp;quot;===r[1]?80:443))==(mn[3]||(&amp;quot;http:&amp;quot;===mn[1]?80:443)))),p.data&amp;amp;&amp;amp;p.processData&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!=typeof p.data&amp;amp;&amp;amp;(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&amp;amp;&amp;amp;0===b.active++&amp;amp;&amp;amp;b.event.trigger(&amp;quot;ajaxStart&amp;quot;),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&amp;amp;&amp;amp;(o=p.url+=(bn.test(o)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+p.data,delete p.data),p.cache===!1&amp;amp;&amp;amp;(p.url=wn.test(o)?o.replace(wn,&amp;quot;$1_=&amp;quot;+vn++):o+(bn.test(o)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+&amp;quot;_=&amp;quot;+vn++)),p.ifModified&amp;amp;&amp;amp;(b.lastModified[o]&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;If-Modified-Since&amp;quot;,b.lastModified[o]),b.etag[o]&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;If-None-Match&amp;quot;,b.etag[o])),(p.data&amp;amp;&amp;amp;p.hasContent&amp;amp;&amp;amp;p.contentType!==!1||n.contentType)&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;Content-Type&amp;quot;,p.contentType),N.setRequestHeader(&amp;quot;Accept&amp;quot;,p.dataTypes[0]&amp;amp;&amp;amp;p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(&amp;quot;*&amp;quot;!==p.dataTypes[0]?&amp;quot;, &amp;quot;+Dn+&amp;quot;; q=0.01&amp;quot;:&amp;quot;&amp;quot;):p.accepts[&amp;quot;*&amp;quot;]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&amp;amp;&amp;amp;(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T=&amp;quot;abort&amp;quot;;for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&amp;amp;&amp;amp;d.trigger(&amp;quot;ajaxSend&amp;quot;,[N,p]),p.async&amp;amp;&amp;amp;p.timeout&amp;gt;0&amp;amp;&amp;amp;(s=setTimeout(function(){N.abort(&amp;quot;timeout&amp;quot;)},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2&amp;gt;x))throw C;k(-1,C)}}else k(-1,&amp;quot;No Transport&amp;quot;);function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&amp;amp;&amp;amp;(x=2,s&amp;amp;&amp;amp;clearTimeout(s),l=t,a=i||&amp;quot;&amp;quot;,N.readyState=e&amp;gt;0?4:0,r&amp;amp;&amp;amp;(w=_n(p,N,r)),e&amp;gt;=200&amp;amp;&amp;amp;300&amp;gt;e||304===e?(p.ifModified&amp;amp;&amp;amp;(T=N.getResponseHeader(&amp;quot;Last-Modified&amp;quot;),T&amp;amp;&amp;amp;(b.lastModified[o]=T),T=N.getResponseHeader(&amp;quot;etag&amp;quot;),T&amp;amp;&amp;amp;(b.etag[o]=T)),204===e?(c=!0,C=&amp;quot;nocontent&amp;quot;):304===e?(c=!0,C=&amp;quot;notmodified&amp;quot;):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&amp;amp;&amp;amp;(C=&amp;quot;error&amp;quot;,0&amp;gt;e&amp;amp;&amp;amp;(e=0))),N.status=e,N.statusText=(n||C)+&amp;quot;&amp;quot;,c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&amp;amp;&amp;amp;d.trigger(c?&amp;quot;ajaxSuccess&amp;quot;:&amp;quot;ajaxError&amp;quot;,[N,p,c?y:v]),g.fireWith(f,[N,C]),u&amp;amp;&amp;amp;(d.trigger(&amp;quot;ajaxComplete&amp;quot;,[N,p]),--b.active||b.event.trigger(&amp;quot;ajaxStop&amp;quot;)))}return N},getScript:function(e,n){return b.get(e,t,n,&amp;quot;script&amp;quot;)},getJSON:function(e,t,n){return b.get(e,t,n,&amp;quot;json&amp;quot;)}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&amp;amp;&amp;amp;(n[c[s]]=r[s]);while(&amp;quot;*&amp;quot;===l[0])l.shift(),o===t&amp;amp;&amp;amp;(o=e.mimeType||n.getResponseHeader(&amp;quot;Content-Type&amp;quot;));if(o)for(s in u)if(u[s]&amp;amp;&amp;amp;u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+&amp;quot; &amp;quot;+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&amp;amp;&amp;amp;l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&amp;amp;&amp;amp;(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if(&amp;quot;*&amp;quot;!==r){if(&amp;quot;*&amp;quot;!==l&amp;amp;&amp;amp;l!==r){if(i=a[l+&amp;quot; &amp;quot;+r]||a[&amp;quot;* &amp;quot;+r],!i)for(n in a)if(o=n.split(&amp;quot; &amp;quot;),o[1]===r&amp;amp;&amp;amp;(i=a[l+&amp;quot; &amp;quot;+o[0]]||a[&amp;quot;* &amp;quot;+o[0]])){i===!0?i=a[n]:a[n]!==!0&amp;amp;&amp;amp;(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&amp;amp;&amp;amp;e[&amp;quot;throws&amp;quot;])t=i(t);else try{t=i(t)}catch(c){return{state:&amp;quot;parsererror&amp;quot;,error:i?c:&amp;quot;No conversion from &amp;quot;+l+&amp;quot; to &amp;quot;+r}}}l=r}return{state:&amp;quot;success&amp;quot;,data:t}}b.ajaxSetup({accepts:{script:&amp;quot;text/javascript, application/javascript, application/ecmascript, application/x-ecmascript&amp;quot;},contents:{script:/(?:java|ecma)script/},converters:{&amp;quot;text script&amp;quot;:function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter(&amp;quot;script&amp;quot;,function(e){e.cache===t&amp;amp;&amp;amp;(e.cache=!1),e.crossDomain&amp;amp;&amp;amp;(e.type=&amp;quot;GET&amp;quot;,e.global=!1)}),b.ajaxTransport(&amp;quot;script&amp;quot;,function(e){if(e.crossDomain){var n,r=o.head||b(&amp;quot;head&amp;quot;)[0]||o.documentElement;return{send:function(t,i){n=o.createElement(&amp;quot;script&amp;quot;),n.async=!0,e.scriptCharset&amp;amp;&amp;amp;(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&amp;amp;&amp;amp;(n.onload=n.onreadystatechange=null,n.parentNode&amp;amp;&amp;amp;n.parentNode.removeChild(n),n=null,t||i(200,&amp;quot;success&amp;quot;))},r.insertBefore(n,r.firstChild)},abort:function(){n&amp;amp;&amp;amp;n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&amp;amp;|$)|\?\?/;b.ajaxSetup({jsonp:&amp;quot;callback&amp;quot;,jsonpCallback:function(){var e=On.pop()||b.expando+&amp;quot;_&amp;quot;+vn++;return this[e]=!0,e}}),b.ajaxPrefilter(&amp;quot;json jsonp&amp;quot;,function(n,r,i){var o,a,s,u=n.jsonp!==!1&amp;amp;&amp;amp;(Bn.test(n.url)?&amp;quot;url&amp;quot;:&amp;quot;string&amp;quot;==typeof n.data&amp;amp;&amp;amp;!(n.contentType||&amp;quot;&amp;quot;).indexOf(&amp;quot;application/x-www-form-urlencoded&amp;quot;)&amp;amp;&amp;amp;Bn.test(n.data)&amp;amp;&amp;amp;&amp;quot;data&amp;quot;);return u||&amp;quot;jsonp&amp;quot;===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,&amp;quot;$1&amp;quot;+o):n.jsonp!==!1&amp;amp;&amp;amp;(n.url+=(bn.test(n.url)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+n.jsonp+&amp;quot;=&amp;quot;+o),n.converters[&amp;quot;script json&amp;quot;]=function(){return s||b.error(o+&amp;quot; was not called&amp;quot;),s[0]},n.dataTypes[0]=&amp;quot;json&amp;quot;,a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&amp;amp;&amp;amp;(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&amp;amp;&amp;amp;b.isFunction(a)&amp;amp;&amp;amp;a(s[0]),s=a=t}),&amp;quot;script&amp;quot;):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&amp;amp;&amp;amp;function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;)}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&amp;amp;&amp;amp;In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&amp;amp;&amp;amp;&amp;quot;withCredentials&amp;quot;in Rn,Rn=b.support.ajax=!!Rn,Rn&amp;amp;&amp;amp;b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&amp;amp;&amp;amp;u.overrideMimeType&amp;amp;&amp;amp;u.overrideMimeType(n.mimeType),n.crossDomain||i[&amp;quot;X-Requested-With&amp;quot;]||(i[&amp;quot;X-Requested-With&amp;quot;]=&amp;quot;XMLHttpRequest&amp;quot;);try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&amp;amp;&amp;amp;n.data||null),r=function(e,i){var s,l,c,p;try{if(r&amp;amp;&amp;amp;(i||4===u.readyState))if(r=t,a&amp;amp;&amp;amp;(u.onreadystatechange=b.noop,$n&amp;amp;&amp;amp;delete Pn[a]),i)4!==u.readyState&amp;amp;&amp;amp;u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),&amp;quot;string&amp;quot;==typeof u.responseText&amp;amp;&amp;amp;(p.text=u.responseText);try{c=u.statusText}catch(f){c=&amp;quot;&amp;quot;}s||!n.isLocal||n.crossDomain?1223===s&amp;amp;&amp;amp;(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&amp;amp;&amp;amp;o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&amp;amp;&amp;amp;(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&amp;amp;&amp;amp;r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(&amp;quot;^(?:([+-])=|)(&amp;quot;+x+&amp;quot;)([a-z%]*)$&amp;quot;,&amp;quot;i&amp;quot;),Jn=/queueHooks$/,Gn=[nr],Qn={&amp;quot;*&amp;quot;:[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;),&amp;quot;px&amp;quot;!==r&amp;amp;&amp;amp;s){s=b.css(i.elem,e,!0)||n||1;do u=u||&amp;quot;.5&amp;quot;,s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&amp;amp;&amp;amp;1!==u&amp;amp;&amp;amp;--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn[&amp;quot;*&amp;quot;]),i=0,o=r.length;for(;o&amp;gt;i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u&amp;gt;a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1&amp;gt;o&amp;amp;&amp;amp;u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r&amp;gt;n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a&amp;gt;o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&amp;amp;&amp;amp;l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&amp;amp;&amp;amp;(o=n[1],n=e[i]=n[0]),i!==r&amp;amp;&amp;amp;(e[r]=n,delete e[i]),a=b.cssHooks[r],a&amp;amp;&amp;amp;&amp;quot;expand&amp;quot;in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=[&amp;quot;*&amp;quot;]):e=e.split(&amp;quot; &amp;quot;);var n,r=0,i=e.length;for(;i&amp;gt;r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&amp;amp;&amp;amp;nn(e);n.queue||(c=b._queueHooks(e,&amp;quot;fx&amp;quot;),null==c.unqueued&amp;amp;&amp;amp;(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,&amp;quot;fx&amp;quot;).length||c.empty.fire()})})),1===e.nodeType&amp;amp;&amp;amp;(&amp;quot;height&amp;quot;in t||&amp;quot;width&amp;quot;in t)&amp;amp;&amp;amp;(n.overflow=[d.overflow,d.overflowX,d.overflowY],&amp;quot;inline&amp;quot;===b.css(e,&amp;quot;display&amp;quot;)&amp;amp;&amp;amp;&amp;quot;none&amp;quot;===b.css(e,&amp;quot;float&amp;quot;)&amp;amp;&amp;amp;(b.support.inlineBlockNeedsLayout&amp;amp;&amp;amp;&amp;quot;inline&amp;quot;!==un(e.nodeName)?d.zoom=1:d.display=&amp;quot;inline-block&amp;quot;)),n.overflow&amp;amp;&amp;amp;(d.overflow=&amp;quot;hidden&amp;quot;,b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||&amp;quot;toggle&amp;quot;===a,a===(m?&amp;quot;hide&amp;quot;:&amp;quot;show&amp;quot;))continue;g.push(i)}if(o=g.length){s=b._data(e,&amp;quot;fxshow&amp;quot;)||b._data(e,&amp;quot;fxshow&amp;quot;,{}),&amp;quot;hidden&amp;quot;in s&amp;amp;&amp;amp;(m=s.hidden),u&amp;amp;&amp;amp;(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,&amp;quot;fxshow&amp;quot;);for(t in h)b.style(e,t,h[t])});for(i=0;o&amp;gt;i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&amp;amp;&amp;amp;(l.end=l.start,l.start=&amp;quot;width&amp;quot;===r||&amp;quot;height&amp;quot;===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||&amp;quot;swing&amp;quot;,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;)},cur:function(){var e=rr.propHooks[this.prop];return e&amp;amp;&amp;amp;e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&amp;amp;&amp;amp;this.options.step.call(this.elem,this.now,this),n&amp;amp;&amp;amp;n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&amp;amp;&amp;amp;null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,&amp;quot;&amp;quot;),t&amp;amp;&amp;amp;&amp;quot;auto&amp;quot;!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&amp;amp;&amp;amp;(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&amp;amp;&amp;amp;e.elem.parentNode&amp;amp;&amp;amp;(e.elem[e.prop]=e.now)}},b.each([&amp;quot;toggle&amp;quot;,&amp;quot;show&amp;quot;,&amp;quot;hide&amp;quot;],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||&amp;quot;boolean&amp;quot;==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(&amp;quot;opacity&amp;quot;,0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,&amp;quot;finish&amp;quot;))&amp;amp;&amp;amp;t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(r=n,n=e,e=t),n&amp;amp;&amp;amp;e!==!1&amp;amp;&amp;amp;this.queue(e||&amp;quot;fx&amp;quot;,[]),this.each(function(){var t=!0,n=null!=e&amp;amp;&amp;amp;e+&amp;quot;queueHooks&amp;quot;,o=b.timers,a=b._data(this);if(n)a[n]&amp;amp;&amp;amp;a[n].stop&amp;amp;&amp;amp;i(a[n]);else for(n in a)a[n]&amp;amp;&amp;amp;a[n].stop&amp;amp;&amp;amp;Jn.test(n)&amp;amp;&amp;amp;i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&amp;amp;&amp;amp;o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&amp;amp;&amp;amp;b.dequeue(this,e)})},finish:function(e){return e!==!1&amp;amp;&amp;amp;(e=e||&amp;quot;fx&amp;quot;),this.each(function(){var t,n=b._data(this),r=n[e+&amp;quot;queue&amp;quot;],i=n[e+&amp;quot;queueHooks&amp;quot;],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&amp;amp;&amp;amp;i.cur&amp;amp;&amp;amp;i.cur.finish&amp;amp;&amp;amp;i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&amp;amp;&amp;amp;o[t].queue===e&amp;amp;&amp;amp;(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a&amp;gt;t;t++)r[t]&amp;amp;&amp;amp;r[t].finish&amp;amp;&amp;amp;r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4&amp;gt;i;i+=2-t)n=Zt[i],r[&amp;quot;margin&amp;quot;+n]=r[&amp;quot;padding&amp;quot;+n]=e;return t&amp;amp;&amp;amp;(r.opacity=r.width=e),r}b.each({slideDown:ir(&amp;quot;show&amp;quot;),slideUp:ir(&amp;quot;hide&amp;quot;),slideToggle:ir(&amp;quot;toggle&amp;quot;),fadeIn:{opacity:&amp;quot;show&amp;quot;},fadeOut:{opacity:&amp;quot;hide&amp;quot;},fadeToggle:{opacity:&amp;quot;toggle&amp;quot;}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof e?b.extend({},e):{complete:n||!n&amp;amp;&amp;amp;t||b.isFunction(e)&amp;amp;&amp;amp;e,duration:e,easing:n&amp;amp;&amp;amp;t||t&amp;amp;&amp;amp;!b.isFunction(t)&amp;amp;&amp;amp;t};return r.duration=b.fx.off?0:&amp;quot;number&amp;quot;==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&amp;amp;&amp;amp;(r.queue=&amp;quot;fx&amp;quot;),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&amp;amp;&amp;amp;r.old.call(this),r.queue&amp;amp;&amp;amp;b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length&amp;gt;r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&amp;amp;&amp;amp;b.timers.push(e)&amp;amp;&amp;amp;b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&amp;amp;&amp;amp;b.expr.filters&amp;amp;&amp;amp;(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&amp;amp;&amp;amp;a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&amp;amp;&amp;amp;(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,&amp;quot;position&amp;quot;);&amp;quot;static&amp;quot;===r&amp;amp;&amp;amp;(e.style.position=&amp;quot;relative&amp;quot;);var i=b(e),o=i.offset(),a=b.css(e,&amp;quot;top&amp;quot;),s=b.css(e,&amp;quot;left&amp;quot;),u=(&amp;quot;absolute&amp;quot;===r||&amp;quot;fixed&amp;quot;===r)&amp;amp;&amp;amp;b.inArray(&amp;quot;auto&amp;quot;,[a,s])&amp;gt;-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&amp;amp;&amp;amp;(t=t.call(e,n,o)),null!=t.top&amp;amp;&amp;amp;(l.top=t.top-o.top+p),null!=t.left&amp;amp;&amp;amp;(l.left=t.left-o.left+f),&amp;quot;using&amp;quot;in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return&amp;quot;fixed&amp;quot;===b.css(r,&amp;quot;position&amp;quot;)?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],&amp;quot;html&amp;quot;)||(n=e.offset()),n.top+=b.css(e[0],&amp;quot;borderTopWidth&amp;quot;,!0),n.left+=b.css(e[0],&amp;quot;borderLeftWidth&amp;quot;,!0)),{top:t.top-n.top-b.css(r,&amp;quot;marginTop&amp;quot;,!0),left:t.left-n.left-b.css(r,&amp;quot;marginLeft&amp;quot;,!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&amp;amp;&amp;amp;!b.nodeName(e,&amp;quot;html&amp;quot;)&amp;amp;&amp;amp;&amp;quot;static&amp;quot;===b.css(e,&amp;quot;position&amp;quot;))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:&amp;quot;pageXOffset&amp;quot;,scrollTop:&amp;quot;pageYOffset&amp;quot;},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:&amp;quot;height&amp;quot;,Width:&amp;quot;width&amp;quot;},function(e,n){b.each({padding:&amp;quot;inner&amp;quot;+e,content:n,&amp;quot;&amp;quot;:&amp;quot;outer&amp;quot;+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&amp;amp;&amp;amp;(r||&amp;quot;boolean&amp;quot;!=typeof i),s=r||(i===!0||o===!0?&amp;quot;margin&amp;quot;:&amp;quot;border&amp;quot;);return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement[&amp;quot;client&amp;quot;+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[&amp;quot;scroll&amp;quot;+e],o[&amp;quot;scroll&amp;quot;+e],n.body[&amp;quot;offset&amp;quot;+e],o[&amp;quot;offset&amp;quot;+e],o[&amp;quot;client&amp;quot;+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,&amp;quot;function&amp;quot;==typeof define&amp;amp;&amp;amp;define.amd&amp;amp;&amp;amp;define.amd.jQuery&amp;amp;&amp;amp;define(&amp;quot;jquery&amp;quot;,[],function(){return b})})(window);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.jqplot-xaxis,.jqplot-xaxis-label{margin-top:10px}.jqplot-x2axis,.jqplot-x2axis-label{margin-bottom:10px}.jqplot-target{position:relative;color:#666;font-family:&amp;quot;Trebuchet MS&amp;quot;,Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-x2axis-tick,.jqplot-xaxis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick,.jqplot-yaxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px;z-index:2;font-size:1.5em}.jqplot-x2axis-label,.jqplot-xaxis-label,.jqplot-yMidAxis-label,.jqplot-yaxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-yaxis-label{margin-right:10px}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin:12px}table.jqplot-cursor-legend,table.jqplot-table-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:active,td.jqplot-seriesToggle:hover{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-width:5px 6px;border-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-canvasOverlay-tooltip,.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%)}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,.3)}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=418</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=418"/>
		<updated>2021-01-27T17:19:00Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=417</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=417"/>
		<updated>2021-01-27T17:16:48Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=416</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=416"/>
		<updated>2021-01-27T17:16:25Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/chart/helge.js&#039; );&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  var myElement = document.getElementById(&#039;mw-hello-world&#039;);&lt;br /&gt;
  myElement.innerHTML = &#039;&amp;lt;html&amp;gt;Hello World!!!&amp;lt;/html&amp;gt;&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license&lt;br /&gt;
//@ sourceMappingURL=jquery.min.map&lt;br /&gt;
*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p=&amp;quot;1.9.1&amp;quot;,f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(&amp;lt;[\w\W]+&amp;gt;)[^&amp;gt;]*|#([\w-]*))$/,C=/^&amp;lt;(\w+)\s*\/?&amp;gt;(?:&amp;lt;\/\1&amp;gt;|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:[&amp;quot;\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/&amp;quot;[^&amp;quot;\\\r\n]*&amp;quot;|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||&amp;quot;load&amp;quot;===e.type||&amp;quot;complete&amp;quot;===o.readyState)&amp;amp;&amp;amp;(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener(&amp;quot;DOMContentLoaded&amp;quot;,H,!1),e.removeEventListener(&amp;quot;load&amp;quot;,H,!1)):(o.detachEvent(&amp;quot;onreadystatechange&amp;quot;,H),e.detachEvent(&amp;quot;onload&amp;quot;,H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if(&amp;quot;string&amp;quot;==typeof e){if(i=&amp;quot;&amp;lt;&amp;quot;===e.charAt(0)&amp;amp;&amp;amp;&amp;quot;&amp;gt;&amp;quot;===e.charAt(e.length-1)&amp;amp;&amp;amp;e.length&amp;gt;=3?[null,e,null]:N.exec(e),!i||!i[1]&amp;amp;&amp;amp;n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&amp;amp;&amp;amp;n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&amp;amp;&amp;amp;b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&amp;amp;&amp;amp;a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&amp;amp;&amp;amp;(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:&amp;quot;&amp;quot;,length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0&amp;gt;e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0&amp;gt;e?t:0);return this.pushStack(n&amp;gt;=0&amp;amp;&amp;amp;t&amp;gt;n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for(&amp;quot;boolean&amp;quot;==typeof s&amp;amp;&amp;amp;(c=s,s=arguments[1]||{},u=2),&amp;quot;object&amp;quot;==typeof s||b.isFunction(s)||(s={}),l===u&amp;amp;&amp;amp;(s=this,--u);l&amp;gt;u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&amp;amp;&amp;amp;(c&amp;amp;&amp;amp;r&amp;amp;&amp;amp;(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&amp;amp;&amp;amp;b.isArray(e)?e:[]):a=e&amp;amp;&amp;amp;b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&amp;amp;&amp;amp;(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&amp;amp;&amp;amp;(e.$=u),t&amp;amp;&amp;amp;e.jQuery===b&amp;amp;&amp;amp;(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&amp;amp;&amp;amp;--b.readyWait&amp;gt;0||(n.resolveWith(o,[b]),b.fn.trigger&amp;amp;&amp;amp;b(o).trigger(&amp;quot;ready&amp;quot;).off(&amp;quot;ready&amp;quot;))}},isFunction:function(e){return&amp;quot;function&amp;quot;===b.type(e)},isArray:Array.isArray||function(e){return&amp;quot;array&amp;quot;===b.type(e)},isWindow:function(e){return null!=e&amp;amp;&amp;amp;e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&amp;amp;&amp;amp;isFinite(e)},type:function(e){return null==e?e+&amp;quot;&amp;quot;:&amp;quot;object&amp;quot;==typeof e||&amp;quot;function&amp;quot;==typeof e?l[m.call(e)]||&amp;quot;object&amp;quot;:typeof e},isPlainObject:function(e){if(!e||&amp;quot;object&amp;quot;!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&amp;amp;&amp;amp;!y.call(e,&amp;quot;constructor&amp;quot;)&amp;amp;&amp;amp;!y.call(e.constructor.prototype,&amp;quot;isPrototypeOf&amp;quot;))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||&amp;quot;string&amp;quot;!=typeof e)return null;&amp;quot;boolean&amp;quot;==typeof t&amp;amp;&amp;amp;(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&amp;amp;&amp;amp;[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&amp;amp;&amp;amp;b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&amp;amp;&amp;amp;e.JSON.parse?e.JSON.parse(n):null===n?n:&amp;quot;string&amp;quot;==typeof n&amp;amp;&amp;amp;(n=b.trim(n),n&amp;amp;&amp;amp;k.test(n.replace(S,&amp;quot;@&amp;quot;).replace(A,&amp;quot;]&amp;quot;).replace(E,&amp;quot;&amp;quot;)))?Function(&amp;quot;return &amp;quot;+n)():(b.error(&amp;quot;Invalid JSON: &amp;quot;+n),t)},parseXML:function(n){var r,i;if(!n||&amp;quot;string&amp;quot;!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,&amp;quot;text/xml&amp;quot;)):(r=new ActiveXObject(&amp;quot;Microsoft.XMLDOM&amp;quot;),r.async=&amp;quot;false&amp;quot;,r.loadXML(n))}catch(o){r=t}return r&amp;amp;&amp;amp;r.documentElement&amp;amp;&amp;amp;!r.getElementsByTagName(&amp;quot;parsererror&amp;quot;).length||b.error(&amp;quot;Invalid XML: &amp;quot;+n),r},noop:function(){},globalEval:function(t){t&amp;amp;&amp;amp;b.trim(t)&amp;amp;&amp;amp;(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,&amp;quot;ms-&amp;quot;).replace(D,L)},nodeName:function(e,t){return e.nodeName&amp;amp;&amp;amp;e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o&amp;gt;i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o&amp;gt;i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&amp;amp;&amp;amp;!v.call(&amp;quot;\ufeff\u00a0&amp;quot;)?function(e){return null==e?&amp;quot;&amp;quot;:v.call(e)}:function(e){return null==e?&amp;quot;&amp;quot;:(e+&amp;quot;&amp;quot;).replace(T,&amp;quot;&amp;quot;)},makeArray:function(e,t){var n=t||[];return null!=e&amp;amp;&amp;amp;(M(Object(e))?b.merge(n,&amp;quot;string&amp;quot;==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0&amp;gt;n?Math.max(0,r+n):n:0;r&amp;gt;n;n++)if(n in t&amp;amp;&amp;amp;t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(&amp;quot;number&amp;quot;==typeof r)for(;r&amp;gt;o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a&amp;gt;o;o++)r=!!t(e[o],o),n!==r&amp;amp;&amp;amp;i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o&amp;gt;i;i++)r=t(e[i],i,n),null!=r&amp;amp;&amp;amp;(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&amp;amp;&amp;amp;(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return&amp;quot;string&amp;quot;==typeof n&amp;amp;&amp;amp;(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if(&amp;quot;object&amp;quot;===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&amp;amp;&amp;amp;(o=!0,b.isFunction(i)||(s=!0),c&amp;amp;&amp;amp;(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l&amp;gt;u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),&amp;quot;complete&amp;quot;===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;,H,!1),e.addEventListener(&amp;quot;load&amp;quot;,H,!1);else{o.attachEvent(&amp;quot;onreadystatechange&amp;quot;,H),e.attachEvent(&amp;quot;onload&amp;quot;,H);var r=!1;try{r=null==e.frameElement&amp;amp;&amp;amp;o.documentElement}catch(i){}r&amp;amp;&amp;amp;r.doScroll&amp;amp;&amp;amp;function a(){if(!b.isReady){try{r.doScroll(&amp;quot;left&amp;quot;)}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each(&amp;quot;Boolean Number String Function Array Date RegExp Object Error&amp;quot;.split(&amp;quot; &amp;quot;),function(e,t){l[&amp;quot;[object &amp;quot;+t+&amp;quot;]&amp;quot;]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&amp;amp;&amp;amp;t?!0:&amp;quot;array&amp;quot;===n||&amp;quot;function&amp;quot;!==n&amp;amp;&amp;amp;(0===t||&amp;quot;number&amp;quot;==typeof t&amp;amp;&amp;amp;t&amp;gt;0&amp;amp;&amp;amp;t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e=&amp;quot;string&amp;quot;==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&amp;amp;&amp;amp;[],c=function(t){for(r=e.memory&amp;amp;&amp;amp;t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&amp;amp;&amp;amp;o&amp;gt;a;a++)if(u[a].apply(t[0],t[1])===!1&amp;amp;&amp;amp;e.stopOnFalse){r=!1;break}n=!1,u&amp;amp;&amp;amp;(l?l.length&amp;amp;&amp;amp;c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);&amp;quot;function&amp;quot;===r?e.unique&amp;amp;&amp;amp;p.has(n)||u.push(n):n&amp;amp;&amp;amp;n.length&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!==r&amp;amp;&amp;amp;i(n)})})(arguments),n?o=u.length:r&amp;amp;&amp;amp;(s=t,c(r))}return this},remove:function(){return u&amp;amp;&amp;amp;b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))&amp;gt;-1)u.splice(r,1),n&amp;amp;&amp;amp;(o&amp;gt;=r&amp;amp;&amp;amp;o--,a&amp;gt;=r&amp;amp;&amp;amp;a--)}),this},has:function(e){return e?b.inArray(e,u)&amp;gt;-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&amp;amp;&amp;amp;!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[[&amp;quot;resolve&amp;quot;,&amp;quot;done&amp;quot;,b.Callbacks(&amp;quot;once memory&amp;quot;),&amp;quot;resolved&amp;quot;],[&amp;quot;reject&amp;quot;,&amp;quot;fail&amp;quot;,b.Callbacks(&amp;quot;once memory&amp;quot;),&amp;quot;rejected&amp;quot;],[&amp;quot;notify&amp;quot;,&amp;quot;progress&amp;quot;,b.Callbacks(&amp;quot;memory&amp;quot;)]],n=&amp;quot;pending&amp;quot;,r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&amp;amp;&amp;amp;e[t];i[o[1]](function(){var e=s&amp;amp;&amp;amp;s.apply(this,arguments);e&amp;amp;&amp;amp;b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+&amp;quot;With&amp;quot;](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&amp;amp;&amp;amp;a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+&amp;quot;With&amp;quot;](this===i?r:this,arguments),this},i[o[0]+&amp;quot;With&amp;quot;]=a.fireWith}),r.promise(i),e&amp;amp;&amp;amp;e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&amp;amp;&amp;amp;b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length&amp;gt;1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r&amp;gt;1)for(s=Array(r),u=Array(r),l=Array(r);r&amp;gt;t;t++)n[t]&amp;amp;&amp;amp;b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement(&amp;quot;div&amp;quot;);if(d.setAttribute(&amp;quot;className&amp;quot;,&amp;quot;t&amp;quot;),d.innerHTML=&amp;quot;  &amp;lt;link/&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;a href=&#039;/a&#039;&amp;gt;a&amp;lt;/a&amp;gt;&amp;lt;input type=&#039;checkbox&#039;/&amp;gt;&amp;quot;,n=d.getElementsByTagName(&amp;quot;*&amp;quot;),r=d.getElementsByTagName(&amp;quot;a&amp;quot;)[0],!n||!r||!n.length)return{};s=o.createElement(&amp;quot;select&amp;quot;),l=s.appendChild(o.createElement(&amp;quot;option&amp;quot;)),a=d.getElementsByTagName(&amp;quot;input&amp;quot;)[0],r.style.cssText=&amp;quot;top:1px;float:left;opacity:.5&amp;quot;,t={getSetAttribute:&amp;quot;t&amp;quot;!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName(&amp;quot;tbody&amp;quot;).length,htmlSerialize:!!d.getElementsByTagName(&amp;quot;link&amp;quot;).length,style:/top/.test(r.getAttribute(&amp;quot;style&amp;quot;)),hrefNormalized:&amp;quot;/a&amp;quot;===r.getAttribute(&amp;quot;href&amp;quot;),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement(&amp;quot;form&amp;quot;).enctype,html5Clone:&amp;quot;&amp;lt;:nav&amp;gt;&amp;lt;/:nav&amp;gt;&amp;quot;!==o.createElement(&amp;quot;nav&amp;quot;).cloneNode(!0).outerHTML,boxModel:&amp;quot;CSS1Compat&amp;quot;===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement(&amp;quot;input&amp;quot;),a.setAttribute(&amp;quot;value&amp;quot;,&amp;quot;&amp;quot;),t.input=&amp;quot;&amp;quot;===a.getAttribute(&amp;quot;value&amp;quot;),a.value=&amp;quot;t&amp;quot;,a.setAttribute(&amp;quot;type&amp;quot;,&amp;quot;radio&amp;quot;),t.radioValue=&amp;quot;t&amp;quot;===a.value,a.setAttribute(&amp;quot;checked&amp;quot;,&amp;quot;t&amp;quot;),a.setAttribute(&amp;quot;name&amp;quot;,&amp;quot;t&amp;quot;),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&amp;amp;&amp;amp;(d.attachEvent(&amp;quot;onclick&amp;quot;,function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=&amp;quot;on&amp;quot;+f,&amp;quot;t&amp;quot;),t[f+&amp;quot;Bubbles&amp;quot;]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip=&amp;quot;content-box&amp;quot;,d.cloneNode(!0).style.backgroundClip=&amp;quot;&amp;quot;,t.clearCloneStyle=&amp;quot;content-box&amp;quot;===d.style.backgroundClip,b(function(){var n,r,a,s=&amp;quot;padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;&amp;quot;,u=o.getElementsByTagName(&amp;quot;body&amp;quot;)[0];u&amp;amp;&amp;amp;(n=o.createElement(&amp;quot;div&amp;quot;),n.style.cssText=&amp;quot;border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px&amp;quot;,u.appendChild(n).appendChild(d),d.innerHTML=&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;t&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;,a=d.getElementsByTagName(&amp;quot;td&amp;quot;),a[0].style.cssText=&amp;quot;padding:0;margin:0;border:0;display:none&amp;quot;,p=0===a[0].offsetHeight,a[0].style.display=&amp;quot;&amp;quot;,a[1].style.display=&amp;quot;none&amp;quot;,t.reliableHiddenOffsets=p&amp;amp;&amp;amp;0===a[0].offsetHeight,d.innerHTML=&amp;quot;&amp;quot;,d.style.cssText=&amp;quot;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;&amp;quot;,t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&amp;amp;&amp;amp;(t.pixelPosition=&amp;quot;1%&amp;quot;!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=&amp;quot;4px&amp;quot;===(e.getComputedStyle(d,null)||{width:&amp;quot;4px&amp;quot;}).width,r=d.appendChild(o.createElement(&amp;quot;div&amp;quot;)),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=&amp;quot;0&amp;quot;,d.style.width=&amp;quot;1px&amp;quot;,t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&amp;amp;&amp;amp;(d.innerHTML=&amp;quot;&amp;quot;,d.style.cssText=s+&amp;quot;width:1px;padding:1px;display:inline;zoom:1&amp;quot;,t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=&amp;quot;block&amp;quot;,d.innerHTML=&amp;quot;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,d.firstChild.style.width=&amp;quot;5px&amp;quot;,t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&amp;amp;&amp;amp;(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u=&amp;quot;string&amp;quot;==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&amp;amp;&amp;amp;s;if(f&amp;amp;&amp;amp;p[f]&amp;amp;&amp;amp;(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),(&amp;quot;object&amp;quot;==typeof n||&amp;quot;function&amp;quot;==typeof n)&amp;amp;&amp;amp;(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&amp;amp;&amp;amp;(o[b.camelCase(n)]=r),u?(a=o[n],null==a&amp;amp;&amp;amp;(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&amp;amp;&amp;amp;(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(&amp;quot; &amp;quot;));for(r=0,i=t.length;i&amp;gt;r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&amp;amp;&amp;amp;(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:&amp;quot;jQuery&amp;quot;+(p+Math.random()).replace(/\D/g,&amp;quot;&amp;quot;),noData:{embed:!0,object:&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot;,applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&amp;amp;&amp;amp;!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&amp;amp;&amp;amp;1!==e.nodeType&amp;amp;&amp;amp;9!==e.nodeType)return!1;var t=e.nodeName&amp;amp;&amp;amp;b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&amp;amp;&amp;amp;e.getAttribute(&amp;quot;classid&amp;quot;)===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&amp;amp;&amp;amp;(s=b.data(o),1===o.nodeType&amp;amp;&amp;amp;!b._data(o,&amp;quot;parsedAttrs&amp;quot;))){for(r=o.attributes;r.length&amp;gt;a;a++)i=r[a].name,i.indexOf(&amp;quot;data-&amp;quot;)||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,&amp;quot;parsedAttrs&amp;quot;,!0)}return s}return&amp;quot;object&amp;quot;==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length&amp;gt;1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&amp;amp;&amp;amp;1===e.nodeType){var i=&amp;quot;data-&amp;quot;+n.replace(B,&amp;quot;-$1&amp;quot;).toLowerCase();if(r=e.getAttribute(i),&amp;quot;string&amp;quot;==typeof r){try{r=&amp;quot;true&amp;quot;===r?!0:&amp;quot;false&amp;quot;===r?!1:&amp;quot;null&amp;quot;===r?null:+r+&amp;quot;&amp;quot;===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if((&amp;quot;data&amp;quot;!==t||!b.isEmptyObject(e[t]))&amp;amp;&amp;amp;&amp;quot;toJSON&amp;quot;!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||&amp;quot;fx&amp;quot;)+&amp;quot;queue&amp;quot;,i=b._data(e,n),r&amp;amp;&amp;amp;(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||&amp;quot;fx&amp;quot;;var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};&amp;quot;inprogress&amp;quot;===i&amp;amp;&amp;amp;(i=n.shift(),r--),o.cur=i,i&amp;amp;&amp;amp;(&amp;quot;fx&amp;quot;===t&amp;amp;&amp;amp;n.unshift(&amp;quot;inprogress&amp;quot;),delete o.stop,i.call(e,a,o)),!r&amp;amp;&amp;amp;o&amp;amp;&amp;amp;o.empty.fire()},_queueHooks:function(e,t){var n=t+&amp;quot;queueHooks&amp;quot;;return b._data(e,n)||b._data(e,n,{empty:b.Callbacks(&amp;quot;once memory&amp;quot;).add(function(){b._removeData(e,t+&amp;quot;queue&amp;quot;),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(n=e,e=&amp;quot;fx&amp;quot;,r--),r&amp;gt;arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),&amp;quot;fx&amp;quot;===e&amp;amp;&amp;amp;&amp;quot;inprogress&amp;quot;!==t[0]&amp;amp;&amp;amp;b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||&amp;quot;fx&amp;quot;,this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||&amp;quot;fx&amp;quot;,[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(n=e,e=t),e=e||&amp;quot;fx&amp;quot;;while(s--)r=b._data(a[s],e+&amp;quot;queueHooks&amp;quot;),r&amp;amp;&amp;amp;r.empty&amp;amp;&amp;amp;(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length&amp;gt;1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length&amp;gt;1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||&amp;quot;&amp;quot;).match(w)||[];s&amp;gt;a;a++)if(n=this[a],r=1===n.nodeType&amp;amp;&amp;amp;(n.className?(&amp;quot; &amp;quot;+n.className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;):&amp;quot; &amp;quot;)){o=0;while(i=t[o++])0&amp;gt;r.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;)&amp;amp;&amp;amp;(r+=i+&amp;quot; &amp;quot;);n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||&amp;quot;string&amp;quot;==typeof e&amp;amp;&amp;amp;e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||&amp;quot;&amp;quot;).match(w)||[];s&amp;gt;a;a++)if(n=this[a],r=1===n.nodeType&amp;amp;&amp;amp;(n.className?(&amp;quot; &amp;quot;+n.className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;):&amp;quot;&amp;quot;)){o=0;while(i=t[o++])while(r.indexOf(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;)&amp;gt;=0)r=r.replace(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;,&amp;quot; &amp;quot;);n.className=e?b.trim(r):&amp;quot;&amp;quot;}return this},toggleClass:function(e,t){var n=typeof e,r=&amp;quot;boolean&amp;quot;==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(&amp;quot;string&amp;quot;===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?&amp;quot;addClass&amp;quot;:&amp;quot;removeClass&amp;quot;](o)}else(n===i||&amp;quot;boolean&amp;quot;===n)&amp;amp;&amp;amp;(this.className&amp;amp;&amp;amp;b._data(this,&amp;quot;__className__&amp;quot;,this.className),this.className=this.className||e===!1?&amp;quot;&amp;quot;:b._data(this,&amp;quot;__className__&amp;quot;)||&amp;quot;&amp;quot;)})},hasClass:function(e){var t=&amp;quot; &amp;quot;+e+&amp;quot; &amp;quot;,n=0,r=this.length;for(;r&amp;gt;n;n++)if(1===this[n].nodeType&amp;amp;&amp;amp;(&amp;quot; &amp;quot;+this[n].className+&amp;quot; &amp;quot;).replace(X,&amp;quot; &amp;quot;).indexOf(t)&amp;gt;=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&amp;amp;&amp;amp;(o=i?e.call(this,n,a.val()):e,null==o?o=&amp;quot;&amp;quot;:&amp;quot;number&amp;quot;==typeof o?o+=&amp;quot;&amp;quot;:b.isArray(o)&amp;amp;&amp;amp;(o=b.map(o,function(e){return null==e?&amp;quot;&amp;quot;:e+&amp;quot;&amp;quot;})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in r&amp;amp;&amp;amp;r.set(this,o,&amp;quot;value&amp;quot;)!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in r&amp;amp;&amp;amp;(n=r.get(o,&amp;quot;value&amp;quot;))!==t?n:(n=o.value,&amp;quot;string&amp;quot;==typeof n?n.replace(U,&amp;quot;&amp;quot;):null==n?&amp;quot;&amp;quot;:n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=&amp;quot;select-one&amp;quot;===e.type||0&amp;gt;i,a=o?null:[],s=o?i+1:r.length,u=0&amp;gt;i?s:o?i:0;for(;s&amp;gt;u;u++)if(n=r[u],!(!n.selected&amp;amp;&amp;amp;u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute(&amp;quot;disabled&amp;quot;))||n.parentNode.disabled&amp;amp;&amp;amp;b.nodeName(n.parentNode,&amp;quot;optgroup&amp;quot;))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find(&amp;quot;option&amp;quot;).each(function(){this.selected=b.inArray(b(this).val(),n)&amp;gt;=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&amp;amp;&amp;amp;3!==u&amp;amp;&amp;amp;8!==u&amp;amp;&amp;amp;2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&amp;amp;&amp;amp;(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&amp;amp;&amp;amp;a&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in o&amp;amp;&amp;amp;null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&amp;amp;&amp;amp;(s=e.getAttribute(n)),null==s?t:s):null!==r?o&amp;amp;&amp;amp;a&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in o&amp;amp;&amp;amp;(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+&amp;quot;&amp;quot;),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&amp;amp;&amp;amp;t.match(w);if(o&amp;amp;&amp;amp;1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&amp;amp;&amp;amp;G.test(n)?e[b.camelCase(&amp;quot;default-&amp;quot;+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,&amp;quot;&amp;quot;),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&amp;amp;&amp;amp;&amp;quot;radio&amp;quot;===t&amp;amp;&amp;amp;b.nodeName(e,&amp;quot;input&amp;quot;)){var n=e.value;return e.setAttribute(&amp;quot;type&amp;quot;,t),n&amp;amp;&amp;amp;(e.value=n),t}}}},propFix:{tabindex:&amp;quot;tabIndex&amp;quot;,readonly:&amp;quot;readOnly&amp;quot;,&amp;quot;for&amp;quot;:&amp;quot;htmlFor&amp;quot;,&amp;quot;class&amp;quot;:&amp;quot;className&amp;quot;,maxlength:&amp;quot;maxLength&amp;quot;,cellspacing:&amp;quot;cellSpacing&amp;quot;,cellpadding:&amp;quot;cellPadding&amp;quot;,rowspan:&amp;quot;rowSpan&amp;quot;,colspan:&amp;quot;colSpan&amp;quot;,usemap:&amp;quot;useMap&amp;quot;,frameborder:&amp;quot;frameBorder&amp;quot;,contenteditable:&amp;quot;contentEditable&amp;quot;},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&amp;amp;&amp;amp;3!==s&amp;amp;&amp;amp;8!==s&amp;amp;&amp;amp;2!==s)return a=1!==s||!b.isXMLDoc(e),a&amp;amp;&amp;amp;(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in o&amp;amp;&amp;amp;(i=o.set(e,r,n))!==t?i:e[n]=r:o&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in o&amp;amp;&amp;amp;null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode(&amp;quot;tabindex&amp;quot;);return n&amp;amp;&amp;amp;n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&amp;amp;&amp;amp;e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i=&amp;quot;boolean&amp;quot;==typeof r&amp;amp;&amp;amp;e.getAttribute(n),o=&amp;quot;boolean&amp;quot;==typeof r?K&amp;amp;&amp;amp;Q?null!=i:G.test(n)?e[b.camelCase(&amp;quot;default-&amp;quot;+n)]:!!i:e.getAttributeNode(n);return o&amp;amp;&amp;amp;o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&amp;amp;&amp;amp;Q||!G.test(n)?e.setAttribute(!Q&amp;amp;&amp;amp;b.propFix[n]||n,n):e[b.camelCase(&amp;quot;default-&amp;quot;+n)]=e[n]=!0,n}},K&amp;amp;&amp;amp;Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,&amp;quot;input&amp;quot;)?e.defaultValue:r&amp;amp;&amp;amp;r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,&amp;quot;input&amp;quot;)?(e.defaultValue=n,t):I&amp;amp;&amp;amp;I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&amp;amp;&amp;amp;(&amp;quot;id&amp;quot;===n||&amp;quot;name&amp;quot;===n||&amp;quot;coords&amp;quot;===n?&amp;quot;&amp;quot;!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=&amp;quot;&amp;quot;,&amp;quot;value&amp;quot;===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,&amp;quot;&amp;quot;===t?!1:t,n)}},b.each([&amp;quot;width&amp;quot;,&amp;quot;height&amp;quot;],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return&amp;quot;&amp;quot;===r?(e.setAttribute(n,&amp;quot;auto&amp;quot;),r):t}})})),b.support.hrefNormalized||(b.each([&amp;quot;href&amp;quot;,&amp;quot;src&amp;quot;,&amp;quot;width&amp;quot;,&amp;quot;height&amp;quot;],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each([&amp;quot;href&amp;quot;,&amp;quot;src&amp;quot;],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+&amp;quot;&amp;quot;}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;(t.selectedIndex,t.parentNode&amp;amp;&amp;amp;t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype=&amp;quot;encoding&amp;quot;),b.support.checkOn||b.each([&amp;quot;radio&amp;quot;,&amp;quot;checkbox&amp;quot;],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute(&amp;quot;value&amp;quot;)?&amp;quot;on&amp;quot;:e.value}}}),b.each([&amp;quot;radio&amp;quot;,&amp;quot;checkbox&amp;quot;],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)&amp;gt;=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&amp;amp;&amp;amp;(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&amp;amp;&amp;amp;b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||&amp;quot;&amp;quot;).match(w)||[&amp;quot;&amp;quot;],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&amp;amp;&amp;amp;b.expr.match.needsContext.test(a),namespace:m.join(&amp;quot;.&amp;quot;)},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&amp;amp;&amp;amp;p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&amp;amp;&amp;amp;e.attachEvent(&amp;quot;on&amp;quot;+g,f))),p.add&amp;amp;&amp;amp;(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&amp;amp;&amp;amp;b._data(e);if(m&amp;amp;&amp;amp;(c=m.events)){t=(t||&amp;quot;&amp;quot;).match(w)||[&amp;quot;&amp;quot;],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||&amp;quot;&amp;quot;).split(&amp;quot;.&amp;quot;).sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&amp;amp;&amp;amp;RegExp(&amp;quot;(^|\\.)&amp;quot;+h.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;),u=o=f.length;while(o--)a=f[o],!i&amp;amp;&amp;amp;g!==a.origType||n&amp;amp;&amp;amp;n.guid!==a.guid||s&amp;amp;&amp;amp;!s.test(a.namespace)||r&amp;amp;&amp;amp;r!==a.selector&amp;amp;&amp;amp;(&amp;quot;**&amp;quot;!==r||!a.selector)||(f.splice(o,1),a.selector&amp;amp;&amp;amp;f.delegateCount--,p.remove&amp;amp;&amp;amp;p.remove.call(e,a));u&amp;amp;&amp;amp;!f.length&amp;amp;&amp;amp;(p.teardown&amp;amp;&amp;amp;p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&amp;amp;&amp;amp;(delete m.handle,b._removeData(e,&amp;quot;events&amp;quot;))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,&amp;quot;type&amp;quot;)?n.type:n,m=y.call(n,&amp;quot;namespace&amp;quot;)?n.namespace.split(&amp;quot;.&amp;quot;):[];if(l=f=i=i||o,3!==i.nodeType&amp;amp;&amp;amp;8!==i.nodeType&amp;amp;&amp;amp;!nt.test(g+b.event.triggered)&amp;amp;&amp;amp;(g.indexOf(&amp;quot;.&amp;quot;)&amp;gt;=0&amp;amp;&amp;amp;(m=g.split(&amp;quot;.&amp;quot;),g=m.shift(),m.sort()),u=0&amp;gt;g.indexOf(&amp;quot;:&amp;quot;)&amp;amp;&amp;amp;&amp;quot;on&amp;quot;+g,n=n[b.expando]?n:new b.Event(g,&amp;quot;object&amp;quot;==typeof n&amp;amp;&amp;amp;n),n.isTrigger=!0,n.namespace=m.join(&amp;quot;.&amp;quot;),n.namespace_re=n.namespace?RegExp(&amp;quot;(^|\\.)&amp;quot;+m.join(&amp;quot;\\.(?:.*\\.|)&amp;quot;)+&amp;quot;(\\.|$)&amp;quot;):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&amp;amp;&amp;amp;!p.noBubble&amp;amp;&amp;amp;!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&amp;amp;&amp;amp;h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&amp;amp;&amp;amp;!n.isPropagationStopped())n.type=d&amp;gt;1?c:p.bindType||g,s=(b._data(l,&amp;quot;events&amp;quot;)||{})[n.type]&amp;amp;&amp;amp;b._data(l,&amp;quot;handle&amp;quot;),s&amp;amp;&amp;amp;s.apply(l,r),s=u&amp;amp;&amp;amp;l[u],s&amp;amp;&amp;amp;b.acceptData(l)&amp;amp;&amp;amp;s.apply&amp;amp;&amp;amp;s.apply(l,r)===!1&amp;amp;&amp;amp;n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&amp;amp;&amp;amp;p._default.apply(i.ownerDocument,r)!==!1||&amp;quot;click&amp;quot;===g&amp;amp;&amp;amp;b.nodeName(i,&amp;quot;a&amp;quot;)||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&amp;amp;&amp;amp;(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&amp;amp;&amp;amp;(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,&amp;quot;events&amp;quot;)||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&amp;amp;&amp;amp;!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&amp;amp;&amp;amp;!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&amp;amp;&amp;amp;(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&amp;amp;&amp;amp;(e.result=r)===!1&amp;amp;&amp;amp;(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&amp;amp;&amp;amp;c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&amp;amp;&amp;amp;l.nodeType&amp;amp;&amp;amp;(!e.button||&amp;quot;click&amp;quot;!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&amp;amp;&amp;amp;(l.disabled!==!0||&amp;quot;click&amp;quot;!==e.type)){for(o=[],a=0;u&amp;gt;a;a++)i=n[a],r=i.selector+&amp;quot; &amp;quot;,o[r]===t&amp;amp;&amp;amp;(o[r]=i.needsContext?b(r,this).index(l)&amp;gt;=0:b.find(r,this,null,[l]).length),o[r]&amp;amp;&amp;amp;o.push(i);o.length&amp;amp;&amp;amp;s.push({elem:l,handlers:o})}return n.length&amp;gt;u&amp;amp;&amp;amp;s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&amp;amp;&amp;amp;(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:&amp;quot;altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which&amp;quot;.split(&amp;quot; &amp;quot;),fixHooks:{},keyHooks:{props:&amp;quot;char charCode key keyCode&amp;quot;.split(&amp;quot; &amp;quot;),filter:function(e,t){return null==e.which&amp;amp;&amp;amp;(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:&amp;quot;button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement&amp;quot;.split(&amp;quot; &amp;quot;),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&amp;amp;&amp;amp;null!=n.clientX&amp;amp;&amp;amp;(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&amp;amp;&amp;amp;a.scrollLeft||r&amp;amp;&amp;amp;r.scrollLeft||0)-(a&amp;amp;&amp;amp;a.clientLeft||r&amp;amp;&amp;amp;r.clientLeft||0),e.pageY=n.clientY+(a&amp;amp;&amp;amp;a.scrollTop||r&amp;amp;&amp;amp;r.scrollTop||0)-(a&amp;amp;&amp;amp;a.clientTop||r&amp;amp;&amp;amp;r.clientTop||0)),!e.relatedTarget&amp;amp;&amp;amp;u&amp;amp;&amp;amp;(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&amp;amp;s?1:2&amp;amp;s?3:4&amp;amp;s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,&amp;quot;input&amp;quot;)&amp;amp;&amp;amp;&amp;quot;checkbox&amp;quot;===this.type&amp;amp;&amp;amp;this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&amp;amp;&amp;amp;this.focus)try{return this.focus(),!1}catch(e){}},delegateType:&amp;quot;focusin&amp;quot;},blur:{trigger:function(){return this===o.activeElement&amp;amp;&amp;amp;this.blur?(this.blur(),!1):t},delegateType:&amp;quot;focusout&amp;quot;},beforeunload:{postDispatch:function(e){e.result!==t&amp;amp;&amp;amp;(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&amp;amp;&amp;amp;n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&amp;amp;&amp;amp;e.removeEventListener(t,n,!1)}:function(e,t,n){var r=&amp;quot;on&amp;quot;+t;e.detachEvent&amp;amp;&amp;amp;(typeof e[r]===i&amp;amp;&amp;amp;(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&amp;amp;&amp;amp;e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&amp;amp;&amp;amp;e.getPreventDefault()?it:ot):this.type=e,n&amp;amp;&amp;amp;b.extend(this,n),this.timeStamp=e&amp;amp;&amp;amp;e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&amp;amp;&amp;amp;(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&amp;amp;&amp;amp;(e.stopPropagation&amp;amp;&amp;amp;e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:&amp;quot;mouseover&amp;quot;,mouseleave:&amp;quot;mouseout&amp;quot;},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;&lt;br /&gt;
return(!i||i!==r&amp;amp;&amp;amp;!b.contains(r,i))&amp;amp;&amp;amp;(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,&amp;quot;form&amp;quot;)?!1:(b.event.add(this,&amp;quot;click._submit keypress._submit&amp;quot;,function(e){var n=e.target,r=b.nodeName(n,&amp;quot;input&amp;quot;)||b.nodeName(n,&amp;quot;button&amp;quot;)?n.form:t;r&amp;amp;&amp;amp;!b._data(r,&amp;quot;submitBubbles&amp;quot;)&amp;amp;&amp;amp;(b.event.add(r,&amp;quot;submit._submit&amp;quot;,function(e){e._submit_bubble=!0}),b._data(r,&amp;quot;submitBubbles&amp;quot;,!0))}),t)},postDispatch:function(e){e._submit_bubble&amp;amp;&amp;amp;(delete e._submit_bubble,this.parentNode&amp;amp;&amp;amp;!e.isTrigger&amp;amp;&amp;amp;b.event.simulate(&amp;quot;submit&amp;quot;,this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,&amp;quot;form&amp;quot;)?!1:(b.event.remove(this,&amp;quot;._submit&amp;quot;),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?((&amp;quot;checkbox&amp;quot;===this.type||&amp;quot;radio&amp;quot;===this.type)&amp;amp;&amp;amp;(b.event.add(this,&amp;quot;propertychange._change&amp;quot;,function(e){&amp;quot;checked&amp;quot;===e.originalEvent.propertyName&amp;amp;&amp;amp;(this._just_changed=!0)}),b.event.add(this,&amp;quot;click._change&amp;quot;,function(e){this._just_changed&amp;amp;&amp;amp;!e.isTrigger&amp;amp;&amp;amp;(this._just_changed=!1),b.event.simulate(&amp;quot;change&amp;quot;,this,e,!0)})),!1):(b.event.add(this,&amp;quot;beforeactivate._change&amp;quot;,function(e){var t=e.target;Z.test(t.nodeName)&amp;amp;&amp;amp;!b._data(t,&amp;quot;changeBubbles&amp;quot;)&amp;amp;&amp;amp;(b.event.add(t,&amp;quot;change._change&amp;quot;,function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate(&amp;quot;change&amp;quot;,this.parentNode,e,!0)}),b._data(t,&amp;quot;changeBubbles&amp;quot;,!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||&amp;quot;radio&amp;quot;!==n.type&amp;amp;&amp;amp;&amp;quot;checkbox&amp;quot;!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,&amp;quot;._change&amp;quot;),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:&amp;quot;focusin&amp;quot;,blur:&amp;quot;focusout&amp;quot;},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&amp;amp;&amp;amp;o.addEventListener(e,r,!0)},teardown:function(){0===--n&amp;amp;&amp;amp;o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if(&amp;quot;object&amp;quot;==typeof e){&amp;quot;string&amp;quot;!=typeof n&amp;amp;&amp;amp;(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&amp;amp;&amp;amp;null==i?(i=n,r=n=t):null==i&amp;amp;&amp;amp;(&amp;quot;string&amp;quot;==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&amp;amp;&amp;amp;(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&amp;amp;&amp;amp;e.preventDefault&amp;amp;&amp;amp;e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+&amp;quot;.&amp;quot;+i.namespace:i.origType,i.selector,i.handler),this;if(&amp;quot;object&amp;quot;==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||&amp;quot;function&amp;quot;==typeof n)&amp;amp;&amp;amp;(r=n,n=t),r===!1&amp;amp;&amp;amp;(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,&amp;quot;**&amp;quot;):this.off(t,e||&amp;quot;**&amp;quot;,n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x=&amp;quot;sizzle&amp;quot;+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1&amp;lt;&amp;lt;31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n&amp;gt;t;t++)if(this[t]===e)return t;return-1},_=&amp;quot;[\\x20\\t\\r\\n\\f]&amp;quot;,F=&amp;quot;(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+&amp;quot;,O=F.replace(&amp;quot;w&amp;quot;,&amp;quot;w#&amp;quot;),B=&amp;quot;([*^$|!~]?=)&amp;quot;,P=&amp;quot;\\[&amp;quot;+_+&amp;quot;*(&amp;quot;+F+&amp;quot;)&amp;quot;+_+&amp;quot;*(?:&amp;quot;+B+_+&amp;quot;*(?:([&#039;\&amp;quot;])((?:\\\\.|[^\\\\])*?)\\3|(&amp;quot;+O+&amp;quot;)|)|)&amp;quot;+_+&amp;quot;*\\]&amp;quot;,R=&amp;quot;:(&amp;quot;+F+&amp;quot;)(?:\\((([&#039;\&amp;quot;])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|&amp;quot;+P.replace(3,8)+&amp;quot;)*)|.*)\\)|)&amp;quot;,W=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;+|((?:^|[^\\\\])(?:\\\\.)*)&amp;quot;+_+&amp;quot;+$&amp;quot;,&amp;quot;g&amp;quot;),$=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*,&amp;quot;+_+&amp;quot;*&amp;quot;),I=RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*([\\x20\\t\\r\\n\\f&amp;gt;+~])&amp;quot;+_+&amp;quot;*&amp;quot;),z=RegExp(R),X=RegExp(&amp;quot;^&amp;quot;+O+&amp;quot;$&amp;quot;),U={ID:RegExp(&amp;quot;^#(&amp;quot;+F+&amp;quot;)&amp;quot;),CLASS:RegExp(&amp;quot;^\\.(&amp;quot;+F+&amp;quot;)&amp;quot;),NAME:RegExp(&amp;quot;^\\[name=[&#039;\&amp;quot;]?(&amp;quot;+F+&amp;quot;)[&#039;\&amp;quot;]?\\]&amp;quot;),TAG:RegExp(&amp;quot;^(&amp;quot;+F.replace(&amp;quot;w&amp;quot;,&amp;quot;w*&amp;quot;)+&amp;quot;)&amp;quot;),ATTR:RegExp(&amp;quot;^&amp;quot;+P),PSEUDO:RegExp(&amp;quot;^&amp;quot;+R),CHILD:RegExp(&amp;quot;^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(&amp;quot;+_+&amp;quot;*(even|odd|(([+-]|)(\\d*)n|)&amp;quot;+_+&amp;quot;*(?:([+-]|)&amp;quot;+_+&amp;quot;*(\\d+)|))&amp;quot;+_+&amp;quot;*\\)|)&amp;quot;,&amp;quot;i&amp;quot;),needsContext:RegExp(&amp;quot;^&amp;quot;+_+&amp;quot;*[&amp;gt;+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(&amp;quot;+_+&amp;quot;*((?:-\\d)?\\d*)&amp;quot;+_+&amp;quot;*\\)|)(?=[^-]|$)&amp;quot;,&amp;quot;i&amp;quot;)},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/&#039;|\\/g,Z=/\=[\x20\t\r\n\f]*([^&#039;&amp;quot;\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n=&amp;quot;0x&amp;quot;+t-65536;return n!==n?t:0&amp;gt;n?String.fromCharCode(n+65536):String.fromCharCode(55296|n&amp;gt;&amp;gt;10,56320|1023&amp;amp;n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+&amp;quot;&amp;quot;)}function it(){var e,t=[];return e=function(n,r){return t.push(n+=&amp;quot; &amp;quot;)&amp;gt;i.cacheLength&amp;amp;&amp;amp;delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement(&amp;quot;div&amp;quot;);try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&amp;amp;&amp;amp;c(t),t=t||p,n=n||[],!e||&amp;quot;string&amp;quot;!=typeof e)return n;if(1!==(s=t.nodeType)&amp;amp;&amp;amp;9!==s)return[];if(!d&amp;amp;&amp;amp;!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&amp;amp;&amp;amp;(o=t.ownerDocument.getElementById(a))&amp;amp;&amp;amp;y(t,o)&amp;amp;&amp;amp;o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&amp;amp;&amp;amp;T.getByClassName&amp;amp;&amp;amp;t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&amp;amp;&amp;amp;!h.test(e)){if(f=!0,g=x,m=t,v=9===s&amp;amp;&amp;amp;e,1===s&amp;amp;&amp;amp;&amp;quot;object&amp;quot;!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute(&amp;quot;id&amp;quot;))?g=f.replace(K,&amp;quot;\\$&amp;amp;&amp;quot;):t.setAttribute(&amp;quot;id&amp;quot;,g),g=&amp;quot;[id=&#039;&amp;quot;+g+&amp;quot;&#039;] &amp;quot;,u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&amp;amp;&amp;amp;t.parentNode||t,v=l.join(&amp;quot;,&amp;quot;)}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute(&amp;quot;id&amp;quot;)}}}return wt(e.replace(W,&amp;quot;$1&amp;quot;),t,n,r)}a=st.isXML=function(e){var t=e&amp;amp;&amp;amp;(e.ownerDocument||e).documentElement;return t?&amp;quot;HTML&amp;quot;!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&amp;amp;&amp;amp;9===n.nodeType&amp;amp;&amp;amp;n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment(&amp;quot;&amp;quot;)),!e.getElementsByTagName(&amp;quot;*&amp;quot;).length}),T.attributes=at(function(e){e.innerHTML=&amp;quot;&amp;lt;select&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;;var t=typeof e.lastChild.getAttribute(&amp;quot;multiple&amp;quot;);return&amp;quot;boolean&amp;quot;!==t&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!==t}),T.getByClassName=at(function(e){return e.innerHTML=&amp;quot;&amp;lt;div class=&#039;hidden e&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&#039;hidden&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,e.getElementsByClassName&amp;amp;&amp;amp;e.getElementsByClassName(&amp;quot;e&amp;quot;).length?(e.lastChild.className=&amp;quot;e&amp;quot;,2===e.getElementsByClassName(&amp;quot;e&amp;quot;).length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML=&amp;quot;&amp;lt;a name=&#039;&amp;quot;+x+&amp;quot;&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;div name=&#039;&amp;quot;+x+&amp;quot;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;,f.insertBefore(e,f.firstChild);var t=n.getElementsByName&amp;amp;&amp;amp;n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML=&amp;quot;&amp;lt;a href=&#039;#&#039;&amp;gt;&amp;lt;/a&amp;gt;&amp;quot;,e.firstChild&amp;amp;&amp;amp;typeof e.firstChild.getAttribute!==A&amp;amp;&amp;amp;&amp;quot;#&amp;quot;===e.firstChild.getAttribute(&amp;quot;href&amp;quot;)})?{}:{href:function(e){return e.getAttribute(&amp;quot;href&amp;quot;,2)},type:function(e){return e.getAttribute(&amp;quot;type&amp;quot;)}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&amp;amp;&amp;amp;!d){var n=t.getElementById(e);return n&amp;amp;&amp;amp;n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute(&amp;quot;id&amp;quot;)===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&amp;amp;&amp;amp;!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&amp;amp;&amp;amp;r.getAttributeNode(&amp;quot;id&amp;quot;).value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&amp;amp;&amp;amp;e.getAttributeNode(&amp;quot;id&amp;quot;);return n&amp;amp;&amp;amp;n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(&amp;quot;*&amp;quot;===e){while(n=o[i++])1===n.nodeType&amp;amp;&amp;amp;r.push(n);return r}return o},i.find.NAME=T.getByName&amp;amp;&amp;amp;function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&amp;amp;&amp;amp;function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[&amp;quot;:focus&amp;quot;],(T.qsa=rt(n.querySelectorAll))&amp;amp;&amp;amp;(at(function(e){e.innerHTML=&amp;quot;&amp;lt;select&amp;gt;&amp;lt;option selected=&#039;&#039;&amp;gt;&amp;lt;/option&amp;gt;&amp;lt;/select&amp;gt;&amp;quot;,e.querySelectorAll(&amp;quot;[selected]&amp;quot;).length||h.push(&amp;quot;\\[&amp;quot;+_+&amp;quot;*(?:checked|disabled|ismap|multiple|readonly|selected|value)&amp;quot;),e.querySelectorAll(&amp;quot;:checked&amp;quot;).length||h.push(&amp;quot;:checked&amp;quot;)}),at(function(e){e.innerHTML=&amp;quot;&amp;lt;input type=&#039;hidden&#039; i=&#039;&#039;/&amp;gt;&amp;quot;,e.querySelectorAll(&amp;quot;[i^=&#039;&#039;]&amp;quot;).length&amp;amp;&amp;amp;h.push(&amp;quot;[*^$]=&amp;quot;+_+&amp;quot;*(?:\&amp;quot;\&amp;quot;|&#039;&#039;)&amp;quot;),e.querySelectorAll(&amp;quot;:enabled&amp;quot;).length||h.push(&amp;quot;:enabled&amp;quot;,&amp;quot;:disabled&amp;quot;),e.querySelectorAll(&amp;quot;*,:x&amp;quot;),h.push(&amp;quot;,.*:&amp;quot;)})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&amp;amp;&amp;amp;at(function(e){T.disconnectedMatch=m.call(e,&amp;quot;div&amp;quot;),m.call(e,&amp;quot;[s!=&#039;&#039;]:x&amp;quot;),g.push(&amp;quot;!=&amp;quot;,R)}),h=RegExp(h.join(&amp;quot;|&amp;quot;)),g=RegExp(g.join(&amp;quot;|&amp;quot;)),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&amp;amp;&amp;amp;t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&amp;amp;&amp;amp;16&amp;amp;e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&amp;amp;&amp;amp;e.compareDocumentPosition&amp;amp;&amp;amp;e.compareDocumentPosition(t))?1&amp;amp;r||e.parentNode&amp;amp;&amp;amp;11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&amp;amp;r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),t=t.replace(Z,&amp;quot;=&#039;$1&#039;]&amp;quot;),!(!T.matchesSelector||d||g&amp;amp;&amp;amp;g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&amp;amp;&amp;amp;11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length&amp;gt;0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&amp;amp;&amp;amp;c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&amp;amp;&amp;amp;e[t]===!0?t:n&amp;amp;&amp;amp;n.specified?n.value:null},st.error=function(e){throw Error(&amp;quot;Syntax error, unrecognized expression: &amp;quot;+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&amp;amp;&amp;amp;(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&amp;amp;&amp;amp;e,r=n&amp;amp;&amp;amp;(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===n&amp;amp;&amp;amp;t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return(&amp;quot;input&amp;quot;===n||&amp;quot;button&amp;quot;===n)&amp;amp;&amp;amp;t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&amp;amp;&amp;amp;(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n=&amp;quot;&amp;quot;,r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(&amp;quot;string&amp;quot;==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{&amp;quot;&amp;gt;&amp;quot;:{dir:&amp;quot;parentNode&amp;quot;,first:!0},&amp;quot; &amp;quot;:{dir:&amp;quot;parentNode&amp;quot;},&amp;quot;+&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;,first:!0},&amp;quot;~&amp;quot;:{dir:&amp;quot;previousSibling&amp;quot;}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||&amp;quot;&amp;quot;).replace(et,tt),&amp;quot;~=&amp;quot;===e[2]&amp;amp;&amp;amp;(e[3]=&amp;quot; &amp;quot;+e[3]+&amp;quot; &amp;quot;),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),&amp;quot;nth&amp;quot;===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(&amp;quot;even&amp;quot;===e[3]||&amp;quot;odd&amp;quot;===e[3])),e[5]=+(e[7]+e[8]||&amp;quot;odd&amp;quot;===e[3])):e[3]&amp;amp;&amp;amp;st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&amp;amp;&amp;amp;e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&amp;amp;&amp;amp;z.test(n)&amp;amp;&amp;amp;(t=ft(n,!0))&amp;amp;&amp;amp;(t=n.indexOf(&amp;quot;)&amp;quot;,n.length-t)-n.length)&amp;amp;&amp;amp;(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return&amp;quot;*&amp;quot;===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&amp;amp;&amp;amp;t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+&amp;quot; &amp;quot;];return t||(t=RegExp(&amp;quot;(^|&amp;quot;+_+&amp;quot;)&amp;quot;+e+&amp;quot;(&amp;quot;+_+&amp;quot;|$)&amp;quot;))&amp;amp;&amp;amp;k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&amp;amp;&amp;amp;e.getAttribute(&amp;quot;class&amp;quot;)||&amp;quot;&amp;quot;)})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?&amp;quot;!=&amp;quot;===t:t?(i+=&amp;quot;&amp;quot;,&amp;quot;=&amp;quot;===t?i===n:&amp;quot;!=&amp;quot;===t?i!==n:&amp;quot;^=&amp;quot;===t?n&amp;amp;&amp;amp;0===i.indexOf(n):&amp;quot;*=&amp;quot;===t?n&amp;amp;&amp;amp;i.indexOf(n)&amp;gt;-1:&amp;quot;$=&amp;quot;===t?n&amp;amp;&amp;amp;i.slice(-n.length)===n:&amp;quot;~=&amp;quot;===t?(&amp;quot; &amp;quot;+i+&amp;quot; &amp;quot;).indexOf(n)&amp;gt;-1:&amp;quot;|=&amp;quot;===t?i===n||i.slice(0,n.length+1)===n+&amp;quot;-&amp;quot;:!1):!0}},CHILD:function(e,t,n,r,i){var o=&amp;quot;nth&amp;quot;!==e.slice(0,3),a=&amp;quot;last&amp;quot;!==e.slice(-4),s=&amp;quot;of-type&amp;quot;===t;return 1===r&amp;amp;&amp;amp;0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?&amp;quot;nextSibling&amp;quot;:&amp;quot;previousSibling&amp;quot;,m=t.parentNode,y=s&amp;amp;&amp;amp;t.nodeName.toLowerCase(),v=!u&amp;amp;&amp;amp;!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=&amp;quot;only&amp;quot;===e&amp;amp;&amp;amp;!h&amp;amp;&amp;amp;&amp;quot;nextSibling&amp;quot;}return!0}if(h=[a?m.firstChild:m.lastChild],a&amp;amp;&amp;amp;v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&amp;amp;&amp;amp;l[1],f=l[0]===N&amp;amp;&amp;amp;l[2],p=d&amp;amp;&amp;amp;m.childNodes[d];while(p=++d&amp;amp;&amp;amp;p&amp;amp;&amp;amp;p[g]||(f=d=0)||h.pop())if(1===p.nodeType&amp;amp;&amp;amp;++f&amp;amp;&amp;amp;p===t){c[e]=[N,d,f];break}}else if(v&amp;amp;&amp;amp;(l=(t[x]||(t[x]={}))[e])&amp;amp;&amp;amp;l[0]===N)f=l[1];else while(p=++d&amp;amp;&amp;amp;p&amp;amp;&amp;amp;p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&amp;amp;&amp;amp;++f&amp;amp;&amp;amp;(v&amp;amp;&amp;amp;((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&amp;amp;&amp;amp;f/r&amp;gt;=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error(&amp;quot;unsupported pseudo: &amp;quot;+e);return r[x]?r(t):r.length&amp;gt;1?(n=[e,e,&amp;quot;&amp;quot;,t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,&amp;quot;$1&amp;quot;));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&amp;amp;&amp;amp;(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length&amp;gt;0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)&amp;gt;-1}}),lang:ot(function(e){return X.test(e||&amp;quot;&amp;quot;)||st.error(&amp;quot;unsupported lang: &amp;quot;+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute(&amp;quot;xml:lang&amp;quot;)||t.getAttribute(&amp;quot;lang&amp;quot;):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+&amp;quot;-&amp;quot;);while((t=t.parentNode)&amp;amp;&amp;amp;1===t.nodeType);return!1}}),target:function(t){var n=e.location&amp;amp;&amp;amp;e.location.hash;return n&amp;amp;&amp;amp;n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&amp;amp;&amp;amp;(!p.hasFocus||p.hasFocus())&amp;amp;&amp;amp;!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===t&amp;amp;&amp;amp;!!e.checked||&amp;quot;option&amp;quot;===t&amp;amp;&amp;amp;!!e.selected},selected:function(e){return e.parentNode&amp;amp;&amp;amp;e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName&amp;gt;&amp;quot;@&amp;quot;||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return&amp;quot;input&amp;quot;===t&amp;amp;&amp;amp;&amp;quot;button&amp;quot;===e.type||&amp;quot;button&amp;quot;===t},text:function(e){var t;return&amp;quot;input&amp;quot;===e.nodeName.toLowerCase()&amp;amp;&amp;amp;&amp;quot;text&amp;quot;===e.type&amp;amp;&amp;amp;(null==(t=e.getAttribute(&amp;quot;type&amp;quot;))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0&amp;gt;n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t&amp;gt;n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t&amp;gt;n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0&amp;gt;n?n+t:n;for(;--r&amp;gt;=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0&amp;gt;n?n+t:n;for(;t&amp;gt;++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+&amp;quot; &amp;quot;];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&amp;amp;&amp;amp;(r&amp;amp;&amp;amp;(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&amp;amp;&amp;amp;(n=r.shift(),o.push({value:n,type:r[0].replace(W,&amp;quot; &amp;quot;)}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&amp;amp;&amp;amp;!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r=&amp;quot;&amp;quot;;for(;n&amp;gt;t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&amp;amp;&amp;amp;&amp;quot;parentNode&amp;quot;===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+&amp;quot; &amp;quot;+a;if(s){while(t=t[i])if((1===t.nodeType||o)&amp;amp;&amp;amp;e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&amp;amp;&amp;amp;l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length&amp;gt;1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u&amp;gt;s;s++)(o=e[s])&amp;amp;&amp;amp;(!n||n(o,r,i))&amp;amp;&amp;amp;(a.push(o),l&amp;amp;&amp;amp;t.push(s));return a}function yt(e,t,n,r,i,o){return r&amp;amp;&amp;amp;!r[x]&amp;amp;&amp;amp;(r=yt(r)),i&amp;amp;&amp;amp;!i[x]&amp;amp;&amp;amp;(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||&amp;quot;*&amp;quot;,s.nodeType?[s]:s,[]),m=!e||!o&amp;amp;&amp;amp;t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&amp;amp;&amp;amp;n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&amp;amp;&amp;amp;(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&amp;amp;&amp;amp;l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&amp;amp;&amp;amp;(l=i?M.call(o,p):f[c])&amp;gt;-1&amp;amp;&amp;amp;(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[&amp;quot; &amp;quot;],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)&amp;gt;-1},s,!0),f=[function(e,n,r){return!a&amp;amp;&amp;amp;(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o&amp;gt;u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o&amp;gt;r;r++)if(i.relative[e[r].type])break;return yt(u&amp;gt;1&amp;amp;&amp;amp;gt(f),u&amp;gt;1&amp;amp;&amp;amp;dt(e.slice(0,u-1)).replace(W,&amp;quot;$1&amp;quot;),n,r&amp;gt;u&amp;amp;&amp;amp;vt(e.slice(u,r)),o&amp;gt;r&amp;amp;&amp;amp;vt(e=e.slice(r)),o&amp;gt;r&amp;amp;&amp;amp;dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length&amp;gt;0,a=e.length&amp;gt;0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b=&amp;quot;0&amp;quot;,x=s&amp;amp;&amp;amp;[],w=null!=d,T=l,C=s||a&amp;amp;&amp;amp;i.find.TAG(&amp;quot;*&amp;quot;,d&amp;amp;&amp;amp;u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&amp;amp;&amp;amp;(l=u!==p&amp;amp;&amp;amp;u,r=n);null!=(h=C[b]);b++){if(a&amp;amp;&amp;amp;h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&amp;amp;&amp;amp;(N=k,r=++n)}o&amp;amp;&amp;amp;((h=!m&amp;amp;&amp;amp;h)&amp;amp;&amp;amp;v--,s&amp;amp;&amp;amp;x.push(h))}if(v+=b,o&amp;amp;&amp;amp;b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v&amp;gt;0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&amp;amp;&amp;amp;!s&amp;amp;&amp;amp;y.length&amp;gt;0&amp;amp;&amp;amp;v+t.length&amp;gt;1&amp;amp;&amp;amp;st.uniqueSort(f)}return w&amp;amp;&amp;amp;(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+&amp;quot; &amp;quot;];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i&amp;gt;r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&amp;amp;&amp;amp;1===p.length){if(a=p[0]=p[0].slice(0),a.length&amp;gt;2&amp;amp;&amp;amp;&amp;quot;ID&amp;quot;===(u=a[0]).type&amp;amp;&amp;amp;9===t.nodeType&amp;amp;&amp;amp;!d&amp;amp;&amp;amp;i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&amp;amp;&amp;amp;(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&amp;amp;&amp;amp;t.parentNode||t))){if(a.splice(o,1),e=r.length&amp;amp;&amp;amp;dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[&amp;quot;:&amp;quot;]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if(&amp;quot;string&amp;quot;!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i&amp;gt;t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i&amp;gt;t;t++)b.find(e,this[t],n);return n=this.pushStack(i&amp;gt;1?b.unique(n):n),n.selector=(this.selector?this.selector+&amp;quot; &amp;quot;:&amp;quot;&amp;quot;)+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r&amp;gt;t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&amp;amp;&amp;amp;(&amp;quot;string&amp;quot;==typeof e?lt.test(e)?b(e,this.context).index(this[0])&amp;gt;=0:b.filter(e,this).length&amp;gt;0:this.filter(e).length&amp;gt;0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||&amp;quot;string&amp;quot;!=typeof e?b(e,t||this.context):0;for(;i&amp;gt;r;r++){n=this[r];while(n&amp;amp;&amp;amp;n.ownerDocument&amp;amp;&amp;amp;n!==t&amp;amp;&amp;amp;11!==n.nodeType){if(a?a.index(n)&amp;gt;-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length&amp;gt;1?b.unique(o):o)},index:function(e){return e?&amp;quot;string&amp;quot;==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&amp;amp;&amp;amp;this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=&amp;quot;string&amp;quot;==typeof e?b(e,t):b.makeArray(e&amp;amp;&amp;amp;e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&amp;amp;&amp;amp;1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&amp;amp;&amp;amp;11!==t.nodeType?t:null},parents:function(e){return b.dir(e,&amp;quot;parentNode&amp;quot;)},parentsUntil:function(e,t,n){return b.dir(e,&amp;quot;parentNode&amp;quot;,n)},next:function(e){return pt(e,&amp;quot;nextSibling&amp;quot;)},prev:function(e){return pt(e,&amp;quot;previousSibling&amp;quot;)},nextAll:function(e){return b.dir(e,&amp;quot;nextSibling&amp;quot;)},prevAll:function(e){return b.dir(e,&amp;quot;previousSibling&amp;quot;)},nextUntil:function(e,t,n){return b.dir(e,&amp;quot;nextSibling&amp;quot;,n)},prevUntil:function(e,t,n){return b.dir(e,&amp;quot;previousSibling&amp;quot;,n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,&amp;quot;iframe&amp;quot;)?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&amp;amp;&amp;amp;&amp;quot;string&amp;quot;==typeof r&amp;amp;&amp;amp;(i=b.filter(r,i)),i=this.length&amp;gt;1&amp;amp;&amp;amp;!ct[e]?b.unique(i):i,this.length&amp;gt;1&amp;amp;&amp;amp;st.test(e)&amp;amp;&amp;amp;(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&amp;amp;&amp;amp;(e=&amp;quot;:not(&amp;quot;+e+&amp;quot;)&amp;quot;),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&amp;amp;&amp;amp;9!==o.nodeType&amp;amp;&amp;amp;(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&amp;amp;&amp;amp;i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&amp;amp;&amp;amp;e!==t&amp;amp;&amp;amp;n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if(&amp;quot;string&amp;quot;==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)&amp;gt;=0===n})}function dt(e){var t=ht.split(&amp;quot;|&amp;quot;),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=&amp;quot;abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video&amp;quot;,gt=/ jQuery\d+=&amp;quot;(?:null|\d+)&amp;quot;/g,mt=RegExp(&amp;quot;&amp;lt;(?:&amp;quot;+ht+&amp;quot;)[\\s/&amp;gt;]&amp;quot;,&amp;quot;i&amp;quot;),yt=/^\s+/,vt=/&amp;lt;(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^&amp;gt;]*)\/&amp;gt;/gi,bt=/&amp;lt;([\w:]+)/,xt=/&amp;lt;tbody/i,wt=/&amp;lt;|&amp;amp;#?\w+;/,Tt=/&amp;lt;(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*&amp;lt;!(?:\[CDATA\[|--)|(?:\]\]|--)&amp;gt;\s*$/g,At={option:[1,&amp;quot;&amp;lt;select multiple=&#039;multiple&#039;&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/select&amp;gt;&amp;quot;],legend:[1,&amp;quot;&amp;lt;fieldset&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/fieldset&amp;gt;&amp;quot;],area:[1,&amp;quot;&amp;lt;map&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/map&amp;gt;&amp;quot;],param:[1,&amp;quot;&amp;lt;object&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/object&amp;gt;&amp;quot;],thead:[1,&amp;quot;&amp;lt;table&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/table&amp;gt;&amp;quot;],tr:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],col:[2,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;colgroup&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/colgroup&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],td:[3,&amp;quot;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;],_default:b.support.htmlSerialize?[0,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]:[1,&amp;quot;X&amp;lt;div&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;]},jt=dt(o),Dt=jt.appendChild(o.createElement(&amp;quot;div&amp;quot;));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&amp;amp;&amp;amp;this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&amp;amp;&amp;amp;t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&amp;amp;&amp;amp;1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,&amp;quot;body&amp;quot;)||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&amp;amp;&amp;amp;this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&amp;amp;&amp;amp;this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&amp;amp;&amp;amp;this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length&amp;gt;0)&amp;amp;&amp;amp;(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&amp;amp;&amp;amp;(t&amp;amp;&amp;amp;b.contains(n.ownerDocument,n)&amp;amp;&amp;amp;Mt(Ot(n,&amp;quot;script&amp;quot;)),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&amp;amp;&amp;amp;b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&amp;amp;&amp;amp;b.nodeName(e,&amp;quot;select&amp;quot;)&amp;amp;&amp;amp;(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,&amp;quot;&amp;quot;):t;if(!(&amp;quot;string&amp;quot;!=typeof e||Tt.test(e)||!b.support.htmlSerialize&amp;amp;&amp;amp;mt.test(e)||!b.support.leadingWhitespace&amp;amp;&amp;amp;yt.test(e)||At[(bt.exec(e)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase()])){e=e.replace(vt,&amp;quot;&amp;lt;$1&amp;gt;&amp;lt;/$2&amp;gt;&amp;quot;);try{for(;i&amp;gt;r;r++)n=this[r]||{},1===n.nodeType&amp;amp;&amp;amp;(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&amp;amp;&amp;amp;this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||&amp;quot;string&amp;quot;==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&amp;amp;&amp;amp;(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1&amp;gt;=p||&amp;quot;string&amp;quot;!=typeof g||b.support.checkClone)&amp;amp;&amp;amp;Ct.test(g))return this.each(function(i){var o=d.eq(i);m&amp;amp;&amp;amp;(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&amp;amp;&amp;amp;(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&amp;amp;&amp;amp;(l=i),i)){for(n=n&amp;amp;&amp;amp;b.nodeName(i,&amp;quot;tr&amp;quot;),s=b.map(Ot(l,&amp;quot;script&amp;quot;),Ht),a=s.length;p&amp;gt;c;c++)o=l,c!==h&amp;amp;&amp;amp;(o=b.clone(o,!0,!0),a&amp;amp;&amp;amp;b.merge(s,Ot(o,&amp;quot;script&amp;quot;))),r.call(n&amp;amp;&amp;amp;b.nodeName(this[c],&amp;quot;table&amp;quot;)?Lt(this[c],&amp;quot;tbody&amp;quot;):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a&amp;gt;c;c++)o=s[c],kt.test(o.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;!b._data(o,&amp;quot;globalEval&amp;quot;)&amp;amp;&amp;amp;b.contains(u,o)&amp;amp;&amp;amp;(o.src?b.ajax({url:o.src,type:&amp;quot;GET&amp;quot;,dataType:&amp;quot;script&amp;quot;,async:!1,global:!1,&amp;quot;throws&amp;quot;:!0}):b.globalEval((o.text||o.textContent||o.innerHTML||&amp;quot;&amp;quot;).replace(St,&amp;quot;&amp;quot;)));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode(&amp;quot;type&amp;quot;);return e.type=(t&amp;amp;&amp;amp;t.specified)+&amp;quot;/&amp;quot;+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(&amp;quot;type&amp;quot;),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,&amp;quot;globalEval&amp;quot;,!t||b._data(t[r],&amp;quot;globalEval&amp;quot;))}function _t(e,t){if(1===t.nodeType&amp;amp;&amp;amp;b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i&amp;gt;r;r++)b.event.add(t,n,s[n][r])}a.data&amp;amp;&amp;amp;(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&amp;amp;&amp;amp;t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}&amp;quot;script&amp;quot;===n&amp;amp;&amp;amp;t.text!==e.text?(Ht(t).text=e.text,qt(t)):&amp;quot;object&amp;quot;===n?(t.parentNode&amp;amp;&amp;amp;(t.outerHTML=e.outerHTML),b.support.html5Clone&amp;amp;&amp;amp;e.innerHTML&amp;amp;&amp;amp;!b.trim(t.innerHTML)&amp;amp;&amp;amp;(t.innerHTML=e.innerHTML)):&amp;quot;input&amp;quot;===n&amp;amp;&amp;amp;Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&amp;amp;&amp;amp;(t.value=e.value)):&amp;quot;option&amp;quot;===n?t.defaultSelected=t.selected=e.defaultSelected:(&amp;quot;input&amp;quot;===n||&amp;quot;textarea&amp;quot;===n)&amp;amp;&amp;amp;(t.defaultValue=e.defaultValue)}}b.each({appendTo:&amp;quot;append&amp;quot;,prependTo:&amp;quot;prepend&amp;quot;,insertBefore:&amp;quot;before&amp;quot;,insertAfter:&amp;quot;after&amp;quot;,replaceAll:&amp;quot;replaceWith&amp;quot;},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a&amp;gt;=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||&amp;quot;*&amp;quot;):typeof e.querySelectorAll!==i?e.querySelectorAll(n||&amp;quot;*&amp;quot;):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&amp;amp;&amp;amp;b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&amp;amp;&amp;amp;(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test(&amp;quot;&amp;lt;&amp;quot;+e.nodeName+&amp;quot;&amp;gt;&amp;quot;)?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&amp;amp;&amp;amp;b.support.noCloneChecked||1!==e.nodeType&amp;amp;&amp;amp;11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&amp;amp;&amp;amp;Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,&amp;quot;script&amp;quot;),r.length&amp;gt;0&amp;amp;&amp;amp;Mt(r,!u&amp;amp;&amp;amp;Ot(e,&amp;quot;script&amp;quot;)),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p&amp;gt;h;h++)if(o=e[h],o||0===o)if(&amp;quot;object&amp;quot;===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(&amp;quot;div&amp;quot;)),u=(bt.exec(o)||[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,&amp;quot;&amp;lt;$1&amp;gt;&amp;lt;/$2&amp;gt;&amp;quot;)+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&amp;amp;&amp;amp;yt.test(o)&amp;amp;&amp;amp;d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o=&amp;quot;table&amp;quot;!==u||xt.test(o)?&amp;quot;&amp;lt;table&amp;gt;&amp;quot;!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&amp;amp;&amp;amp;o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],&amp;quot;tbody&amp;quot;)&amp;amp;&amp;amp;!l.childNodes.length&amp;amp;&amp;amp;o.removeChild(l)&lt;br /&gt;
}b.merge(d,s.childNodes),s.textContent=&amp;quot;&amp;quot;;while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&amp;amp;&amp;amp;f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,&amp;quot;input&amp;quot;),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&amp;amp;&amp;amp;(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),&amp;quot;script&amp;quot;),a&amp;amp;&amp;amp;Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||&amp;quot;&amp;quot;)&amp;amp;&amp;amp;n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&amp;amp;&amp;amp;(o=n[u],a=o&amp;amp;&amp;amp;l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&amp;amp;&amp;amp;(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(&amp;quot;^(&amp;quot;+x+&amp;quot;)(.*)$&amp;quot;,&amp;quot;i&amp;quot;),Yt=RegExp(&amp;quot;^(&amp;quot;+x+&amp;quot;)(?!px)[a-z%]+$&amp;quot;,&amp;quot;i&amp;quot;),Jt=RegExp(&amp;quot;^([+-])=(&amp;quot;+x+&amp;quot;)&amp;quot;,&amp;quot;i&amp;quot;),Gt={BODY:&amp;quot;block&amp;quot;},Qt={position:&amp;quot;absolute&amp;quot;,visibility:&amp;quot;hidden&amp;quot;,display:&amp;quot;block&amp;quot;},Kt={letterSpacing:0,fontWeight:400},Zt=[&amp;quot;Top&amp;quot;,&amp;quot;Right&amp;quot;,&amp;quot;Bottom&amp;quot;,&amp;quot;Left&amp;quot;],en=[&amp;quot;Webkit&amp;quot;,&amp;quot;O&amp;quot;,&amp;quot;Moz&amp;quot;,&amp;quot;ms&amp;quot;];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,&amp;quot;none&amp;quot;===b.css(e,&amp;quot;display&amp;quot;)||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s&amp;gt;a;a++)r=e[a],r.style&amp;amp;&amp;amp;(o[a]=b._data(r,&amp;quot;olddisplay&amp;quot;),n=r.style.display,t?(o[a]||&amp;quot;none&amp;quot;!==n||(r.style.display=&amp;quot;&amp;quot;),&amp;quot;&amp;quot;===r.style.display&amp;amp;&amp;amp;nn(r)&amp;amp;&amp;amp;(o[a]=b._data(r,&amp;quot;olddisplay&amp;quot;,un(r.nodeName)))):o[a]||(i=nn(r),(n&amp;amp;&amp;amp;&amp;quot;none&amp;quot;!==n||!i)&amp;amp;&amp;amp;b._data(r,&amp;quot;olddisplay&amp;quot;,i?n:b.css(r,&amp;quot;display&amp;quot;))));for(a=0;s&amp;gt;a;a++)r=e[a],r.style&amp;amp;&amp;amp;(t&amp;amp;&amp;amp;&amp;quot;none&amp;quot;!==r.style.display&amp;amp;&amp;amp;&amp;quot;&amp;quot;!==r.style.display||(r.style.display=t?o[a]||&amp;quot;&amp;quot;:&amp;quot;none&amp;quot;));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i&amp;gt;s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length&amp;gt;1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t=&amp;quot;boolean&amp;quot;==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,&amp;quot;opacity&amp;quot;);return&amp;quot;&amp;quot;===n?&amp;quot;1&amp;quot;:n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{&amp;quot;float&amp;quot;:b.support.cssFloat?&amp;quot;cssFloat&amp;quot;:&amp;quot;styleFloat&amp;quot;},style:function(e,n,r,i){if(e&amp;amp;&amp;amp;3!==e.nodeType&amp;amp;&amp;amp;8!==e.nodeType&amp;amp;&amp;amp;e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in s&amp;amp;&amp;amp;(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,&amp;quot;string&amp;quot;===a&amp;amp;&amp;amp;(o=Jt.exec(r))&amp;amp;&amp;amp;(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a=&amp;quot;number&amp;quot;),!(null==r||&amp;quot;number&amp;quot;===a&amp;amp;&amp;amp;isNaN(r)||(&amp;quot;number&amp;quot;!==a||b.cssNumber[u]||(r+=&amp;quot;px&amp;quot;),b.support.clearCloneStyle||&amp;quot;&amp;quot;!==r||0!==n.indexOf(&amp;quot;background&amp;quot;)||(l[n]=&amp;quot;inherit&amp;quot;),s&amp;amp;&amp;amp;&amp;quot;set&amp;quot;in s&amp;amp;&amp;amp;(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&amp;amp;&amp;amp;&amp;quot;get&amp;quot;in s&amp;amp;&amp;amp;(a=s.get(e,!0,r)),a===t&amp;amp;&amp;amp;(a=Wt(e,n,i)),&amp;quot;normal&amp;quot;===a&amp;amp;&amp;amp;n in Kt&amp;amp;&amp;amp;(a=Kt[n]),&amp;quot;&amp;quot;===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&amp;amp;&amp;amp;(&amp;quot;&amp;quot;!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&amp;amp;&amp;amp;Ut.test(n)&amp;amp;&amp;amp;(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&amp;amp;&amp;amp;(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&amp;amp;&amp;amp;l&amp;amp;&amp;amp;l[n]&amp;amp;&amp;amp;(u=l[n]),Yt.test(u)&amp;amp;&amp;amp;!zt.test(n)&amp;amp;&amp;amp;(i=l.left,o=e.runtimeStyle,a=o&amp;amp;&amp;amp;o.left,a&amp;amp;&amp;amp;(o.left=e.currentStyle.left),l.left=&amp;quot;fontSize&amp;quot;===n?&amp;quot;1em&amp;quot;:u,u=l.pixelLeft+&amp;quot;px&amp;quot;,l.left=i,a&amp;amp;&amp;amp;(o.left=a)),&amp;quot;&amp;quot;===u?&amp;quot;auto&amp;quot;:u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||&amp;quot;px&amp;quot;):t}function an(e,t,n,r,i){var o=n===(r?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;)?4:&amp;quot;width&amp;quot;===t?1:0,a=0;for(;4&amp;gt;o;o+=2)&amp;quot;margin&amp;quot;===n&amp;amp;&amp;amp;(a+=b.css(e,n+Zt[o],!0,i)),r?(&amp;quot;content&amp;quot;===n&amp;amp;&amp;amp;(a-=b.css(e,&amp;quot;padding&amp;quot;+Zt[o],!0,i)),&amp;quot;margin&amp;quot;!==n&amp;amp;&amp;amp;(a-=b.css(e,&amp;quot;border&amp;quot;+Zt[o]+&amp;quot;Width&amp;quot;,!0,i))):(a+=b.css(e,&amp;quot;padding&amp;quot;+Zt[o],!0,i),&amp;quot;padding&amp;quot;!==n&amp;amp;&amp;amp;(a+=b.css(e,&amp;quot;border&amp;quot;+Zt[o]+&amp;quot;Width&amp;quot;,!0,i)));return a}function sn(e,t,n){var r=!0,i=&amp;quot;width&amp;quot;===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===b.css(e,&amp;quot;boxSizing&amp;quot;,!1,o);if(0&amp;gt;=i||null==i){if(i=Wt(e,t,o),(0&amp;gt;i||null==i)&amp;amp;&amp;amp;(i=e.style[t]),Yt.test(i))return i;r=a&amp;amp;&amp;amp;(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?&amp;quot;border&amp;quot;:&amp;quot;content&amp;quot;),r,o)+&amp;quot;px&amp;quot;}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),&amp;quot;none&amp;quot;!==n&amp;amp;&amp;amp;n||(Pt=(Pt||b(&amp;quot;&amp;lt;iframe frameborder=&#039;0&#039; width=&#039;0&#039; height=&#039;0&#039;/&amp;gt;&amp;quot;).css(&amp;quot;cssText&amp;quot;,&amp;quot;display:block !important&amp;quot;)).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(&amp;quot;&amp;lt;!doctype html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;quot;),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],&amp;quot;display&amp;quot;);return n.remove(),r}b.each([&amp;quot;height&amp;quot;,&amp;quot;width&amp;quot;],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&amp;amp;&amp;amp;Xt.test(b.css(e,&amp;quot;display&amp;quot;))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&amp;amp;&amp;amp;Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&amp;amp;&amp;amp;&amp;quot;border-box&amp;quot;===b.css(e,&amp;quot;boxSizing&amp;quot;,!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&amp;amp;&amp;amp;e.currentStyle?e.currentStyle.filter:e.style.filter)||&amp;quot;&amp;quot;)?.01*parseFloat(RegExp.$1)+&amp;quot;&amp;quot;:t?&amp;quot;1&amp;quot;:&amp;quot;&amp;quot;},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?&amp;quot;alpha(opacity=&amp;quot;+100*t+&amp;quot;)&amp;quot;:&amp;quot;&amp;quot;,o=r&amp;amp;&amp;amp;r.filter||n.filter||&amp;quot;&amp;quot;;n.zoom=1,(t&amp;gt;=1||&amp;quot;&amp;quot;===t)&amp;amp;&amp;amp;&amp;quot;&amp;quot;===b.trim(o.replace($t,&amp;quot;&amp;quot;))&amp;amp;&amp;amp;n.removeAttribute&amp;amp;&amp;amp;(n.removeAttribute(&amp;quot;filter&amp;quot;),&amp;quot;&amp;quot;===t||r&amp;amp;&amp;amp;!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+&amp;quot; &amp;quot;+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:&amp;quot;inline-block&amp;quot;},Wt,[e,&amp;quot;marginRight&amp;quot;]):t}}),!b.support.pixelPosition&amp;amp;&amp;amp;b.fn.position&amp;amp;&amp;amp;b.each([&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+&amp;quot;px&amp;quot;:r):t}}})}),b.expr&amp;amp;&amp;amp;b.expr.filters&amp;amp;&amp;amp;(b.expr.filters.hidden=function(e){return 0&amp;gt;=e.offsetWidth&amp;amp;&amp;amp;0&amp;gt;=e.offsetHeight||!b.support.reliableHiddenOffsets&amp;amp;&amp;amp;&amp;quot;none&amp;quot;===(e.style&amp;amp;&amp;amp;e.style.display||b.css(e,&amp;quot;display&amp;quot;))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:&amp;quot;&amp;quot;,padding:&amp;quot;&amp;quot;,border:&amp;quot;Width&amp;quot;},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o=&amp;quot;string&amp;quot;==typeof n?n.split(&amp;quot; &amp;quot;):[n];for(;4&amp;gt;r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,&amp;quot;elements&amp;quot;);return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&amp;amp;&amp;amp;!b(this).is(&amp;quot;:disabled&amp;quot;)&amp;amp;&amp;amp;hn.test(this.nodeName)&amp;amp;&amp;amp;!dn.test(e)&amp;amp;&amp;amp;(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,&amp;quot;\r\n&amp;quot;)}}):{name:t.name,value:n.replace(fn,&amp;quot;\r\n&amp;quot;)}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?&amp;quot;&amp;quot;:t,i[i.length]=encodeURIComponent(e)+&amp;quot;=&amp;quot;+encodeURIComponent(t)};if(n===t&amp;amp;&amp;amp;(n=b.ajaxSettings&amp;amp;&amp;amp;b.ajaxSettings.traditional),b.isArray(e)||e.jquery&amp;amp;&amp;amp;!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(&amp;quot;&amp;amp;&amp;quot;).replace(cn,&amp;quot;+&amp;quot;)};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+&amp;quot;[&amp;quot;+(&amp;quot;object&amp;quot;==typeof i?t:&amp;quot;&amp;quot;)+&amp;quot;]&amp;quot;,i,n,r)});else if(n||&amp;quot;object&amp;quot;!==b.type(t))r(e,t);else for(i in t)gn(e+&amp;quot;[&amp;quot;+i+&amp;quot;]&amp;quot;,t[i],n,r)}b.each(&amp;quot;blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu&amp;quot;.split(&amp;quot; &amp;quot;),function(e,t){b.fn[t]=function(e,n){return arguments.length&amp;gt;0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&amp;amp;])_=[^&amp;amp;]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn=&amp;quot;*/&amp;quot;.concat(&amp;quot;*&amp;quot;);try{yn=a.href}catch(Ln){yn=o.createElement(&amp;quot;a&amp;quot;),yn.href=&amp;quot;&amp;quot;,yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){&amp;quot;string&amp;quot;!=typeof t&amp;amp;&amp;amp;(n=t,t=&amp;quot;*&amp;quot;);var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])&amp;quot;+&amp;quot;===r[0]?(r=r.slice(1)||&amp;quot;*&amp;quot;,(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return&amp;quot;string&amp;quot;!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o[&amp;quot;*&amp;quot;]&amp;amp;&amp;amp;s(&amp;quot;*&amp;quot;)}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&amp;amp;&amp;amp;((o[i]?e:r||(r={}))[i]=n[i]);return r&amp;amp;&amp;amp;b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if(&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(&amp;quot; &amp;quot;);return u&amp;gt;=0&amp;amp;&amp;amp;(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof n&amp;amp;&amp;amp;(a=&amp;quot;POST&amp;quot;),s.length&amp;gt;0&amp;amp;&amp;amp;b.ajax({url:e,type:a,dataType:&amp;quot;html&amp;quot;,data:n}).done(function(e){o=arguments,s.html(i?b(&amp;quot;&amp;lt;div&amp;gt;&amp;quot;).append(b.parseHTML(e)).find(i):e)}).complete(r&amp;amp;&amp;amp;function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each([&amp;quot;ajaxStart&amp;quot;,&amp;quot;ajaxStop&amp;quot;,&amp;quot;ajaxComplete&amp;quot;,&amp;quot;ajaxError&amp;quot;,&amp;quot;ajaxSuccess&amp;quot;,&amp;quot;ajaxSend&amp;quot;],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each([&amp;quot;get&amp;quot;,&amp;quot;post&amp;quot;],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&amp;amp;&amp;amp;(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:&amp;quot;GET&amp;quot;,isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:&amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;,accepts:{&amp;quot;*&amp;quot;:Dn,text:&amp;quot;text/plain&amp;quot;,html:&amp;quot;text/html&amp;quot;,xml:&amp;quot;application/xml, text/xml&amp;quot;,json:&amp;quot;application/json, text/javascript&amp;quot;},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:&amp;quot;responseXML&amp;quot;,text:&amp;quot;responseText&amp;quot;},converters:{&amp;quot;* text&amp;quot;:e.String,&amp;quot;text html&amp;quot;:!0,&amp;quot;text json&amp;quot;:b.parseJSON,&amp;quot;text xml&amp;quot;:b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){&amp;quot;object&amp;quot;==typeof e&amp;amp;&amp;amp;(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&amp;amp;&amp;amp;(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks(&amp;quot;once memory&amp;quot;),m=p.statusCode||{},y={},v={},x=0,T=&amp;quot;canceled&amp;quot;,N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2&amp;gt;x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&amp;amp;&amp;amp;l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+&amp;quot;&amp;quot;).replace(xn,&amp;quot;&amp;quot;).replace(kn,mn[1]+&amp;quot;//&amp;quot;),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||&amp;quot;*&amp;quot;).toLowerCase().match(w)||[&amp;quot;&amp;quot;],null==p.crossDomain&amp;amp;&amp;amp;(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&amp;amp;&amp;amp;r[2]===mn[2]&amp;amp;&amp;amp;(r[3]||(&amp;quot;http:&amp;quot;===r[1]?80:443))==(mn[3]||(&amp;quot;http:&amp;quot;===mn[1]?80:443)))),p.data&amp;amp;&amp;amp;p.processData&amp;amp;&amp;amp;&amp;quot;string&amp;quot;!=typeof p.data&amp;amp;&amp;amp;(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&amp;amp;&amp;amp;0===b.active++&amp;amp;&amp;amp;b.event.trigger(&amp;quot;ajaxStart&amp;quot;),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&amp;amp;&amp;amp;(o=p.url+=(bn.test(o)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+p.data,delete p.data),p.cache===!1&amp;amp;&amp;amp;(p.url=wn.test(o)?o.replace(wn,&amp;quot;$1_=&amp;quot;+vn++):o+(bn.test(o)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+&amp;quot;_=&amp;quot;+vn++)),p.ifModified&amp;amp;&amp;amp;(b.lastModified[o]&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;If-Modified-Since&amp;quot;,b.lastModified[o]),b.etag[o]&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;If-None-Match&amp;quot;,b.etag[o])),(p.data&amp;amp;&amp;amp;p.hasContent&amp;amp;&amp;amp;p.contentType!==!1||n.contentType)&amp;amp;&amp;amp;N.setRequestHeader(&amp;quot;Content-Type&amp;quot;,p.contentType),N.setRequestHeader(&amp;quot;Accept&amp;quot;,p.dataTypes[0]&amp;amp;&amp;amp;p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(&amp;quot;*&amp;quot;!==p.dataTypes[0]?&amp;quot;, &amp;quot;+Dn+&amp;quot;; q=0.01&amp;quot;:&amp;quot;&amp;quot;):p.accepts[&amp;quot;*&amp;quot;]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&amp;amp;&amp;amp;(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T=&amp;quot;abort&amp;quot;;for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&amp;amp;&amp;amp;d.trigger(&amp;quot;ajaxSend&amp;quot;,[N,p]),p.async&amp;amp;&amp;amp;p.timeout&amp;gt;0&amp;amp;&amp;amp;(s=setTimeout(function(){N.abort(&amp;quot;timeout&amp;quot;)},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2&amp;gt;x))throw C;k(-1,C)}}else k(-1,&amp;quot;No Transport&amp;quot;);function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&amp;amp;&amp;amp;(x=2,s&amp;amp;&amp;amp;clearTimeout(s),l=t,a=i||&amp;quot;&amp;quot;,N.readyState=e&amp;gt;0?4:0,r&amp;amp;&amp;amp;(w=_n(p,N,r)),e&amp;gt;=200&amp;amp;&amp;amp;300&amp;gt;e||304===e?(p.ifModified&amp;amp;&amp;amp;(T=N.getResponseHeader(&amp;quot;Last-Modified&amp;quot;),T&amp;amp;&amp;amp;(b.lastModified[o]=T),T=N.getResponseHeader(&amp;quot;etag&amp;quot;),T&amp;amp;&amp;amp;(b.etag[o]=T)),204===e?(c=!0,C=&amp;quot;nocontent&amp;quot;):304===e?(c=!0,C=&amp;quot;notmodified&amp;quot;):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&amp;amp;&amp;amp;(C=&amp;quot;error&amp;quot;,0&amp;gt;e&amp;amp;&amp;amp;(e=0))),N.status=e,N.statusText=(n||C)+&amp;quot;&amp;quot;,c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&amp;amp;&amp;amp;d.trigger(c?&amp;quot;ajaxSuccess&amp;quot;:&amp;quot;ajaxError&amp;quot;,[N,p,c?y:v]),g.fireWith(f,[N,C]),u&amp;amp;&amp;amp;(d.trigger(&amp;quot;ajaxComplete&amp;quot;,[N,p]),--b.active||b.event.trigger(&amp;quot;ajaxStop&amp;quot;)))}return N},getScript:function(e,n){return b.get(e,t,n,&amp;quot;script&amp;quot;)},getJSON:function(e,t,n){return b.get(e,t,n,&amp;quot;json&amp;quot;)}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&amp;amp;&amp;amp;(n[c[s]]=r[s]);while(&amp;quot;*&amp;quot;===l[0])l.shift(),o===t&amp;amp;&amp;amp;(o=e.mimeType||n.getResponseHeader(&amp;quot;Content-Type&amp;quot;));if(o)for(s in u)if(u[s]&amp;amp;&amp;amp;u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+&amp;quot; &amp;quot;+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&amp;amp;&amp;amp;l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&amp;amp;&amp;amp;(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if(&amp;quot;*&amp;quot;!==r){if(&amp;quot;*&amp;quot;!==l&amp;amp;&amp;amp;l!==r){if(i=a[l+&amp;quot; &amp;quot;+r]||a[&amp;quot;* &amp;quot;+r],!i)for(n in a)if(o=n.split(&amp;quot; &amp;quot;),o[1]===r&amp;amp;&amp;amp;(i=a[l+&amp;quot; &amp;quot;+o[0]]||a[&amp;quot;* &amp;quot;+o[0]])){i===!0?i=a[n]:a[n]!==!0&amp;amp;&amp;amp;(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&amp;amp;&amp;amp;e[&amp;quot;throws&amp;quot;])t=i(t);else try{t=i(t)}catch(c){return{state:&amp;quot;parsererror&amp;quot;,error:i?c:&amp;quot;No conversion from &amp;quot;+l+&amp;quot; to &amp;quot;+r}}}l=r}return{state:&amp;quot;success&amp;quot;,data:t}}b.ajaxSetup({accepts:{script:&amp;quot;text/javascript, application/javascript, application/ecmascript, application/x-ecmascript&amp;quot;},contents:{script:/(?:java|ecma)script/},converters:{&amp;quot;text script&amp;quot;:function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter(&amp;quot;script&amp;quot;,function(e){e.cache===t&amp;amp;&amp;amp;(e.cache=!1),e.crossDomain&amp;amp;&amp;amp;(e.type=&amp;quot;GET&amp;quot;,e.global=!1)}),b.ajaxTransport(&amp;quot;script&amp;quot;,function(e){if(e.crossDomain){var n,r=o.head||b(&amp;quot;head&amp;quot;)[0]||o.documentElement;return{send:function(t,i){n=o.createElement(&amp;quot;script&amp;quot;),n.async=!0,e.scriptCharset&amp;amp;&amp;amp;(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&amp;amp;&amp;amp;(n.onload=n.onreadystatechange=null,n.parentNode&amp;amp;&amp;amp;n.parentNode.removeChild(n),n=null,t||i(200,&amp;quot;success&amp;quot;))},r.insertBefore(n,r.firstChild)},abort:function(){n&amp;amp;&amp;amp;n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&amp;amp;|$)|\?\?/;b.ajaxSetup({jsonp:&amp;quot;callback&amp;quot;,jsonpCallback:function(){var e=On.pop()||b.expando+&amp;quot;_&amp;quot;+vn++;return this[e]=!0,e}}),b.ajaxPrefilter(&amp;quot;json jsonp&amp;quot;,function(n,r,i){var o,a,s,u=n.jsonp!==!1&amp;amp;&amp;amp;(Bn.test(n.url)?&amp;quot;url&amp;quot;:&amp;quot;string&amp;quot;==typeof n.data&amp;amp;&amp;amp;!(n.contentType||&amp;quot;&amp;quot;).indexOf(&amp;quot;application/x-www-form-urlencoded&amp;quot;)&amp;amp;&amp;amp;Bn.test(n.data)&amp;amp;&amp;amp;&amp;quot;data&amp;quot;);return u||&amp;quot;jsonp&amp;quot;===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,&amp;quot;$1&amp;quot;+o):n.jsonp!==!1&amp;amp;&amp;amp;(n.url+=(bn.test(n.url)?&amp;quot;&amp;amp;&amp;quot;:&amp;quot;?&amp;quot;)+n.jsonp+&amp;quot;=&amp;quot;+o),n.converters[&amp;quot;script json&amp;quot;]=function(){return s||b.error(o+&amp;quot; was not called&amp;quot;),s[0]},n.dataTypes[0]=&amp;quot;json&amp;quot;,a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&amp;amp;&amp;amp;(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&amp;amp;&amp;amp;b.isFunction(a)&amp;amp;&amp;amp;a(s[0]),s=a=t}),&amp;quot;script&amp;quot;):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&amp;amp;&amp;amp;function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;)}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&amp;amp;&amp;amp;In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&amp;amp;&amp;amp;&amp;quot;withCredentials&amp;quot;in Rn,Rn=b.support.ajax=!!Rn,Rn&amp;amp;&amp;amp;b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&amp;amp;&amp;amp;u.overrideMimeType&amp;amp;&amp;amp;u.overrideMimeType(n.mimeType),n.crossDomain||i[&amp;quot;X-Requested-With&amp;quot;]||(i[&amp;quot;X-Requested-With&amp;quot;]=&amp;quot;XMLHttpRequest&amp;quot;);try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&amp;amp;&amp;amp;n.data||null),r=function(e,i){var s,l,c,p;try{if(r&amp;amp;&amp;amp;(i||4===u.readyState))if(r=t,a&amp;amp;&amp;amp;(u.onreadystatechange=b.noop,$n&amp;amp;&amp;amp;delete Pn[a]),i)4!==u.readyState&amp;amp;&amp;amp;u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),&amp;quot;string&amp;quot;==typeof u.responseText&amp;amp;&amp;amp;(p.text=u.responseText);try{c=u.statusText}catch(f){c=&amp;quot;&amp;quot;}s||!n.isLocal||n.crossDomain?1223===s&amp;amp;&amp;amp;(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&amp;amp;&amp;amp;o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&amp;amp;&amp;amp;(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&amp;amp;&amp;amp;r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(&amp;quot;^(?:([+-])=|)(&amp;quot;+x+&amp;quot;)([a-z%]*)$&amp;quot;,&amp;quot;i&amp;quot;),Jn=/queueHooks$/,Gn=[nr],Qn={&amp;quot;*&amp;quot;:[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;),&amp;quot;px&amp;quot;!==r&amp;amp;&amp;amp;s){s=b.css(i.elem,e,!0)||n||1;do u=u||&amp;quot;.5&amp;quot;,s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&amp;amp;&amp;amp;1!==u&amp;amp;&amp;amp;--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn[&amp;quot;*&amp;quot;]),i=0,o=r.length;for(;o&amp;gt;i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u&amp;gt;a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1&amp;gt;o&amp;amp;&amp;amp;u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r&amp;gt;n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a&amp;gt;o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&amp;amp;&amp;amp;l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&amp;amp;&amp;amp;(o=n[1],n=e[i]=n[0]),i!==r&amp;amp;&amp;amp;(e[r]=n,delete e[i]),a=b.cssHooks[r],a&amp;amp;&amp;amp;&amp;quot;expand&amp;quot;in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=[&amp;quot;*&amp;quot;]):e=e.split(&amp;quot; &amp;quot;);var n,r=0,i=e.length;for(;i&amp;gt;r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&amp;amp;&amp;amp;nn(e);n.queue||(c=b._queueHooks(e,&amp;quot;fx&amp;quot;),null==c.unqueued&amp;amp;&amp;amp;(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,&amp;quot;fx&amp;quot;).length||c.empty.fire()})})),1===e.nodeType&amp;amp;&amp;amp;(&amp;quot;height&amp;quot;in t||&amp;quot;width&amp;quot;in t)&amp;amp;&amp;amp;(n.overflow=[d.overflow,d.overflowX,d.overflowY],&amp;quot;inline&amp;quot;===b.css(e,&amp;quot;display&amp;quot;)&amp;amp;&amp;amp;&amp;quot;none&amp;quot;===b.css(e,&amp;quot;float&amp;quot;)&amp;amp;&amp;amp;(b.support.inlineBlockNeedsLayout&amp;amp;&amp;amp;&amp;quot;inline&amp;quot;!==un(e.nodeName)?d.zoom=1:d.display=&amp;quot;inline-block&amp;quot;)),n.overflow&amp;amp;&amp;amp;(d.overflow=&amp;quot;hidden&amp;quot;,b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||&amp;quot;toggle&amp;quot;===a,a===(m?&amp;quot;hide&amp;quot;:&amp;quot;show&amp;quot;))continue;g.push(i)}if(o=g.length){s=b._data(e,&amp;quot;fxshow&amp;quot;)||b._data(e,&amp;quot;fxshow&amp;quot;,{}),&amp;quot;hidden&amp;quot;in s&amp;amp;&amp;amp;(m=s.hidden),u&amp;amp;&amp;amp;(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,&amp;quot;fxshow&amp;quot;);for(t in h)b.style(e,t,h[t])});for(i=0;o&amp;gt;i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&amp;amp;&amp;amp;(l.end=l.start,l.start=&amp;quot;width&amp;quot;===r||&amp;quot;height&amp;quot;===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||&amp;quot;swing&amp;quot;,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?&amp;quot;&amp;quot;:&amp;quot;px&amp;quot;)},cur:function(){var e=rr.propHooks[this.prop];return e&amp;amp;&amp;amp;e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&amp;amp;&amp;amp;this.options.step.call(this.elem,this.now,this),n&amp;amp;&amp;amp;n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&amp;amp;&amp;amp;null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,&amp;quot;&amp;quot;),t&amp;amp;&amp;amp;&amp;quot;auto&amp;quot;!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&amp;amp;&amp;amp;(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&amp;amp;&amp;amp;e.elem.parentNode&amp;amp;&amp;amp;(e.elem[e.prop]=e.now)}},b.each([&amp;quot;toggle&amp;quot;,&amp;quot;show&amp;quot;,&amp;quot;hide&amp;quot;],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||&amp;quot;boolean&amp;quot;==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(&amp;quot;opacity&amp;quot;,0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,&amp;quot;finish&amp;quot;))&amp;amp;&amp;amp;t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return&amp;quot;string&amp;quot;!=typeof e&amp;amp;&amp;amp;(r=n,n=e,e=t),n&amp;amp;&amp;amp;e!==!1&amp;amp;&amp;amp;this.queue(e||&amp;quot;fx&amp;quot;,[]),this.each(function(){var t=!0,n=null!=e&amp;amp;&amp;amp;e+&amp;quot;queueHooks&amp;quot;,o=b.timers,a=b._data(this);if(n)a[n]&amp;amp;&amp;amp;a[n].stop&amp;amp;&amp;amp;i(a[n]);else for(n in a)a[n]&amp;amp;&amp;amp;a[n].stop&amp;amp;&amp;amp;Jn.test(n)&amp;amp;&amp;amp;i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&amp;amp;&amp;amp;o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&amp;amp;&amp;amp;b.dequeue(this,e)})},finish:function(e){return e!==!1&amp;amp;&amp;amp;(e=e||&amp;quot;fx&amp;quot;),this.each(function(){var t,n=b._data(this),r=n[e+&amp;quot;queue&amp;quot;],i=n[e+&amp;quot;queueHooks&amp;quot;],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&amp;amp;&amp;amp;i.cur&amp;amp;&amp;amp;i.cur.finish&amp;amp;&amp;amp;i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&amp;amp;&amp;amp;o[t].queue===e&amp;amp;&amp;amp;(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a&amp;gt;t;t++)r[t]&amp;amp;&amp;amp;r[t].finish&amp;amp;&amp;amp;r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4&amp;gt;i;i+=2-t)n=Zt[i],r[&amp;quot;margin&amp;quot;+n]=r[&amp;quot;padding&amp;quot;+n]=e;return t&amp;amp;&amp;amp;(r.opacity=r.width=e),r}b.each({slideDown:ir(&amp;quot;show&amp;quot;),slideUp:ir(&amp;quot;hide&amp;quot;),slideToggle:ir(&amp;quot;toggle&amp;quot;),fadeIn:{opacity:&amp;quot;show&amp;quot;},fadeOut:{opacity:&amp;quot;hide&amp;quot;},fadeToggle:{opacity:&amp;quot;toggle&amp;quot;}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&amp;amp;&amp;amp;&amp;quot;object&amp;quot;==typeof e?b.extend({},e):{complete:n||!n&amp;amp;&amp;amp;t||b.isFunction(e)&amp;amp;&amp;amp;e,duration:e,easing:n&amp;amp;&amp;amp;t||t&amp;amp;&amp;amp;!b.isFunction(t)&amp;amp;&amp;amp;t};return r.duration=b.fx.off?0:&amp;quot;number&amp;quot;==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&amp;amp;&amp;amp;(r.queue=&amp;quot;fx&amp;quot;),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&amp;amp;&amp;amp;r.old.call(this),r.queue&amp;amp;&amp;amp;b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length&amp;gt;r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&amp;amp;&amp;amp;b.timers.push(e)&amp;amp;&amp;amp;b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&amp;amp;&amp;amp;b.expr.filters&amp;amp;&amp;amp;(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&amp;amp;&amp;amp;a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&amp;amp;&amp;amp;(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,&amp;quot;position&amp;quot;);&amp;quot;static&amp;quot;===r&amp;amp;&amp;amp;(e.style.position=&amp;quot;relative&amp;quot;);var i=b(e),o=i.offset(),a=b.css(e,&amp;quot;top&amp;quot;),s=b.css(e,&amp;quot;left&amp;quot;),u=(&amp;quot;absolute&amp;quot;===r||&amp;quot;fixed&amp;quot;===r)&amp;amp;&amp;amp;b.inArray(&amp;quot;auto&amp;quot;,[a,s])&amp;gt;-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&amp;amp;&amp;amp;(t=t.call(e,n,o)),null!=t.top&amp;amp;&amp;amp;(l.top=t.top-o.top+p),null!=t.left&amp;amp;&amp;amp;(l.left=t.left-o.left+f),&amp;quot;using&amp;quot;in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return&amp;quot;fixed&amp;quot;===b.css(r,&amp;quot;position&amp;quot;)?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],&amp;quot;html&amp;quot;)||(n=e.offset()),n.top+=b.css(e[0],&amp;quot;borderTopWidth&amp;quot;,!0),n.left+=b.css(e[0],&amp;quot;borderLeftWidth&amp;quot;,!0)),{top:t.top-n.top-b.css(r,&amp;quot;marginTop&amp;quot;,!0),left:t.left-n.left-b.css(r,&amp;quot;marginLeft&amp;quot;,!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&amp;amp;&amp;amp;!b.nodeName(e,&amp;quot;html&amp;quot;)&amp;amp;&amp;amp;&amp;quot;static&amp;quot;===b.css(e,&amp;quot;position&amp;quot;))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:&amp;quot;pageXOffset&amp;quot;,scrollTop:&amp;quot;pageYOffset&amp;quot;},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:&amp;quot;height&amp;quot;,Width:&amp;quot;width&amp;quot;},function(e,n){b.each({padding:&amp;quot;inner&amp;quot;+e,content:n,&amp;quot;&amp;quot;:&amp;quot;outer&amp;quot;+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&amp;amp;&amp;amp;(r||&amp;quot;boolean&amp;quot;!=typeof i),s=r||(i===!0||o===!0?&amp;quot;margin&amp;quot;:&amp;quot;border&amp;quot;);return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement[&amp;quot;client&amp;quot;+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[&amp;quot;scroll&amp;quot;+e],o[&amp;quot;scroll&amp;quot;+e],n.body[&amp;quot;offset&amp;quot;+e],o[&amp;quot;offset&amp;quot;+e],o[&amp;quot;client&amp;quot;+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,&amp;quot;function&amp;quot;==typeof define&amp;amp;&amp;amp;define.amd&amp;amp;&amp;amp;define.amd.jQuery&amp;amp;&amp;amp;define(&amp;quot;jquery&amp;quot;,[],function(){return b})})(window);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.jqplot-xaxis,.jqplot-xaxis-label{margin-top:10px}.jqplot-x2axis,.jqplot-x2axis-label{margin-bottom:10px}.jqplot-target{position:relative;color:#666;font-family:&amp;quot;Trebuchet MS&amp;quot;,Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-x2axis-tick,.jqplot-xaxis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick,.jqplot-yaxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px;z-index:2;font-size:1.5em}.jqplot-x2axis-label,.jqplot-xaxis-label,.jqplot-yMidAxis-label,.jqplot-yaxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-yaxis-label{margin-right:10px}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin:12px}table.jqplot-cursor-legend,table.jqplot-table-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:active,td.jqplot-seriesToggle:hover{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-width:5px 6px;border-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-canvasOverlay-tooltip,.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%)}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,.3)}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=415</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=415"/>
		<updated>2021-01-27T17:13:59Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=414</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=414"/>
		<updated>2021-01-27T17:13:44Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/chart/helge.js&#039; );&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  var myElement = document.getElementById(&#039;mw-hello-world&#039;);&lt;br /&gt;
  myElement.innerHTML = &#039;&amp;lt;html&amp;gt;Hello World!!!&amp;lt;/html&amp;gt;&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.min.js&#039; );&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.jqplot.min.js&#039; );&lt;br /&gt;
&lt;br /&gt;
$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=413</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=413"/>
		<updated>2021-01-27T17:10:09Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=412</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=412"/>
		<updated>2021-01-27T17:07:28Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;skjemaker8731844&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&amp;lt;htmlet&amp;gt;wiki&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=411</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=411"/>
		<updated>2021-01-27T17:06:42Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;skjemaker8731844&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=410</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=410"/>
		<updated>2021-01-27T17:06:12Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;htmlet&amp;gt;chart&amp;lt;/htmlet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=409</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=409"/>
		<updated>2021-01-27T17:03:13Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
{{Chart}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Template:Chart&amp;diff=408</id>
		<title>Template:Chart</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Template:Chart&amp;diff=408"/>
		<updated>2021-01-27T17:02:50Z</updated>

		<summary type="html">&lt;p&gt;Mihho: Ny side: &amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Test&amp;diff=407</id>
		<title>Test</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Test&amp;diff=407"/>
		<updated>2021-01-27T17:02:14Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HelloWorld}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-mywiki-example&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chartdiv&amp;quot; style=&amp;quot;height:400px;width:300px; &amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=Template:HelloWorld&amp;diff=406</id>
		<title>Template:HelloWorld</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=Template:HelloWorld&amp;diff=406"/>
		<updated>2021-01-27T17:01:57Z</updated>

		<summary type="html">&lt;p&gt;Mihho: Ny side: &amp;lt;div id=&amp;quot;mw-hello-world&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;mw-hello-world&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=405</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=405"/>
		<updated>2021-01-27T17:01:27Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
	var myElement = document.getElementById(&#039;mw-mywiki-example&#039;);&lt;br /&gt;
	myElement.innerHTML = &#039;any HTML&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  var myElement = document.getElementById(&#039;mw-hello-world&#039;);&lt;br /&gt;
  myElement.innerHTML = &#039;&amp;lt;html&amp;gt;Hello World!!!&amp;lt;/html&amp;gt;&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.min.js&#039; );&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.jqplot.min.js&#039; );&lt;br /&gt;
&lt;br /&gt;
$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=404</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=404"/>
		<updated>2021-01-27T16:52:41Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
	var myElement = document.getElementById(&#039;mw-mywiki-example&#039;);&lt;br /&gt;
	myElement.innerHTML = &#039;any HTML&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.min.js&#039; );&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.jqplot.min.js&#039; );&lt;br /&gt;
&lt;br /&gt;
$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=403</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.css&amp;diff=403"/>
		<updated>2021-01-27T16:51:58Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* CSS plassert i denne fila vil gjelde for alle utseender. */&lt;br /&gt;
&lt;br /&gt;
@import url(&amp;quot;//folk.uib.no/mihho/jqplot/jquery.jqplot.css&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
.infoboks { float: right; width: 30%; border: solid 1px #ccc; padding: 8px; background-color: #eee; margin: 5px 0 15px 25px;}&lt;br /&gt;
.infoboks p:first-of-type { color: #333;}&lt;br /&gt;
.uib-box { width: 45%; border: 2px solid #bbb; padding: 0 15px 0 15px; float: left; box-shadow: #ddd 3px 3px 2px; margin: 0 15px 15px 0; }&lt;br /&gt;
&lt;br /&gt;
/*.uib-column { -webkit-column-count: 2; -moz-column-count: 2; column-count: 2; -webkit-column-gap: 10px; -moz-column-gap: 10px; column-gap: 10px; } */&lt;br /&gt;
&lt;br /&gt;
.utdyp-template { border: red 2px solid; padding: 10px; background-color: #ffcc66;}&lt;br /&gt;
.utdyp-template * { align: center; }&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display: none; }&lt;br /&gt;
body.page-Hovedside h1.firstHeading { display: none; }&lt;br /&gt;
body.page-Forside h1.firstHeading { display: none; }&lt;br /&gt;
body.page-Forside h2.firstHeading { display: none; }&lt;br /&gt;
&lt;br /&gt;
/* CSS placed here will be applied to all skins */&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page h1.firstHeading { display:none; }&lt;br /&gt;
body.page-Forside h1.firstHeading { display:none; }&lt;br /&gt;
body.page-Forside span.mw-headline {&lt;br /&gt;
  color:#303030;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  border-bottom: 0px solid steelblue;&lt;br /&gt;
}&lt;br /&gt;
body.page-Forside div.w3-container:nth-of-type(1) {&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#Nyttige_verkt.C3.B8y.mv-headline {&lt;br /&gt;
  color:#ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body {&lt;br /&gt;
color: #333333;&lt;br /&gt;
font-family: Century Gothic, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
img, object, embed {&lt;br /&gt;
    height: auto;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
    border-radius: 50px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.noresize {&lt;br /&gt;
    height: auto;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* img, object, embed {&lt;br /&gt;
    height: auto;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
} */&lt;br /&gt;
&lt;br /&gt;
.info {&lt;br /&gt;
    float: left;&lt;br /&gt;
    margin: 5px;&lt;br /&gt;
    padding: 15px;&lt;br /&gt;
    width: 300px;&lt;br /&gt;
    border: 1px solid black;&lt;br /&gt;
}&lt;br /&gt;
.info2 {&lt;br /&gt;
    float: auto;&lt;br /&gt;
    margin: 3px;&lt;br /&gt;
    padding: 5px;&lt;br /&gt;
    border: 1px solid black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
### Ny stil start ###&lt;br /&gt;
/*&lt;br /&gt;
element.style {&lt;br /&gt;
    background-color: #cf3c3a;&lt;br /&gt;
}&lt;br /&gt;
body {&lt;br /&gt;
    background-color: #cf3c3a;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.mw-body {&lt;br /&gt;
    border-color: #cf3c3a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#mw-head {&lt;br /&gt;
    background-color: #cf3c3a;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-image: url(&amp;quot;https://wiki.uib.no/uib_logo.svg&amp;quot;) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-personal a {&lt;br /&gt;
    color: white !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#mw-panel div.portal {&lt;br /&gt;
    background-image: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#mw-panel div.portal {&lt;br /&gt;
    background-image: none !important;&lt;br /&gt;
}&lt;br /&gt;
div#mw-panel div.portal h3 {&lt;br /&gt;
    color: white !important;&lt;br /&gt;
    font-weight: bold !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#mw-panel div.portal div.body ul li a {&lt;br /&gt;
    color: white !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.vectorTabs {&lt;br /&gt;
    background-image: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.vectorTabs ul li {&lt;br /&gt;
    background-color: #cf3c3a;&lt;br /&gt;
    background-image: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.vectorTabs li.selected {&lt;br /&gt;
    background-image: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.vectorTabs span &amp;gt; a {&lt;br /&gt;
    background-color: #cf3c3a;&lt;br /&gt;
    background-image: none;&lt;br /&gt;
    color: white !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.vectorTabs li.selected a, div.vectorTabs li.selected a:visited {&lt;br /&gt;
    background-color: #cf3c3a;&lt;br /&gt;
    background-image: none;&lt;br /&gt;
    color: white !important;&lt;br /&gt;
    text-decoration: underline !important;&lt;br /&gt;
    height: 2.1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div.vectorMenu h3 span {&lt;br /&gt;
    color: white !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
    background-color: #CF3C3A;&lt;br /&gt;
    background-image: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#footer ul li {&lt;br /&gt;
    color: white !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#footer #footer-places li a {&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
img, object, embed {&lt;br /&gt;
    height: auto;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.noresize {&lt;br /&gt;
    height: auto;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
#### Ny stil slutt ####&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#### W3 ####&lt;br /&gt;
&lt;br /&gt;
/* W3.CSS 2.83 Nov 2016 by Jan Egil and Borge Refsnes */&lt;br /&gt;
html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}&lt;br /&gt;
/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */&lt;br /&gt;
html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}&lt;br /&gt;
article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}&lt;br /&gt;
audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}&lt;br /&gt;
audio:not([controls]){display:none;height:0}[hidden],template{display:none}&lt;br /&gt;
a{background-color:transparent;-webkit-text-decoration-skip:objects}&lt;br /&gt;
a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}&lt;br /&gt;
dfn{font-style:italic}mark{background:#ff0;color:#000}&lt;br /&gt;
small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}&lt;br /&gt;
sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}&lt;br /&gt;
img{border-style:none}svg:not(:root){overflow:hidden}&lt;br /&gt;
code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}&lt;br /&gt;
hr{box-sizing:content-box;height:0;overflow:visible}&lt;br /&gt;
button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}&lt;br /&gt;
button,input{overflow:visible}button,select{text-transform:none}&lt;br /&gt;
button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}&lt;br /&gt;
button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner{border-style:none;padding:0}&lt;br /&gt;
button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring{outline:1px dotted ButtonText}&lt;br /&gt;
fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}&lt;br /&gt;
legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}&lt;br /&gt;
[type=checkbox],[type=radio]{padding:0}&lt;br /&gt;
[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}&lt;br /&gt;
[type=search]{-webkit-appearance:textfield;outline-offset:-2px}&lt;br /&gt;
[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}&lt;br /&gt;
::-webkit-input-placeholder{color:inherit;opacity:0.54}&lt;br /&gt;
::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}&lt;br /&gt;
/* End extract */&lt;br /&gt;
html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}&lt;br /&gt;
h1,h2,h3,h4,h5,h6,.w3-slim,.w3-wide{font-family:&amp;quot;Segoe UI&amp;quot;,Arial,sans-serif}&lt;br /&gt;
h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}&lt;br /&gt;
.w3-serif{font-family:&amp;quot;Times New Roman&amp;quot;,Times,serif}&lt;br /&gt;
h1,h2,h3,h4,h5,h6{font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px}&lt;br /&gt;
h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}&lt;br /&gt;
hr{border:0;border-top:1px solid #eee;margin:20px 0}&lt;br /&gt;
img{margin-bottom:-5px}a{color:inherit}&lt;br /&gt;
.w3-image{max-width:100%;height:auto}&lt;br /&gt;
.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}&lt;br /&gt;
.w3-table-all{border:1px solid #ccc}&lt;br /&gt;
.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}&lt;br /&gt;
.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}&lt;br /&gt;
.w3-table-all tr:nth-child(odd){background-color:#fff}&lt;br /&gt;
.w3-table-all tr:nth-child(even){background-color:#f1f1f1}&lt;br /&gt;
.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}&lt;br /&gt;
.w3-centered tr th,.w3-centered tr td{text-align:center}&lt;br /&gt;
.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}&lt;br /&gt;
.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px}&lt;br /&gt;
.w3-btn,.w3-btn-block{border:none;display:inline-block;outline:0;padding:6px 16px;vertical-align:middle;overflow:hidden;text-decoration:none!important;color:#fff;background-color:#000;text-align:center;cursor:pointer;white-space:nowrap}&lt;br /&gt;
.w3-btn:hover,.w3-btn-block:hover,.w3-btn-floating:hover,.w3-btn-floating-large:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}&lt;br /&gt;
.w3-btn,.w3-btn-floating,.w3-btn-floating-large,.w3-closenav,.w3-opennav{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}   &lt;br /&gt;
.w3-btn-floating,.w3-btn-floating-large{display:inline-block;text-align:center;color:#fff;background-color:#000;position:relative;overflow:hidden;z-index:1;padding:0;border-radius:50%;cursor:pointer;font-size:24px}&lt;br /&gt;
.w3-btn-floating{width:40px;height:40px;line-height:40px}.w3-btn-floating-large{width:56px;height:56px;line-height:56px}&lt;br /&gt;
.w3-disabled,.w3-btn:disabled,.w3-btn-floating:disabled,.w3-btn-floating-large:disabled{cursor:not-allowed;opacity:0.3}&lt;br /&gt;
.w3-btn.w3-disabled *,.w3-btn-block.w3-disabled,.w3-btn-floating.w3-disabled *,.w3-btn:disabled *,.w3-btn-floating:disabled *{pointer-events:none}&lt;br /&gt;
.w3-btn.w3-disabled:hover,.w3-btn-block.w3-disabled:hover,.w3-btn:disabled:hover,.w3-btn-floating.w3-disabled:hover,.w3-btn-floating:disabled:hover,&lt;br /&gt;
.w3-btn-floating-large.w3-disabled:hover,.w3-btn-floating-large:disabled:hover{box-shadow:none}&lt;br /&gt;
.w3-btn-group .w3-btn{float:left}.w3-btn-block{width:100%}&lt;br /&gt;
.w3-btn-bar .w3-btn{box-shadow:none;background-color:inherit;color:inherit;float:left}.w3-btn-bar .w3-btn:hover{background-color:#ccc}&lt;br /&gt;
.w3-badge,.w3-tag,.w3-sign{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}&lt;br /&gt;
.w3-badge{border-radius:50%}&lt;br /&gt;
ul.w3-ul{list-style-type:none;padding:0;margin:0}ul.w3-ul li{padding:6px 2px 6px 16px;border-bottom:1px solid #ddd}ul.w3-ul li:last-child{border-bottom:none}&lt;br /&gt;
.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}&lt;br /&gt;
.w3-navbar{list-style-type:none;margin:0;padding:0;overflow:hidden}&lt;br /&gt;
.w3-navbar li{float:left}.w3-navbar li a,.w3-navitem,.w3-navbar li .w3-btn,.w3-navbar li .w3-input{display:block;padding:8px 16px}.w3-navbar li .w3-btn,.w3-navbar li .w3-input{border:none;outline:none;width:100%}&lt;br /&gt;
.w3-navbar li a:hover{color:#000;background-color:#ccc}&lt;br /&gt;
.w3-navbar .w3-dropdown-hover,.w3-navbar .w3-dropdown-click{position:static}&lt;br /&gt;
.w3-navbar .w3-dropdown-hover:hover,.w3-navbar .w3-dropdown-hover:first-child,.w3-navbar .w3-dropdown-click:hover{background-color:#ccc;color:#000}&lt;br /&gt;
.w3-navbar a,.w3-topnav a,.w3-sidenav a,.w3-dropdown-content a,.w3-accordion-content a,.w3-dropnav a{text-decoration:none!important}&lt;br /&gt;
.w3-navbar .w3-opennav.w3-right{float:right!important}.w3-topnav{padding:8px 8px}&lt;br /&gt;
.w3-topnav a{padding:0 8px;border-bottom:3px solid transparent;-webkit-transition:border-bottom .3s;transition:border-bottom .3s}&lt;br /&gt;
.w3-topnav a:hover{border-bottom:3px solid #fff}.w3-topnav .w3-dropdown-hover a{border-bottom:0}&lt;br /&gt;
.w3-opennav,.w3-closenav{color:inherit}.w3-opennav:hover,.w3-closenav:hover{cursor:pointer;opacity:0.8}&lt;br /&gt;
.w3-btn,.w3-btn-floating,.w3-dropnav a,.w3-btn-floating-large,.w3-btn-block,.w3-hover-shadow,.w3-hover-opacity,.w3-hover-opacity-off,.w3-hover-sepia,.w3-hover-grayscale,.w3-hover-greyscale,&lt;br /&gt;
.w3-navbar a,.w3-sidenav a,.w3-pagination li a,.w3-hoverable tbody tr,.w3-hoverable li,.w3-accordion-content a,.w3-dropdown-content a,.w3-dropdown-click:hover,.w3-dropdown-hover:hover,.w3-opennav,.w3-closenav,.w3-closebtn,&lt;br /&gt;
.w3-hover-amber,.w3-hover-aqua,.w3-hover-blue,.w3-hover-light-blue,.w3-hover-brown,.w3-hover-cyan,.w3-hover-blue-grey,.w3-hover-green,.w3-hover-light-green,.w3-hover-indigo,.w3-hover-khaki,.w3-hover-lime,.w3-hover-orange,.w3-hover-deep-orange,.w3-hover-pink,&lt;br /&gt;
.w3-hover-purple,.w3-hover-deep-purple,.w3-hover-red,.w3-hover-sand,.w3-hover-teal,.w3-hover-yellow,.w3-hover-white,.w3-hover-black,.w3-hover-grey,.w3-hover-light-grey,.w3-hover-dark-grey,.w3-hover-text-amber,.w3-hover-text-aqua,.w3-hover-text-blue,.w3-hover-text-light-blue,&lt;br /&gt;
.w3-hover-text-brown,.w3-hover-text-cyan,.w3-hover-text-blue-grey,.w3-hover-text-green,.w3-hover-text-light-green,.w3-hover-text-indigo,.w3-hover-text-khaki,.w3-hover-text-lime,.w3-hover-text-orange,.w3-hover-text-deep-orange,.w3-hover-text-pink,.w3-hover-text-purple,&lt;br /&gt;
.w3-hover-text-deep-purple,.w3-hover-text-red,.w3-hover-text-sand,.w3-hover-text-teal,.w3-hover-text-yellow,.w3-hover-text-white,.w3-hover-text-black,.w3-hover-text-grey,.w3-hover-text-light-grey,.w3-hover-text-dark-grey&lt;br /&gt;
{-webkit-transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s;transition:background-color .3s,color .15s,box-shadow .3s,opacity 0.3s,filter 0.3s}&lt;br /&gt;
.w3-ripple:active{opacity:0.5}.w3-ripple{-webkit-transition:opacity 0s;transition:opacity 0s}&lt;br /&gt;
.w3-sidenav{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}&lt;br /&gt;
.w3-sidenav a{padding:4px 2px 4px 16px}.w3-sidenav a:hover{background-color:#ccc}.w3-sidenav a,.w3-dropnav a{display:block}&lt;br /&gt;
.w3-sidenav .w3-dropdown-hover:hover,.w3-sidenav .w3-dropdown-hover:first-child,.w3-sidenav .w3-dropdown-click:hover,.w3-dropnav a:hover{background-color:#ccc;color:#000}&lt;br /&gt;
.w3-sidenav .w3-dropdown-hover,.w3-sidenav .w3-dropdown-click {width:100%}.w3-sidenav .w3-dropdown-hover .w3-dropdown-content,.w3-sidenav .w3-dropdown-click .w3-dropdown-content{min-width:100%}&lt;br /&gt;
.w3-main,#main{transition:margin-left .4s}&lt;br /&gt;
.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}&lt;br /&gt;
.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}.w3-closebtn{text-decoration:none;float:right;font-size:24px;font-weight:bold;color:inherit}&lt;br /&gt;
.w3-closebtn:hover,.w3-closebtn:focus{color:#000;text-decoration:none;cursor:pointer}&lt;br /&gt;
.w3-pagination{display:inline-block;padding:0;margin:0}.w3-pagination li{display:inline}&lt;br /&gt;
.w3-pagination li a{text-decoration:none;color:#000;float:left;padding:8px 16px}&lt;br /&gt;
.w3-pagination li a:hover{background-color:#ccc}&lt;br /&gt;
.w3-input-group,.w3-group{margin-top:24px;margin-bottom:24px}&lt;br /&gt;
.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #808080;width:100%}&lt;br /&gt;
.w3-label{color:#009688}.w3-input:not(:valid)~.w3-validate{color:#f44336}&lt;br /&gt;
.w3-select{padding:9px 0;width:100%;color:#000;border:1px solid transparent;border-bottom:1px solid #009688}&lt;br /&gt;
.w3-select select:focus{color:#000;border:1px solid #009688}.w3-select option[disabled]{color:#009688}&lt;br /&gt;
.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}&lt;br /&gt;
.w3-dropdown-hover:hover .w3-dropdown-content{display:block;z-index:1}&lt;br /&gt;
.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0}&lt;br /&gt;
.w3-dropdown-content a{padding:6px 16px;display:block}&lt;br /&gt;
.w3-dropdown-content a:hover{background-color:#ccc}&lt;br /&gt;
.w3-accordion {width:100%;cursor:pointer}&lt;br /&gt;
.w3-accordion-content{cursor:auto;display:none;position:relative;width:100%;margin:0;padding:0}&lt;br /&gt;
.w3-accordion-content a{padding:6px 16px;display:block}.w3-accordion-content a:hover{background-color:#ccc}&lt;br /&gt;
.w3-progress-container{width:100%;height:1.5em;position:relative;background-color:#f1f1f1}&lt;br /&gt;
.w3-progressbar{background-color:#757575;height:100%;position:absolute;line-height:inherit}&lt;br /&gt;
input[type=checkbox].w3-check,input[type=radio].w3-radio{width:24px;height:24px;position:relative;top:6px}&lt;br /&gt;
input[type=checkbox].w3-check:checked+.w3-validate,input[type=radio].w3-radio:checked+.w3-validate{color:#009688} &lt;br /&gt;
input[type=checkbox].w3-check:disabled+.w3-validate,input[type=radio].w3-radio:disabled+.w3-validate{color:#aaa}&lt;br /&gt;
.w3-responsive{overflow-x:auto}&lt;br /&gt;
.w3-container:after,.w3-panel:after,.w3-row:after,.w3-row-padding:after,.w3-topnav:after,.w3-clear:after,.w3-btn-group:before,.w3-btn-group:after,.w3-btn-bar:before,.w3-btn-bar:after&lt;br /&gt;
{content:&amp;quot;&amp;quot;;display:table;clear:both}&lt;br /&gt;
.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%}&lt;br /&gt;
.w3-col.s1{width:8.33333%}&lt;br /&gt;
.w3-col.s2{width:16.66666%}&lt;br /&gt;
.w3-col.s3{width:24.99999%}&lt;br /&gt;
.w3-col.s4{width:33.33333%}&lt;br /&gt;
.w3-col.s5{width:41.66666%}&lt;br /&gt;
.w3-col.s6{width:49.99999%}&lt;br /&gt;
.w3-col.s7{width:58.33333%}&lt;br /&gt;
.w3-col.s8{width:66.66666%}&lt;br /&gt;
.w3-col.s9{width:74.99999%}&lt;br /&gt;
.w3-col.s10{width:83.33333%}&lt;br /&gt;
.w3-col.s11{width:91.66666%}&lt;br /&gt;
.w3-col.s12,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{width:99.99999%}&lt;br /&gt;
@media only screen and (min-width:601px){&lt;br /&gt;
.w3-col.m1{width:8.33333%}&lt;br /&gt;
.w3-col.m2{width:16.66666%}&lt;br /&gt;
.w3-col.m3,.w3-quarter{width:24.99999%}&lt;br /&gt;
.w3-col.m4,.w3-third{width:33.33333%}&lt;br /&gt;
.w3-col.m5{width:41.66666%}&lt;br /&gt;
.w3-col.m6,.w3-half{width:49.99999%}&lt;br /&gt;
.w3-col.m7{width:58.33333%}&lt;br /&gt;
.w3-col.m8,.w3-twothird{width:66.66666%}&lt;br /&gt;
.w3-col.m9,.w3-threequarter{width:74.99999%}&lt;br /&gt;
.w3-col.m10{width:83.33333%}&lt;br /&gt;
.w3-col.m11{width:91.66666%}&lt;br /&gt;
.w3-col.m12{width:99.99999%}}&lt;br /&gt;
@media only screen and (min-width:993px){&lt;br /&gt;
.w3-col.l1{width:8.33333%}&lt;br /&gt;
.w3-col.l2{width:16.66666%}&lt;br /&gt;
.w3-col.l3,.w3-quarter{width:24.99999%}&lt;br /&gt;
.w3-col.l4,.w3-third{width:33.33333%}&lt;br /&gt;
.w3-col.l5{width:41.66666%}&lt;br /&gt;
.w3-col.l6,.w3-half{width:49.99999%}&lt;br /&gt;
.w3-col.l7{width:58.33333%}&lt;br /&gt;
.w3-col.l8,.w3-twothird{width:66.66666%}&lt;br /&gt;
.w3-col.l9,.w3-threequarter{width:74.99999%}&lt;br /&gt;
.w3-col.l10{width:83.33333%}&lt;br /&gt;
.w3-col.l11{width:91.66666%}&lt;br /&gt;
.w3-col.l12{width:99.99999%}}&lt;br /&gt;
.w3-content{max-width:980px;margin:auto}&lt;br /&gt;
.w3-rest{overflow:hidden}&lt;br /&gt;
.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important}&lt;br /&gt;
@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}}&lt;br /&gt;
@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}&lt;br /&gt;
@media (min-width:993px){.w3-modal-content{width:900px}}&lt;br /&gt;
@media screen and (max-width:600px){.w3-topnav a{display:block}.w3-navbar li:not(.w3-opennav){float:none;width:100%!important}.w3-navbar li.w3-right{float:none!important}}	&lt;br /&gt;
@media screen and (max-width:600px){.w3-topnav .w3-dropdown-hover .w3-dropdown-content,.w3-navbar .w3-dropdown-click .w3-dropdown-content,.w3-navbar .w3-dropdown-hover .w3-dropdown-content{position:relative}}	&lt;br /&gt;
@media screen and (max-width:600px){.w3-topnav,.w3-navbar{text-align:center}}&lt;br /&gt;
@media (max-width:600px){.w3-hide-small{display:none!important}}&lt;br /&gt;
@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}&lt;br /&gt;
@media (min-width:993px){.w3-hide-large{display:none!important}}&lt;br /&gt;
@media screen and (max-width:992px){.w3-sidenav.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}}&lt;br /&gt;
@media screen and (min-width:993px){.w3-sidenav.w3-collapse{display:block!important}}&lt;br /&gt;
.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}&lt;br /&gt;
.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}&lt;br /&gt;
.w3-left{float:left!important}.w3-right{float:right!important}&lt;br /&gt;
.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}&lt;br /&gt;
.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important}&lt;br /&gt;
.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}&lt;br /&gt;
.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}&lt;br /&gt;
.w3-vertical{word-break:break-all;line-height:1;text-align:center;width:0.6em}&lt;br /&gt;
.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}&lt;br /&gt;
.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}&lt;br /&gt;
.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}&lt;br /&gt;
.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}&lt;br /&gt;
.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}&lt;br /&gt;
.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}&lt;br /&gt;
.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}&lt;br /&gt;
.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}&lt;br /&gt;
.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}&lt;br /&gt;
.w3-circle{border-radius:50%!important}&lt;br /&gt;
.w3-round-small{border-radius:2px!important}.w3-round,.w3-round-medium{border-radius:4px!important}&lt;br /&gt;
.w3-round-large{border-radius:8px!important}.w3-round-xlarge{border-radius:16px!important}&lt;br /&gt;
.w3-round-xxlarge{border-radius:32px!important}.w3-round-jumbo{border-radius:64px!important}&lt;br /&gt;
.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}&lt;br /&gt;
.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}&lt;br /&gt;
.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}&lt;br /&gt;
.w3-margin{margin:16px!important}.w3-margin-0{margin:0!important}&lt;br /&gt;
.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}&lt;br /&gt;
.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}&lt;br /&gt;
.w3-section{margin-top:16px!important;margin-bottom:16px!important}&lt;br /&gt;
.w3-padding-tiny{padding:2px 4px!important}.w3-padding-small{padding:4px 8px!important}&lt;br /&gt;
.w3-padding-medium,.w3-padding,.w3-form{padding:8px 16px!important}&lt;br /&gt;
.w3-padding-large{padding:12px 24px!important}.w3-padding-xlarge{padding:16px 32px!important}&lt;br /&gt;
.w3-padding-xxlarge{padding:24px 48px!important}.w3-padding-jumbo{padding:32px 64px!important}&lt;br /&gt;
.w3-padding-4{padding-top:4px!important;padding-bottom:4px!important}&lt;br /&gt;
.w3-padding-8{padding-top:8px!important;padding-bottom:8px!important}&lt;br /&gt;
.w3-padding-12{padding-top:12px!important;padding-bottom:12px!important}&lt;br /&gt;
.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}&lt;br /&gt;
.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}&lt;br /&gt;
.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}&lt;br /&gt;
.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}&lt;br /&gt;
.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}&lt;br /&gt;
.w3-padding-128{padding-top:128px!important;padding-bottom:128px!important}&lt;br /&gt;
.w3-padding-0{padding:0!important}&lt;br /&gt;
.w3-padding-top{padding-top:8px!important}.w3-padding-bottom{padding-bottom:8px!important}&lt;br /&gt;
.w3-padding-left{padding-left:16px!important}.w3-padding-right{padding-right:16px!important}&lt;br /&gt;
.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}&lt;br /&gt;
.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}&lt;br /&gt;
.w3-row-padding,.w3-row-padding&amp;gt;.w3-half,.w3-row-padding&amp;gt;.w3-third,.w3-row-padding&amp;gt;.w3-twothird,.w3-row-padding&amp;gt;.w3-threequarter,.w3-row-padding&amp;gt;.w3-quarter,.w3-row-padding&amp;gt;.w3-col{padding:0 8px}&lt;br /&gt;
.w3-spin{animation:w3-spin 2s infinite linear;-webkit-animation:w3-spin 2s infinite linear}&lt;br /&gt;
@-webkit-keyframes w3-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}&lt;br /&gt;
@keyframes w3-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}&lt;br /&gt;
.w3-container{padding:0.01em 16px}&lt;br /&gt;
.w3-panel{padding:0.01em 16px;margin-top:16px!important;margin-bottom:16px!important}&lt;br /&gt;
.w3-example{background-color:#f1f1f1;padding:0.01em 16px}&lt;br /&gt;
.w3-code,.w3-codespan{font-family:Consolas,&amp;quot;courier new&amp;quot;;font-size:16px}&lt;br /&gt;
.w3-code{line-height:1.4;width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}&lt;br /&gt;
.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}&lt;br /&gt;
.w3-example,.w3-code{margin:20px 0}.w3-card{border:1px solid #ccc}&lt;br /&gt;
.w3-card-2,.w3-example{box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)!important}&lt;br /&gt;
.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)!important}&lt;br /&gt;
.w3-card-8{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)!important}&lt;br /&gt;
.w3-card-12{box-shadow:0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19)!important}&lt;br /&gt;
.w3-card-16{box-shadow:0 16px 24px 0 rgba(0,0,0,0.22),0 25px 55px 0 rgba(0,0,0,0.21)!important}&lt;br /&gt;
.w3-card-24{box-shadow:0 24px 24px 0 rgba(0,0,0,0.2),0 40px 77px 0 rgba(0,0,0,0.22)!important}&lt;br /&gt;
.w3-animate-fading{-webkit-animation:fading 10s infinite;animation:fading 10s infinite}&lt;br /&gt;
@-webkit-keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}&lt;br /&gt;
@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}&lt;br /&gt;
.w3-animate-opacity{-webkit-animation:opac 0.8s;animation:opac 0.8s}&lt;br /&gt;
@-webkit-keyframes opac{from{opacity:0} to{opacity:1}}&lt;br /&gt;
@keyframes opac{from{opacity:0} to{opacity:1}}&lt;br /&gt;
.w3-animate-top{position:relative;-webkit-animation:animatetop 0.4s;animation:animatetop 0.4s}&lt;br /&gt;
@-webkit-keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}&lt;br /&gt;
@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}&lt;br /&gt;
.w3-animate-left{position:relative;-webkit-animation:animateleft 0.4s;animation:animateleft 0.4s}&lt;br /&gt;
@-webkit-keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}&lt;br /&gt;
@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}&lt;br /&gt;
.w3-animate-right{position:relative;-webkit-animation:animateright 0.4s;animation:animateright 0.4s}&lt;br /&gt;
@-webkit-keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}&lt;br /&gt;
@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}&lt;br /&gt;
.w3-animate-bottom{position:relative;-webkit-animation:animatebottom 0.4s;animation:animatebottom 0.4s}&lt;br /&gt;
@-webkit-keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0px;opacity:1}}&lt;br /&gt;
@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}&lt;br /&gt;
.w3-animate-zoom {-webkit-animation:animatezoom 0.6s;animation:animatezoom 0.6s}&lt;br /&gt;
@-webkit-keyframes animatezoom{from{-webkit-transform:scale(0)} to{-webkit-transform:scale(1)}}&lt;br /&gt;
@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}&lt;br /&gt;
.w3-animate-input{-webkit-transition:width 0.4s ease-in-out;transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important}&lt;br /&gt;
.w3-opacity,.w3-hover-opacity:hover{opacity:0.60;filter:alpha(opacity=60);-webkit-backface-visibility:hidden}&lt;br /&gt;
.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1;filter:alpha(opacity=100);-webkit-backface-visibility:hidden}&lt;br /&gt;
.w3-opacity-max{opacity:0.25;filter:alpha(opacity=25);-webkit-backface-visibility:hidden}&lt;br /&gt;
.w3-opacity-min{opacity:0.75;filter:alpha(opacity=75);-webkit-backface-visibility:hidden}&lt;br /&gt;
.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{-webkit-filter:grayscale(100%);filter:grayscale(100%)}&lt;br /&gt;
.w3-greyscale,.w3-grayscale{-webkit-filter:grayscale(75%);filter:grayscale(75%)}&lt;br /&gt;
.w3-greyscale-min,.w3-grayscale-min{-webkit-filter:grayscale(50%);filter:grayscale(50%)}&lt;br /&gt;
.w3-sepia{-webkit-filter:sepia(75%);filter:sepia(75%)}&lt;br /&gt;
.w3-sepia-max,.w3-hover-sepia:hover{-webkit-filter:sepia(100%);filter:sepia(100%)}&lt;br /&gt;
.w3-sepia-min{-webkit-filter:sepia(50%);filter:sepia(50%)}&lt;br /&gt;
.w3-text-shadow{text-shadow:1px 1px 0 #444}.w3-text-shadow-white{text-shadow:1px 1px 0 #ddd}&lt;br /&gt;
.w3-transparent{background-color:transparent!important}&lt;br /&gt;
.w3-hover-none:hover{box-shadow:none!important;background-color:transparent!important}&lt;br /&gt;
/* Colors */&lt;br /&gt;
.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important}&lt;br /&gt;
.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important}&lt;br /&gt;
.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important}&lt;br /&gt;
.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}&lt;br /&gt;
.w3-autumn-grey,.w3-hover-light-blue:hover{color:#000!important;background-color:#dce6e6!important}&lt;br /&gt;
.w3-autumn-light-grey,.w3-hover-light-blue:hover{color:#000!important;background-color:#D0CDCA!important}&lt;br /&gt;
.w3-autumn-pink,.w3-hover-light-blue:hover{color:#000!important;background-color:#E87F60!important}&lt;br /&gt;
.w3-autumn-brown,.w3-hover-light-blue:hover{color:#000!important;background-color:#deaf88!important}&lt;br /&gt;
.w3-autumn-green,.w3-hover-light-blue:hover{color:#000!important;background-color:#C7E3C7!important}&lt;br /&gt;
.w3-autumn-red,.w3-hover-light-blue:hover{color:#000!important;background-color:#ffdec3!important}&lt;br /&gt;
.w3-autumn-yellow,.w3-hover-light-blue:hover{color:#000!important;background-color:#e3c7d7!important}&lt;br /&gt;
.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important}&lt;br /&gt;
.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}&lt;br /&gt;
.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important}&lt;br /&gt;
.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important}&lt;br /&gt;
.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}&lt;br /&gt;
.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}&lt;br /&gt;
.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}&lt;br /&gt;
.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important}&lt;br /&gt;
.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important}&lt;br /&gt;
.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}&lt;br /&gt;
.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important}&lt;br /&gt;
.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}&lt;br /&gt;
.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}&lt;br /&gt;
.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important}&lt;br /&gt;
.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}&lt;br /&gt;
.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important}&lt;br /&gt;
.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}&lt;br /&gt;
.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important}&lt;br /&gt;
.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important}&lt;br /&gt;
.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important}&lt;br /&gt;
.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important}&lt;br /&gt;
.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important}&lt;br /&gt;
.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important}&lt;br /&gt;
.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important}&lt;br /&gt;
.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important}&lt;br /&gt;
.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important}&lt;br /&gt;
.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important}&lt;br /&gt;
.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important}&lt;br /&gt;
.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important}&lt;br /&gt;
.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important}&lt;br /&gt;
.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important}&lt;br /&gt;
.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important}&lt;br /&gt;
.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important}&lt;br /&gt;
.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important}&lt;br /&gt;
.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important}&lt;br /&gt;
.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important}&lt;br /&gt;
.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important}&lt;br /&gt;
.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important}&lt;br /&gt;
.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important}&lt;br /&gt;
.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important}&lt;br /&gt;
.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important}&lt;br /&gt;
.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important}&lt;br /&gt;
.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important}&lt;br /&gt;
.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important}&lt;br /&gt;
.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important}&lt;br /&gt;
.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important}&lt;br /&gt;
.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important}&lt;br /&gt;
.w3-text-white,.w3-hover-text-white:hover{color:#fff!important}&lt;br /&gt;
.w3-text-black,.w3-hover-text-black:hover{color:#000!important}&lt;br /&gt;
.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important}&lt;br /&gt;
.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important}&lt;br /&gt;
.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important}&lt;br /&gt;
.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important}&lt;br /&gt;
.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important}&lt;br /&gt;
.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important}&lt;br /&gt;
.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important}&lt;br /&gt;
.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important}&lt;br /&gt;
.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important}&lt;br /&gt;
.w3-border-blue-grey,.w3-hover-blue-grey:hover,.w3-border-blue-gray,.w3-hover-blue-gray:hover{border-color:#607d8b!important}&lt;br /&gt;
.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important}&lt;br /&gt;
.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important}&lt;br /&gt;
.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important}&lt;br /&gt;
.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important}&lt;br /&gt;
.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important}&lt;br /&gt;
.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important}&lt;br /&gt;
.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important}&lt;br /&gt;
.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important}&lt;br /&gt;
.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important}&lt;br /&gt;
.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important}&lt;br /&gt;
.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important}&lt;br /&gt;
.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important}&lt;br /&gt;
.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important}&lt;br /&gt;
.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important}&lt;br /&gt;
.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important}&lt;br /&gt;
.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important}&lt;br /&gt;
.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important}&lt;br /&gt;
.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important}&lt;br /&gt;
.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important}&lt;br /&gt;
.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important}&lt;br /&gt;
.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important}&lt;br /&gt;
&lt;br /&gt;
img, object, embed {&lt;br /&gt;
    height: auto;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
	<entry>
		<id>http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=402</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="http://dok.wiki.uib.no/index.php?title=MediaWiki:Common.js&amp;diff=402"/>
		<updated>2021-01-27T16:49:40Z</updated>

		<summary type="html">&lt;p&gt;Mihho: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
	var myElement = document.getElementById(&#039;mw-mywiki-example&#039;);&lt;br /&gt;
	myElement.innerHTML = &#039;any HTML&#039;;&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.min.js&#039; );&lt;br /&gt;
mw.loader.load( &#039;//folk.uib.no/mihho/jqplot/jquery.jqplot.min.js&#039; );&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
$.jqplot(&#039;chartdiv&#039;,  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
// install [[User:Cacycle/wikEd]] in-browser text editor&lt;br /&gt;
document.write(&#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&#039;&lt;br /&gt;
+ &#039;//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js&#039;&lt;br /&gt;
+ &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;quot;&amp;gt;&amp;lt;/&#039; + &#039;script&amp;gt;&#039;);&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry PACKAGED v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bridget makes jQuery widgets&lt;br /&gt;
 * v2.0.1&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;jquery-bridget/jquery-bridget&#039;,[ &#039;jquery&#039; ], function( jQuery ) {&lt;br /&gt;
      return factory( window, jQuery );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;jquery&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.jQueryBridget = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.jQuery&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, jQuery ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- utils ----- //&lt;br /&gt;
&lt;br /&gt;
var arraySlice = Array.prototype.slice;&lt;br /&gt;
&lt;br /&gt;
// helper function for logging errors&lt;br /&gt;
// $.error breaks jQuery chaining&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? function() {} :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// ----- jQueryBridget ----- //&lt;br /&gt;
&lt;br /&gt;
function jQueryBridget( namespace, PluginClass, $ ) {&lt;br /&gt;
  $ = $ || jQuery || window.jQuery;&lt;br /&gt;
  if ( !$ ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // add option method -&amp;gt; $().plugin(&#039;option&#039;, {...})&lt;br /&gt;
  if ( !PluginClass.prototype.option ) {&lt;br /&gt;
    // option setter&lt;br /&gt;
    PluginClass.prototype.option = function( opts ) {&lt;br /&gt;
      // bail out if not an object&lt;br /&gt;
      if ( !$.isPlainObject( opts ) ){&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      this.options = $.extend( true, this.options, opts );&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make jQuery plugin&lt;br /&gt;
  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {&lt;br /&gt;
    if ( typeof arg0 == &#039;string&#039; ) {&lt;br /&gt;
      // method call $().plugin( &#039;methodName&#039;, { options } )&lt;br /&gt;
      // shift arguments by 1&lt;br /&gt;
      var args = arraySlice.call( arguments, 1 );&lt;br /&gt;
      return methodCall( this, arg0, args );&lt;br /&gt;
    }&lt;br /&gt;
    // just $().plugin({ options })&lt;br /&gt;
    plainCall( this, arg0 );&lt;br /&gt;
    return this;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // $().plugin(&#039;methodName&#039;)&lt;br /&gt;
  function methodCall( $elems, methodName, args ) {&lt;br /&gt;
    var returnValue;&lt;br /&gt;
    var pluginMethodStr = &#039;$().&#039; + namespace + &#039;(&amp;quot;&#039; + methodName + &#039;&amp;quot;)&#039;;&lt;br /&gt;
&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      // get instance&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( !instance ) {&lt;br /&gt;
        logError( namespace + &#039; not initialized. Cannot call methods, i.e. &#039; +&lt;br /&gt;
          pluginMethodStr );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      var method = instance[ methodName ];&lt;br /&gt;
      if ( !method || methodName.charAt(0) == &#039;_&#039; ) {&lt;br /&gt;
        logError( pluginMethodStr + &#039; is not a valid method&#039; );&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      // apply method, get return value&lt;br /&gt;
      var value = method.apply( instance, args );&lt;br /&gt;
      // set return value if value is returned, use only first value&lt;br /&gt;
      returnValue = returnValue === undefined ? value : returnValue;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    return returnValue !== undefined ? returnValue : $elems;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function plainCall( $elems, options ) {&lt;br /&gt;
    $elems.each( function( i, elem ) {&lt;br /&gt;
      var instance = $.data( elem, namespace );&lt;br /&gt;
      if ( instance ) {&lt;br /&gt;
        // set options &amp;amp; init&lt;br /&gt;
        instance.option( options );&lt;br /&gt;
        instance._init();&lt;br /&gt;
      } else {&lt;br /&gt;
        // initialize new instance&lt;br /&gt;
        instance = new PluginClass( elem, options );&lt;br /&gt;
        $.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  updateJQuery( $ );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- updateJQuery ----- //&lt;br /&gt;
&lt;br /&gt;
// set $.bridget for v1 backwards compatibility&lt;br /&gt;
function updateJQuery( $ ) {&lt;br /&gt;
  if ( !$ || ( $ &amp;amp;&amp;amp; $.bridget ) ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  $.bridget = jQueryBridget;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateJQuery( jQuery || window.jQuery );&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return jQueryBridget;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * EvEmitter v1.0.3&lt;br /&gt;
 * Lil&#039; event emitter&lt;br /&gt;
 * MIT License&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* jshint unused: true, undef: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( global, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, window */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;ev-emitter/ev-emitter&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // Browser globals&lt;br /&gt;
    global.EvEmitter = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( typeof window != &#039;undefined&#039; ? window : this, function() {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function EvEmitter() {}&lt;br /&gt;
&lt;br /&gt;
var proto = EvEmitter.prototype;&lt;br /&gt;
&lt;br /&gt;
proto.on = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // set events hash&lt;br /&gt;
  var events = this._events = this._events || {};&lt;br /&gt;
  // set listeners array&lt;br /&gt;
  var listeners = events[ eventName ] = events[ eventName ] || [];&lt;br /&gt;
  // only add once&lt;br /&gt;
  if ( listeners.indexOf( listener ) == -1 ) {&lt;br /&gt;
    listeners.push( listener );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.once = function( eventName, listener ) {&lt;br /&gt;
  if ( !eventName || !listener ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add event&lt;br /&gt;
  this.on( eventName, listener );&lt;br /&gt;
  // set once flag&lt;br /&gt;
  // set onceEvents hash&lt;br /&gt;
  var onceEvents = this._onceEvents = this._onceEvents || {};&lt;br /&gt;
  // set onceListeners object&lt;br /&gt;
  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};&lt;br /&gt;
  // set flag&lt;br /&gt;
  onceListeners[ listener ] = true;&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.off = function( eventName, listener ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var index = listeners.indexOf( listener );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    listeners.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.emitEvent = function( eventName, args ) {&lt;br /&gt;
  var listeners = this._events &amp;amp;&amp;amp; this._events[ eventName ];&lt;br /&gt;
  if ( !listeners || !listeners.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var i = 0;&lt;br /&gt;
  var listener = listeners[i];&lt;br /&gt;
  args = args || [];&lt;br /&gt;
  // once stuff&lt;br /&gt;
  var onceListeners = this._onceEvents &amp;amp;&amp;amp; this._onceEvents[ eventName ];&lt;br /&gt;
&lt;br /&gt;
  while ( listener ) {&lt;br /&gt;
    var isOnce = onceListeners &amp;amp;&amp;amp; onceListeners[ listener ];&lt;br /&gt;
    if ( isOnce ) {&lt;br /&gt;
      // remove listener&lt;br /&gt;
      // remove before trigger to prevent recursion&lt;br /&gt;
      this.off( eventName, listener );&lt;br /&gt;
      // unset once flag&lt;br /&gt;
      delete onceListeners[ listener ];&lt;br /&gt;
    }&lt;br /&gt;
    // trigger listener&lt;br /&gt;
    listener.apply( this, args );&lt;br /&gt;
    // get next listener&lt;br /&gt;
    i += isOnce ? 0 : 1;&lt;br /&gt;
    listener = listeners[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return this;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return EvEmitter;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * getSize v2.0.2&lt;br /&gt;
 * measure size of elements&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
/*global define: false, module: false, console: false */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;get-size/get-size&#039;,[],function() {&lt;br /&gt;
      return factory();&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.getSize = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})( window, function factory() {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// -------------------------- helpers -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// get a number from a string, not a percentage&lt;br /&gt;
function getStyleSize( value ) {&lt;br /&gt;
  var num = parseFloat( value );&lt;br /&gt;
  // not a percent like &#039;100%&#039;, and a number&lt;br /&gt;
  var isValid = value.indexOf(&#039;%&#039;) == -1 &amp;amp;&amp;amp; !isNaN( num );&lt;br /&gt;
  return isValid &amp;amp;&amp;amp; num;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function noop() {}&lt;br /&gt;
&lt;br /&gt;
var logError = typeof console == &#039;undefined&#039; ? noop :&lt;br /&gt;
  function( message ) {&lt;br /&gt;
    console.error( message );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
// -------------------------- measurements -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var measurements = [&lt;br /&gt;
  &#039;paddingLeft&#039;,&lt;br /&gt;
  &#039;paddingRight&#039;,&lt;br /&gt;
  &#039;paddingTop&#039;,&lt;br /&gt;
  &#039;paddingBottom&#039;,&lt;br /&gt;
  &#039;marginLeft&#039;,&lt;br /&gt;
  &#039;marginRight&#039;,&lt;br /&gt;
  &#039;marginTop&#039;,&lt;br /&gt;
  &#039;marginBottom&#039;,&lt;br /&gt;
  &#039;borderLeftWidth&#039;,&lt;br /&gt;
  &#039;borderRightWidth&#039;,&lt;br /&gt;
  &#039;borderTopWidth&#039;,&lt;br /&gt;
  &#039;borderBottomWidth&#039;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
var measurementsLength = measurements.length;&lt;br /&gt;
&lt;br /&gt;
function getZeroSize() {&lt;br /&gt;
  var size = {&lt;br /&gt;
    width: 0,&lt;br /&gt;
    height: 0,&lt;br /&gt;
    innerWidth: 0,&lt;br /&gt;
    innerHeight: 0,&lt;br /&gt;
    outerWidth: 0,&lt;br /&gt;
    outerHeight: 0&lt;br /&gt;
  };&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    size[ measurement ] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getStyle -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getStyle, get style of element, check for Firefox bug&lt;br /&gt;
 * https://bugzilla.mozilla.org/show_bug.cgi?id=548397&lt;br /&gt;
 */&lt;br /&gt;
function getStyle( elem ) {&lt;br /&gt;
  var style = getComputedStyle( elem );&lt;br /&gt;
  if ( !style ) {&lt;br /&gt;
    logError( &#039;Style returned &#039; + style +&lt;br /&gt;
      &#039;. Are you running this code in a hidden iframe on Firefox? &#039; +&lt;br /&gt;
      &#039;See http://bit.ly/getsizebug1&#039; );&lt;br /&gt;
  }&lt;br /&gt;
  return style;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- setup -------------------------- //&lt;br /&gt;
&lt;br /&gt;
var isSetup = false;&lt;br /&gt;
&lt;br /&gt;
var isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * setup&lt;br /&gt;
 * check isBoxSizerOuter&lt;br /&gt;
 * do on first getSize() rather than on page load for Firefox bug&lt;br /&gt;
 */&lt;br /&gt;
function setup() {&lt;br /&gt;
  // setup once&lt;br /&gt;
  if ( isSetup ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  isSetup = true;&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- box sizing -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * WebKit measures the outer-width on style.width on border-box elems&lt;br /&gt;
   * IE &amp;amp; Firefox&amp;lt;29 measures the inner-width&lt;br /&gt;
   */&lt;br /&gt;
  var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
  div.style.width = &#039;200px&#039;;&lt;br /&gt;
  div.style.padding = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.borderStyle = &#039;solid&#039;;&lt;br /&gt;
  div.style.borderWidth = &#039;1px 2px 3px 4px&#039;;&lt;br /&gt;
  div.style.boxSizing = &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  var body = document.body || document.documentElement;&lt;br /&gt;
  body.appendChild( div );&lt;br /&gt;
  var style = getStyle( div );&lt;br /&gt;
&lt;br /&gt;
  getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200;&lt;br /&gt;
  body.removeChild( div );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- getSize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function getSize( elem ) {&lt;br /&gt;
  setup();&lt;br /&gt;
&lt;br /&gt;
  // use querySeletor if elem is string&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    elem = document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // do not proceed on non-objects&lt;br /&gt;
  if ( !elem || typeof elem != &#039;object&#039; || !elem.nodeType ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var style = getStyle( elem );&lt;br /&gt;
&lt;br /&gt;
  // if hidden, everything is 0&lt;br /&gt;
  if ( style.display == &#039;none&#039; ) {&lt;br /&gt;
    return getZeroSize();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var size = {};&lt;br /&gt;
  size.width = elem.offsetWidth;&lt;br /&gt;
  size.height = elem.offsetHeight;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBox = size.isBorderBox = style.boxSizing == &#039;border-box&#039;;&lt;br /&gt;
&lt;br /&gt;
  // get all measurements&lt;br /&gt;
  for ( var i=0; i &amp;lt; measurementsLength; i++ ) {&lt;br /&gt;
    var measurement = measurements[i];&lt;br /&gt;
    var value = style[ measurement ];&lt;br /&gt;
    var num = parseFloat( value );&lt;br /&gt;
    // any &#039;auto&#039;, &#039;medium&#039; value will be 0&lt;br /&gt;
    size[ measurement ] = !isNaN( num ) ? num : 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var paddingWidth = size.paddingLeft + size.paddingRight;&lt;br /&gt;
  var paddingHeight = size.paddingTop + size.paddingBottom;&lt;br /&gt;
  var marginWidth = size.marginLeft + size.marginRight;&lt;br /&gt;
  var marginHeight = size.marginTop + size.marginBottom;&lt;br /&gt;
  var borderWidth = size.borderLeftWidth + size.borderRightWidth;&lt;br /&gt;
  var borderHeight = size.borderTopWidth + size.borderBottomWidth;&lt;br /&gt;
&lt;br /&gt;
  var isBorderBoxSizeOuter = isBorderBox &amp;amp;&amp;amp; isBoxSizeOuter;&lt;br /&gt;
&lt;br /&gt;
  // overwrite width and height if we can get it from style&lt;br /&gt;
  var styleWidth = getStyleSize( style.width );&lt;br /&gt;
  if ( styleWidth !== false ) {&lt;br /&gt;
    size.width = styleWidth +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var styleHeight = getStyleSize( style.height );&lt;br /&gt;
  if ( styleHeight !== false ) {&lt;br /&gt;
    size.height = styleHeight +&lt;br /&gt;
      // add padding and border unless it&#039;s already including it&lt;br /&gt;
      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  size.innerWidth = size.width - ( paddingWidth + borderWidth );&lt;br /&gt;
  size.innerHeight = size.height - ( paddingHeight + borderHeight );&lt;br /&gt;
&lt;br /&gt;
  size.outerWidth = size.width + marginWidth;&lt;br /&gt;
  size.outerHeight = size.height + marginHeight;&lt;br /&gt;
&lt;br /&gt;
  return size;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return getSize;&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * matchesSelector v2.0.1&lt;br /&gt;
 * matchesSelector( element, &#039;.selector&#039; )&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, strict: true, undef: true, unused: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  /*global define: false, module: false */&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;desandro-matches-selector/matches-selector&#039;,factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory();&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.matchesSelector = factory();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory() {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
  var matchesMethod = ( function() {&lt;br /&gt;
    var ElemProto = Element.prototype;&lt;br /&gt;
    // check for the standard method name first&lt;br /&gt;
    if ( ElemProto.matches ) {&lt;br /&gt;
      return &#039;matches&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check un-prefixed&lt;br /&gt;
    if ( ElemProto.matchesSelector ) {&lt;br /&gt;
      return &#039;matchesSelector&#039;;&lt;br /&gt;
    }&lt;br /&gt;
    // check vendor prefixes&lt;br /&gt;
    var prefixes = [ &#039;webkit&#039;, &#039;moz&#039;, &#039;ms&#039;, &#039;o&#039; ];&lt;br /&gt;
&lt;br /&gt;
    for ( var i=0; i &amp;lt; prefixes.length; i++ ) {&lt;br /&gt;
      var prefix = prefixes[i];&lt;br /&gt;
      var method = prefix + &#039;MatchesSelector&#039;;&lt;br /&gt;
      if ( ElemProto[ method ] ) {&lt;br /&gt;
        return method;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  })();&lt;br /&gt;
&lt;br /&gt;
  return function matchesSelector( elem, selector ) {&lt;br /&gt;
    return elem[ matchesMethod ]( selector );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fizzy UI utils v2.0.2&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*jshint browser: true, undef: true, unused: true, strict: true */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /*jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( &#039;fizzy-ui-utils/utils&#039;,[&lt;br /&gt;
      &#039;desandro-matches-selector/matches-selector&#039;&lt;br /&gt;
    ], function( matchesSelector ) {&lt;br /&gt;
      return factory( window, matchesSelector );&lt;br /&gt;
    });&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;desandro-matches-selector&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.fizzyUIUtils = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.matchesSelector&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, matchesSelector ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var utils = {};&lt;br /&gt;
&lt;br /&gt;
// ----- extend ----- //&lt;br /&gt;
&lt;br /&gt;
// extends objects&lt;br /&gt;
utils.extend = function( a, b ) {&lt;br /&gt;
  for ( var prop in b ) {&lt;br /&gt;
    a[ prop ] = b[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- modulo ----- //&lt;br /&gt;
&lt;br /&gt;
utils.modulo = function( num, div ) {&lt;br /&gt;
  return ( ( num % div ) + div ) % div;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- makeArray ----- //&lt;br /&gt;
&lt;br /&gt;
// turn element or nodeList into an array&lt;br /&gt;
utils.makeArray = function( obj ) {&lt;br /&gt;
  var ary = [];&lt;br /&gt;
  if ( Array.isArray( obj ) ) {&lt;br /&gt;
    // use object if already an array&lt;br /&gt;
    ary = obj;&lt;br /&gt;
  } else if ( obj &amp;amp;&amp;amp; typeof obj.length == &#039;number&#039; ) {&lt;br /&gt;
    // convert nodeList to array&lt;br /&gt;
    for ( var i=0; i &amp;lt; obj.length; i++ ) {&lt;br /&gt;
      ary.push( obj[i] );&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    // array of single index&lt;br /&gt;
    ary.push( obj );&lt;br /&gt;
  }&lt;br /&gt;
  return ary;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- removeFrom ----- //&lt;br /&gt;
&lt;br /&gt;
utils.removeFrom = function( ary, obj ) {&lt;br /&gt;
  var index = ary.indexOf( obj );&lt;br /&gt;
  if ( index != -1 ) {&lt;br /&gt;
    ary.splice( index, 1 );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getParent ----- //&lt;br /&gt;
&lt;br /&gt;
utils.getParent = function( elem, selector ) {&lt;br /&gt;
  while ( elem != document.body ) {&lt;br /&gt;
    elem = elem.parentNode;&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      return elem;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- getQueryElement ----- //&lt;br /&gt;
&lt;br /&gt;
// use element as selector string&lt;br /&gt;
utils.getQueryElement = function( elem ) {&lt;br /&gt;
  if ( typeof elem == &#039;string&#039; ) {&lt;br /&gt;
    return document.querySelector( elem );&lt;br /&gt;
  }&lt;br /&gt;
  return elem;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- handleEvent ----- //&lt;br /&gt;
&lt;br /&gt;
// enable .ontype to trigger from .addEventListener( elem, &#039;type&#039; )&lt;br /&gt;
utils.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- filterFindElements ----- //&lt;br /&gt;
&lt;br /&gt;
utils.filterFindElements = function( elems, selector ) {&lt;br /&gt;
  // make array of elems&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var ffElems = [];&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // check that elem is an actual element&lt;br /&gt;
    if ( !( elem instanceof HTMLElement ) ) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // add elem if no selector&lt;br /&gt;
    if ( !selector ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    // filter &amp;amp; find items if we have a selector&lt;br /&gt;
    // filter&lt;br /&gt;
    if ( matchesSelector( elem, selector ) ) {&lt;br /&gt;
      ffElems.push( elem );&lt;br /&gt;
    }&lt;br /&gt;
    // find children&lt;br /&gt;
    var childElems = elem.querySelectorAll( selector );&lt;br /&gt;
    // concat childElems to filterFound array&lt;br /&gt;
    for ( var i=0; i &amp;lt; childElems.length; i++ ) {&lt;br /&gt;
      ffElems.push( childElems[i] );&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  return ffElems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- debounceMethod ----- //&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod = function( _class, methodName, threshold ) {&lt;br /&gt;
  // original method&lt;br /&gt;
  var method = _class.prototype[ methodName ];&lt;br /&gt;
  var timeoutName = methodName + &#039;Timeout&#039;;&lt;br /&gt;
&lt;br /&gt;
  _class.prototype[ methodName ] = function() {&lt;br /&gt;
    var timeout = this[ timeoutName ];&lt;br /&gt;
    if ( timeout ) {&lt;br /&gt;
      clearTimeout( timeout );&lt;br /&gt;
    }&lt;br /&gt;
    var args = arguments;&lt;br /&gt;
&lt;br /&gt;
    var _this = this;&lt;br /&gt;
    this[ timeoutName ] = setTimeout( function() {&lt;br /&gt;
      method.apply( _this, args );&lt;br /&gt;
      delete _this[ timeoutName ];&lt;br /&gt;
    }, threshold || 100 );&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- docReady ----- //&lt;br /&gt;
&lt;br /&gt;
utils.docReady = function( callback ) {&lt;br /&gt;
  var readyState = document.readyState;&lt;br /&gt;
  if ( readyState == &#039;complete&#039; || readyState == &#039;interactive&#039; ) {&lt;br /&gt;
    callback();&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener( &#039;DOMContentLoaded&#039;, callback );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- htmlInit ----- //&lt;br /&gt;
&lt;br /&gt;
// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/&lt;br /&gt;
utils.toDashed = function( str ) {&lt;br /&gt;
  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {&lt;br /&gt;
    return $1 + &#039;-&#039; + $2;&lt;br /&gt;
  }).toLowerCase();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
/**&lt;br /&gt;
 * allow user to initialize classes via [data-namespace] or .js-namespace class&lt;br /&gt;
 * htmlInit( Widget, &#039;widgetName&#039; )&lt;br /&gt;
 * options are parsed from data-namespace-options&lt;br /&gt;
 */&lt;br /&gt;
utils.htmlInit = function( WidgetClass, namespace ) {&lt;br /&gt;
  utils.docReady( function() {&lt;br /&gt;
    var dashedNamespace = utils.toDashed( namespace );&lt;br /&gt;
    var dataAttr = &#039;data-&#039; + dashedNamespace;&lt;br /&gt;
    var dataAttrElems = document.querySelectorAll( &#039;[&#039; + dataAttr + &#039;]&#039; );&lt;br /&gt;
    var jsDashElems = document.querySelectorAll( &#039;.js-&#039; + dashedNamespace );&lt;br /&gt;
    var elems = utils.makeArray( dataAttrElems )&lt;br /&gt;
      .concat( utils.makeArray( jsDashElems ) );&lt;br /&gt;
    var dataOptionsAttr = dataAttr + &#039;-options&#039;;&lt;br /&gt;
    var jQuery = window.jQuery;&lt;br /&gt;
&lt;br /&gt;
    elems.forEach( function( elem ) {&lt;br /&gt;
      var attr = elem.getAttribute( dataAttr ) ||&lt;br /&gt;
        elem.getAttribute( dataOptionsAttr );&lt;br /&gt;
      var options;&lt;br /&gt;
      try {&lt;br /&gt;
        options = attr &amp;amp;&amp;amp; JSON.parse( attr );&lt;br /&gt;
      } catch ( error ) {&lt;br /&gt;
        // log error, do not initialize&lt;br /&gt;
        if ( console ) {&lt;br /&gt;
          console.error( &#039;Error parsing &#039; + dataAttr + &#039; on &#039; + elem.className +&lt;br /&gt;
          &#039;: &#039; + error );&lt;br /&gt;
        }&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      // initialize&lt;br /&gt;
      var instance = new WidgetClass( elem, options );&lt;br /&gt;
      // make available via $().data(&#039;layoutname&#039;)&lt;br /&gt;
      if ( jQuery ) {&lt;br /&gt;
        jQuery.data( elem, namespace, instance );&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -----  ----- //&lt;br /&gt;
&lt;br /&gt;
return utils;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Outlayer Item&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/item&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = {};&lt;br /&gt;
    window.Outlayer.Item = factory(&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( EvEmitter, getSize ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
function isEmptyObj( obj ) {&lt;br /&gt;
  for ( var prop in obj ) {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
  prop = null;&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -------------------------- CSS3 support -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var docElemStyle = document.documentElement.style;&lt;br /&gt;
&lt;br /&gt;
var transitionProperty = typeof docElemStyle.transition == &#039;string&#039; ?&lt;br /&gt;
  &#039;transition&#039; : &#039;WebkitTransition&#039;;&lt;br /&gt;
var transformProperty = typeof docElemStyle.transform == &#039;string&#039; ?&lt;br /&gt;
  &#039;transform&#039; : &#039;WebkitTransform&#039;;&lt;br /&gt;
&lt;br /&gt;
var transitionEndEvent = {&lt;br /&gt;
  WebkitTransition: &#039;webkitTransitionEnd&#039;,&lt;br /&gt;
  transition: &#039;transitionend&#039;&lt;br /&gt;
}[ transitionProperty ];&lt;br /&gt;
&lt;br /&gt;
// cache all vendor properties that could have vendor prefix&lt;br /&gt;
var vendorProperties = {&lt;br /&gt;
  transform: transformProperty,&lt;br /&gt;
  transition: transitionProperty,&lt;br /&gt;
  transitionDuration: transitionProperty + &#039;Duration&#039;,&lt;br /&gt;
  transitionProperty: transitionProperty + &#039;Property&#039;,&lt;br /&gt;
  transitionDelay: transitionProperty + &#039;Delay&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Item -------------------------- //&lt;br /&gt;
&lt;br /&gt;
function Item( element, layout ) {&lt;br /&gt;
  if ( !element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.element = element;&lt;br /&gt;
  // parent layout class, i.e. Masonry, Isotope, or Packery&lt;br /&gt;
  this.layout = layout;&lt;br /&gt;
  this.position = {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this._create();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
var proto = Item.prototype = Object.create( EvEmitter.prototype );&lt;br /&gt;
proto.constructor = Item;&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // transition objects&lt;br /&gt;
  this._transn = {&lt;br /&gt;
    ingProperties: {},&lt;br /&gt;
    clean: {},&lt;br /&gt;
    onEnd: {}&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;absolute&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// trigger specified handler for event type&lt;br /&gt;
proto.handleEvent = function( event ) {&lt;br /&gt;
  var method = &#039;on&#039; + event.type;&lt;br /&gt;
  if ( this[ method ] ) {&lt;br /&gt;
    this[ method ]( event );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * apply CSS styles to element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
 */&lt;br /&gt;
proto.css = function( style ) {&lt;br /&gt;
  var elemStyle = this.element.style;&lt;br /&gt;
&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    // use vendor property if available&lt;br /&gt;
    var supportedProp = vendorProperties[ prop ] || prop;&lt;br /&gt;
    elemStyle[ supportedProp ] = style[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
 // measure position, and sets it&lt;br /&gt;
proto.getPosition = function() {&lt;br /&gt;
  var style = getComputedStyle( this.element );&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  var xValue = style[ isOriginLeft ? &#039;left&#039; : &#039;right&#039; ];&lt;br /&gt;
  var yValue = style[ isOriginTop ? &#039;top&#039; : &#039;bottom&#039; ];&lt;br /&gt;
  // convert percent to pixels&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var x = xValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 );&lt;br /&gt;
  var y = yValue.indexOf(&#039;%&#039;) != -1 ?&lt;br /&gt;
    ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 );&lt;br /&gt;
&lt;br /&gt;
  // clean up &#039;auto&#039; or other non-integer values&lt;br /&gt;
  x = isNaN( x ) ? 0 : x;&lt;br /&gt;
  y = isNaN( y ) ? 0 : y;&lt;br /&gt;
  // remove padding from measurement&lt;br /&gt;
  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;&lt;br /&gt;
  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;&lt;br /&gt;
&lt;br /&gt;
  this.position.x = x;&lt;br /&gt;
  this.position.y = y;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set settled position, apply padding&lt;br /&gt;
proto.layoutPosition = function() {&lt;br /&gt;
  var layoutSize = this.layout.size;&lt;br /&gt;
  var style = {};&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
&lt;br /&gt;
  // x&lt;br /&gt;
  var xPadding = isOriginLeft ? &#039;paddingLeft&#039; : &#039;paddingRight&#039;;&lt;br /&gt;
  var xProperty = isOriginLeft ? &#039;left&#039; : &#039;right&#039;;&lt;br /&gt;
  var xResetProperty = isOriginLeft ? &#039;right&#039; : &#039;left&#039;;&lt;br /&gt;
&lt;br /&gt;
  var x = this.position.x + layoutSize[ xPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ xProperty ] = this.getXValue( x );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ xResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  // y&lt;br /&gt;
  var yPadding = isOriginTop ? &#039;paddingTop&#039; : &#039;paddingBottom&#039;;&lt;br /&gt;
  var yProperty = isOriginTop ? &#039;top&#039; : &#039;bottom&#039;;&lt;br /&gt;
  var yResetProperty = isOriginTop ? &#039;bottom&#039; : &#039;top&#039;;&lt;br /&gt;
&lt;br /&gt;
  var y = this.position.y + layoutSize[ yPadding ];&lt;br /&gt;
  // set in percentage or pixels&lt;br /&gt;
  style[ yProperty ] = this.getYValue( y );&lt;br /&gt;
  // reset other property&lt;br /&gt;
  style[ yResetProperty ] = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
  this.css( style );&lt;br /&gt;
  this.emitEvent( &#039;layout&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getXValue = function( x ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; !isHorizontal ?&lt;br /&gt;
    ( ( x / this.layout.size.width ) * 100 ) + &#039;%&#039; : x + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getYValue = function( y ) {&lt;br /&gt;
  var isHorizontal = this.layout._getOption(&#039;horizontal&#039;);&lt;br /&gt;
  return this.layout.options.percentPosition &amp;amp;&amp;amp; isHorizontal ?&lt;br /&gt;
    ( ( y / this.layout.size.height ) * 100 ) + &#039;%&#039; : y + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._transitionTo = function( x, y ) {&lt;br /&gt;
  this.getPosition();&lt;br /&gt;
  // get current x &amp;amp; y from top/left&lt;br /&gt;
  var curX = this.position.x;&lt;br /&gt;
  var curY = this.position.y;&lt;br /&gt;
&lt;br /&gt;
  var compareX = parseInt( x, 10 );&lt;br /&gt;
  var compareY = parseInt( y, 10 );&lt;br /&gt;
  var didNotMove = compareX === this.position.x &amp;amp;&amp;amp; compareY === this.position.y;&lt;br /&gt;
&lt;br /&gt;
  // save end position&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
&lt;br /&gt;
  // if did not move and not transitioning, just go to layout&lt;br /&gt;
  if ( didNotMove &amp;amp;&amp;amp; !this.isTransitioning ) {&lt;br /&gt;
    this.layoutPosition();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var transX = x - curX;&lt;br /&gt;
  var transY = y - curY;&lt;br /&gt;
  var transitionStyle = {};&lt;br /&gt;
  transitionStyle.transform = this.getTranslate( transX, transY );&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    to: transitionStyle,&lt;br /&gt;
    onTransitionEnd: {&lt;br /&gt;
      transform: this.layoutPosition&lt;br /&gt;
    },&lt;br /&gt;
    isCleaning: true&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.getTranslate = function( x, y ) {&lt;br /&gt;
  // flip cooridinates if origin on right or bottom&lt;br /&gt;
  var isOriginLeft = this.layout._getOption(&#039;originLeft&#039;);&lt;br /&gt;
  var isOriginTop = this.layout._getOption(&#039;originTop&#039;);&lt;br /&gt;
  x = isOriginLeft ? x : -x;&lt;br /&gt;
  y = isOriginTop ? y : -y;&lt;br /&gt;
  return &#039;translate3d(&#039; + x + &#039;px, &#039; + y + &#039;px, 0)&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// non transition + transform support&lt;br /&gt;
proto.goTo = function( x, y ) {&lt;br /&gt;
  this.setPosition( x, y );&lt;br /&gt;
  this.layoutPosition();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.moveTo = proto._transitionTo;&lt;br /&gt;
&lt;br /&gt;
proto.setPosition = function( x, y ) {&lt;br /&gt;
  this.position.x = parseInt( x, 10 );&lt;br /&gt;
  this.position.y = parseInt( y, 10 );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- transition ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Object} style - CSS&lt;br /&gt;
 * @param {Function} onTransitionEnd&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// non transition, just trigger callback&lt;br /&gt;
proto._nonTransition = function( args ) {&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
  if ( args.isCleaning ) {&lt;br /&gt;
    this._removeStyles( args.to );&lt;br /&gt;
  }&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    args.onTransitionEnd[ prop ].call( this );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * proper transition&lt;br /&gt;
 * @param {Object} args - arguments&lt;br /&gt;
 *   @param {Object} to - style to transition to&lt;br /&gt;
 *   @param {Object} from - style to start transition from&lt;br /&gt;
 *   @param {Boolean} isCleaning - removes transition styles after transition&lt;br /&gt;
 *   @param {Function} onTransitionEnd - callback&lt;br /&gt;
 */&lt;br /&gt;
proto.transition = function( args ) {&lt;br /&gt;
  // redirect to nonTransition if no transition duration&lt;br /&gt;
  if ( !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this._nonTransition( args );&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // keep track of onTransitionEnd callback by css property&lt;br /&gt;
  for ( var prop in args.onTransitionEnd ) {&lt;br /&gt;
    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];&lt;br /&gt;
  }&lt;br /&gt;
  // keep track of properties that are transitioning&lt;br /&gt;
  for ( prop in args.to ) {&lt;br /&gt;
    _transition.ingProperties[ prop ] = true;&lt;br /&gt;
    // keep track of properties to clean up when transition is done&lt;br /&gt;
    if ( args.isCleaning ) {&lt;br /&gt;
      _transition.clean[ prop ] = true;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // set from styles&lt;br /&gt;
  if ( args.from ) {&lt;br /&gt;
    this.css( args.from );&lt;br /&gt;
    // force redraw. http://blog.alexmaccaw.com/css-transitions&lt;br /&gt;
    var h = this.element.offsetHeight;&lt;br /&gt;
    // hack for JSHint to hush about unused var&lt;br /&gt;
    h = null;&lt;br /&gt;
  }&lt;br /&gt;
  // enable transition&lt;br /&gt;
  this.enableTransition( args.to );&lt;br /&gt;
  // set styles that are transitioning&lt;br /&gt;
  this.css( args.to );&lt;br /&gt;
&lt;br /&gt;
  this.isTransitioning = true;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// dash before all cap letters, including first for&lt;br /&gt;
// WebkitTransform =&amp;gt; -webkit-transform&lt;br /&gt;
function toDashedAll( str ) {&lt;br /&gt;
  return str.replace( /([A-Z])/g, function( $1 ) {&lt;br /&gt;
    return &#039;-&#039; + $1.toLowerCase();&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var transitionProps = &#039;opacity,&#039; + toDashedAll( transformProperty );&lt;br /&gt;
&lt;br /&gt;
proto.enableTransition = function(/* style */) {&lt;br /&gt;
  // HACK changing transitionProperty during a transition&lt;br /&gt;
  // will cause transition to jump&lt;br /&gt;
  if ( this.isTransitioning ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // make `transition: foo, bar, baz` from style object&lt;br /&gt;
  // HACK un-comment this when enableTransition can work&lt;br /&gt;
  // while a transition is happening&lt;br /&gt;
  // var transitionValues = [];&lt;br /&gt;
  // for ( var prop in style ) {&lt;br /&gt;
  //   // dash-ify camelCased properties like WebkitTransition&lt;br /&gt;
  //   prop = vendorProperties[ prop ] || prop;&lt;br /&gt;
  //   transitionValues.push( toDashedAll( prop ) );&lt;br /&gt;
  // }&lt;br /&gt;
  // munge number to millisecond, to match stagger&lt;br /&gt;
  var duration = this.layout.options.transitionDuration;&lt;br /&gt;
  duration = typeof duration == &#039;number&#039; ? duration + &#039;ms&#039; : duration;&lt;br /&gt;
  // enable transition styles&lt;br /&gt;
  this.css({&lt;br /&gt;
    transitionProperty: transitionProps,&lt;br /&gt;
    transitionDuration: duration,&lt;br /&gt;
    transitionDelay: this.staggerDelay || 0&lt;br /&gt;
  });&lt;br /&gt;
  // listen for transition end event&lt;br /&gt;
  this.element.addEventListener( transitionEndEvent, this, false );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- events ----- //&lt;br /&gt;
&lt;br /&gt;
proto.onwebkitTransitionEnd = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onotransitionend = function( event ) {&lt;br /&gt;
  this.ontransitionend( event );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// properties that I munge to make my life easier&lt;br /&gt;
var dashedVendorProperties = {&lt;br /&gt;
  &#039;-webkit-transform&#039;: &#039;transform&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.ontransitionend = function( event ) {&lt;br /&gt;
  // disregard bubbled events from children&lt;br /&gt;
  if ( event.target !== this.element ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var _transition = this._transn;&lt;br /&gt;
  // get property name of transitioned property, convert to prefix-free&lt;br /&gt;
  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;&lt;br /&gt;
&lt;br /&gt;
  // remove property that has completed transitioning&lt;br /&gt;
  delete _transition.ingProperties[ propertyName ];&lt;br /&gt;
  // check if any properties are still transitioning&lt;br /&gt;
  if ( isEmptyObj( _transition.ingProperties ) ) {&lt;br /&gt;
    // all properties have completed transitioning&lt;br /&gt;
    this.disableTransition();&lt;br /&gt;
  }&lt;br /&gt;
  // clean style&lt;br /&gt;
  if ( propertyName in _transition.clean ) {&lt;br /&gt;
    // clean up style&lt;br /&gt;
    this.element.style[ event.propertyName ] = &#039;&#039;;&lt;br /&gt;
    delete _transition.clean[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
  // trigger onTransitionEnd callback&lt;br /&gt;
  if ( propertyName in _transition.onEnd ) {&lt;br /&gt;
    var onTransitionEnd = _transition.onEnd[ propertyName ];&lt;br /&gt;
    onTransitionEnd.call( this );&lt;br /&gt;
    delete _transition.onEnd[ propertyName ];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.emitEvent( &#039;transitionEnd&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.disableTransition = function() {&lt;br /&gt;
  this.removeTransitionStyles();&lt;br /&gt;
  this.element.removeEventListener( transitionEndEvent, this, false );&lt;br /&gt;
  this.isTransitioning = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes style property from element&lt;br /&gt;
 * @param {Object} style&lt;br /&gt;
**/&lt;br /&gt;
proto._removeStyles = function( style ) {&lt;br /&gt;
  // clean up transition styles&lt;br /&gt;
  var cleanStyle = {};&lt;br /&gt;
  for ( var prop in style ) {&lt;br /&gt;
    cleanStyle[ prop ] = &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  this.css( cleanStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var cleanTransitionStyle = {&lt;br /&gt;
  transitionProperty: &#039;&#039;,&lt;br /&gt;
  transitionDuration: &#039;&#039;,&lt;br /&gt;
  transitionDelay: &#039;&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.removeTransitionStyles = function() {&lt;br /&gt;
  // remove transition&lt;br /&gt;
  this.css( cleanTransitionStyle );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- stagger ----- //&lt;br /&gt;
&lt;br /&gt;
proto.stagger = function( delay ) {&lt;br /&gt;
  delay = isNaN( delay ) ? 0 : delay;&lt;br /&gt;
  this.staggerDelay = delay + &#039;ms&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- show/hide/remove ----- //&lt;br /&gt;
&lt;br /&gt;
// remove element from DOM&lt;br /&gt;
proto.removeElem = function() {&lt;br /&gt;
  this.element.parentNode.removeChild( this.element );&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
  this.emitEvent( &#039;remove&#039;, [ this ] );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.remove = function() {&lt;br /&gt;
  // just remove element if no transition support or no transition&lt;br /&gt;
  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // start transition&lt;br /&gt;
  this.once( &#039;transitionEnd&#039;, function() {&lt;br /&gt;
    this.removeElem();&lt;br /&gt;
  });&lt;br /&gt;
  this.hide();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.reveal = function() {&lt;br /&gt;
  delete this.isHidden;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;visibleStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.hiddenStyle,&lt;br /&gt;
    to: options.visibleStyle,&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onRevealTransitionEnd = function() {&lt;br /&gt;
  // check if still visible&lt;br /&gt;
  // during transition, item may have been hidden&lt;br /&gt;
  if ( !this.isHidden ) {&lt;br /&gt;
    this.emitEvent(&#039;reveal&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get style property use for hide/reveal transition end&lt;br /&gt;
 * @param {String} styleProperty - hiddenStyle/visibleStyle&lt;br /&gt;
 * @returns {String}&lt;br /&gt;
 */&lt;br /&gt;
proto.getHideRevealTransitionEndProperty = function( styleProperty ) {&lt;br /&gt;
  var optionStyle = this.layout.options[ styleProperty ];&lt;br /&gt;
  // use opacity&lt;br /&gt;
  if ( optionStyle.opacity ) {&lt;br /&gt;
    return &#039;opacity&#039;;&lt;br /&gt;
  }&lt;br /&gt;
  // get first property&lt;br /&gt;
  for ( var prop in optionStyle ) {&lt;br /&gt;
    return prop;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.hide = function() {&lt;br /&gt;
  // set flag&lt;br /&gt;
  this.isHidden = true;&lt;br /&gt;
  // remove display: none&lt;br /&gt;
  this.css({ display: &#039;&#039; });&lt;br /&gt;
&lt;br /&gt;
  var options = this.layout.options;&lt;br /&gt;
&lt;br /&gt;
  var onTransitionEnd = {};&lt;br /&gt;
  var transitionEndProperty = this.getHideRevealTransitionEndProperty(&#039;hiddenStyle&#039;);&lt;br /&gt;
  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;&lt;br /&gt;
&lt;br /&gt;
  this.transition({&lt;br /&gt;
    from: options.visibleStyle,&lt;br /&gt;
    to: options.hiddenStyle,&lt;br /&gt;
    // keep hidden stuff hidden&lt;br /&gt;
    isCleaning: true,&lt;br /&gt;
    onTransitionEnd: onTransitionEnd&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onHideTransitionEnd = function() {&lt;br /&gt;
  // check if still hidden&lt;br /&gt;
  // during transition, item may have been un-hidden&lt;br /&gt;
  if ( this.isHidden ) {&lt;br /&gt;
    this.css({ display: &#039;none&#039; });&lt;br /&gt;
    this.emitEvent(&#039;hide&#039;);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  this.css({&lt;br /&gt;
    position: &#039;&#039;,&lt;br /&gt;
    left: &#039;&#039;,&lt;br /&gt;
    right: &#039;&#039;,&lt;br /&gt;
    top: &#039;&#039;,&lt;br /&gt;
    bottom: &#039;&#039;,&lt;br /&gt;
    transition: &#039;&#039;,&lt;br /&gt;
    transform: &#039;&#039;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
return Item;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Outlayer v2.1.0&lt;br /&gt;
 * the brains and guts of a layout library&lt;br /&gt;
 * MIT license&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  &#039;use strict&#039;;&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /* globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD - RequireJS&lt;br /&gt;
    define( &#039;outlayer/outlayer&#039;,[&lt;br /&gt;
        &#039;ev-emitter/ev-emitter&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;,&lt;br /&gt;
        &#039;fizzy-ui-utils/utils&#039;,&lt;br /&gt;
        &#039;./item&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      function( EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
        return factory( window, EvEmitter, getSize, utils, Item);&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS - Browserify, Webpack&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      require(&#039;ev-emitter&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;),&lt;br /&gt;
      require(&#039;fizzy-ui-utils&#039;),&lt;br /&gt;
      require(&#039;./item&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Outlayer = factory(&lt;br /&gt;
      window,&lt;br /&gt;
      window.EvEmitter,&lt;br /&gt;
      window.getSize,&lt;br /&gt;
      window.fizzyUIUtils,&lt;br /&gt;
      window.Outlayer.Item&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( window, EvEmitter, getSize, utils, Item ) {&lt;br /&gt;
&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
// ----- vars ----- //&lt;br /&gt;
&lt;br /&gt;
var console = window.console;&lt;br /&gt;
var jQuery = window.jQuery;&lt;br /&gt;
var noop = function() {};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- Outlayer -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// globally unique identifiers&lt;br /&gt;
var GUID = 0;&lt;br /&gt;
// internal store of all Outlayer intances&lt;br /&gt;
var instances = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element, String} element&lt;br /&gt;
 * @param {Object} options&lt;br /&gt;
 * @constructor&lt;br /&gt;
 */&lt;br /&gt;
function Outlayer( element, options ) {&lt;br /&gt;
  var queryElement = utils.getQueryElement( element );&lt;br /&gt;
  if ( !queryElement ) {&lt;br /&gt;
    if ( console ) {&lt;br /&gt;
      console.error( &#039;Bad element for &#039; + this.constructor.namespace +&lt;br /&gt;
        &#039;: &#039; + ( queryElement || element ) );&lt;br /&gt;
    }&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.element = queryElement;&lt;br /&gt;
  // add jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    this.$element = jQuery( this.element );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // options&lt;br /&gt;
  this.options = utils.extend( {}, this.constructor.defaults );&lt;br /&gt;
  this.option( options );&lt;br /&gt;
&lt;br /&gt;
  // add id for Outlayer.getFromElement&lt;br /&gt;
  var id = ++GUID;&lt;br /&gt;
  this.element.outlayerGUID = id; // expando&lt;br /&gt;
  instances[ id ] = this; // associate via id&lt;br /&gt;
&lt;br /&gt;
  // kick it off&lt;br /&gt;
  this._create();&lt;br /&gt;
&lt;br /&gt;
  var isInitLayout = this._getOption(&#039;initLayout&#039;);&lt;br /&gt;
  if ( isInitLayout ) {&lt;br /&gt;
    this.layout();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// settings are for internal use only&lt;br /&gt;
Outlayer.namespace = &#039;outlayer&#039;;&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
// default options&lt;br /&gt;
Outlayer.defaults = {&lt;br /&gt;
  containerStyle: {&lt;br /&gt;
    position: &#039;relative&#039;&lt;br /&gt;
  },&lt;br /&gt;
  initLayout: true,&lt;br /&gt;
  originLeft: true,&lt;br /&gt;
  originTop: true,&lt;br /&gt;
  resize: true,&lt;br /&gt;
  resizeContainer: true,&lt;br /&gt;
  // item options&lt;br /&gt;
  transitionDuration: &#039;0.4s&#039;,&lt;br /&gt;
  hiddenStyle: {&lt;br /&gt;
    opacity: 0,&lt;br /&gt;
    transform: &#039;scale(0.001)&#039;&lt;br /&gt;
  },&lt;br /&gt;
  visibleStyle: {&lt;br /&gt;
    opacity: 1,&lt;br /&gt;
    transform: &#039;scale(1)&#039;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var proto = Outlayer.prototype;&lt;br /&gt;
// inherit EvEmitter&lt;br /&gt;
utils.extend( proto, EvEmitter.prototype );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * set options&lt;br /&gt;
 * @param {Object} opts&lt;br /&gt;
 */&lt;br /&gt;
proto.option = function( opts ) {&lt;br /&gt;
  utils.extend( this.options, opts );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get backwards compatible option value, check old name&lt;br /&gt;
 */&lt;br /&gt;
proto._getOption = function( option ) {&lt;br /&gt;
  var oldOption = this.constructor.compatOptions[ option ];&lt;br /&gt;
  return oldOption &amp;amp;&amp;amp; this.options[ oldOption ] !== undefined ?&lt;br /&gt;
    this.options[ oldOption ] : this.options[ option ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Outlayer.compatOptions = {&lt;br /&gt;
  // currentName: oldName&lt;br /&gt;
  initLayout: &#039;isInitLayout&#039;,&lt;br /&gt;
  horizontal: &#039;isHorizontal&#039;,&lt;br /&gt;
  layoutInstant: &#039;isLayoutInstant&#039;,&lt;br /&gt;
  originLeft: &#039;isOriginLeft&#039;,&lt;br /&gt;
  originTop: &#039;isOriginTop&#039;,&lt;br /&gt;
  resize: &#039;isResizeBound&#039;,&lt;br /&gt;
  resizeContainer: &#039;isResizingContainer&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._create = function() {&lt;br /&gt;
  // get items from children&lt;br /&gt;
  this.reloadItems();&lt;br /&gt;
  // elements that affect layout, but are not laid out&lt;br /&gt;
  this.stamps = [];&lt;br /&gt;
  this.stamp( this.options.stamp );&lt;br /&gt;
  // set container style&lt;br /&gt;
  utils.extend( this.element.style, this.options.containerStyle );&lt;br /&gt;
&lt;br /&gt;
  // bind resize method&lt;br /&gt;
  var canBindResize = this._getOption(&#039;resize&#039;);&lt;br /&gt;
  if ( canBindResize ) {&lt;br /&gt;
    this.bindResize();&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// goes through all children again and gets bricks in proper order&lt;br /&gt;
proto.reloadItems = function() {&lt;br /&gt;
  // collection of item elements&lt;br /&gt;
  this.items = this._itemize( this.element.children );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * turn elements into Outlayer.Items to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - collection of new Outlayer Items&lt;br /&gt;
 */&lt;br /&gt;
proto._itemize = function( elems ) {&lt;br /&gt;
&lt;br /&gt;
  var itemElems = this._filterFindItemElements( elems );&lt;br /&gt;
  var Item = this.constructor.Item;&lt;br /&gt;
&lt;br /&gt;
  // create new Outlayer Items for collection&lt;br /&gt;
  var items = [];&lt;br /&gt;
  for ( var i=0; i &amp;lt; itemElems.length; i++ ) {&lt;br /&gt;
    var elem = itemElems[i];&lt;br /&gt;
    var item = new Item( elem, this );&lt;br /&gt;
    items.push( item );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item elements to be used in layout&lt;br /&gt;
 * @param {Array or NodeList or HTMLElement} elems&lt;br /&gt;
 * @returns {Array} items - item elements&lt;br /&gt;
 */&lt;br /&gt;
proto._filterFindItemElements = function( elems ) {&lt;br /&gt;
  return utils.filterFindElements( elems, this.options.itemSelector );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * getter method for getting item elements&lt;br /&gt;
 * @returns {Array} elems - collection of item elements&lt;br /&gt;
 */&lt;br /&gt;
proto.getItemElements = function() {&lt;br /&gt;
  return this.items.map( function( item ) {&lt;br /&gt;
    return item.element;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- init &amp;amp; layout ----- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * lays out all items&lt;br /&gt;
 */&lt;br /&gt;
proto.layout = function() {&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
&lt;br /&gt;
  // don&#039;t animate first layout&lt;br /&gt;
  var layoutInstant = this._getOption(&#039;layoutInstant&#039;);&lt;br /&gt;
  var isInstant = layoutInstant !== undefined ?&lt;br /&gt;
    layoutInstant : !this._isLayoutInited;&lt;br /&gt;
  this.layoutItems( this.items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  // flag for initalized&lt;br /&gt;
  this._isLayoutInited = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// _init is alias for layout&lt;br /&gt;
proto._init = proto.layout;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * logic before any new layout&lt;br /&gt;
 */&lt;br /&gt;
proto._resetLayout = function() {&lt;br /&gt;
  this.getSize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proto.getSize = function() {&lt;br /&gt;
  this.size = getSize( this.element );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get measurement from option, for columnWidth, rowHeight, gutter&lt;br /&gt;
 * if option is String -&amp;gt; get element from selector string, &amp;amp; get size of element&lt;br /&gt;
 * if option is Element -&amp;gt; get size of element&lt;br /&gt;
 * else use option as a number&lt;br /&gt;
 *&lt;br /&gt;
 * @param {String} measurement&lt;br /&gt;
 * @param {String} size - width or height&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
proto._getMeasurement = function( measurement, size ) {&lt;br /&gt;
  var option = this.options[ measurement ];&lt;br /&gt;
  var elem;&lt;br /&gt;
  if ( !option ) {&lt;br /&gt;
    // default to 0&lt;br /&gt;
    this[ measurement ] = 0;&lt;br /&gt;
  } else {&lt;br /&gt;
    // use option as an element&lt;br /&gt;
    if ( typeof option == &#039;string&#039; ) {&lt;br /&gt;
      elem = this.element.querySelector( option );&lt;br /&gt;
    } else if ( option instanceof HTMLElement ) {&lt;br /&gt;
      elem = option;&lt;br /&gt;
    }&lt;br /&gt;
    // use size of element, if element&lt;br /&gt;
    this[ measurement ] = elem ? getSize( elem )[ size ] : option;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout a collection of item elements&lt;br /&gt;
 * @api public&lt;br /&gt;
 */&lt;br /&gt;
proto.layoutItems = function( items, isInstant ) {&lt;br /&gt;
  items = this._getItemsForLayout( items );&lt;br /&gt;
&lt;br /&gt;
  this._layoutItems( items, isInstant );&lt;br /&gt;
&lt;br /&gt;
  this._postLayout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get the items to be laid out&lt;br /&gt;
 * you may want to skip over some items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @returns {Array} items&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemsForLayout = function( items ) {&lt;br /&gt;
  return items.filter( function( item ) {&lt;br /&gt;
    return !item.isIgnored;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * layout items&lt;br /&gt;
 * @param {Array} items&lt;br /&gt;
 * @param {Boolean} isInstant&lt;br /&gt;
 */&lt;br /&gt;
proto._layoutItems = function( items, isInstant ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;layout&#039;, items );&lt;br /&gt;
&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    // no items, emit event with empty array&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var queue = [];&lt;br /&gt;
&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    // get x/y object from method&lt;br /&gt;
    var position = this._getItemLayoutPosition( item );&lt;br /&gt;
    // enqueue&lt;br /&gt;
    position.item = item;&lt;br /&gt;
    position.isInstant = isInstant || item.isLayoutInstant;&lt;br /&gt;
    queue.push( position );&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  this._processLayoutQueue( queue );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get item layout position&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @returns {Object} x and y position&lt;br /&gt;
 */&lt;br /&gt;
proto._getItemLayoutPosition = function( /* item */ ) {&lt;br /&gt;
  return {&lt;br /&gt;
    x: 0,&lt;br /&gt;
    y: 0&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * iterate over array and position each item&lt;br /&gt;
 * Reason being - separating this logic prevents &#039;layout invalidation&#039;&lt;br /&gt;
 * thx @paul_irish&lt;br /&gt;
 * @param {Array} queue&lt;br /&gt;
 */&lt;br /&gt;
proto._processLayoutQueue = function( queue ) {&lt;br /&gt;
  this.updateStagger();&lt;br /&gt;
  queue.forEach( function( obj, i ) {&lt;br /&gt;
    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// set stagger from option in milliseconds number&lt;br /&gt;
proto.updateStagger = function() {&lt;br /&gt;
  var stagger = this.options.stagger;&lt;br /&gt;
  if ( stagger === null || stagger === undefined ) {&lt;br /&gt;
    this.stagger = 0;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  this.stagger = getMilliseconds( stagger );&lt;br /&gt;
  return this.stagger;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets position of item in DOM&lt;br /&gt;
 * @param {Outlayer.Item} item&lt;br /&gt;
 * @param {Number} x - horizontal position&lt;br /&gt;
 * @param {Number} y - vertical position&lt;br /&gt;
 * @param {Boolean} isInstant - disables transitions&lt;br /&gt;
 */&lt;br /&gt;
proto._positionItem = function( item, x, y, isInstant, i ) {&lt;br /&gt;
  if ( isInstant ) {&lt;br /&gt;
    // if not transition, just set CSS&lt;br /&gt;
    item.goTo( x, y );&lt;br /&gt;
  } else {&lt;br /&gt;
    item.stagger( i * this.stagger );&lt;br /&gt;
    item.moveTo( x, y );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Any logic you want to do after each layout,&lt;br /&gt;
 * i.e. size the container&lt;br /&gt;
 */&lt;br /&gt;
proto._postLayout = function() {&lt;br /&gt;
  this.resizeContainer();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.resizeContainer = function() {&lt;br /&gt;
  var isResizingContainer = this._getOption(&#039;resizeContainer&#039;);&lt;br /&gt;
  if ( !isResizingContainer ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var size = this._getContainerSize();&lt;br /&gt;
  if ( size ) {&lt;br /&gt;
    this._setContainerMeasure( size.width, true );&lt;br /&gt;
    this._setContainerMeasure( size.height, false );&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets width or height of container if returned&lt;br /&gt;
 * @returns {Object} size&lt;br /&gt;
 *   @param {Number} width&lt;br /&gt;
 *   @param {Number} height&lt;br /&gt;
 */&lt;br /&gt;
proto._getContainerSize = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Number} measure - size of width or height&lt;br /&gt;
 * @param {Boolean} isWidth&lt;br /&gt;
 */&lt;br /&gt;
proto._setContainerMeasure = function( measure, isWidth ) {&lt;br /&gt;
  if ( measure === undefined ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var elemSize = this.size;&lt;br /&gt;
  // add padding and border width if border box&lt;br /&gt;
  if ( elemSize.isBorderBox ) {&lt;br /&gt;
    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +&lt;br /&gt;
      elemSize.borderLeftWidth + elemSize.borderRightWidth :&lt;br /&gt;
      elemSize.paddingBottom + elemSize.paddingTop +&lt;br /&gt;
      elemSize.borderTopWidth + elemSize.borderBottomWidth;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  measure = Math.max( measure, 0 );&lt;br /&gt;
  this.element.style[ isWidth ? &#039;width&#039; : &#039;height&#039; ] = measure + &#039;px&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emit eventComplete on a collection of items events&lt;br /&gt;
 * @param {String} eventName&lt;br /&gt;
 * @param {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto._emitCompleteOnItems = function( eventName, items ) {&lt;br /&gt;
  var _this = this;&lt;br /&gt;
  function onComplete() {&lt;br /&gt;
    _this.dispatchEvent( eventName + &#039;Complete&#039;, null, [ items ] );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var count = items.length;&lt;br /&gt;
  if ( !items || !count ) {&lt;br /&gt;
    onComplete();&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var doneCount = 0;&lt;br /&gt;
  function tick() {&lt;br /&gt;
    doneCount++;&lt;br /&gt;
    if ( doneCount == count ) {&lt;br /&gt;
      onComplete();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // bind callback&lt;br /&gt;
  items.forEach( function( item ) {&lt;br /&gt;
    item.once( eventName, tick );&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * emits events via EvEmitter and jQuery events&lt;br /&gt;
 * @param {String} type - name of event&lt;br /&gt;
 * @param {Event} event - original event&lt;br /&gt;
 * @param {Array} args - extra arguments&lt;br /&gt;
 */&lt;br /&gt;
proto.dispatchEvent = function( type, event, args ) {&lt;br /&gt;
  // add original event to arguments&lt;br /&gt;
  var emitArgs = event ? [ event ].concat( args ) : args;&lt;br /&gt;
  this.emitEvent( type, emitArgs );&lt;br /&gt;
&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    // set this.$element&lt;br /&gt;
    this.$element = this.$element || jQuery( this.element );&lt;br /&gt;
    if ( event ) {&lt;br /&gt;
      // create jQuery event&lt;br /&gt;
      var $event = jQuery.Event( event );&lt;br /&gt;
      $event.type = type;&lt;br /&gt;
      this.$element.trigger( $event, args );&lt;br /&gt;
    } else {&lt;br /&gt;
      // just trigger with type if no event available&lt;br /&gt;
      this.$element.trigger( type, args );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- ignore &amp;amp; stamps -------------------------- //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * keep item in collection, but do not lay it out&lt;br /&gt;
 * ignored items do not get skipped in layout&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.ignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    item.isIgnored = true;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * return item to layout collection&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 */&lt;br /&gt;
proto.unignore = function( elem ) {&lt;br /&gt;
  var item = this.getItem( elem );&lt;br /&gt;
  if ( item ) {&lt;br /&gt;
    delete item.isIgnored;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * adds elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.stamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.stamps = this.stamps.concat( elems );&lt;br /&gt;
  // ignore&lt;br /&gt;
  elems.forEach( this.ignore, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * removes elements to stamps&lt;br /&gt;
 * @param {NodeList, Array, or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.unstamp = function( elems ) {&lt;br /&gt;
  elems = this._find( elems );&lt;br /&gt;
  if ( !elems ){&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    // filter out removed stamp elements&lt;br /&gt;
    utils.removeFrom( this.stamps, elem );&lt;br /&gt;
    this.unignore( elem );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * finds child elements&lt;br /&gt;
 * @param {NodeList, Array, Element, or String} elems&lt;br /&gt;
 * @returns {Array} elems&lt;br /&gt;
 */&lt;br /&gt;
proto._find = function( elems ) {&lt;br /&gt;
  if ( !elems ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // if string, use argument as selector string&lt;br /&gt;
  if ( typeof elems == &#039;string&#039; ) {&lt;br /&gt;
    elems = this.element.querySelectorAll( elems );&lt;br /&gt;
  }&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  return elems;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto._manageStamps = function() {&lt;br /&gt;
  if ( !this.stamps || !this.stamps.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this._getBoundingRect();&lt;br /&gt;
&lt;br /&gt;
  this.stamps.forEach( this._manageStamp, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// update boundingLeft / Top&lt;br /&gt;
proto._getBoundingRect = function() {&lt;br /&gt;
  // get bounding rect for container element&lt;br /&gt;
  var boundingRect = this.element.getBoundingClientRect();&lt;br /&gt;
  var size = this.size;&lt;br /&gt;
  this._boundingRect = {&lt;br /&gt;
    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,&lt;br /&gt;
    top: boundingRect.top + size.paddingTop + size.borderTopWidth,&lt;br /&gt;
    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),&lt;br /&gt;
    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )&lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @param {Element} stamp&lt;br /&gt;
**/&lt;br /&gt;
proto._manageStamp = noop;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get x/y position of element relative to container element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Object} offset - has left, top, right, bottom&lt;br /&gt;
 */&lt;br /&gt;
proto._getElementOffset = function( elem ) {&lt;br /&gt;
  var boundingRect = elem.getBoundingClientRect();&lt;br /&gt;
  var thisRect = this._boundingRect;&lt;br /&gt;
  var size = getSize( elem );&lt;br /&gt;
  var offset = {&lt;br /&gt;
    left: boundingRect.left - thisRect.left - size.marginLeft,&lt;br /&gt;
    top: boundingRect.top - thisRect.top - size.marginTop,&lt;br /&gt;
    right: thisRect.right - boundingRect.right - size.marginRight,&lt;br /&gt;
    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom&lt;br /&gt;
  };&lt;br /&gt;
  return offset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- resize -------------------------- //&lt;br /&gt;
&lt;br /&gt;
// enable event handlers for listeners&lt;br /&gt;
// i.e. resize -&amp;gt; onresize&lt;br /&gt;
proto.handleEvent = utils.handleEvent;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Bind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.bindResize = function() {&lt;br /&gt;
  window.addEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Unbind layout to window resizing&lt;br /&gt;
 */&lt;br /&gt;
proto.unbindResize = function() {&lt;br /&gt;
  window.removeEventListener( &#039;resize&#039;, this );&lt;br /&gt;
  this.isResizeBound = false;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proto.onresize = function() {&lt;br /&gt;
  this.resize();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
utils.debounceMethod( Outlayer, &#039;onresize&#039;, 100 );&lt;br /&gt;
&lt;br /&gt;
proto.resize = function() {&lt;br /&gt;
  // don&#039;t trigger if size did not change&lt;br /&gt;
  // or if resize was unbound. See #9&lt;br /&gt;
  if ( !this.isResizeBound || !this.needsResizeLayout() ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  this.layout();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if layout is needed post layout&lt;br /&gt;
 * @returns Boolean&lt;br /&gt;
 */&lt;br /&gt;
proto.needsResizeLayout = function() {&lt;br /&gt;
  var size = getSize( this.element );&lt;br /&gt;
  // check that this.size and size are there&lt;br /&gt;
  // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
  var hasSizes = this.size &amp;amp;&amp;amp; size;&lt;br /&gt;
  return hasSizes &amp;amp;&amp;amp; size.innerWidth !== this.size.innerWidth;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- methods -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * add items to Outlayer instance&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
**/&lt;br /&gt;
proto.addItems = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  // add items to collection&lt;br /&gt;
  if ( items.length ) {&lt;br /&gt;
    this.items = this.items.concat( items );&lt;br /&gt;
  }&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout newly-appended item elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.appended = function( elems ) {&lt;br /&gt;
  var items = this.addItems( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // layout and reveal just the new items&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Layout prepended elements&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.prepended = function( elems ) {&lt;br /&gt;
  var items = this._itemize( elems );&lt;br /&gt;
  if ( !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  // add items to beginning of collection&lt;br /&gt;
  var previousItems = this.items.slice(0);&lt;br /&gt;
  this.items = items.concat( previousItems );&lt;br /&gt;
  // start new layout&lt;br /&gt;
  this._resetLayout();&lt;br /&gt;
  this._manageStamps();&lt;br /&gt;
  // layout new stuff without transition&lt;br /&gt;
  this.layoutItems( items, true );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
  // layout previous items&lt;br /&gt;
  this.layoutItems( previousItems );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.reveal = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;reveal&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.reveal();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide a collection of items&lt;br /&gt;
 * @param {Array of Outlayer.Items} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hide = function( items ) {&lt;br /&gt;
  this._emitCompleteOnItems( &#039;hide&#039;, items );&lt;br /&gt;
  if ( !items || !items.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  var stagger = this.updateStagger();&lt;br /&gt;
  items.forEach( function( item, i ) {&lt;br /&gt;
    item.stagger( i * stagger );&lt;br /&gt;
    item.hide();&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * reveal item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.revealItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.reveal( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * hide item elements&lt;br /&gt;
 * @param {Array}, {Element}, {NodeList} items&lt;br /&gt;
 */&lt;br /&gt;
proto.hideItemElements = function( elems ) {&lt;br /&gt;
  var items = this.getItems( elems );&lt;br /&gt;
  this.hide( items );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer.Item, given an Element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @param {Function} callback&lt;br /&gt;
 * @returns {Outlayer.Item} item&lt;br /&gt;
 */&lt;br /&gt;
proto.getItem = function( elem ) {&lt;br /&gt;
  // loop through items to get the one that matches&lt;br /&gt;
  for ( var i=0; i &amp;lt; this.items.length; i++ ) {&lt;br /&gt;
    var item = this.items[i];&lt;br /&gt;
    if ( item.element == elem ) {&lt;br /&gt;
      // return item&lt;br /&gt;
      return item;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get collection of Outlayer.Items, given Elements&lt;br /&gt;
 * @param {Array} elems&lt;br /&gt;
 * @returns {Array} items - Outlayer.Items&lt;br /&gt;
 */&lt;br /&gt;
proto.getItems = function( elems ) {&lt;br /&gt;
  elems = utils.makeArray( elems );&lt;br /&gt;
  var items = [];&lt;br /&gt;
  elems.forEach( function( elem ) {&lt;br /&gt;
    var item = this.getItem( elem );&lt;br /&gt;
    if ( item ) {&lt;br /&gt;
      items.push( item );&lt;br /&gt;
    }&lt;br /&gt;
  }, this );&lt;br /&gt;
&lt;br /&gt;
  return items;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * remove element(s) from instance and DOM&lt;br /&gt;
 * @param {Array or NodeList or Element} elems&lt;br /&gt;
 */&lt;br /&gt;
proto.remove = function( elems ) {&lt;br /&gt;
  var removeItems = this.getItems( elems );&lt;br /&gt;
&lt;br /&gt;
  this._emitCompleteOnItems( &#039;remove&#039;, removeItems );&lt;br /&gt;
&lt;br /&gt;
  // bail if no items to remove&lt;br /&gt;
  if ( !removeItems || !removeItems.length ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  removeItems.forEach( function( item ) {&lt;br /&gt;
    item.remove();&lt;br /&gt;
    // remove item from collection&lt;br /&gt;
    utils.removeFrom( this.items, item );&lt;br /&gt;
  }, this );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// ----- destroy ----- //&lt;br /&gt;
&lt;br /&gt;
// remove and disable Outlayer instance&lt;br /&gt;
proto.destroy = function() {&lt;br /&gt;
  // clean up dynamic styles&lt;br /&gt;
  var style = this.element.style;&lt;br /&gt;
  style.height = &#039;&#039;;&lt;br /&gt;
  style.position = &#039;&#039;;&lt;br /&gt;
  style.width = &#039;&#039;;&lt;br /&gt;
  // destroy items&lt;br /&gt;
  this.items.forEach( function( item ) {&lt;br /&gt;
    item.destroy();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  this.unbindResize();&lt;br /&gt;
&lt;br /&gt;
  var id = this.element.outlayerGUID;&lt;br /&gt;
  delete instances[ id ]; // remove reference to instance by id&lt;br /&gt;
  delete this.element.outlayerGUID;&lt;br /&gt;
  // remove data for jQuery&lt;br /&gt;
  if ( jQuery ) {&lt;br /&gt;
    jQuery.removeData( this.element, this.constructor.namespace );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// -------------------------- data -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * get Outlayer instance from element&lt;br /&gt;
 * @param {Element} elem&lt;br /&gt;
 * @returns {Outlayer}&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.data = function( elem ) {&lt;br /&gt;
  elem = utils.getQueryElement( elem );&lt;br /&gt;
  var id = elem &amp;amp;&amp;amp; elem.outlayerGUID;&lt;br /&gt;
  return id &amp;amp;&amp;amp; instances[ id ];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- create Outlayer class -------------------------- //&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * create a layout class&lt;br /&gt;
 * @param {String} namespace&lt;br /&gt;
 */&lt;br /&gt;
Outlayer.create = function( namespace, options ) {&lt;br /&gt;
  // sub-class Outlayer&lt;br /&gt;
  var Layout = subclass( Outlayer );&lt;br /&gt;
  // apply new options and compatOptions&lt;br /&gt;
  Layout.defaults = utils.extend( {}, Outlayer.defaults );&lt;br /&gt;
  utils.extend( Layout.defaults, options );&lt;br /&gt;
  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );&lt;br /&gt;
&lt;br /&gt;
  Layout.namespace = namespace;&lt;br /&gt;
&lt;br /&gt;
  Layout.data = Outlayer.data;&lt;br /&gt;
&lt;br /&gt;
  // sub-class Item&lt;br /&gt;
  Layout.Item = subclass( Item );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- declarative -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  utils.htmlInit( Layout, namespace );&lt;br /&gt;
&lt;br /&gt;
  // -------------------------- jQuery bridge -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // make into jQuery plugin&lt;br /&gt;
  if ( jQuery &amp;amp;&amp;amp; jQuery.bridget ) {&lt;br /&gt;
    jQuery.bridget( namespace, Layout );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return Layout;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function subclass( Parent ) {&lt;br /&gt;
  function SubClass() {&lt;br /&gt;
    Parent.apply( this, arguments );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  SubClass.prototype = Object.create( Parent.prototype );&lt;br /&gt;
  SubClass.prototype.constructor = SubClass;&lt;br /&gt;
&lt;br /&gt;
  return SubClass;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- helpers ----- //&lt;br /&gt;
&lt;br /&gt;
// how many milliseconds are in each unit&lt;br /&gt;
var msUnits = {&lt;br /&gt;
  ms: 1,&lt;br /&gt;
  s: 1000&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// munge time-like parameter into millisecond number&lt;br /&gt;
// &#039;0.4s&#039; -&amp;gt; 40&lt;br /&gt;
function getMilliseconds( time ) {&lt;br /&gt;
  if ( typeof time == &#039;number&#039; ) {&lt;br /&gt;
    return time;&lt;br /&gt;
  }&lt;br /&gt;
  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );&lt;br /&gt;
  var num = matches &amp;amp;&amp;amp; matches[1];&lt;br /&gt;
  var unit = matches &amp;amp;&amp;amp; matches[2];&lt;br /&gt;
  if ( !num.length ) {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  num = parseFloat( num );&lt;br /&gt;
  var mult = msUnits[ unit ] || 1;&lt;br /&gt;
  return num * mult;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ----- fin ----- //&lt;br /&gt;
&lt;br /&gt;
// back in global&lt;br /&gt;
Outlayer.Item = Item;&lt;br /&gt;
&lt;br /&gt;
return Outlayer;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
/*!&lt;br /&gt;
 * Masonry v4.1.1&lt;br /&gt;
 * Cascading grid layout library&lt;br /&gt;
 * http://masonry.desandro.com&lt;br /&gt;
 * MIT License&lt;br /&gt;
 * by David DeSandro&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function( window, factory ) {&lt;br /&gt;
  // universal module definition&lt;br /&gt;
  /* jshint strict: false */ /*globals define, module, require */&lt;br /&gt;
  if ( typeof define == &#039;function&#039; &amp;amp;&amp;amp; define.amd ) {&lt;br /&gt;
    // AMD&lt;br /&gt;
    define( [&lt;br /&gt;
        &#039;outlayer/outlayer&#039;,&lt;br /&gt;
        &#039;get-size/get-size&#039;&lt;br /&gt;
      ],&lt;br /&gt;
      factory );&lt;br /&gt;
  } else if ( typeof module == &#039;object&#039; &amp;amp;&amp;amp; module.exports ) {&lt;br /&gt;
    // CommonJS&lt;br /&gt;
    module.exports = factory(&lt;br /&gt;
      require(&#039;outlayer&#039;),&lt;br /&gt;
      require(&#039;get-size&#039;)&lt;br /&gt;
    );&lt;br /&gt;
  } else {&lt;br /&gt;
    // browser global&lt;br /&gt;
    window.Masonry = factory(&lt;br /&gt;
      window.Outlayer,&lt;br /&gt;
      window.getSize&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}( window, function factory( Outlayer, getSize ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// -------------------------- masonryDefinition -------------------------- //&lt;br /&gt;
&lt;br /&gt;
  // create an Outlayer layout class&lt;br /&gt;
  var Masonry = Outlayer.create(&#039;masonry&#039;);&lt;br /&gt;
  // isFitWidth -&amp;gt; fitWidth&lt;br /&gt;
  Masonry.compatOptions.fitWidth = &#039;isFitWidth&#039;;&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._resetLayout = function() {&lt;br /&gt;
    this.getSize();&lt;br /&gt;
    this._getMeasurement( &#039;columnWidth&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this._getMeasurement( &#039;gutter&#039;, &#039;outerWidth&#039; );&lt;br /&gt;
    this.measureColumns();&lt;br /&gt;
&lt;br /&gt;
    // reset column Y&lt;br /&gt;
    this.colYs = [];&lt;br /&gt;
    for ( var i=0; i &amp;lt; this.cols; i++ ) {&lt;br /&gt;
      this.colYs.push( 0 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    this.maxY = 0;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.measureColumns = function() {&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    // if columnWidth is 0, default to outerWidth of first item&lt;br /&gt;
    if ( !this.columnWidth ) {&lt;br /&gt;
      var firstItem = this.items[0];&lt;br /&gt;
      var firstItemElem = firstItem &amp;amp;&amp;amp; firstItem.element;&lt;br /&gt;
      // columnWidth fall back to item of first element&lt;br /&gt;
      this.columnWidth = firstItemElem &amp;amp;&amp;amp; getSize( firstItemElem ).outerWidth ||&lt;br /&gt;
        // if first elem has no width, default to size of container&lt;br /&gt;
        this.containerWidth;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var columnWidth = this.columnWidth += this.gutter;&lt;br /&gt;
&lt;br /&gt;
    // calculate columns&lt;br /&gt;
    var containerWidth = this.containerWidth + this.gutter;&lt;br /&gt;
    var cols = containerWidth / columnWidth;&lt;br /&gt;
    // fix rounding errors, typically with gutters&lt;br /&gt;
    var excess = columnWidth - containerWidth % columnWidth;&lt;br /&gt;
    // if overshoot is less than a pixel, round up, otherwise floor it&lt;br /&gt;
    var mathMethod = excess &amp;amp;&amp;amp; excess &amp;lt; 1 ? &#039;round&#039; : &#039;floor&#039;;&lt;br /&gt;
    cols = Math[ mathMethod ]( cols );&lt;br /&gt;
    this.cols = Math.max( cols, 1 );&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.getContainerWidth = function() {&lt;br /&gt;
    // container is parent if fit width&lt;br /&gt;
    var isFitWidth = this._getOption(&#039;fitWidth&#039;);&lt;br /&gt;
    var container = isFitWidth ? this.element.parentNode : this.element;&lt;br /&gt;
    // check that this.size and size are there&lt;br /&gt;
    // IE8 triggers resize on body size change, so they might not be&lt;br /&gt;
    var size = getSize( container );&lt;br /&gt;
    this.containerWidth = size &amp;amp;&amp;amp; size.innerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getItemLayoutPosition = function( item ) {&lt;br /&gt;
    item.getSize();&lt;br /&gt;
    // how many columns does this brick span&lt;br /&gt;
    var remainder = item.size.outerWidth % this.columnWidth;&lt;br /&gt;
    var mathMethod = remainder &amp;amp;&amp;amp; remainder &amp;lt; 1 ? &#039;round&#039; : &#039;ceil&#039;;&lt;br /&gt;
    // round if off by 1 pixel, otherwise use ceil&lt;br /&gt;
    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );&lt;br /&gt;
    colSpan = Math.min( colSpan, this.cols );&lt;br /&gt;
&lt;br /&gt;
    var colGroup = this._getColGroup( colSpan );&lt;br /&gt;
    // get the minimum Y value from the columns&lt;br /&gt;
    var minimumY = Math.min.apply( Math, colGroup );&lt;br /&gt;
    var shortColIndex = colGroup.indexOf( minimumY );&lt;br /&gt;
&lt;br /&gt;
    // position the brick&lt;br /&gt;
    var position = {&lt;br /&gt;
      x: this.columnWidth * shortColIndex,&lt;br /&gt;
      y: minimumY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // apply setHeight to necessary columns&lt;br /&gt;
    var setHeight = minimumY + item.size.outerHeight;&lt;br /&gt;
    var setSpan = this.cols + 1 - colGroup.length;&lt;br /&gt;
    for ( var i = 0; i &amp;lt; setSpan; i++ ) {&lt;br /&gt;
      this.colYs[ shortColIndex + i ] = setHeight;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return position;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * @param {Number} colSpan - number of columns the element spans&lt;br /&gt;
   * @returns {Array} colGroup&lt;br /&gt;
   */&lt;br /&gt;
  Masonry.prototype._getColGroup = function( colSpan ) {&lt;br /&gt;
    if ( colSpan &amp;lt; 2 ) {&lt;br /&gt;
      // if brick spans only one column, use all the column Ys&lt;br /&gt;
      return this.colYs;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var colGroup = [];&lt;br /&gt;
    // how many different places could this brick fit horizontally&lt;br /&gt;
    var groupCount = this.cols + 1 - colSpan;&lt;br /&gt;
    // for each group potential horizontal position&lt;br /&gt;
    for ( var i = 0; i &amp;lt; groupCount; i++ ) {&lt;br /&gt;
      // make an array of colY values for that one group&lt;br /&gt;
      var groupColYs = this.colYs.slice( i, i + colSpan );&lt;br /&gt;
      // and get the max value of the array&lt;br /&gt;
      colGroup[i] = Math.max.apply( Math, groupColYs );&lt;br /&gt;
    }&lt;br /&gt;
    return colGroup;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._manageStamp = function( stamp ) {&lt;br /&gt;
    var stampSize = getSize( stamp );&lt;br /&gt;
    var offset = this._getElementOffset( stamp );&lt;br /&gt;
    // get the columns that this stamp affects&lt;br /&gt;
    var isOriginLeft = this._getOption(&#039;originLeft&#039;);&lt;br /&gt;
    var firstX = isOriginLeft ? offset.left : offset.right;&lt;br /&gt;
    var lastX = firstX + stampSize.outerWidth;&lt;br /&gt;
    var firstCol = Math.floor( firstX / this.columnWidth );&lt;br /&gt;
    firstCol = Math.max( 0, firstCol );&lt;br /&gt;
    var lastCol = Math.floor( lastX / this.columnWidth );&lt;br /&gt;
    // lastCol should not go over if multiple of columnWidth #425&lt;br /&gt;
    lastCol -= lastX % this.columnWidth ? 0 : 1;&lt;br /&gt;
    lastCol = Math.min( this.cols - 1, lastCol );&lt;br /&gt;
    // set colYs to bottom of the stamp&lt;br /&gt;
&lt;br /&gt;
    var isOriginTop = this._getOption(&#039;originTop&#039;);&lt;br /&gt;
    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +&lt;br /&gt;
      stampSize.outerHeight;&lt;br /&gt;
    for ( var i = firstCol; i &amp;lt;= lastCol; i++ ) {&lt;br /&gt;
      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerSize = function() {&lt;br /&gt;
    this.maxY = Math.max.apply( Math, this.colYs );&lt;br /&gt;
    var size = {&lt;br /&gt;
      height: this.maxY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    if ( this._getOption(&#039;fitWidth&#039;) ) {&lt;br /&gt;
      size.width = this._getContainerFitWidth();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype._getContainerFitWidth = function() {&lt;br /&gt;
    var unusedCols = 0;&lt;br /&gt;
    // count unused columns&lt;br /&gt;
    var i = this.cols;&lt;br /&gt;
    while ( --i ) {&lt;br /&gt;
      if ( this.colYs[i] !== 0 ) {&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      unusedCols++;&lt;br /&gt;
    }&lt;br /&gt;
    // fit container to columns that have been used&lt;br /&gt;
    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  Masonry.prototype.needsResizeLayout = function() {&lt;br /&gt;
    var previousWidth = this.containerWidth;&lt;br /&gt;
    this.getContainerWidth();&lt;br /&gt;
    return previousWidth != this.containerWidth;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  return Masonry;&lt;br /&gt;
&lt;br /&gt;
}));&lt;br /&gt;
&lt;br /&gt;
$(&#039;.grid&#039;).masonry({&lt;br /&gt;
  // options...&lt;br /&gt;
  itemSelector: &#039;.grid-item&#039;,&lt;br /&gt;
  columnWidth: 20&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mihho</name></author>
	</entry>
</feed>